Emacs をよりよく使って行くにあたり,自分に合ったキーバインドを設定する.
Spaceキーを単に押すだけなら普通にSpaceキーの機能まま.が,その前にキー割り当てを変更した方がより良いキーバインドの設定ができるのではと思った.
( Ctrl キーとか Meta キーとか)
この変更は意外と簡単にできる.
よく聞くのは Ctrl キーと Caps Lock キー(英数キー)の入れ替え.
しかし,いろいろ調べてくうちに変換キーや無変換キーなどに割り当ててみようとも思った.
Caps Lock キーはデフォルトの Ctrl キーよりは押しやすいとはいえ,
小指で押すことには変わらない.
変換キーなどは親指で押せる.
以下には,変換キー・無変換キーを Ctrl に,ひらがなカタカナキーを Alt に変更する例を示す.
( Caps Lock キーに割り当てるのも同様にできる)
キー割り当て変更 1.割り当てたいキーのkeycodeとkeysymを調べる
keycode は物理的なキーを示す.
keysym はあるキーが押されたときにコンピュータ側が何のキーと解釈するかを示す.
(sym は symbol の略)
調べる方法は2つ.
keycode と keysym の対応一覧をみる方法
% xmodmap -pke とすると以下のように出力される.
keycode 8 = keycode 9 = Escape NoSymbol Escape NoSymbol Escape :
:
keycode 24 = q Q q Q
: :
: : 例えば,keycode 24の位置にあるキーが押されたらqと解釈しますよ.ということを表す.
2列目は Shift で修飾されている場合.つまり Shift + q なら Q .
3列目以降は調べてないのでわからない.
キーを押して,そのキーの keycode と 現在の keysym を見る方法
% xev とすると,一瞬すごい速さで文字が流れていくが,
それが止まってからキーを押すことで,
: : KeyPress event, serial 36, synthetic NO, window 0x2a00001, root 0x165, subw 0x0, time 25099638, (495,290), root:(545,342), state 0x0, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False : : のように keycode と keysym を確認することができる.
2.keysym を変更する
変更を加える前に一度,
% xmodmap -pke > ~/.Xomdmap して,デフォルトの設定をとっておく.
まずは試しに1つ変えてみる.
% xmodmap -e 'keycode 100 = Control_R Nosymbol Control_R' とする.特に何か表示されるわけではないが,これにより変換キーが右Ctrlキーとして働くようになった.
(このとき,もの右Ctrlキーはそのまま.つまり,変換キーが存在しないことになる)
上記コマンドは代わりに
% xmodmap -e 'keysym Henkan_Mode = Control_R Nosymbol Control_R' でもよさそう(未確認).
さて,これをまとめて行うため ~/.Xmodmap を編集する.
(実際には .Xmodmap という名前でなくてもいい)
先ほど全ての keycode - keysym のデフォルトの対応を出力していたはずなので,その下に設定を追加していく.
!と入力することで行末までコメントとなる.
! 変換・無変換キーをCtrlキーと交換,ひらがなカタカナキーをAltキーと交換 keycode 37 = Muhenkan NoSymbol Muhenkan keycode 102 = Control_L NoSymbol Control_L keycode 105 = Henkan_Mode NoSymbol Henkan_Mode keycode 100 = Control_R NoSymbol Control_R keycode 108 = Hiragana_Katakana Romaji Hiragana_Katakana Romaji keycode 101 = Alt_R Meta_R Alt_R Meta_R ファイルを編集したら
% xmodmap ~/.Xmodmap で反映される.
デフォルトに戻したかったら,自分で加えた部分を消すなりコメントアウトするなりして,
もう一度上のコマンドを実行すればよい.
修飾キーの変更
基本的なキー割り当ての変更は上記でいいのだが,
それだけでは Ctrl のような修飾キーの変更を行うことができない.
変換キーを単体で押したときには確かに Ctrl として扱われるのだが,
変換キーを押しながら他のキーを押しても,そのキーは修飾されない.
修飾キーの変更にはさらに手順を踏む.
ためしに,次のコマンドを実行してみる.
% xmodmap -pm すると,
shift Shift_L (0x32), Shift_R (0x3e) lock Eisu_toggle (0x42) control Control_R (0x64), Control_L (0x66) mod1 Alt_L (0x40), Alt_R (0x65), Alt_L (0xcc), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb) というように,どのキーがどの修飾キーになっているのかを確認することができる. この設定には xmodmap で remove や add ということをするのだが,この add をした時に実際に修飾キー反映されるらしい. というわけで,具体的には以下ようにすれば良い. : :(デフォルトの設定) : !****************** ! Original Settings !****************** remove control = Control_L remove control = Control_R remove mod1 = Alt_R keycode 37 = Muhenkan NoSymbol Muhenkan keycode 102 = Control_L NoSymbol Control_L keycode 105 = Henkan_Mode NoSymbol Henkan_Mode keycode 100 = Control_R NoSymbol Control_R keycode 108 = Hiragana_Katakana Romaji Hiragana_Katakana Romaji keycode 101 = Alt_R Meta_R Alt_R add control = Control_L add control = Control_R add mod1 = Alt_R これで変換・無変換キーなを修飾キーとして働かせることができるわけだ. SandSの導入 Ubuntu 13.10以前の場合 Spaceキーを押しながら他のキーを押すことでShiftキーの代わりに使える. (Spaceキーを押しっぱなしにして連続で空白を入力することはできなくなる) $ sudo add-apt-repository ppa:yurivkhan/ahm $ sudo apt-get update $ sudo apt-get upgrade upgrade時にxserver-xorg-input-evdevがアップグレードされれば成功. 設定を有効にするため/usr/share/X11/xorg.conf.d/10-evdev.conf(Ubuntu13.10の場合)の該当部分に変更を加える. Section "InputClass" Identifier "evdev keyboard catchall" MatchIsKeyboard "on" MatchDevicePath "/dev/input/event*" + Option "TransMod" "65:50" Driver "evdev" EndSection 変更後にマシンを再起動すれば完了. Ubuntu 14.04の場合 xcapeというものを利用する. しかし,xcapeをmakeする際に No package 'x11' found そこで, % sudo apt-get install libx11-dev 再度makeを試すと,今度は No package 'xtst' found そこで, % sudo apt-get install libxtst-dev とする. もう一度makeをしたら成功. % ./xcape -d を実行すると,押したキーのkey codeが出力される. Spaceキーは(私の場合は)65. 以下内容を~/.zshrcなどに記述しておくと良い. xmodmap -e 'keycode 255=space' xmodmap -e 'keycode 65=Shift_L' ~/opt/xcape/xcape -e '#65=space' メモ (Ubuntu 12.04)
デフォルトでAltキー単体はショートカットに登録されていた.
「システム設定」→「キーボード」→「ショートカット」より
「HUDを表示するキー」を別の適当なキーに変えるか,無効にする.
私のノートPC(LIFE BOOK SH76/G)の「ひらがなカタカナキー」は
押されっぱなしの状態にならないようである.
(押しっぱなしにしていてもON/OFFが繰り返される)
そのため,修飾キーに使うことができない.
この動作は機種によるようである.
解決策を探すが,無理そうなら別のキーに割り当てることを考える. WindowsではXKeymacsなるものを使うことによって,より簡単にキー割り当てを変更できる.
(Xkeymacsは,もともとWindowsあらゆるアプリケーション上でEmacsキーバインドが使えるようになるというという代物)
(Windows7の場合,レジストリもいじる必要がある)
Windowsの方で設定変えちゃえばVMWare上の仮想マシンをいじる必要なし.
以上により,手をホームポジションからほとんど動かさずにすむようになったが,
ちょっと窮屈なようにも感じる.慣れの問題か.
参考
|