Puffer in Gruppen aufteilen
Dies ist mit der Tabbar möglich. Sie können Gruppenpuffern in Gruppen Regeln hinzufügen. Hier ist ein grundlegender Ausschnitt:
(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"
))))
Beispielregeln:
- Puffernamen auflisten:
((member (buffer-name)
'("*scratch*" "*Messages*" "*Help*"))
"Common" ;; this is a group name
)
- In Bezug auf gemeinsame Puffer ziehe ich es vor, jeden Puffer, dessen Name mit einem Stern beginnt, in "Common" zu setzen. Dies ist ein Beispiel für das Erstellen eines Puffers für diese Regel:
((string-equal "*" (substring (buffer-name) 0 1))
"Common"
)
- Hier ist ein Beispiel für das Gruppieren von Puffern nach Hauptmodus:
((memq major-mode
'(org-mode text-mode rst-mode))
"Text"
)
- Hier ist ein Beispiel für das Gruppieren von Puffern anhand des Modus, aus dem sie abgeleitet sind:
((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"
)
- Hier ist ein Beispiel für das Gruppieren von Registerkarten nach regulären Ausdrücken:
((string-match "^__" (buffer-name))
"Templates"
)
- Gruppenpuffer nach Hauptmodus:
(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))
Sobald Sie die Regeln erstellt haben, können Sie auf der Tab-Leiste auf + oder - drücken, um die Gruppen umzuschalten, und auch auf ◀ und ▶, um zwischen den Puffern zu wechseln. Oder binden Sie einfach die folgenden Defuns:
tabbar-forward
tabbar-backward
tabbar-forward-group
tabbar-backward-group
und mit der Tastatur zwischen Registerkarten und Registerkartengruppen wechseln.
Persönlich gruppiere ich Registerkarten, damit ich sehe, was geöffnet ist, navigiere sie aber mit ido-switch-buffer
.
Zwischen Regeln wechseln
Man kann auch verschiedene Sätze von Puffergruppierungsregeln definieren und zwischen diesen wechseln. Hier ist ein Beispiel für das Wechseln zwischen zwei Gruppen von Puffergruppierungsregeln:
;; 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)
Dies schaltet zwischen den Defuns tabbar-buffer-groups-common
und tabbar-buffer-groups
Tab-Gruppierungen um.
Sortieren Sie die Registerkartenpuffer nach Namen
Ich finde es vorteilhaft, Tabbar-Puffer nach Namen zu sortieren. So bekommen Sie es:
(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))))))))))