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