openSUSE 12.2とOSX Mountain Lionに, One Shot Modifierを導入したときのメモです.

One Shot Modifier

One Shot Modifier とは,あるキーXを押したまま別のキーを押したときと,あるキーXを単体で押したときとで,挙動を変える設定のことです.有名なOne Shot Modifierとして, Space and Shift (SandS) というものがあります.これは,Spaceキーを他のキーと同時に押すことで,SpaceキーをShiftキーとして使うことができる設定です.大文字のアルファベットを打つのが非常にラクになります.欠点は,Spaceを押した瞬間ではなく,キーがもとに戻ったときにSpaceが入力されるので,タイプにひっかかりを感じることでしょうか.

openSUSEでOne Shot Modifier - At home modifier

At home modifierは,ドライバを置き換えることで,LinuxでOne Shot Modifierを実現してくれます.

以下,openSUSE 12.2に導入したときのメモです.

git clone するかダウンロードしてきて,

$ sudo zypper install xorg-x11-server-sdk libudev-devel
$ ./autogen.sh
$ ./configure
$ make
$ sudo paco -D make install

これで, /usr/local/lib64/xorg/modules/input 以下にevdev_drv.soがインストールされます(最後の行では paco を使ってます).このevdev_drv.soを,既存の /usr/lib64/xorg/modules/input/evdev_drv.so より優先させたかったのですが,スマートな方法がわからなかったのでゴリ押ししました.

$ cd /usr/lib64/xorg/modules/input
$ sudo mv evdev_drv.so evdev_drv.so.bak
$ sudo ln -s /usr/local/lib64/xorg/modules/input/evdev_drv.so ./

つづいて, /usr/share/X11/xorg.conf.d/10-evdev.conf に以下のようにオプションを書き加えます. + が追加した行です.

   Section "InputClass"
           Identifier "evdev keyboard catchall"
           MatchIsKeyboard "on"
           MatchDevicePath "/dev/input/event*"
           Driver "evdev"
+          # One Shot Modifier
+          # 65:<space> 50:<shift_L>
+          # 48:quote(') 64:<alt_L>
+          Option "TransMod" "65:50 48:64"
   EndSection

ここでは,

  • SpaceキーをShiftキーとしても使う(SandS)
  • Quote(')キーをAltとしても使う

という設定を記述しています.QuoteキーをAltにしてるのは,こうすると,右小指の右隣がAltになり(英語配列),Emacsを使うときにいい感じになるからです.

設定を実際に反映させるためには,Xを再起動する必要があります.

このように,あらゆるキーをOne Shot Modifierキーにすることができます.キーコードが分からないときは xev コマンドで確認しましょう.

他にも細かく設定できる項目があるので,詳しくは README を見てください.

OSX (Mac)でOne Shot Modifier - KeyRemap4MacBook

OS Xでは, KeyRemap4MacBook というソフトにより,One Shot Modifierを実現出来ます.SandSは,デフォルトで用意されているので,以下のページで紹介されているように簡単に設定できます.

QuoteキーをAltにする設定などは用意されていないので,自分で作成する必要があります.

Misc & Uninstallタブの中にCustom Settingという項目があるので,そこのprivate.xmlをいじることにより,独自のキー割り当てを作成できます.QuoteキーをOptionキーとしても使う設定は以下のようになります.

<?xml version="1.0"?>
<root>

  <item>
    <name>One Shot Modifier</name>
    <item>
      <name>Quote(') to Option_R Key</name>
      <appendix>(+ When you type Quote only, send Quote)</appendix>
      <appendix>Fn+Quote to Quote</appendix>
      <identifier>fjyuu.quote2optionR_quote_fnquote</identifier>
      <autogen>__KeyToKey__ KeyCode::QUOTE, ModifierFlag::FN, KeyCode::QUOTE</autogen>
      <autogen>__KeyOverlaidModifier__ KeyCode::QUOTE, KeyCode::OPTION_R, KeyCode::QUOTE</autogen>
    </item>
  </item>

</root>

このように設定を追加していけば,OS XでもあらゆるキーをOne Shot Modifierに設定できます.

ちなみにWindowsでは

試していませんが,ちょっと調べたところ,Windowsでは

などのソフトでOne Shot Modifierを実現できるみたいです.