]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/tab-line.el: Cache the tab-line-format template.
authorJuri Linkov <juri@linkov.net>
Wed, 4 Dec 2019 23:08:24 +0000 (01:08 +0200)
committerJuri Linkov <juri@linkov.net>
Wed, 4 Dec 2019 23:08:24 +0000 (01:08 +0200)
(tab-line-format): Cache the result of tab-line-format-template in window.
(tab-line-format-template): New function that returns the value to cache.

lisp/tab-line.el

index c98b1cfce61e59459a61517793aa113d059bf242..d080da1867d0dba8b51f3e0a8f3a559b0d92401c 100644 (file)
@@ -415,11 +415,10 @@ variable `tab-line-tabs-function'."
               next-buffers))))
 
 \f
-(defun tab-line-format ()
+(defun tab-line-format-template (tabs)
   "Template for displaying tab line for selected window."
   (let* ((window (selected-window))
          (selected-buffer (window-buffer window))
-         (tabs (funcall tab-line-tabs-function))
          (separator (or tab-line-separator (if window-system " " "|")))
          (hscroll (window-parameter nil 'tab-line-hscroll))
          (strings
@@ -470,6 +469,14 @@ variable `tab-line-tabs-function'."
        (list (concat separator (when tab-line-new-tab-choice
                                  tab-line-new-button)))))))
 
+(defun tab-line-format ()
+  "Template for displaying tab line for selected window."
+  (let ((tabs (funcall tab-line-tabs-function))
+        (cache (window-parameter nil 'tab-line-cache)))
+    (or (and cache (equal (car cache) tabs) (cdr cache))
+        (cdr (set-window-parameter nil 'tab-line-cache
+               (cons tabs (tab-line-format-template tabs)))))))
+
 \f
 (defcustom tab-line-auto-hscroll t
   "Allow or disallow automatic horizontal scrolling of the tab line.