Emacs の設定に、 hydra を使っていて、物覚えの悪い頭の補助をしてもらっている。
justbur/emacs-which-key も入っているが、メニューというより、確認という位置付けかと。
下が自分の基本パターン?になるかも。
(defhydra hyd-flyck (:hint nil :exit nil) "Flycheck" ("M" flycheck-manual "Manual" :column "flycheck") ("v" flycheck-verify-setup "verify setup") ;; ("p" flycheck-previous-error "prev" :column "Errors") ("n" flycheck-next-error "next") ("c" flycheck-buffer "check buf") ("l" flycheck-list-errors "list") ;; ("?" flycheck-describe-checker "describe" :column "Checker") ("d" flycheck-disable-checker "disable") ("m" flycheck-mode "mode") ("s" flycheck-select-checker "select") ;; ("q" nil "Exit" :exit t :column "Quit") ("." nil "cancel" :exit t) )
で、あまり見掛けないけど、結構いいかも、という設定に出あったりする。 まあ、ドキュメントに記載されているはずだが、コピペメインの私が読んでいるはずもない。
ショートカットキーを2文字以上にする
自分は、勝手にワンキーだと思い込んでいた。他のhydraに飛ばなくても、階層化っぽくなる。
セカンドキー以降は、ミニバッファ下にメニュが表示されるので、不細工ではあるが、キー不足対策や、カテゴライズに重宝かも。
例えば、ブックマークについて、以下のようにしてみている。主にバッファ内利用をメインにしている、 joodland/bm を使っているが、サブ的に標準のbookmarkを追加してみた。
あと、削除関連は複数キーにして、打ち間違い対策としてみた。
あと、デフォルトでキーバインドされてるのは、それをイメージできるようにしておけば、いずれ hydra には不要になるかも、と思ったりする。
(defhydra hydra-bkmk (:color pink :hint nil) "BookMark(bm/buildin)" ("m" bm-toggle "toggle" :column "marked") ("N" bm-lifo-next "LIFO N") ("P" bm-lifo-previous "LIFO P") ;; ("n" bm-common-next "next" :column "jump") ("p" bm-common-previous "prev") ("l" bm-show-all "list o/w") ;; ("s" bm-toggle-buffer-persistence "stay(toggle)" :column "edit") ("rr" bm-remove-all-current-buffer "remove c.buff") ("rR" bm-remove-all-all-buffers "remove a.buff") ;; ("aa" bm-bookmark-annotate "annotate" :column "annotate") ("aA" bm-bookmark-show-annotation "show anno") ;; ("xrl" bookmark-bmenu-list "blist" :exit t :column "Standard BkMk") ("xrm" bookmark-set "set current" :exit t) ("bo" bookmark-jump-other-window "jump other" :exit t) ("bc" counsel-bookmark "counsel bkmk") ("br" counsel-mark-ring "counsel mk ring") ;; ("q" nil "quit" :color blue :column "Quit") ("." nil "quit" :color blue) ("U" org-ctrl-c-ctrl-c "org ctl cc") )
“:pre” とか “:post” とか
メニュー自体、メニューの項目が起動する前後での処理を追加できる。ようだ。
New in Hydra - :pre and :post clauses を参考に(少し古いかも) 試してみたのが以下(20190821.939)。正しいかどうか不明。動くのだが、違和感がある。
(global-set-key (kbd "C-z") (defhydra hydra-vi ( :body-pre (progn (set-cursor-color "#2080d0") ;; このメニュー起動時 (message "start menu")) :pre (progn (set-cursor-color "#40e0d0") ;; 各コマンドの前 (message "in menu")) :after-exit (progn (set-cursor-color "#ffffdd") ;; コマンドの後 ? (message "agter exit")) :post (progn (set-cursor-color "#ffccff") ;; このメニュー終了時 ? (message-box "!! This is test menu !!\n")) ) "vi like cur move key" ("l" forward-char) ("h" backward-char) ("j" next-line) ("k" previous-line) ("C-n" previous-line) ;; これが有効になる ("q" nil "quit") ) )
単純な、羅列
以下は4列表示。ファイルのリンクを並べたてようとした時に出会った。
(defhydra hyd-open-tfile (:hint nil :columns 4) "open target file(default is orgfile)" ("d" (my-targetfile-open 1) "todo") ("m" (my-targetfile-open 12) "memos") ("b" (my-targetfile-open 2) "bike_memo") ("p" (my-targetfile-open 14) "python") ;; ("g" (my-targetfile-open 4) "diag_samp") ;; ;; (中略) ;; )
他にも色々ありそう。しかし、設定ばかりに手間かけると、 他が疎かになてしまう。反省。