diff options
author | Gabriel do Nascimento Ribeiro <gabriel.nascimento@nubank.com.br> | 2021-03-18 07:54:46 +0100 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-03-18 07:54:46 +0100 |
commit | 846e8672bb41889ea10ca3b8f874ed5ea731ed14 (patch) | |
tree | 658025b3431d554f40f992c2b535e28637f508f9 /lisp/uniquify.el | |
parent | a5197e2240d3021ea1f301591227c389a476fd02 (diff) | |
download | emacs-846e8672bb41889ea10ca3b8f874ed5ea731ed14.tar.gz emacs-846e8672bb41889ea10ca3b8f874ed5ea731ed14.tar.bz2 emacs-846e8672bb41889ea10ca3b8f874ed5ea731ed14.zip |
Fix uniquify-trailing-separator-p + uniquify-strip-common-suffix
(uniquify-item): New slot 'original-dirname'.
(uniquify-rationalize-file-buffer-names): Use new slot.
(uniquify-rationalize): Use new slot.
(uniquify-get-proposed-name): New optional argument 'original-dirname'
to properly add a trailing separator when the corresponding user option
is set and the dirname is an existing directory (bug#47132).
Diffstat (limited to 'lisp/uniquify.el')
-rw-r--r-- | lisp/uniquify.el | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/lisp/uniquify.el b/lisp/uniquify.el index c1ec90e2908..1d513d60376 100644 --- a/lisp/uniquify.el +++ b/lisp/uniquify.el @@ -175,8 +175,8 @@ contains the name of the directory which the buffer is visiting.") (cl-defstruct (uniquify-item (:constructor nil) (:copier nil) (:constructor uniquify-make-item - (base dirname buffer &optional proposed))) - base dirname buffer proposed) + (base dirname buffer &optional proposed original-dirname))) + base dirname buffer proposed original-dirname) ;; Internal variables used free (defvar uniquify-possibly-resolvable nil) @@ -211,7 +211,8 @@ this rationalization." (with-current-buffer newbuf (setq uniquify-managed nil)) (when dirname (setq dirname (expand-file-name (directory-file-name dirname))) - (let ((fix-list (list (uniquify-make-item base dirname newbuf))) + (let ((fix-list (list (uniquify-make-item base dirname newbuf + nil dirname))) items) (dolist (buffer (buffer-list)) (when (and (not (and uniquify-ignore-buffers-re @@ -284,7 +285,9 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." ;; Refresh the dirnames and proposed names. (setf (uniquify-item-proposed item) (uniquify-get-proposed-name (uniquify-item-base item) - (uniquify-item-dirname item))) + (uniquify-item-dirname item) + nil + (uniquify-item-original-dirname item))) (setq uniquify-managed fix-list))) ;; Strip any shared last directory names of the dirname. (when (and (cdr fix-list) uniquify-strip-common-suffix) @@ -307,7 +310,8 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." (uniquify-item-dirname item)))) (and f (directory-file-name f))) (uniquify-item-buffer item) - (uniquify-item-proposed item)) + (uniquify-item-proposed item) + (uniquify-item-original-dirname item)) fix-list))))) ;; If uniquify-min-dir-content is 0, this will end up just ;; passing fix-list to uniquify-rationalize-conflicting-sublist. @@ -335,13 +339,14 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." (uniquify-rationalize-conflicting-sublist conflicting-sublist old-proposed depth))) -(defun uniquify-get-proposed-name (base dirname &optional depth) +(defun uniquify-get-proposed-name (base dirname &optional depth + original-dirname) (unless depth (setq depth uniquify-min-dir-content)) (cl-assert (equal (directory-file-name dirname) dirname)) ;No trailing slash. ;; Distinguish directories by adding extra separator. (if (and uniquify-trailing-separator-p - (file-directory-p (expand-file-name base dirname)) + (file-directory-p (expand-file-name base original-dirname)) (not (string-equal base ""))) (cond ((eq uniquify-buffer-name-style 'forward) (setq base (file-name-as-directory base))) @@ -410,7 +415,8 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." (uniquify-get-proposed-name (uniquify-item-base item) (uniquify-item-dirname item) - depth))) + depth + (uniquify-item-original-dirname item)))) (uniquify-rationalize-a-list conf-list depth)) (unless (string= old-name "") (uniquify-rename-buffer (car conf-list) old-name))))) |