1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-05 22:20:24 -08:00

uniquify-get-unique-names: Return a list with propertized strings

* lisp/uniquify.el (uniquify-get-unique-names): Return a list of
strings, and add text property 'uniquify-orig-buffer' to each,
pointing at the corresponding buffers (bug#77312).

* lisp/progmodes/project.el (project--read-project-buffer):
Look up that property's values here and build the alist.
This commit is contained in:
Dmitry Gutov 2025-07-02 05:26:51 +03:00
parent fa77689b1e
commit 76877a6b08
2 changed files with 19 additions and 5 deletions

View file

@ -1598,7 +1598,13 @@ Return non-nil if PROJECT is not a remote project."
uniquify-buffer-name-style) uniquify-buffer-name-style)
;; Forgo the use of `buffer-read-function' (often nil) in ;; Forgo the use of `buffer-read-function' (often nil) in
;; favor of uniquifying the buffers better. ;; favor of uniquifying the buffers better.
(let* ((unique-names (uniquify-get-unique-names buffers)) (let* ((unique-names
(mapcar
(lambda (name)
(cons name
(get-text-property 0 'uniquify-orig-buffer
(or name ""))))
(uniquify-get-unique-names buffers)))
(other-name (when (funcall predicate (cons other-name other-buffer)) (other-name (when (funcall predicate (cons other-name other-buffer))
(car (rassoc other-buffer unique-names)))) (car (rassoc other-buffer unique-names))))
(result (completing-read (result (completing-read

View file

@ -517,10 +517,11 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil."
"The current unique name of this buffer in `uniquify-get-unique-names'.") "The current unique name of this buffer in `uniquify-get-unique-names'.")
(defun uniquify-get-unique-names (buffers) (defun uniquify-get-unique-names (buffers)
"Return an alist with a unique name for each buffer in BUFFERS. "Return a list with unique names for buffers in BUFFERS.
The names are unique only among BUFFERS, and may conflict with other The names are unique only among BUFFERS, and may conflict with other
buffers not in that list. buffers not in that list. Each string has a text property
`uniquify-orig-buffer' that stores the corresponding buffer.
This does not rename the buffers or change any state; the unique name is This does not rename the buffers or change any state; the unique name is
only present in the returned alist." only present in the returned alist."
@ -547,8 +548,15 @@ only present in the returned alist."
(gethash name buffer-names))))) (gethash name buffer-names)))))
(mapcar (lambda (buf) (mapcar (lambda (buf)
(with-current-buffer buf (with-current-buffer buf
(prog1 (cons uniquify--stateless-curname buf) (let ((name
(kill-local-variable 'uniquify--stateless-curname)))) (if (eq uniquify--stateless-curname
(buffer-name buf))
(copy-sequence uniquify--stateless-curname)
uniquify--stateless-curname)))
(when name
(put-text-property 0 1 'uniquify-orig-buffer buf name))
(kill-local-variable 'uniquify--stateless-curname)
name)))
buffers)) buffers))
;;; Hooks from the rest of Emacs ;;; Hooks from the rest of Emacs