1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

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.
This commit is contained in:
Jim Porter 2023-03-11 23:53:34 -08:00
parent 4234e204ec
commit 6afa91f796

View file

@ -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))))