2019年9月17日火曜日

Emacs の hydra で、ちょっとした変更

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")
      ;;
      ;; (中略)
      ;;
      )
    

他にも色々ありそう。しかし、設定ばかりに手間かけると、 他が疎かになてしまう。反省。

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...