はじめに
拙作ace-isearchに対して先日プルリクエストを頂き、内容が十分納得できまた動作も問題なかったのでマージさせて頂いた。結果として新しくオプション項目が追加されたので、本稿はその内容を解説することを目的とする。以下が当該プルリクエストのページである。
Add an option to invoke ace-jump-mode only after a printing character is input. by knu · Pull Request #5 · tam17aki/ace-isearch · GitHub
解説
現状のace-isearchは、isearch中の入力文字列長が1のときに「必ず」ace-jump-modeが発動する仕様になっている。C-sやC-rでisearchを起動し、ミニバッファが空の状態でジャンプする先の文字を1つ入力するという使い方ならばこれで問題はない。
しかしながら、以下のような副作用も内包することになる。
- ジャンプした後、例えばC-sを再度押下して1文字searchを発動するとまたace-jump-modeが発動する。
- isearchのミニバッファに入力された文字列長が1以上のとき、isearch-delete-charにより入力済み文字を削除し、文字列が1になるとace-jump-modeが発動してしまう。クエリの再入力に不便が生じるというわけである。
- 1文字クエリをヤンクしたときも上と同様の状況である。
そういうわけで、頂いたプルリクエストというのは上記の副作用の解消に役立つ、新しいカスタマイズ項目を追加するパッチである。以下で仕様を説明する。
仕様
パッチはカスタマイズオプションace-isearch-use-ace-jumpに関するものであった。
(defcustom ace-isearch-use-ace-jump t "If `nil', `ace-jump-mode' is never invoked. If `t', it is always invoked if the length of `isearch-string' is equal to 1. If `printing-char', it is invoked only if you hit a printing character to search for as a first input. This prevents it from being invoked when repeating a one character search, yanking a character or calling `isearch-delete-char' leaving only one character." :type '(choice (const :tag "Always" t) (const :tag "Only after a printing character is input" printing-char) (const :tag "Never" nil)) :group 'ace-isearch)
ace-isearch-use-ace-jumpの取りうる値として新たにprinting-charが追加されている。docstringにも書いてあるように、printing-charに設定した場合、上記副作用は解消され真に最初の1文字をキーボードから入力したときのみ、ace-jump-modeが発動するようになる。
おわりに
本稿では拙作ace-isearchに対して送られたプルリクエストの内容を解説した。今回プルリクエストを送って下さったknu氏には感謝申し上げる。
以上