diff options
-rw-r--r-- | doc/emacs/buffers.texi | 11 | ||||
-rw-r--r-- | etc/NEWS | 6 | ||||
-rw-r--r-- | lisp/uniquify.el | 21 |
3 files changed, 33 insertions, 5 deletions
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index 89ed470c055..537c6536085 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi @@ -697,6 +697,17 @@ forward order after the file name, as in @samp{file|top/middle}. If @code{uniquify-buffer-name-style} is set to @code{nil}, the buffer names simply get @samp{<2>}, @samp{<3>}, etc.@: appended. + The value of @code{uniquify-buffer-name-style} can be set to a +customized function with two arguments @var{base} and +@var{extra-strings} where @var{base} is a string and +@var{extra-strings} is a list of strings. For example the current +implementation for @code{post-forward-angle-brackets} could be: + +@example +(defun my-post-forward-angle-brackets (base extra-string) + (concat base \"<\" (mapconcat #'identity extra-string \"/\") \">\")) +@end example + Which rule to follow for putting the directory names in the buffer name is not very important if you are going to @emph{look} at the buffer names before you type one. But as an experienced user, if you @@ -1425,6 +1425,12 @@ truncating precision field, such as "%.2a". This can be used to parse RGB color specs in several formats and convert them to a list '(R G B)' of primary color values. +--- +** Variable 'uniquify-buffer-name-style' can now be a function. +This variable can be one of the predefined styles or a function to +personalize the uniquified buffer name. + + * Changes in Emacs 28.1 on Non-Free Operating Systems diff --git a/lisp/uniquify.el b/lisp/uniquify.el index 70e8ecee745..e6a1b35bc06 100644 --- a/lisp/uniquify.el +++ b/lisp/uniquify.el @@ -104,6 +104,14 @@ would have the following buffer names in the various styles: post-forward-angle-brackets name<bar/mumble> name<quux/mumble> nil name name<2> +The value can be set to a customized function with two arguments +BASE and EXTRA-STRINGS where BASE is a string and EXTRA-STRINGS +is a list of strings. For example the current implementation for +post-forward-angle-brackets could be: + +(defun my-post-forward-angle-brackets (base extra-string) + (concat base \"<\" (mapconcat #'identity extra-string \"/\") \">\")) + The \"mumble\" part may be stripped as well, depending on the setting of `uniquify-strip-common-suffix'. For more options that you can set, browse the `uniquify' custom group." @@ -111,6 +119,7 @@ you can set, browse the `uniquify' custom group." (const reverse) (const post-forward) (const post-forward-angle-brackets) + (function :tag "Other") (const :tag "numeric suffixes" nil)) :version "24.4" :require 'uniquify) @@ -364,20 +373,22 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." (cond ((null extra-string) base) ((string-equal base "") ;Happens for dired buffers on the root directory. - (mapconcat 'identity extra-string "/")) + (mapconcat #'identity extra-string "/")) ((eq uniquify-buffer-name-style 'reverse) - (mapconcat 'identity + (mapconcat #'identity (cons base (nreverse extra-string)) (or uniquify-separator "\\"))) ((eq uniquify-buffer-name-style 'forward) - (mapconcat 'identity (nconc extra-string (list base)) + (mapconcat #'identity (nconc extra-string (list base)) "/")) ((eq uniquify-buffer-name-style 'post-forward) (concat base (or uniquify-separator "|") - (mapconcat 'identity extra-string "/"))) + (mapconcat #'identity extra-string "/"))) ((eq uniquify-buffer-name-style 'post-forward-angle-brackets) - (concat base "<" (mapconcat 'identity extra-string "/") + (concat base "<" (mapconcat #'identity extra-string "/") ">")) + ((functionp uniquify-buffer-name-style) + (funcall uniquify-buffer-name-style base extra-string)) (t (error "Bad value for uniquify-buffer-name-style: %s" uniquify-buffer-name-style))))) |