From: Jim Porter Date: Sun, 12 Mar 2023 07:53:34 +0000 (-0800) Subject: Don't over-normalize file names starting with "~" in Eshell X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6afa91f796661058a8eb3646d7063ea468b42901;p=emacs.git Don't over-normalize file names starting with "~" in Eshell Previously, this would call 'expand-file-name' on the file name, but that normalizes the value, turning something like "~/." into "/home/user". As a result, Pcomplete didn't work for dotfiles after "~/" (bug#28064). * lisp/eshell/em-dirs.el (eshell-expand-user-reference): New function... (eshell-expand-user-reference): ... use it. --- diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index eb679b80cb5..4bc6342d422 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -253,11 +253,17 @@ Thus, this does not include the current directory.") (throw 'eshell-replace-command (eshell-parse-command "cd" (flatten-tree args))))) +(defun eshell-expand-user-reference (file) + "Expand a user reference in FILE to its real directory name." + (replace-regexp-in-string + (rx bos (group "~" (*? anychar)) (or "/" eos)) + #'expand-file-name file)) + (defun eshell-parse-user-reference () "An argument beginning with ~ is a filename to be expanded." (when (and (not eshell-current-argument) - (eq (char-after) ?~)) - (add-to-list 'eshell-current-modifiers 'expand-file-name) + (eq (char-after) ?~)) + (add-to-list 'eshell-current-modifiers #'eshell-expand-user-reference) (forward-char) (char-to-string (char-before))))