ちょっと興味があってTransientを見ています。MagitのUIに使われているというアレです。set-transient-map関数とも近いですね。text-scale-adjust…ほら、文字の大きさを+/-で変えられるやつ…なんかで使われていて一時的なキーマップを実現するやつです。あれにコマンドメニュー表示の仕組みを付け加えたような感じ? コマンドメニューを作るならHydraが便利なのですが、カスタマイズ性や動的な要素が必要になったのでTransientを調べてみることにしました。
最初にGitHub内のプロジェクトトップページを見てよく分からず探し回ってしまったのですが、まずはWikiのクイックスタートガイドをやれって感じみたいですね。
はい、後で苦手な英語と格闘して集中力が続くところまでやっておきます……。
他にも長いマニュアルの方には例えば次のような例が載っていて
(require 'transient) (transient-define-prefix outline-navigate () :transient-suffix 'transient--do-stay :transient-non-suffix 'transient--do-warn [("p" "previous visible heading" outline-previous-visible-heading) ("n" "next visible heading" outline-next-visible-heading)])
これだけで後は M-x outline-navigate を実行するとメニューが出て、outline-mode(org-modeも含む!)における見出しの前後移動がpキーとnキーで出来て、その状態はC-gで止めるまで続きます。
こんなちょっとしたことでも0から実装しようと思うと結構なコード量が必要ですからね。ありがたい話です。いや、 (read-key)
とかでもいいならある意味簡単ではあるんですけどね……。
資料:
- Developer Quick Start Guide (クイックスタートガイド)
- magit/transient: Transient commands (GitHubのリポジトリ)
- Transient User and Developer Manual (マニュアル)
[…] 前回に引き続きtransient.elをいじっているのですが、prefixの定義において別のキーに割り当てた関数(コマンド)が呼ばれてしまう現象に遭遇しました。 […]