Дефолтная настройка tabbar.el имеет ряд раздражающих моментов, в частности, когда редактируешь C++ проект .hpp принадлежат одной группе, .cpp файлы другой, README вообще третей, а сами буферы порой содержатся в нескольких группах, хотя и не должны бы. В общем, тупое перелистывание табов вперёд ужасно раздражает, заставляя пробегать повторно по уже пройденным буферам.
Решил исправить это дело у себя.
Лирику с оформлением можно пропустить, работает следующим образом: использует три группы - служебные буферы (группа "Emacs Buffer"), Dired буферы (группа "Dired") и всё остальное, открытое пользователем (группа "User Buffer"). Control+Shift+Tab переход на следующий буфер в пределах группы, тоже самое, но совместно с кнопкой "WIN" на предыдущий, переключение групп - C-x C-<left> & C-x C-<right>.
;; tabbar
(require 'tabbar)
;; tabbar settings
(set-face-attribute 'tabbar-default-face nil :background "gray60")
(set-face-attribute 'tabbar-unselected-face nil
:background "gray85"
:foreground "gray30"
:box nil)
(set-face-attribute 'tabbar-selected-face nil
:background "#f2f2f6"
:foreground "black"
:box nil)
(set-face-attribute 'tabbar-button-face nil
:box '(:line-width 1 :color "gray72" :style released-button))
(set-face-attribute 'tabbar-separator-face nil
:height 0.7)
;; C-S-<tab> ;; C-S-<win>-<tab>
(global-set-key (kbd "<C-S-iso-lefttab>") 'tabbar-forward-tab)
(global-set-key (kbd "<C-S-s-iso-lefttab>") 'tabbar-backward-tab)
;; C-x C-<left> ;; C-x C-<right>
(global-set-key (kbd "C-x C-<right>") 'tabbar-forward-group)
(global-set-key (kbd "C-x C-<left>") 'tabbar-backward-group)
(tabbar-mode t)
(defun tabbar-buffer-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
((string-equal "*" (substring (buffer-name) 0 1))
'("Emacs Buffer"))
((eq major-mode 'dired-mode)
'("Dired"))
(t
'("User Buffer"))
)))
(require 'tabbar)
;; tabbar settings
(set-face-attribute 'tabbar-default-face nil :background "gray60")
(set-face-attribute 'tabbar-unselected-face nil
:background "gray85"
:foreground "gray30"
:box nil)
(set-face-attribute 'tabbar-selected-face nil
:background "#f2f2f6"
:foreground "black"
:box nil)
(set-face-attribute 'tabbar-button-face nil
:box '(:line-width 1 :color "gray72" :style released-button))
(set-face-attribute 'tabbar-separator-face nil
:height 0.7)
;; C-S-<tab> ;; C-S-<win>-<tab>
(global-set-key (kbd "<C-S-iso-lefttab>") 'tabbar-forward-tab)
(global-set-key (kbd "<C-S-s-iso-lefttab>") 'tabbar-backward-tab)
;; C-x C-<left> ;; C-x C-<right>
(global-set-key (kbd "C-x C-<right>") 'tabbar-forward-group)
(global-set-key (kbd "C-x C-<left>") 'tabbar-backward-group)
(tabbar-mode t)
(defun tabbar-buffer-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
((string-equal "*" (substring (buffer-name) 0 1))
'("Emacs Buffer"))
((eq major-mode 'dired-mode)
'("Dired"))
(t
'("User Buffer"))
)))
Комментариев нет:
Отправить комментарий