diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index 0d0197eb6b..d10dd7031f 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -319,6 +319,8 @@ tab-bar-tab-name-function tab-bar-tab-name-current) (const :tag "Selected window buffer with window count" tab-bar-tab-name-current-with-count) + (const :tag "Truncated buffer name" + tab-bar-tab-name-truncated) (const :tag "All window buffers" tab-bar-tab-name-all) (function :tag "Function")) @@ -350,6 +352,29 @@ tab-bar-tab-name-all 'nomini))) ", ")) +(defcustom tab-bar-tab-name-truncated-max 20 + "Maximum length of the tab name from the current buffer. +Effective when `tab-bar-tab-name-function' is customized +to `tab-bar-tab-name-truncated'." + :type 'integer + :group 'tab-bar + :version "27.1") + +(defvar tab-bar-tab-name-truncated-ellipsis + (if (char-displayable-p ?…) "…" "...")) + +(defun tab-bar-tab-name-truncated () + "Generate tab name from the buffer of the selected window. +Truncate it ti the length specified by `tab-bar-tab-name-truncated-max'. +Append ellipsis `tab-bar-tab-name-truncated-ellipsis' in this case." + (let ((tab-name (buffer-name (window-buffer (minibuffer-selected-window))))) + (if (< (length tab-name) tab-bar-tab-name-truncated-max) + tab-name + (propertize (truncate-string-to-width + tab-name tab-bar-tab-name-truncated-max nil nil + tab-bar-tab-name-truncated-ellipsis) + 'help-echo tab-name)))) + (defvar tab-bar-tabs-function #'tab-bar-tabs "Function to get a list of tabs to display in the tab bar.