emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 2912de1 2/2: Declare tab-bar-tabs the single source


From: Juri Linkov
Subject: [Emacs-diffs] master 2912de1 2/2: Declare tab-bar-tabs the single source of truth in regard to current tab name
Date: Tue, 15 Oct 2019 17:45:13 -0400 (EDT)

branch: master
commit 2912de1e1079bfa4e975e6414e171d747c83c202
Author: Juri Linkov <address@hidden>
Commit: Juri Linkov <address@hidden>

    Declare tab-bar-tabs the single source of truth in regard to current tab 
name
    
    * lisp/tab-bar.el: Replace all calls of tab-bar-tabs
    with '(funcall tab-bar-tabs-function)'.
    (tab-bar-tabs): Update the current tab name here
    instead of tab-bar-make-keymap-1.
    (tab-bar-make-keymap-1): Move the current tab name updating
    to tab-bar-tabs.
---
 lisp/tab-bar.el | 56 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 29 insertions(+), 27 deletions(-)

diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 32d7f6c..c376f59 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -230,7 +230,8 @@ keyboard commands `tab-list', `tab-new', `tab-close', 
`tab-next', etc."
          (set-default sym val)
          (tab-bar-mode
           (if (or (eq val t)
-                  (and (natnump val) (> (length (tab-bar-tabs)) val)))
+                  (and (natnump val)
+                       (> (length (funcall tab-bar-tabs-function)) val)))
               1 -1)))
   :group 'tab-bar
   :version "27.1")
@@ -346,9 +347,18 @@ By default, use function `tab-bar-tabs'.")
 (defun tab-bar-tabs ()
   "Return a list of tabs belonging to the selected frame.
 Ensure the frame parameter `tabs' is pre-populated.
+Update the current tab name when it exists.
 Return its existing value or a new value."
   (let ((tabs (frame-parameter nil 'tabs)))
-    (unless tabs
+    (if tabs
+        (let* ((current-tab (assq 'current-tab tabs))
+               (current-tab-name (assq 'name current-tab))
+               (current-tab-explicit-name (assq 'explicit-name current-tab)))
+          (when (and current-tab-name
+                     current-tab-explicit-name
+                     (not (cdr current-tab-explicit-name)))
+            (setf (cdr current-tab-name)
+                  (funcall tab-bar-tab-name-function))))
       ;; Create default tabs
       (setq tabs (list (tab-bar--current-tab)))
       (set-frame-parameter nil 'tabs tabs))
@@ -358,14 +368,7 @@ Return its existing value or a new value."
   "Generate an actual keymap from `tab-bar-map', without caching."
   (let* ((separator (or tab-bar-separator (if window-system " " "|")))
          (i 0)
-         (tabs (funcall tab-bar-tabs-function))
-         (current-tab-name (assq 'name (assq 'current-tab tabs)))
-         (current-tab-explicit-name (assq 'explicit-name (assq 'current-tab 
tabs))))
-    (when (and current-tab-name
-               current-tab-explicit-name
-               (not (cdr current-tab-explicit-name)))
-      (setf (cdr current-tab-name)
-            (funcall tab-bar-tab-name-function)))
+         (tabs (funcall tab-bar-tabs-function)))
     (append
      '(keymap (mouse-1 . tab-bar-handle-mouse))
      (mapcan
@@ -443,7 +446,7 @@ Return its existing value or a new value."
 
 (defun tab-bar--current-tab-index (&optional tabs)
   ;; FIXME: could be replaced with 1-liner using seq-position
-  (let ((tabs (or tabs (tab-bar-tabs)))
+  (let ((tabs (or tabs (funcall tab-bar-tabs-function)))
         (i 0))
     (catch 'done
       (while tabs
@@ -453,7 +456,7 @@ Return its existing value or a new value."
 
 (defun tab-bar--tab-index (tab &optional tabs)
   ;; FIXME: could be replaced with 1-liner using seq-position
-  (let ((tabs (or tabs (tab-bar-tabs)))
+  (let ((tabs (or tabs (funcall tab-bar-tabs-function)))
         (i 0))
     (catch 'done
       (while tabs
@@ -464,7 +467,7 @@ Return its existing value or a new value."
 
 (defun tab-bar--tab-index-by-name (name &optional tabs)
   ;; FIXME: could be replaced with 1-liner using seq-position
-  (let ((tabs (or tabs (tab-bar-tabs)))
+  (let ((tabs (or tabs (funcall tab-bar-tabs-function)))
         (i 0))
     (catch 'done
       (while tabs
@@ -486,7 +489,7 @@ to the numeric argument.  ARG counts from 1."
                     (- key ?0)
                   1))))
 
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (from-index (tab-bar--current-tab-index tabs))
          (to-index (1- (max 1 (min arg (length tabs))))))
     (unless (eq from-index to-index)
@@ -518,7 +521,7 @@ to the numeric argument.  ARG counts from 1."
   (interactive "p")
   (unless (integerp arg)
     (setq arg 1))
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (from-index (or (tab-bar--current-tab-index tabs) 0))
          (to-index (mod (+ from-index arg) (length tabs))))
     (tab-bar-select-tab (1+ to-index))))
@@ -535,7 +538,7 @@ to the numeric argument.  ARG counts from 1."
   (interactive (list (completing-read "Switch to tab by name: "
                                       (mapcar (lambda (tab)
                                                 (cdr (assq 'name tab)))
-                                              (tab-bar-tabs)))))
+                                              (funcall 
tab-bar-tabs-function)))))
   (tab-bar-select-tab (1+ (tab-bar--tab-index-by-name name))))
 
 
@@ -555,7 +558,7 @@ If `rightmost', create as the last tab."
 (defun tab-bar-new-tab ()
   "Add a new tab at the position specified by `tab-bar-new-tab-to'."
   (interactive)
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (from-index (tab-bar--current-tab-index tabs))
          (from-tab (tab-bar--tab)))
 
@@ -616,7 +619,7 @@ Optional TO-INDEX could be specified to override the value 
of
 of an existing tab to select after closing the current tab.
 TO-INDEX counts from 1."
   (interactive "P")
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (current-index (tab-bar--current-tab-index tabs))
          (close-index (if (integerp arg) (1- arg) current-index)))
 
@@ -631,7 +634,7 @@ TO-INDEX counts from 1."
         (setq to-index (max 0 (min (or to-index 0) (1- (length tabs)))))
         (tab-bar-select-tab (1+ to-index))
         ;; Re-read tabs after selecting another tab
-        (setq tabs (tab-bar-tabs))))
+        (setq tabs (funcall tab-bar-tabs-function))))
 
     (set-frame-parameter nil 'tabs (delq (nth close-index tabs) tabs))
 
@@ -648,13 +651,13 @@ TO-INDEX counts from 1."
   (interactive (list (completing-read "Close tab by name: "
                                       (mapcar (lambda (tab)
                                                 (cdr (assq 'name tab)))
-                                              (tab-bar-tabs)))))
+                                              (funcall 
tab-bar-tabs-function)))))
   (tab-bar-close-tab (1+ (tab-bar--tab-index-by-name name))))
 
 (defun tab-bar-close-other-tabs ()
   "Close all tabs on the selected frame, except the selected one."
   (interactive)
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (current-index (tab-bar--current-tab-index tabs)))
     (when current-index
       (set-frame-parameter nil 'tabs (list (nth current-index tabs)))
@@ -673,7 +676,7 @@ ARG counts from 1.
 If NAME is the empty string, then use the automatic name
 function `tab-bar-tab-name-function'."
   (interactive "sNew name for tab (leave blank for automatic naming): \nP")
-  (let* ((tabs (tab-bar-tabs))
+  (let* ((tabs (funcall tab-bar-tabs-function))
          (tab-index (if arg
                         (1- (max 0 (min arg (length tabs))))
                       (tab-bar--current-tab-index tabs)))
@@ -683,8 +686,7 @@ function `tab-bar-tab-name-function'."
                            name
                          (funcall tab-bar-tab-name-function))))
     (setf (cdr (assq 'name tab-to-rename)) tab-new-name
-          (cdr (assq 'explicit-name tab-to-rename)) tab-explicit-name
-          (frame-parameter nil 'tabs) tabs)
+          (cdr (assq 'explicit-name tab-to-rename)) tab-explicit-name)
     (if (tab-bar-mode)
         (force-mode-line-update)
       (message "Renamed tab to '%s'" tab-new-name))))
@@ -696,7 +698,7 @@ function `tab-bar-tab-name-function'."
   (interactive (list (completing-read "Rename tab by name: "
                                       (mapcar (lambda (tab)
                                                 (cdr (assq 'name tab)))
-                                              (tab-bar-tabs)))
+                                              (funcall tab-bar-tabs-function)))
                      (read-from-minibuffer "New name for tab (leave blank for 
automatic naming): ")))
   (tab-bar-rename-tab new-name (tab-bar--tab-index-by-name tab-name)))
 
@@ -753,7 +755,7 @@ For more information, see the function `tab-bar-list'."
   (let* ((tabs (delq nil (mapcar (lambda (tab) ; remove current tab
                                    (unless (eq (car tab) 'current-tab)
                                      tab))
-                                 (tab-bar-tabs))))
+                                 (funcall tab-bar-tabs-function))))
          ;; Sort by recency
          (tabs (sort tabs (lambda (a b) (< (cdr (assq 'time b))
                                            (cdr (assq 'time a)))))))
@@ -895,7 +897,7 @@ Then move up one line.  Prefix arg means move that many 
lines."
 
 (defun tab-bar-list-delete-from-list (tab)
   "Delete the window configuration from both lists."
-  (set-frame-parameter nil 'tabs (delq tab (tab-bar-tabs))))
+  (set-frame-parameter nil 'tabs (delq tab (funcall tab-bar-tabs-function))))
 
 (defun tab-bar-list-execute ()
   "Delete window configurations marked with 
\\<tab-bar-list-mode-map>\\[tab-bar-list-delete] commands."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]