Personal tools
You are here: Home ブログ matsuyama キーボードカスタマイズの魅力
Document Actions

キーボードカスタマイズの魅力


キーボードの使いやすさといえば、ハードウェア的な性能に関してよく言及されますが、キーボード配列などのソフトウェア的な性能も同じぐらいに重要だということはあまり認識されていないように感じます。必要性を感じないからなのか怠惰だからなのかわかりませんが、プログラマとして仕事をしている僕にとっては標準的なキーボード配列は非常に窮屈に感じます。人それぞれ職業も違うし打ちやすいキーの位置も違うのに、なぜ同じような配列を使う必要があるのでしょう。今回は基本的なアイデアと実際の使用例を紹介しながら、キーボードカスタマイズの魅力を伝えたいと思います。

アルファベットの配列をどうするか

純粋にキー入力を高速化するのであれば、 QWERTY 配列から Dvorak 配列などに乗り換えるべきです。しかし、作家ならともなくプログラマの場合、エディタのキーバインドが体に染みついていて、そこから離れる際にとてつもない苦痛を味わうということがあります。僕の場合、 Emacs でモディファイアキーをともなわない通常のキー入力の場合のみ Dvorak 配列を使う、などという塩梅に工夫したりしてみましたが [1] 、 vi や less のキーバインドが変わってしまうのにどうしても慣れることができず、結局 QWERTY 配列に戻ってきてしまいました。そういうわけで QWERTY 配列以外の配列を使うというのはあまり現実的じゃないと思います。

[1]http://www.emacswiki.org/cgi-bin/wiki/TranslationTable

記号の配列を変更する

おそらくアルファベットの配列は変更すべきではありませんが、記号の配列に関しては十分改善の余地があります。例えば、あなたが Lisp プログラマならハイフンがホームポジションから遠く離れた右上に位置しているのを非常に苦痛に思うでしょうし、日本語キーボードなどの場合はシングルクォートがとんでもない位置にあり、なかなかプログラミングに集中することができません。それらを改善すべく、数カ月間プログラマに最適な配列を模索してみた結果、以下のようなキー配列におちつきました。

変更前

http://dev.ariel-networks.com/Members/matsuyama/images/hhkbb.gif/image

変更後

http://dev.ariel-networks.com/Members/matsuyama/images/hhkba.gif/image

ポイントは、

  • 数字キーは英語キーボードをベースに Shift を入れ替えた状態になっている。つまり 1 => ! で Shift + 1 => 1 - 記号の入れ替えはやらない(すでに合理的だから) - プログラマーは数字より記号を打つ頻度のほうが高い - 数字を打つ際は、複数個打つことが多いので全体的な Shift のコストが低い - 括弧の入力などがめちゃくちゃ楽になる
  • ハイフンがホームポジションに近い - コマンドのオプションの入力や Lisp プログラムを書くのが楽になる
  • アンダースコアが右下にある - 日本語キーボードのパクり - C 言語とかで楽をするため
  • コロンを Shift なしで打てる - vi 用

配列変更用の ~/.Xmodmap をはっておきます(HHKB Pro2)。

~/.Xmodmap:

keycode 10 = exclam 1
keycode 11 = at 2
keycode 12 = numbersign 3
keycode 13 = dollar 4
keycode 14 = percent 5
keycode 15 = asciicircum 6
keycode 16 = ampersand 7
keycode 17 = asterisk 8
keycode 18 = parenleft 9
keycode 19 = parenright 0
keycode 20 = equal question
keycode 21 = colon plus
keycode 47 = semicolon apostrophe
keycode 48 = minus quotedbl
keycode 61 = slash underscore

この設定を読み込むには以下のようにします。

$ xmodmap ~/.Xmodmap

日本語キーボードなどでも少し手を加えることで使えます(実際 ThinkPad で使ってます)。

さらなる高みへ

さて、ここからさらにマニアックになります。いじれるところはたくさんありますが、現在僕がいじっている Shift キーと Ctrl キーを焦点にあてて説明したいと思います。

Shift キー

Shift キーの入力を楽にするには主に二つの方法があります。一つは SandS (Space and Shift) [2] と呼ばれる方法で、もう一つは Sticky Shift [3] と呼ばれる方法です。

