8.26.2013

Mac: How to Use Option as Meta Key in KeySnail

Mac: KeySnail で option キーを メタキーとして使う方法

 

Firefox の (主にEmacsユーザ向けの) キーボード・ブラウジング環境構築プラグイン KeySnail を使っている。

これを Mac 環境で使用したところ、option キーをメタキーとして使おうとしてもうまくいかず、
メタキーを使うキーバインドが一切動作しない状況に陥った。

試行錯誤の末、正しく動作するようになったのでその方法を記録しておく。

 

環境

  • Hardware: MacBook Air (USキーボード)
  • OS: OS X 10.8
  • Firefox: 23.0.1
  • KeySnail: 2.0.1

事象

デフォルト状態の KeySnail では、Altキー・Command キーの入力がメタキーとして解釈される。
keysnail/wiki/howto.ja.wiki at master · mooz/keysnail

Firefox では、Mac の optionキーが Altキーの働きと同等となるので、
optionキーを使ってメタキーのキーバインド (M-w, M-x など) ができると期待した。

(Command キーをメタキーとして扱うのは違和感があるのであまり使いたくない。) 

ところが optionキーを使ったメタキー操作は全く動作しない。

  • control と option を同時に押した時のキーバインドは正しく動作する。(C-M-r など)
  • C-q でエスケープしたあとに option+x などと入力しても、表示されるのは「null」

 

原因

OS X では (デフォルト状態では)、option キーを押しながら他のキーを入力すると特殊文字(å∫ç∂...)の入力が
行われる。

これらのキーを押下したときのイベントでは event.altKey が true にならないので
メタキーかどうかを判定する key.isMetaKey 関数を素通りしてしまう。

 

対応方法

key.keyEventToString 関数をフックして、イベントを特定するための文字列を書き換えればそれなりに動くようだ。

charCode を取得し、特殊文字 かどうかを判定した上で "M-" で始まる文字列に置換する。
(例えば、∑ (charCode=8721) が入力されたらなら "M-w" に置き換える)

このような処理を行う option-as-meta というプラグインが既に存在していたので、それをそのまま利用する。

これで optionキーをメタキーとして使えるようになった。

 

補足

optionキーではなく ESCキーをメタキーとして使用したいのであれば、「Metaplus」プラグインを利用するのが
最も確実な方法と思われる。

Plugin · mooz/keysnail Wiki 

 

0 件のコメント:

コメントを投稿