キーボード配置を変更する。変態的に。1

実質的な初エントリー。何を書こうかと考えていましたが、ここ数年をかけてカスタマイズを続けていたキーボード配置の変態的カスタマイズをまとめのために紹介しようと思います。使っているキーボードは日本ではごく一般的な109日本語キーボードです。

そもそもカスタマイズを始めたきっかけ

3年ぐらい前タイピングのスピードをあげるのにはまったことがありました*1。最初はローマ字入力を練習していたのですがそれが上達してくると、次はアルファベット、記号入力の練習を始めました。アルファベット、記号入力になるとローマ字入力では使わなかった Shift キーを押さなければならなくなります。
このとき、左 Shift キーを左手小指で押していたので、AやZとかの押しにくさといったらなかった。しかもホームポジションから離れて本来とは違う指で a や z を打鍵しなければいかなくなります。周りには左 Shift キーと右 Shift キーを使い分けている人もいましたが、そんなメンドクセー事はしたくねー、と思いました。ここで初めてキーボード配置を変えたいと思ったわけです。

sticky shift, SandS, one shot modifier

んで、そんなことは昔の人達も考えているわけで特殊な Shift キーの入力の仕方は幾つか考えられていました。
その1つが sticky Shift。これは Shift キーを押しながら他のキーを打鍵するのではなく Shift キーを1回打鍵した直後の文字が大文字になるという入力の仕方です(Shift を押し続ける必要がないということですね)。
そしてもう1つが SandS です。これはスペースキーを押しながら他のキーを打鍵するとスペースキーが Shift キーとして働くという入力の仕方です。スペースキーを単独で打鍵すればスペースが入力されます。これは普段遊ばせている親指で Shift キーを押せるようになるので、全くホームポジションから離れずに大文字、記号を入力することができます!初めて使ったときはヨダレが出ました。
この SandS は one shot modifier の一種と言えます。one shot modifier は対象キーをおしながら他のキーを打鍵すると修飾キー*2として働き、対象キーを単独で打鍵するとそのまま入力される方式です。SandS の場合は対象キーがスペースで、修飾キーが Shift ということですね。これまたあとで出ます。
sticky shift だと1つの大文字しか入力することができません。英語を書いてる時や、SKK で入力するときは便利なんでしょうが、私はプログラムも書くことがあり、大文字、記号が連続することも多々あるので、SandS を使うことにしました。

窓使いの憂鬱

実際に SandS を実現しようとすると、何かしらのプログラムでキー配置をいじることになります。キー配置を変更できるプログラムとしては窓使いの憂鬱がものすごく有名です。他にも、猫まねきや AutoHotKey とかあるらしいのですが使ったことないので知りません。使っている人がいたら使い勝手を教えてください。
窓使いの憂鬱

いかんともしがたい理由により UN*X Wizard が窓使いにジョブチェンジする時、その操作体系の違いにより憂鬱な日々を送らざるを得ないことは想像に難くありません。「窓使いの憂鬱」は、その憂鬱を少しだけ和らげることができるアイテムです。

というような目的で作られており、かなーり柔軟にキーボード配置の変更ができます。詳細はマニュアルに譲りますが、SandS を使うだけなら設定ファイルに

mod Shift += !!Space

or

mod Shift += !!!Space

と書くだけです。
前者の場合,スペースを押し続けても、スペースは入力されません。これだと,連続してスペースを入力したいとき不便なので,後者の場合はスペースを押し続けてしばらく経つとスペースが(連続で)入力されます。スペースを押してからどのキーを打鍵しようかな?と考えているとスペースが入力されてしまいます.
そんなこんなで SandS を手に入れた私は超快適な Shift 生活を送ることができました。

Ctrl キーのカスタマイズ

タイピングにはまっていたのとほぼ同じ頃、私は Emacs というエディタを使い始めました。一般的な Windows ユーザは Shift やせいぜい Ctrl ぐらいしか修飾キーを使わないと思いますが、このEmacs というエディタ、Ctrl や Alt 果てには Super や Hyper といった修飾キーを多用しまくります。特に Ctrl キーの使う頻度は半端じゃありません。というか使わないとまともに操作できません。
なので、Emacs 界隈ではキーボードの左下に追いやられている左 Ctrl を Caps Lock と交換して、a キーの横に Ctrl を持ってくることがよくやられます。はじめからそう配置されているキーボードがあるくらいですから、やっている人はかなり多いのでしょう。これを窓使いの憂鬱で実現するには、設定ファイルに

