グループでバッファを分割する
タブバーで可能です。グループ内のグループバッファにルールを追加できます。基本的なスニペットは次のとおりです。
(defun tabbar-buffer-groups ()
"Returns the list of group names the current buffer belongs to."
(list
(cond
;; ADD RULES TO SPLIT BUFFERS IN GROUPS HERE!
;; if buffer is not grouped by the rules you would add above
;; put it in the "General" group:
(t
"General"
))))
ルールの例:
- バッファ名のリスト:
((member (buffer-name)
'("*scratch*" "*Messages*" "*Help*"))
"Common" ;; this is a group name
)
- 共通バッファについては、名前がスターで始まる各バッファを「共通」に配置することを好みます。これは、このルールのバッファを作成する例を示します。
((string-equal "*" (substring (buffer-name) 0 1))
"Common"
)
- メジャーモードでバッファをグループ化する例を次に示します。
((memq major-mode
'(org-mode text-mode rst-mode))
"Text"
)
- 次に、派生元のモードに基づいてバッファをグループ化する例を示します。
((or (get-buffer-process (current-buffer))
;; Check if the major mode derives from `comint-mode' or
;; `compilation-mode'.
(tabbar-buffer-mode-derived-p
major-mode '(comint-mode compilation-mode)))
"Process"
)
- 正規表現でタブをグループ化する例を次に示します。
((string-match "^__" (buffer-name))
"Templates"
)
- メジャーモードでバッファをグループ化します。
(if (and (stringp mode-name)
;; Take care of preserving the match-data because this
;; function is called when updating the header line.
(save-match-data (string-match "[^ ]" mode-name)))
mode-name
(symbol-name major-mode))
ルールを作成したら、タブバーのタブ行で+または-を押してグループを切り替えたり、◀と▶を押してバッファーを切り替えたりできます。または、次のdefunをバインドするだけです。
tabbar-forward
tabbar-backward
tabbar-forward-group
tabbar-backward-group
キーボードでタブとタブグループ間を移動します。
個人的にタブをグループ化して、開いているものを確認しますが、でナビゲートしますido-switch-buffer
。
ルールセットを切り替える
また、バッファグループ化ルールの異なるセットを定義し、これらを切り替えることができます。以下は、2組のバッファグループ化ルールを切り替える例です。
;; tab-groups!
(setq tbbr-md "common")
(defun toggle-tabbar-mode ()
"Toggles tabbar modes - all buffers vs. defined in the `tabbar-buffer-groups'."
(interactive)
(if (string= tbbr-md "groups")
(progn ;; then
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups-common)
(setq tbbr-md "common"))
(progn ;; else
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups)
(setq tbbr-md "groups"))))
;; by default - all tabs:
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups-common)
これによりtabbar-buffer-groups-common
、tabbar-buffer-groups
タブのグループ化解除と切り替えが行われます。
タブバーバッファーを名前で並べ替える
タブバーバッファを名前で並べ替えることは有益だと思います。取得方法は次のとおりです。
(defun tabbar-add-tab (tabset object &optional append_ignored)
"Add to TABSET a tab with value OBJECT if there isn't one there yet.
If the tab is added, it is added at the beginning of the tab list,
unless the optional argument APPEND is non-nil, in which case it is
added at the end."
(let ((tabs (tabbar-tabs tabset)))
(if (tabbar-get-tab object tabset)
tabs
(let ((tab (tabbar-make-tab object tabset)))
(tabbar-set-template tabset nil)
(set tabset (sort (cons tab tabs)
(lambda (a b) (string< (buffer-name (car a)) (buffer-name (car b))))))))))