本人并不是很喜欢标签栏或则侧边栏之类的功能,因为他们在绝大多数时间中的作用只是占界面空间。
但是,我不得不承认,在代码任务复杂时,上述两者确实可以在一定程度上减少大脑负担。
因此,我使用 hydra 配合 awesome 在这两个问题上做了一个折中。编写代码时不会显示标签栏,只有在需要切换标签时才通过 hydra 显示标签栏。
效果图:
而在没有开启 hydra 时没有 tab 栏,界面清爽干净:
以下是在 spacemacs 中的代码,使用 spacemacs 自带的 spacemacs|define-transient-state
宏 ,本质不过是对 hdyra
的封装,想必各位都是看得懂的。
(defun mp-hacking/init-awesome-tab ()
(use-package awesome-tab
:commands (awesome-tab-toggle-tabbar-mode-on awesome-tab-toggle-tabbar-mode-off)
:defer t
:init
(progn
(spacemacs|define-transient-state awesometab
:title "Awesome-tab Transient State"
:doc "
Tab^^ Group^^ Other^^
───────^^──────────── ─────^^─────────────── ─────^^──────────────
[_h_/_l_] pre/next [_p_/_n_] pre/next group [_H_/_L_] other pre/next
[_b_/_e_] beginning/end [_s_] switch [_d_/_K_] delete/Kill all [_q_] quit"
:on-enter (awesome-tab-toggle-tabbar-mode-on)
:on-exit (awesome-tab-toggle-tabbar-mode-off)
:bindings
;; Tab
("h" awesome-tab-backward)
("l" awesome-tab-forward)
("b" awesome-tab-select-beg-tab)
("e" awesome-tab-select-end-tab)
;; Group
("p" awesome-tab-backward-group)
("n" awesome-tab-forward-group)
("s" awesome-tab-switch-group)
;; Other
("d" spacemacs/kill-this-buffer)
("K" awesome-tab-kill-all-buffers-in-current-group)
("H" awesome-tab-forward-tab-other-window)
("L" awesome-tab-backward-tab-other-window)
("q" nil :exit t))
(memacs/define-evil-normal-keybinding "C-t" 'spacemacs/awesometab-transient-state/body))
:config
(progn
(setq awesome-tab-active-color
(face-attribute 'spacemacs-normal-face :background)
awesome-tab-inactive-color
(face-attribute 'font-lock-comment-face :foreground))
(set-face-attribute 'awesome-tab-selected nil
:foreground awesome-tab-active-color
:underline nil
:overline awesome-tab-active-color
)
(set-face-attribute 'awesome-tab-unselected nil
:foreground awesome-tab-inactive-color
:underline awesome-tab-inactive-color
:overline nil
))
))
其中 memacs/define-evil-normal-keybinding
是对 evil 的 normal 状态和 motion 状态的键位绑定的封装。
(defun memacs/define-evil-normal-keybinding (key def &rest bindings)
"Binding keys and func for normal state map and motion state map"
(while key
(define-key evil-normal-state-map (kbd key) def)
(define-key evil-motion-state-map (kbd key) def)
(setq key (pop bindings) def (pop bindings)))
)
欢迎各位交流探讨。