対応する括弧などを挿入する関数を提供するelisp, parenthesis.elを更新

id:gan2さんに頂いた意見を実装してみた.
以下のようなもの.

  • 「\」がポイントの直前にある場合は, 対応するものを自動挿入しないようにする.
  • まとめて関数をキーに割り当てる関数を作成.

\がある場合は, \(\)という風に挿入した方がいいかなあとか思ったけど,
elispの場合, \\(\\)としなきゃいけないしなあとか考えて, 単純に片方だけ挿入するようにしてみた.

ダウンロード

とりあえず更新.
まだファイル頭の説明とか全然書き足してないけど, まあ. それはおいおい.
# 何時になるかわからないけどw
EmacsWikiにはそれが終わったら置いとくかなあ.

設定

キーをまとめて設定は, こんな感じでやる.
第1引数に設定するキーをまとめた文字列. 第2引数にそのキーが割り当てられるキーマップ.

(add-hook
 'text-mode-hook
 '(lambda()
    (parenthesis-register-keys "{('\"[" text-mode-map)))

これで「{」, 「(」, 「'」, 「"」, 「[」の5つについて対応を挿入する関数を割り当てる.
これは, 単純にそれぞれについてdefine-keyを実行しているだけ.
ちなみに, 以下のように頭に「 」半角スペースを入れると括弧の後に1つ空白を入れる関数となる.

...
    (parenthesis-register-keys " (" text-mode-map)

例えば, 「(」ならば, 「( 」...「 )」となる.
# 開き括弧の後に1つ, 閉じ括弧の前に1つ空白が入る
ちなみにこれは, 括弧についてのみ設定した場合.


この関数によるキー設定で有効な文字は, 「"」, 「'」, 「(」, 「{」, 「[」, 「<」, 「`」.
「`」は, 「`'」を挿入する. 「`」に割り当てられる.

コメント


うーん・・・どうだろう?
やっぱりマイナーモードを作って全部のモードを対象に一気にキーを設定できた方がいいかなあ?
ここでやってる風みたいにやればできるとは思うけど・・・.
でも, これをパッケージとしてやるのはちょっと引ける.
自分で.emacsに設定としてやるのは良いと思うけどね.
# パッケージとしてやったらどこかに問題を与えそうで・・・.
つか, 全部のモードで対応する括弧を挿入したい場合, 自分の判断でこの設定を適用すればいいのかな.

追記

"で""とか(で()とか - trotrの日記
http://d.hatena.ne.jp/trotr/20080119/1200736175

id:trotrさんによる方法.
上手く変数を用意してあげればよかったか.
そかよく考えればその通りな気がする.
ということで複数のモードでまとめてやりたい場合, この方法がお勧めかも.
(*さらに追記*)
今気付いた.
複数のパターン用意しなきゃならんかな?Lispとか特殊な場合も混ぜる場合.
それでも大体は, trotrさんのでいけるよなあ. うん.

最後に

他にもこのパッケージについて意見や要望があれば, コメント/トラバ/メール/はてブコメなんでもいいので言って頂けると嬉しいです.

更新時刻

2008年, 1月19日, 1:30