HydraでEmacsのキーバインド問題を解消する
できるだけデフォルトを上書きしないようにと配慮しながらEmacsのキーバインドを考えるとなるとなかなか難しいですね。うまく割り当てできたとしてもとても覚えて使いこなすのは至難です。その問題を解消して視覚的で使いやすいUIを提供してくれるのが Hydra
です。
Hydra
はとても奥が深くまだまだ使いこなせないのですが、勉強を兼ねていろいろ設定しましたので備忘録を兼ねてご紹介します。こうすればなお良い…というようなアドバイスを頂けると嬉しいです。
設定の大部分は、hydraの作者であるabo-abo氏のTipsを参考にしました。
Hydra-melpa
emacsのパッケージ管理はいろいろあるようですが、私はMelpaを利用して、必要なパッケージは、init.el に書いて自動インストールされるようにしているのですが、メンテナンス(package-install、update、remove) のためのコマンドをhydraで設定しています。
M-x package-list-packege
でリストを表示させてもいいのですが “U” で update
すると全てが対象になって思わぬトラブルに遭遇することもあるので、package-utils
というパッケージを使っています。
;; use package-utils.el
(defhydra hydra-melpa (:color red :hint nil)
"
Package: _u_pdate _r_emove _i_nstall"
("u" package-utils-upgrade-by-name)
("r" package-utils-remove-by-name)
("i" package-install))
Hydra-git-gutter
emacsの設定ファイル群は、Gitで管理していますので、magit
は必要不可欠です。
編集中は、git-gutterが便利なのでまとめてhydraに設定しています。
;; 02_git.el --- 02_git.el
;;; Commentary:
;;; Code:
;; (setq debug-on-error t)
;; magit
(autoload 'magit-status "magit" nil t)
(defadvice magit-status (around magit-fullscreen activate)
"Magit-status always in fullr screen."
(window-configuration-to-register :magit-fullscreen)
ad-do-it
(delete-other-windows))
(bind-key [f8] 'magit-status)
;; git-gutter
(global-git-gutter-mode t)
(defun git-gutter:toggle-popup-hunk ()
"Toggle git-gutter hunk window."
(interactive)
(if (window-live-p (git-gutter:popup-buffer-window))
(delete-window (git-gutter:popup-buffer-window))
(git-gutter:popup-hunk)))
;; Hydra
(bind-key
"s-g"
(defhydra hydra-git-gutter (:color red :hint nil)
"
_m_agit _b_lame _d_ispatch _t_imemachine | hunk: _p_revious _n_ext _s_tage _r_evert pop_u_p _SPC_:toggle"
("m" magit-status :exit t)
("b" magit-blame :exit t)
("t" git-timemachine :exit t)
("d" magit-dispatch :exit t)
("p" git-gutter:previous-hunk)
("n" git-gutter:next-hunk)
("s" git-gutter:stage-hunk)
("r" git-gutter:revert-hunk)
("u" git-gutter:popup-hunk)
("SPC" git-gutter:toggle-popup-hunk)))
;; Local Variables:
;; byte-compile-warnings: (not free-vars callargs)
;; End:
;;; 02_git.el ends here