branch: elpa/magit
commit e211a781357f7b3c31416bfcec62a3fb19f15748
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    magit-toggle-buffer-lock: Uniquify buffer name if necessary
    
    A temporary throwaway buffer is necessary because
    `uniquify-rationalize-file-buffer-names' excludes the current
    buffer from the list of buffers whose name it might modify.
    
    Closes #5330.
---
 lisp/magit-mode.el | 42 +++++++++++++++++++++++++++---------------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/lisp/magit-mode.el b/lisp/magit-mode.el
index 5303ad6f29..2e8ca78b24 100644
--- a/lisp/magit-mode.el
+++ b/lisp/magit-mode.el
@@ -889,17 +889,7 @@ If a frame, then only consider buffers on that frame."
       (setq magit--default-directory default-directory)
       (setq magit-buffer-locked-p (and value t))
       (magit-restore-section-visibility-cache mode))
-    (when magit-uniquify-buffer-names
-      (cl-pushnew mode uniquify-list-buffers-directory-modes)
-      (with-current-buffer buffer
-        (setq list-buffers-directory (abbreviate-file-name default-directory)))
-      (let ((uniquify-buffer-name-style
-             (if (memq uniquify-buffer-name-style '(nil forward))
-                 'post-forward-angle-brackets
-               uniquify-buffer-name-style)))
-        (uniquify-rationalize-file-buffer-names
-         name (file-name-directory (directory-file-name default-directory))
-         buffer)))
+    (magit--maybe-uniquify-buffer-names buffer name mode)
     buffer))
 
 (defun magit-generate-buffer-name-default-function (mode &optional value)
@@ -922,6 +912,19 @@ account."
        (?t . ,n)
        (?x . ,(if magit-uniquify-buffer-names "" "*"))))))
 
+(defun magit--maybe-uniquify-buffer-names (buffer name mode)
+  (when magit-uniquify-buffer-names
+    (cl-pushnew mode uniquify-list-buffers-directory-modes)
+    (with-current-buffer buffer
+      (setq list-buffers-directory (abbreviate-file-name default-directory)))
+    (let ((uniquify-buffer-name-style
+           (if (memq uniquify-buffer-name-style '(nil forward))
+               'post-forward-angle-brackets
+             uniquify-buffer-name-style)))
+      (uniquify-rationalize-file-buffer-names
+       name (file-name-directory (directory-file-name default-directory))
+       buffer))))
+
 ;;; Buffer Lock
 
 (defun magit-toggle-buffer-lock ()
@@ -947,16 +950,25 @@ latter is displayed in its place."
             (switch-to-buffer unlocked nil t)
             (kill-buffer locked))
         (setq magit-buffer-locked-p nil)
-        (rename-buffer (funcall magit-generate-buffer-name-function
-                                major-mode)))
+        (let ((name (funcall magit-generate-buffer-name-function major-mode))
+              (buffer (current-buffer))
+              (mode major-mode))
+          (rename-buffer (generate-new-buffer-name name))
+          (with-temp-buffer
+            (magit--maybe-uniquify-buffer-names buffer name mode))))
     (if-let ((value (magit-buffer-value)))
         (if-let ((locked (magit-get-mode-buffer major-mode value)))
             (let ((unlocked (current-buffer)))
               (switch-to-buffer locked nil t)
               (kill-buffer unlocked))
           (setq magit-buffer-locked-p t)
-          (rename-buffer (funcall magit-generate-buffer-name-function
-                                  major-mode value)))
+          (let ((name (funcall magit-generate-buffer-name-function
+                               major-mode value))
+                (buffer (current-buffer))
+                (mode major-mode))
+            (rename-buffer (generate-new-buffer-name name))
+            (with-temp-buffer
+              (magit--maybe-uniquify-buffer-names buffer name mode))))
       (user-error "Buffer has no value it could be locked to"))))
 
 ;;; Bury Buffer

Reply via email to