## 左コントロールとCapsLockの入れ替え
## CapsLock を Ctrl にして、CapsLock の存在を消し去ることにした
mod Control += 英数
key *英数 = *LeftControl
#mod Control -= LeftControl
#key LeftControl = 英数

と書きます*3
下2行がコメントアウトしてありますが、これは私の場合は Ctrl と Caps Lock の交換ではなく Caps Lock を Ctrl に変更して Caps Lock というキーには消え去ってもらうことにしています。いままで一度も意図的に Caps Lock を使ったことはありませんし、他人に Ctrl どこにあるの?と聞かれる心配もないので、これでいいかと思っています。下2行のコメントアウトを外せば単純な交換になります。このカスタマイズによってだいぶ Emacs が使いやすくなります。

さらにカスタマイズ。親指を遊ばせてはならない

以上で SandS と Ctrl の位置変更はできて、なかなか使い勝手も向上したわけですが、まだ満足しません。まず、Crtl が a キーの横になったのはいいのですが、これは結局左手小指で押さなければならず、左 Shift キーと同じ問題がでてきます(Ctrl+a をどうやって押すか?)。また、Emacs でなかなか使用頻度の高い Alt の押しにくさも問題です(最も使うであろう Alt+x は親指がつりそうになります)。
じゃあどうするかというと、ここまで読んでくれたなら予想できてしまうかもしれませんが、Ctrl も Alt も親指で押せる位置に変更します。当然親指の位置的にスペースキーに近いキーになります。そして、スペースの両隣といえば変換キーと無変換キー。みなさん、この2つのキー使ったことありますか?私はありません。なんでこんな位置に鎮座しているのか全く理解できませんが、この位置にあるなら有効活用してしまおうということです。
ちなみにこの頃から使う OS が Windows 7 になり、窓使いの憂鬱が開発終了で使えなくなってしまいました。Windows 7 における窓使いの憂鬱の後継としてのどかというプログラムがあります。有料にはなってしまいましたが2000円程度ですし、それだけの価値は絶対あります、とおすすめしておきます。以下ではのどかの設定を説明します。使い勝手はほぼ窓使いの憂鬱とは変わりませんから、以下の設定も窓使いの憂鬱でそのまま使えるかもしれません(確認はしていない)。
というわけでのどかで変換キーに Ctrl、無変換キーに Alt を割り当てるには、のどかの設定ファイルに

## 無変換をAltにする
mod Alt += !!無変換
key *無変換 = *RightAlt
## 変換をCrtlにする
mod Ctrl += !!変換
key *変換 = *RightControl

と書くだけです。実に簡単です。ただし、もともとIME で変換キーや無変換キーに何かしらの動作が割り当てられていることがあります。それを無効にしないと所望の動きはしないと思います。
このカスタマイズをすることにより Emacs の操作性は当社比2倍になります。実際、これによって Alt を使うキーバインドが使いやすくなり、ますます Emacs が便利になった気がします*4。親指を使うのは最初はなかなか難しいですが、慣れればそうでもありません。動きとしては圧倒的に人差し指から小指までのほうが激しいのですから。

さらにさらに(変態的に)カスタマイズ。修飾キーだけなんてもったいない

実は上の Ctrl や Alt を親指で押すのは、Emacs 界隈ではたまに聞く話で、私以外にも設定している人はいると思います。しかし、私はこれをさらに変態的にカスタマイズします。せっかく親指で修飾キーを押せるようになったのだから,その修飾キーを one shot modifier にしてしまうのです.つまり,変換キーや無変換キーを単独で打鍵した場合,何か別のキーを入力するように設定します.
どのキーを入力するかはいろいろ考えられます.私も試行錯誤中ですが,今のところ変換キーを Enter,無変換キーを Esc にしています.この2つのキーは意外とホームポジションから遠いのです.Emacs 使いなら Enter は C-m にしろ、と言われるかもしれませんが,C-m は1ストロークとはいえ2つのキーを押すことになるので、やはり1つのキー単独の押しやすさにはかないませんし、のどかで設定すればどのようなアプリケーション上でも使えるので便利です。Esc は Emacs ではそんなに使用頻度は高くありませんが、あると便利なときもあります。vi 派の人ならものすごく便利に使えるんじゃないでしょうか?
これを実現するのどかの設定は

## 変換をCrtlにする
mod Ctrl += !!変換
#key *変換 = *RightControl
## 単独で押したら Enter にする(one shot modifier)
key ~R-*C-変換 = Enter
key R-*C-変換 = &Ignore

