tabbar.el 2.0 の導入
Emacs Wiki に version 2.0 が上がっていることに気がついたので,導入してみました.
主な変更点
ver 1.3 からどこら辺が変わったのか.
- タブ上でマウスホイールをスクロールさせるとタブ移動
- 画像が使える(ver 1.3 でも使えたかも?)
初期設定
タブ上でマウスホイールを使わない
正直いらないです.
(tabbar-mwheel-mode -1)
グループを使わない(1.3 とやり方が違う)
(setq tabbar-buffer-groups-function nil)
左側のボタンを消す(これも 1.3 と違う)
(dolist (btn '(tabbar-buffer-home-button tabbar-scroll-left-button tabbar-scroll-right-button)) (set btn (cons (cons "" nil) (cons "" nil))))
ウィンドウからタブがはみ出たときの動作
- タブをスクロールさせる(デフォルト)
(setq tabbar-auto-scroll-flag t)
- タブを省略して表示
(setq tabbar-auto-scroll-flag nil)
こんな感じになります.以前似たようなことやったなあ.
- スクロールも省略もさせない(そのままはみ出させたい場合)
(setq tabbar-auto-scroll-flag nil) (defadvice tabbar-buffer-tab-label (around my-tabbar-ad-dont-shorten activate) (let ((tabbar-auto-scroll-flag t)) ad-do-it))
タブに表示させるバッファ名
1.3 とやり方は変わっていませんでした.僕の場合はこんな感じ
(defvar my-tabbar-displayed-buffers '("*scratch*" "*Messages*" "*Backtrace*" "*Colors*" "*Faces*" "*vc-") "*Regexps matches buffer names always included tabs.") (defun my-tabbar-buffer-list () "Return the list of buffers to show in tabs. Exclude buffers whose name starts with a space or an asterisk. The current buffer and buffers matches `my-tabbar-displayed-buffers' are always included." (let* ((hides (list ?\ ?\*)) (re (regexp-opt my-tabbar-displayed-buffers)) (cur-buf (current-buffer)) (tabs (delq nil (mapcar (lambda (buf) (let ((name (buffer-name buf))) (when (or (string-match re name) (not (memq (aref name 0) hides))) buf))) (buffer-list))))) ;; Always include the current buffer. (if (memq cur-buf tabs) tabs (cons cur-buf tabs)))) (setq tabbar-buffer-list-function 'my-tabbar-buffer-list)
タブ移動のキーバインド
僕は Mac のデフォルトと同じように command + shift + cursor にしてます.
(global-set-key (kbd "<S-s-right>") 'tabbar-forward-tab) (global-set-key (kbd "<S-s-left>") 'tabbar-backward-tab)
タブの間
長さを指定するだけならこんな感じ
(setq tabbar-separator '(1.5))
タブ上でのマウスクリック
ホイールクリックで kill-buffer するように弄ってます.それだけ.
(defun my-tabbar-buffer-help-on-tab (tab) "Return the help string shown when mouse is onto TAB." (if tabbar--buffer-show-groups (let* ((tabset (tabbar-tab-tabset tab)) (tab (tabbar-selected-tab tabset))) (format "mouse-1: switch to buffer %S in group [%s]" (buffer-name (tabbar-tab-value tab)) tabset)) (format "\ mouse-1: switch to buffer %S\n\ mouse-2: kill this buffer\n\ mouse-3: delete other windows" (buffer-name (tabbar-tab-value tab))))) (defun my-tabbar-buffer-select-tab (event tab) "On mouse EVENT, select TAB." (let ((mouse-button (event-basic-type event)) (buffer (tabbar-tab-value tab))) (cond ((eq mouse-button 'mouse-2) (with-current-buffer buffer (kill-buffer))) ((eq mouse-button 'mouse-3) (delete-other-windows)) (t (switch-to-buffer buffer))) ;; Don't show groups. (tabbar-buffer-show-groups nil))) (setq tabbar-help-on-tab-function 'my-tabbar-buffer-help-on-tab) (setq tabbar-select-tab-function 'my-tabbar-buffer-select-tab)
super + number でタブ指定
以前の物がそのまま使える
タブをカラフルにする
以前やった改造は 2.0 だとより泥臭いやり方になってしまうので,今回はなしで.
まとめ
画像とか使わないなら 1.3 で十分な気がする.なんか便利な使い方知っている人がいたら教えてください.