Emacs-PDE
view release on metacpan or search on metacpan
lisp/contrib/tabbar.el view on Meta::CPAN
((memq major-mode
'(help-mode apropos-mode Info-mode Man-mode))
'("Help")
)
((memq major-mode
'(rmail-mode
rmail-edit-mode vm-summary-mode vm-mode mail-mode
mh-letter-mode mh-show-mode mh-folder-mode
gnus-summary-mode message-mode gnus-group-mode
gnus-article-mode score-mode gnus-browse-killed-mode))
'("Mail")
)
(t
(list
(if (and (stringp mode-name) (string-match "[^ ]" mode-name))
mode-name
(symbol-name major-mode)))
)
)))
;;; Group buffers in tab sets.
;;
(defun tabbar-buffer-cleanup-tabsets (buffers)
"Remove obsolete tabs from existing tab sets.
That is tabs whose value is a killed buffer or a buffer not in
BUFFERS. Delete tab sets that no more contain tabs."
(mapc 'tabbar-delete-tabset
(tabbar-map-tabsets
#'(lambda (tabset)
(mapc #'(lambda (tab)
(let ((b (get-buffer (tabbar-tab-value tab))))
(unless (and b (memq b buffers))
(tabbar-delete-tab tab))))
(tabbar-tabs tabset))
(unless (tabbar-tabs tabset)
tabset)))))
(defun tabbar-buffer-update-groups ()
"Update group of buffers.
Return the the first group where the current buffer is."
;; Ensure that the current buffer will always have a tab!
(let ((buffers (cons (current-buffer)
(funcall tabbar-buffer-list-function)))
current-group)
(mapc
#'(lambda (buffer)
(let* ((name (buffer-name buffer))
(groups (funcall tabbar-buffer-groups-function name)))
(when (eq buffer (current-buffer))
(setq current-group (car groups)))
(mapc #'(lambda (group)
(let ((tabset (tabbar-get-tabset group)))
(if tabset
(tabbar-add-tab tabset name t)
(tabbar-make-tabset group name))))
groups)))
buffers)
(tabbar-buffer-cleanup-tabsets buffers)
current-group))
;;; Tab bar callbacks
;;
(defvar tabbar-buffer-group-mode nil
"Display tabs for group of buffers, when non-nil.")
(make-variable-buffer-local 'tabbar-buffer-group-mode)
(defun tabbar-buffer-tabs ()
"Return the buffers to display on the tab bar, in a tab set."
(let ((group (tabbar-buffer-update-groups))
(buffer (buffer-name))
tabset curtab)
(if tabbar-buffer-group-mode
(progn
(setq tabset (tabbar-get-tabsets-tabset)
curtab (tabbar-selected-tab (tabbar-current-tabset)))
(unless (and (equal buffer (tabbar-tab-value curtab))
(tabbar-select-tab curtab tabset))
(tabbar-select-tab-value buffer tabset)))
(setq tabset (tabbar-tab-tabset tabbar-last-selected-tab))
(unless (and tabset (tabbar-get-tab buffer tabset))
(setq tabset (tabbar-get-tabset group)))
(tabbar-select-tab-value buffer tabset))
tabset))
(defun tabbar-buffer-tab-label (tab)
"Return the label to display TAB.
Must be a valid `header-line-format' template element."
(if tabbar-buffer-group-mode
(format "[%s]" (tabbar-tab-tabset tab))
(format " %s " (tabbar-tab-value tab))))
(defun tabbar-buffer-help-on-tab (tab)
"Return the help string shown when mouse is onto TAB."
(if tabbar-buffer-group-mode
"mouse-1: switch to selected tab in group"
"\
mouse-1: switch to buffer, \
mouse-2: pop to buffer, \
mouse-3: delete other windows"
))
(defun tabbar-buffer-select-tab (event tab)
"On mouse EVENT, select TAB."
(let ((mouse-button (event-basic-type event))
(buffer (tabbar-tab-value tab)))
(cond
((eq mouse-button 'mouse-1)
(switch-to-buffer buffer))
((eq mouse-button 'mouse-2)
(pop-to-buffer buffer t))
((eq mouse-button 'mouse-3)
(delete-other-windows)))
;; Disable group mode.
(setq tabbar-buffer-group-mode nil)
))
(defun tabbar-buffer-toggle-group-mode (event)
"On mouse EVENT, toggle group mode.
When enabled, display tabs for group of buffers, instead of buffer
tabs."
(setq tabbar-buffer-group-mode (not tabbar-buffer-group-mode)))
( run in 2.426 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )