The Vagabond

29/06/2015

Much has been said about TRAMP, I’ve personally have tried it out a few times, then disabled it for good as I hated it regularly locking up Emacs. While going through bytecomp.el again, I’ve found the following gem:

;; If things not being bound at all is ok, so must them being
;; obsolete.  Note that we add to the existing lists since Tramp
;; (ab)uses this feature.
(let ((byte-compile-not-obsolete-vars
       (append byte-compile-not-obsolete-vars bound-list))
      (byte-compile-not-obsolete-funcs
       (append byte-compile-not-obsolete-funcs fbound-list)))
  ,@body)

The referenced part in tramp-compat.el:

;; `directory-sep-char' is an obsolete variable in Emacs.  But it is
;; used in XEmacs, so we set it here and there.  The following is
;; needed to pacify Emacs byte-compiler.
;; Note that it was removed altogether in Emacs 24.1.
(when (boundp 'directory-sep-char)
  (defvar byte-compile-not-obsolete-var nil)
  (setq byte-compile-not-obsolete-var 'directory-sep-char)
  ;; Emacs 23.2.
  (defvar byte-compile-not-obsolete-vars nil)
  (setq byte-compile-not-obsolete-vars '(directory-sep-char)))

Altering the way the byte compiler works due to incorrect usage of variable obsoletion for a mostly dead Emacs fork makes me a sad panda.