From: Juri Linkov Date: Wed, 4 Dec 2019 23:00:53 +0000 (+0200) Subject: * lisp/tab-bar.el (tab-bar-get-buffer-tab): Move code closer to its use. X-Git-Tag: emacs-27.0.90~438 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1e4c6f8333989ffe16cdffa2e082a061274f1e4e;p=emacs.git * lisp/tab-bar.el (tab-bar-get-buffer-tab): Move code closer to its use. --- diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index dc6d2d0b531..acc4304deff 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -1296,6 +1296,44 @@ in the selected frame." ((framep all-frames) (list all-frames)) (t (list (selected-frame))))) +(defun tab-bar-get-buffer-tab (buffer-or-name &optional all-frames) + "Return a tab owning a window whose buffer is BUFFER-OR-NAME. +BUFFER-OR-NAME may be a buffer or a buffer name and defaults to +the current buffer. + +The optional argument ALL-FRAMES specifies the frames to consider: + +- t means consider all tabs on all existing frames. + +- `visible' means consider all tabs on all visible frames. + +- A frame means consider all tabs on that frame only. + +Any other value of ALL-FRAMES means consider all tabs on the +selected frame and no others." + (let ((buffer (if buffer-or-name + (get-buffer buffer-or-name) + (current-buffer)))) + (when (bufferp buffer) + (seq-some + (lambda (frame) + (seq-some + (lambda (tab) + (when (if (eq (car tab) 'current-tab) + (get-buffer-window buffer frame) + (let* ((state (cdr (assq 'ws tab))) + (buffers (when state + (window-state-buffers state)))) + (or + ;; non-writable window-state + (memq buffer buffers) + ;; writable window-state + (member (buffer-name buffer) buffers)))) + (append tab `((index . ,(tab-bar--tab-index tab nil frame)) + (frame . ,frame))))) + (funcall tab-bar-tabs-function frame))) + (tab-bar--reusable-frames all-frames))))) + (defun display-buffer-in-tab (buffer alist) "Display BUFFER in a tab. ALIST is an association list of action symbols and values. See @@ -1346,44 +1384,6 @@ indirectly called by the latter." (let ((tab-bar-new-tab-choice t)) (tab-bar-new-tab)))))) -(defun tab-bar-get-buffer-tab (buffer-or-name &optional all-frames) - "Return a tab owning a window whose buffer is BUFFER-OR-NAME. -BUFFER-OR-NAME may be a buffer or a buffer name and defaults to -the current buffer. - -The optional argument ALL-FRAMES specifies the frames to consider: - -- t means consider all tabs on all existing frames. - -- `visible' means consider all tabs on all visible frames. - -- A frame means consider all tabs on that frame only. - -Any other value of ALL-FRAMES means consider all tabs on the -selected frame and no others." - (let ((buffer (if buffer-or-name - (get-buffer buffer-or-name) - (current-buffer)))) - (when (bufferp buffer) - (seq-some - (lambda (frame) - (seq-some - (lambda (tab) - (when (if (eq (car tab) 'current-tab) - (get-buffer-window buffer frame) - (let* ((state (cdr (assq 'ws tab))) - (buffers (when state - (window-state-buffers state)))) - (or - ;; non-writable window-state - (memq buffer buffers) - ;; writable window-state - (member (buffer-name buffer) buffers)))) - (append tab `((index . ,(tab-bar--tab-index tab nil frame)) - (frame . ,frame))))) - (funcall tab-bar-tabs-function frame))) - (tab-bar--reusable-frames all-frames))))) - (defun switch-to-buffer-other-tab (buffer-or-name &optional norecord) "Switch to buffer BUFFER-OR-NAME in another tab. Like \\[switch-to-buffer-other-frame] (which see), but creates a new tab."