## 無変換をAltにする
mod Alt += !!無変換
#key *無変換 = *RightAlt
## 単独で押したら Esc にする(one shot modifier)
key ~R-*M-無変換 = Escape
key R-*M-無変換 = &Ignore

## Emacs でうまく動いてくれないの対策
## IME の状態を無視するために必要?
key *IC-*I- =

となります。この設定で、変換キーと無変換キーを one shot modifier にすることができます。単独で押すキーを設定しているのが5, 12行目です。それだけだと、Ctrl+何かのキー を押そうとして変換キーを押したけど、やっぱやめた、と思って変換キーを離すと Enter が入力されてしまいます。&Ignore がある行でそれを防止しています。
最後の1行は Emacs でうまく動いてくれないのを防止するための設定です。詳しくはここを見てみてください。この質問をしたのは私です。
ここまで変態的なキー配置にしている人はあまりいないんじゃないでしょうか。使ってみると Enter の押しやすさにはかなりびっくりします。

私は病気です。わかってます。でも hyper と super が必要なんです。

ここからは Emacs 限定です。先程も少し言ったように、Emacs では ctrl や alt の他にも hyper や super という修飾キーが使えます。聞きなれない修飾キーですが、昔のキーボードにはあったらしいのです。Emacs では ctrl や alt を使ったキーバインドは多いので、なかなか自由にキーバインドを変更できませんが、hyper や super を使ったキーバインドは自分の好きに割り当てることができます。私の場合、実際にはそんなに多く割り当てていませんが、将来キーバインドが増えることを考慮して hyper, super を用意しています。
しかし、のどかでは hyper, super という修飾キーを直接何かのキーに割り当てることはできません。もし出来る方法をご存じの方がいましたら、教えてくれるとうれしいです。
じゃあどうするかというと、Windwos 上の Emacs であれば、Emacs の設定により windows キーと app キーを hyper, super にすることができます。しかし、大概のキーボードでは、app キーは押しにくいところにあるものです。なので、のどかで位置の変更をしておきます。当然親指で押せるところです。ここでは、変換の1つ右隣、これまた使ったことのないカタカナひらがなキーを app キーとして使います。のどかの設定で

## ひらがなキーを Applications キーにする
## Emacs で hyper としてつかうため
key *ひらがな = *Applications

と書くだけです。実質1行です。あとは、Emacs の方で設定するだけです。Emacs の設定ファイル(init.el)に

(setq w32-apps-modifier 'hyper      ; apps キーを hyper キーにする
      w32-lwindow-modifier 'super)  ; 左Windows キーを super キーにする

と書けば OK。これで自由に hyper と super が使えます。ただし、もともと OS で設定されている windows+d や windos+e を Emacs で使うのは難しいと思います。他のキーバインドにしときましょう。
さらに、windows キーももっと親指で押しやすい位置に変更することも考えました。本来左 alt のある場所に割り当てるとか。しかし、そうすると普通だと使うであろう左 alt が潰れてしまいます。他の人がこのキーボード配置で使ったときに混乱してしまう可能性があります。というわけで、今はその設定は見送っています。
実は今までの設定は、普段殆ど使わないキーに対して新しいキーを割り当てていただけなので、他の人が使ったとしてもほとんど違和感を感じないはずです。それは逆に言うと自分が他の普通のキーボードを使うときもキーの押し間違えをすることも少なくなると思います(効率は当然落ちますが)。つまり、このキーボード配置への依存度を下げることができるのです(今更の感は多分にありますが)!

まとめ

以上つらつらと書きましたが、現在のキー配置をまとめて図で表すとこのようになっています。

とにかく、親指修飾キーは超おすすめですので一度やってみてください!みんな親指を遊ばせすぎです。ctrl や alt は標準でこの位置にしてもいいくらいだと思うんですけどね。
この記事は Windows 上での話です。Ubuntu でも同じようなキーボード配置にしているのですが、記事が長くなりすぎたのでその解説は次回ということで。長文失礼しました。

おまけ

使っているキーボードはスペースバーの長さが普通のキー2つ分くらいです。4つ分くらいの長いスペースバーだと変換キーや無変換キーが押しにくく、親指修飾キーの威力が半減します。ぜひ短いスペースバーのキーボードでどうぞ。私はスペースバーの長さで買うノートパソコンを決めたぐらいです。

*1:タイプウェルを練習しまくった

*2:Shift とか Ctrl とか Alt とか

*3:#から改行まではコメントです

*4:以前は M-% なんて両手で押してましたが、今は左手の親指と人差指だけでおせます