Wordの場合はApplication.KeyBindings.Addメソッドを使ってショートカットキーの割り当てができる。
Application.Keybindings.Add _ KeyCategory:=wdKeyCategoryCommand, _ Command:="Command", _ KeyCode:="KeyCode"
あまり良く読んでないのでKeyCategory引数の意味とかしっかり理解していないが、"Command"には割り当てたいマクロの名前を文字列として、"KeyCode"には割り当てたいキーのーキーコードを数値として与える。キーコードはwdKeyAやwdKeyControlなどの名前の定数が用意されているので、それを足しあわせて作る。
割り当てたショートカットを解除するには次のようにする。
With Application.FindKey("KeyCode") .Disable .Clear End With
解除したいショートカットキーのキーコードを"KeyCode"に指定する。
これを利用すると、Wordで比較的簡単にEmacsのキーバインドを再現できる。
ちょっとだけやってみた。
'' ----- Emacsモードの有効化と無効化 --------------------- Sub EnableEmacsMode() Call AddKeyBindings("ForwardChar", wdKeyControl + wdKeyF) Call AddKeyBindings("BackwardChar", wdKeyControl + wdKeyB) Call AddKeyBindings("NextLine", wdKeyControl + wdKeyN) Call AddKeyBindings("PreviousLine", wdKeyControl + wdKeyP) Call AddKeyBindings("BeginningOfLine", wdKeyControl + wdKeyA) Call AddKeyBindings("EndOfLine", wdKeyControl + wdKeyE) End Sub Sub DisableEmacsMode() Call DeleteKeyBindings(wdKeyControl + wdKeyF) Call DeleteKeyBindings(wdKeyControl + wdKeyB) Call DeleteKeyBindings(wdKeyControl + wdKeyN) Call DeleteKeyBindings(wdKeyControl + wdKeyP) Call DeleteKeyBindings(wdKeyControl + wdKeyA) Call DeleteKeyBindings(wdKeyControl + wdKeyE) End Sub Sub AddKeyBindings(Command As String, KeyCode As Long) '' キーバインド登録 Application.KeyBindings.Add _ KeyCategory:=wdKeyCategoryCommand, _ Command:=Command, KeyCode:=KeyCode End Sub Sub DeleteKeyBindings(KeyCode As Long) '' キーバインド登録解除 With Application.FindKey(KeyCode) .Disable: .Clear End With End Sub '' ------ キーバインドマクロ定義 ------------------------ Sub ForwardChar() '' カーソル前移動 Selection.MoveRight unit:=wdCharacter, Count:=1 End Sub Sub BackwardChar() '' カーソル後ろ移動 Selection.MoveLeft unit:=wdCharacter, Count:=1 End Sub Sub NextLine() '' カーソル下移動 Selection.MoveDown unit:=wdLine, Count:=1 End Sub Sub PreviousLine() '' カーソル上移動 Selection.MoveUp unit:=wdLine, Count:=1 End Sub Sub BeginningOfLine() '' 行頭へ Selection.HomeKey unit:=wdLine End Sub Sub EndOfLine() '' 行末へ Selection.EndKey unit:=wdLine End Sub
https://gist.github.com/nozma/5383099
現在のファイルなりNormal.dotmなりにインポートしてEnableEmacsModeを実行すればEmacs風のキーバインドに(カーソル移動だけだが)なり、DisableEmacsModeを実行すれば通常の状態に戻る。
2ストロークについてはExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよなでやったようにC-xでショートカットが切り替わるようにすれば良いと思う。
とりあえず今日は眠いので残りはいずれ。もしくは誰かやっといて。