key-combo v0.6をリリース:sequential-command的な使い方もサポート!
key-combo v0.6をリリースしました。
sequential-command的な使い方をするために、以下の機能を加えました。
- クリーンアップ用の関数を省略可能に
- コマンド実行前の位置を記録し、key-combo-returnで戻れるように
- Metaキーを含むキーも登録可能に
- 元のコマンドがself-insert-commandの時のみundoの履歴に結果を残すように
変更詳細
詳細を説明します。今回はkey-comboのクリーンアップ関数を省略出来れば、sequential-commandの代わりになるんじゃないかと思いついたのがきっかけです。それに対応して、使い勝手がよくなるようにいろいろ変更しました。sequential-commandを知らない方はid:rubikitchさんの同じコマンドを連続実行することで挙動を変える(行頭→先頭など) sequential-command.el をリリース - http://rubikitch.com/に移転しましたを参考にしてください(丸投げ)
それではサンプルと解説です。
キーは従来通りkey-combo-define-globalにて定義して下さい。一つのキーに対して、実行用の関数とnilを「.」でつないだ形式で指定します。更に. nilは省略可能なので、(実行用の関数)で指定が可能です。
例えば
(key-combo-define-global (kbd "C-a") '((back-to-indentation) (beginning-of-line) (beginning-of-buffer) (key-combo-return)))
と設定すれば、「C-a」を入力するたびに「インデントを飛ばした行の先頭」「行の先頭」「バッファの先頭」「コマンド開始時の位置」に移動します。sequential-commandに比べると括弧が多くなってしまうのが、あまりイケてませんが…。以下のようにラムダ式も関数として受け付けます。
例えば
(key-combo-define-global (kbd "C-e") '((lambda () (end-of-line)) (lambda () (goto-char (point-max))) (lambda () (key-combo-return))))
と設定すれば、「C-e」を入力するたびに「行の末尾」「バッファの末尾」「コマンド開始時の位置」に移動します。
なお、上記2つの設定はデフォルト設定に含まれているので
(key-combo-load-default)
により設定が可能です。
インストール方法
ソースがgithubにおいてあるので
(auto-install-from-url "https://github.com/uk-ar/key-combo/raw/cc2cbc60ff9bee69e251e31170aa0d551c883c35/key-combo.el")
を評価するか、
marmaladeから
M-x package-install key-combo
でインストール可能です。
制限事項
sequential-commandの代用として使った場合、以下の制限があります。
- 関数名を指定できないためdescribe-bindingsした時わかりにくい。
- キーを登録する際、括弧が多い