2010年5月28日金曜日

key chord

Emacsにはキーバインドが不足している。私は矢印キーなどを使う軟弱者なので、幸いC-[bfpn]は開いているが、でも足りない。例えば、replace-stringやreplace-regexpは割と使用頻度が高いが、さてこれをどこに割り当てたものか。あと、1ストロークで実行したいものもたくさんある。
そんな時はkey-chordというelispを使えばいいらしい。(http://www.emacswiki.org/cgi-bin/wiki/download/key-chord.el

;; key-chord
(require 'key-chord)
(key-chord-mode 1)
(setq key-chord-two-keys-delay 0.05)

;; key setting
(key-chord-define-global "gl" 'goto-line)
(key-chord-define-global "as" 'auto-save-buffers-toggle)
(key-chord-define-global "re" 'replace-string)
(key-chord-define-global "zx" 'undo)

key-chord-define-global は、第一引数で指定された文字全てが同時に(key-chord-two-keys-delay秒以内の誤差で)押されたら、関数がコールされるというもの。

例えば、指定行に行きたいときにはgoto-line(M-g g)を使うが、これがgとl同時押しでよいのだ。同じ要領で、reでreplace-stringも使えるようにした。これこそ、私にしてみればワンストロークでやりたかったことだった。
今回は頭文字をとってキーバインドを適当に決めたが、実際にはおしやすさが重要。中途半端に離れているととても打ちづらい。なので、実は現実的な割当数は思ったよりは少ないが、それでも大変な数のキーバインドを手にいれることが出来る。

key-chord.elにはcopyright 2003とか書いてあった。こういうelispを知る度に、一週間くらいずっと拡張ばっかりする時間が欲しいと思うのだが、結局そんな時間は取れた試しが無い。まだ数日しか使っていないが、手放せないelispになりそうだ。

なお、ターミナルではキルリングとクリップボードの共有(とりあえずMac)をやっておかないと、クリップボードから貼りつけると、いろんなキーがほぼ同時に押されたことになって大変なことになるので注意。

1 件のコメント:

  1. を見てみましょう:
    https://play.google.com/store/apps/details?id=com.binitex.pianocompanion&hl=ja

    返信削除