четверг, 1 июля 2010 г.

tabbar.el

Табы реализуемые tabbar.el (1.3) предназначены для избавления от C-x b. Просто охота тупо нажимать C-<tab> и прыгать на следующий буфер.

Дефолтная настройка 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"))
         )))

Комментариев нет:

Отправить комментарий