key-combo v1.4.1:複数行の文字列挿入時に自動でインデント。キーが二つの場合の設定簡略化

key-combo v1.4.1をリリースします。変更点は以下です

  1. 複数行の文字列を挿入する時に自動でインデントするようにしました
  2. 登録するキーが二つの場合の設定を簡略化しました
  3. (実験的)関数型言語用設定の追加

変更詳細

1つめは複数文字列への対応です。smartchrの設定例 - pogin’s blogをみて、c言語などで「{」を入れたら改行してカーソルをうまいこと移動してくれるのはいいなと思ってました。ただ、文字ごとにmy-smartchr-bracesやmy-smartchr-commentなどと関数が増えていくのは嫌なので、挿入する際に複数行なら自動でインデントとカーソル位置の調整をするようにしました(yasnippetと同じですね)。
設定例は

(key-combo-define-global (kbd "{ RET") "{\n`!!'\n}")

のようにすれば、

{
    !! //←!!の場所にカーソルがインデントした状態で配置
}

となります。改行する方が多いモードなら

(key-combo-define-global (kbd "{")  ("{\n`!!'\n}" "{`!!'}"))

とかの方が便利かもしれません(デフォルトは上の設定のみです)
2つめはキーが二つの場合の設定簡略化です。v1.3までは登録するキーが二つの場合、先行するキーもkey-comboに登録する必要がありました。例えば「->」を打ったら「 -> 」を挿入したい時、一文字目の「-」を打ったらそのまま「-」を挿入する設定もする必要がありました。例

(key-combo-define-global (kbd "->")  " -> ")
(key-combo-define-global (kbd "-")  "-");;自分で設定する必要がある

ですが2行目の設定を忘れやすく、後から読んだ時に何のために設定したのかわかりにくいです。そこで、

(key-combo-define-global (kbd "->")  " -> ")

としただけで、一文字目の設定が無ければ自動で設定するようにしました。(この場合"-"をそのまま挿入して、">"一文字としてkey-comboで処理したいケースは少ないと判断しました)
3つ目はid:poginさんからhaskell-modeで使う場合の質問かきたので、

  1. key-combo-functional-default

関数型っぽい言語で共通して使える設定

  1. key-combo-functional-mode-hooks

key-combo-functional-defaultが有効になるモードのフック
を足しました。私はそこらへんをさっぱり触ったことがないのでわかっている人はpull requestを送るか設定を公開してみてください。

インストール方法

ソースがgithubにおいてあるので

(auto-install-from-url "https://raw.github.com/uk-ar/key-combo/8cddaec7d76901ae92678ca987fb4d086fad98c5/key-combo.el")

を評価するか、
marmaladeから
M-x package-install key-combo
でインストール可能です。

その他

今回の設定簡略化について、登録するキーが二つの場合に限ったのは理由があります。それは、三つになった場合("abc")に一文字目("a")をそのまま挿入して、のこり("bc")としてkey-comboで処理したいケースはあり得るかと思ったからです(しばらく使ってみないとわかりませんが)。

追記(2012/4/4)

c-mode他で"="を押したときに" = "ではなく"="になってしまうバグがあったため、1.4.1として更新しました。1.4を入れてしまった方は、申し訳ありませんが1.4.1に更新してみて下さい。テストはすべて通していたのですが、テストケースに漏れがあったので気づきませんでした(新しくテストを追加済みです)