2012年9月3日月曜日

DrRacket で Emacs 風にコードを補完するためのキーバインディング

1. デフォルトのキーバインディング

DrRacket でコードの補完をするには、

  • メニューより、Edit > Complete Word

を選択する。

デフォルトのキーバインディングでは、

C-/

に割り当てられている。

  • メニューより、Edit > Keybindings > Show Active Keybindings

で調べると、C-/ が Complete Word に割り当てられていることを確認できる。

 

2. Emacs のキーバインディングを利用している場合

a. Emacs の補完機能

DrScheme (Racket) で Emacs のキーバインディングを利用している場合、Complete Word にキーが割り当てられていない。

Emacs では、

M-/

によって、バッファ内にある単語を補完してくれる。

abbrev によると、

Abbrev とは要するに、略称展開です。…

M-/ (dabbrev-expand) は、カーソル直前の単語を、バッファ内にある単語で補完するコマンドなのです。

Dynamic Abbrevs - GNU Emacs Manual

M-/
Expand the word in the buffer before point as a dynamic abbrev, by searching in the buffer for words starting with that abbreviation (dabbrev-expand).

そこで、DrRacket でも M-/ でコードが補完されるようにしたい。

 

キーボードショートカットのカスタマイズ

3.3 Keyboard Shortcuts には、キーバインディングの例が書かれている。

For example, this remaps the key combination “control-a” key to “!”.

#lang s-exp framework/keybinding-lang

(keybinding "c:a" (λ (editor evt) (send editor insert "!")))

キーバインディングを有効にするには、上記内容のファイルを作成し、

  • Edit > Keybindings > Add User-defined Keybindings…

で読み込む。

 

補完機能の割り当て

には、補完機能のキーバインディングをカスタマイズするための具体的な方法が書かれていた。入力するキーだけを変更する。

#lang s-exp framework/keybinding-lang
(keybinding "m:/"
            (λ (editor evt)
              (if (is-a? editor text:autocomplete<%>)
                  (send editor auto-complete)
                  #f)))

各関数については、以下を参照。

キーバインディングを無効にするには、

  • メニューより、Edit > Keybindings > Remove …

を選択すれば良い。

 

関連記事