aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuri Linkov2019-09-03 01:29:07 +0300
committerJuri Linkov2019-09-03 01:29:07 +0300
commitc2ab5e8cf3654e3e13083fb2203502d5d5f49dc6 (patch)
tree9d006c8911af424f0a720bcede451f33cf8f1837
parentf458ca28cb12de302de774b5bc9b43ad474745e5 (diff)
downloademacs-c2ab5e8cf3654e3e13083fb2203502d5d5f49dc6.tar.gz
emacs-c2ab5e8cf3654e3e13083fb2203502d5d5f49dc6.zip
* lisp/tab-line.el: Limit the number of window tabs to tab-line-tabs-limit.
-rw-r--r--lisp/tab-line.el39
1 files changed, 29 insertions, 10 deletions
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index 235cff19d97..da85925ff55 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -130,26 +130,45 @@ Reduce tab width proportionally to space taken by other tabs."
130 (substring tab-name (- limit))) 130 (substring tab-name (- limit)))
131 'help-echo tab-name)))) 131 'help-echo tab-name))))
132 132
133(defun tab-line-format () 133(defvar tab-line-tabs-limit 15
134 "Template for displaying tab line for selected window." 134 "Maximum number of buffer tabs displayed in the window tab-line.")
135 (let* ((window (selected-window)) 135
136 (buffer (window-buffer window)) 136(defun tab-line-tabs (&optional window)
137 (let* ((buffer (window-buffer window))
137 (next-buffers (seq-remove (lambda (b) (eq b buffer)) 138 (next-buffers (seq-remove (lambda (b) (eq b buffer))
138 (window-next-buffers window))) 139 (window-next-buffers window)))
140 (next-buffers (seq-filter #'buffer-live-p next-buffers))
139 (prev-buffers (seq-remove (lambda (b) (eq b buffer)) 141 (prev-buffers (seq-remove (lambda (b) (eq b buffer))
140 (mapcar #'car (window-prev-buffers window)))) 142 (mapcar #'car (window-prev-buffers window))))
143 (prev-buffers (seq-filter #'buffer-live-p prev-buffers))
141 ;; Remove next-buffers from prev-buffers 144 ;; Remove next-buffers from prev-buffers
142 (prev-buffers (seq-difference prev-buffers next-buffers)) 145 (prev-buffers (seq-difference prev-buffers next-buffers))
143 (buffers (append (reverse prev-buffers) 146 (half-limit (/ tab-line-tabs-limit 2))
144 (list buffer) 147 (prev-buffers-limit
145 next-buffers)) 148 (if (> (length prev-buffers) half-limit)
146 (buffers (seq-filter #'buffer-live-p buffers))) 149 (if (> (length next-buffers) half-limit)
150 half-limit
151 (+ half-limit (- half-limit (length next-buffers))))
152 (length prev-buffers)))
153 (next-buffers-limit
154 (- tab-line-tabs-limit prev-buffers-limit))
155 (buffer-tabs
156 (append (reverse (seq-take prev-buffers prev-buffers-limit))
157 (list buffer)
158 (seq-take next-buffers next-buffers-limit))))
159 buffer-tabs))
160
161(defun tab-line-format ()
162 "Template for displaying tab line for selected window."
163 (let* ((window (selected-window))
164 (buffer (window-buffer window))
165 (buffer-tabs (tab-line-tabs window)))
147 (append 166 (append
148 (mapcar 167 (mapcar
149 (lambda (b) 168 (lambda (b)
150 (format "%s%s%s" 169 (format "%s%s%s"
151 tab-line-separator 170 tab-line-separator
152 (apply 'propertize (tab-line-tab-name b buffers) 171 (apply 'propertize (tab-line-tab-name b buffer-tabs)
153 `( 172 `(
154 buffer ,b 173 buffer ,b
155 face ,(if (eq b buffer) 174 face ,(if (eq b buffer)
@@ -166,7 +185,7 @@ Reduce tab width proportionally to space taken by other tabs."
166 'tab-line-tab-inactive) 185 'tab-line-tab-inactive)
167 mouse-face tab-line-close-highlight 186 mouse-face tab-line-close-highlight
168 keymap ,tab-line-tab-close-map)))) 187 keymap ,tab-line-tab-close-map))))
169 buffers) 188 buffer-tabs)
170 (list (format "%s%s" 189 (list (format "%s%s"
171 tab-line-separator 190 tab-line-separator
172 (apply 'propertize tab-line-tab-name-add 191 (apply 'propertize tab-line-tab-name-add