SandS では、 Shift キーを小指ではなく親指で打てるようにします。これにより小指の負担が軽減されるとともに、不自然な指の移動がなくなり、入力速度が向上します。 SandS が有効な環境では、スペースキーは二つの役割を持ち、単発では普通のスペース、他のキーと一緒に押した場合は Shift の役割になります。

慣れるまで少し時間がかかりますが、慣れてしまえば SandS なしでは生きていけなくなります。使いやすいかどうかはキーボードのスペースキーの重さにも結構影響されます。僕が使っている HHKB Pro2 はスペースキーが他のキーと比べて若干重いため、上下反対に取り付けてごまかしながら使っています。 SandS で使うスペースキーはパンタグラフキーボードが理想的なのかもしれません。ちなみに僕は SandS に慣れてしまった影響で他人の環境でまともにタイプができなくなりました。 FooBar と打とうとして foo bar と打ってしまう始末です。

Sticky Shift では、 Shift キーを単発入力することにより、直後のキーを Shift オンで入力することができます。具体的には [Shift]foo[Shift]bar と入力すると FooBar となります。通常 Shift を押しながら複数個のキーを入力することはあまりないので、無理に Shift を押しつづけるより Sticky Shift で Shift を入力したほうが合理的だと言えます。僕はほとんど使っていませんが、慣れれば便利でしょうし、 SandS みたく SKK との親和性が非常によいでしょう。

[2]http://www.pqrs.org/tekezo/macosx/doc/keyboard/index.html
[3]http://homepage1.nifty.com/blankspace/emacs/sticky.html

Ctrl キー

僕は Emacs をメインエディタとして使っていますが、ターミナルから設定ファイルなどを編集するときは vi を使います。個人的には vi の難点は、挿入モードから抜けるためにいちいち ESC キーを入力する必要があるところだと思っています。まあ vi の熟練者はそのあたりを無意識に操作できるらしいのですが。さて、そんな vi を僕なりに使いやすくするために、現在 Ctrl キーに ESC キーの役割を与えています。具体的には Ctrl キー単発で ESC 、他のキーと一緒に押すことで Ctrl の役割になります。これは死ぬほど便利なのですが、いまのところ賛同者はいません。

その他

SandS や Sticky Shift のアイデアは Shift 以外でも適用できます。例えば Enter を押しながら入力すると Ctrl + Alt + の役割になったり、 Sticky Ctrl のようなものだったりです。また Alt キー単発入力でなんらかの仕事をさせるのもありだと思います。このあたりはアイデア次第でいくらでも便利にできると思います。

X Window System で使う

上記のようなことを実現するには X Window System の API を駆使するかキーボードドライバにハックを入れる必要があります。僕はキーボードドライバである xf86-input-keyboard にハックを入れて使っています。

http://xorg.freedesktop.org/archive/individual/driver/

上記の URL から xf86-input-keyboard-1.3.0.tar.bz2 、本エントリに添付してあるパッチをダウンロードしてきて、以下のようにインストールします。

$ tar xjf xf86-input-keyboard-1.3.0.tar.bz2
$ cd xf86-input-keyboard-1.3.0
$ patch -p1 < xf86-input-keyboard-1.3.0
$ ./configure --prefix=/usr
$ make && make install

/etc/X11/xorg.conf に以下のような設定を記述します。

Secion "InputDevice"
  Identifier "Keyboard0"
  Driver "kbd"
  Option "AutoRepeat" "200 40"

  # SandS の設定。 Space を keycode 50 (Shift) としてモディファイアに設定する。
  Option "PseudoModSpace" "50"

  # Ctrl キー単発で keycode 9 (ESC)
  Option "OneShotCtrl" "9"

  # StickyShift を使う
  Option "StickyShift" "on"
EndSection

キーコードを変更したりパッチファイルをいじれば上記したこと以外のこともできるようになります。是非お試しあれ。

ちなみにキーコードの調査は xev などを使うと便利です。

Windows で使う

この辺りは面倒くさかったので調べていません。窓使いの憂鬱 [4] を使えば SandS や Sticky Shift っぽいことはできるらしいです。

[4]http://mayu.sourceforge.net/
xf86-input-keyboard-1.3.0-mad-key.patch xf86-input-keyboard-1.3.0-mad-key.patch
Size 8.0 kB - File type text/x-patch
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/keyboard-customize/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.