Podziel bufory na grupy
Jest to możliwe dzięki tabulatorowi. Możesz dodać reguły do buforów grupowych w grupach. Oto podstawowy fragment kodu:
(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"
))))
Przykładowe zasady:
- Lista nazw buforów:
((member (buffer-name)
'("*scratch*" "*Messages*" "*Help*"))
"Common" ;; this is a group name
)
- Jeśli chodzi o wspólne bufory, wolę umieszczać w „Common” każdy bufor, którego nazwa zaczyna się od gwiazdki. To daje przykład utworzenia bufora dla tej reguły:
((string-equal "*" (substring (buffer-name) 0 1))
"Common"
)
- Oto przykład grupowania buforów według trybu głównego:
((memq major-mode
'(org-mode text-mode rst-mode))
"Text"
)
- Oto przykład grupowania buforów na podstawie trybu, z którego pochodzą:
((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"
)
- Oto przykład grupowania kart według wyrażenia regularnego:
((string-match "^__" (buffer-name))
"Templates"
)
- Grupuj bufory według trybu głównego:
(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))
Po skomponowaniu reguł możesz nacisnąć + lub - na linii tabulatora na pasku kart, aby przełączać grupy, a także ◀ i ▶, aby przełączać między buforami. Lub po prostu powiąż następujące defuns:
tabbar-forward
tabbar-backward
tabbar-forward-group
tabbar-backward-group
i poruszaj się między kartami i grupami kart za pomocą klawiatury.
Osobiście grupuję karty, aby zobaczyć, co jest otwarte, ale nawigować nimi ido-switch-buffer
.
Przełączaj między zestawem reguł
Można również zdefiniować inny zestaw reguł grupowania buforów i przełączać między nimi. Oto przykład przełączania między dwoma zestawami reguł grupowania buforów:
;; 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)
To przełącza pomiędzy tabbar-buffer-groups-common
i tabbar-buffer-groups
grupowaniem kart odrzuca.
Sortuj bufory tabulatorów według nazw
Uważam, że warto sortować bufory tabulatorów według nazw. Oto jak to zdobyć:
(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))))))))))