key-combo v0.6をリリース:sequential-command的な使い方もサポート!

key-combo v0.6をリリースしました。
sequential-command的な使い方をするために、以下の機能を加えました。

  1. クリーンアップ用の関数を省略可能に
  2. コマンド実行前の位置を記録し、key-combo-returnで戻れるように
  3. Metaキーを含むキーも登録可能に
  4. 元のコマンドが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の代用として使った場合、以下の制限があります。

  1. 関数名を指定できないためdescribe-bindingsした時わかりにくい。
  2. キーを登録する際、括弧が多い