原来的 tabbar 强行对你的 buffer 进行分组,但是如果你想在 你编辑的buffer间切换而不论它们是什么组,那么似乎没有一个好办 法。但是 tabbar 本来提供了一个机制,让你可以自己确定 tab 属 于哪组,只要修改 tabbar-buffer-groups-function 就行了。
这样,我可以把每个 buffer 同时加入它所在的 major mode 的组和 一个叫做 "default" 的组,这样我在 default 组里就可以方便的浏 览到所有的 buffer 了。而切换到其它组就可以分组浏览。你还可以 自行把某些 buffer 分到一组,比如我可以把 scheme-mode 的 buffer 和 inferer-scheme-mode 的 buffer 分到同一个组。
(setq tabbar-buffer-groups-function 'tabbar-buffer-ignore-groups) (defun tabbar-buffer-ignore-groups (buffer) "Return the list of group names BUFFER belongs to. Return only one group for each buffer." (with-current-buffer (get-buffer buffer) (cond ((or (get-buffer-process (current-buffer)) (memq major-mode '(comint-mode compilation-mode))) '("Process") ) ((member (buffer-name) '("*scratch*" "*Messages*")) '("Common") ) ((eq major-mode 'dired-mode) '("Dired") ) ((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 "default" ;; no-grouping (if (and (stringp mode-name) (string-match "[^ ]" mode-name)) mode-name (symbol-name major-mode))) ) )))