The change of `tramp.el' of 2006-01-27 hoses all emacsen I know. As
part of <Sync with Tramp 2.0.53> of 2006/04/17 13:11:42 +0 it got into
xemacs packages cvs, so cc-ing to its maintainers. Reproducing it as
follows.
xemacs -vanilla -batch -eval '(let ((default-directory "/"))
(write-region (point-min) (point-max) "/dev/null" nil (quote silent)))'
Lisp nesting exceeds `max-lisp-eval-depth'
xemacs exiting
.
After `tramp' with this change is installed and emacs is started, it
loads autoload files, which add to `file-name-handler-alist' an
association of `tramp-completion-file-name-handler' with
"^/\\([[][^]]*\\)?$", regexp that matches `/'.
`tramp-completion-file-name-handler' is autoloaded, and `tramp'
defining it is not loaded yet.
`expand-file-name' calls file name handler even if its
DEFAULT-DIRECTORY argument matches the regexp from
`file-name-handler-alist'. And `expand-file-name' is called in many
cases, even in the following backtrace. (Line numbers are from local
xemacs 21.4 with local changes.)
Fexpand_file_name
at src/fileio.c:810
locate_file
at src/lread.c:1246
Flocate_file
at src/lread.c:873
locate-file("tramp" ;regular `load-path value
(".elc" ".el" ""))
load("tramp" nil nil nil)
If at this point it is not obvious how emacs gets into infinite
recursion, detailing it. Once something calls `expand-file-name' with
DEFAULT-DIRECTORY set to `/' (by passing explicitly or by defaulting
to that value when `nil' is passed) in a buffer with default directory
value `/', emacs does the following.
. Calls `tramp-completion-file-name-handler'.
. Processes autoload.
. Tries to load `tramp'.
. Calls `expand-file-name' with the same DEFAULT-DIRECTORY '/'.
`gnus' package (temporarily) sets `default-directory' to '/' during
(implicit) `expand-file-name' call, like in the example above. Will
post details on request.
Please fix `tramp' so that `/' is not matched by (tramp regexps from)
`file-name-handler-alist' before `tramp' is loaded. Maintainers may
have their own ideas how this should be ensured, and how the safe
regexp not matching `/' should be computed, so do not submitting a
patch.