From 74b57726ed08940e9744b77934e7e8077e359801 Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sat, 11 Mar 2023 23:53:34 -0800 Subject: [PATCH] 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. --- lisp/eshell/em-dirs.el | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 @@ eshell-dirs-substitute-cd (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)))) -- 2.25.1