
私はずっと英語キーボードを使っている。特に思想上の拘りがあるわけではなくて、単に慣れているというのが理由です。始めて本格的にプログラミングを始めた SUN のワークステーションが英語キーボードでした。
日本語キーボード(JIS配列)は、記号(:;+など)の位置が異なっていることと、無変換など余分なキーが付いているところが違う。(DQNなオヤジが国語学者か何かと決めたのだろう。日本人には、標準(共通)にしておけば良いものをわざわざ独自に変えることで、より仕事をした気分になる人が多い…)
デスクトップでは、キーボードは自分の好きなのを買えば良いので気にならないが、ラップトップでは日本語キーボードのしか売っていない上に、取り換えが難しいので始末が悪い。(デスクトップで英語キーボードの人は結構多いと思う。海外向けに英語キーボードパーツも生産しているのに、オプションにしてくれないのは不満だ)
おまけに、私はあまりタイピングがうまくないので、交代交代で使っていると英語キーボードまで打てなくなってしまう。
したがって、個人で買う場合にはなんとか英語ノートを探すのであるが、今回会社から支給されたものには選択肢がなかった。
そこで、日本語キーボードを英語キーボードとして使えるように、キーマップを入れ換えてみることにした。 ターゲット環境は Linux(console, X)、Windows2000。
まず、単純に英語キーマップに近付けることを考える。単にキーボードドライバを入れ替えるだけで は、 '[`]'(grave/backquote)と '[~]' (asciitilde)のキーが なくなってしまう。この不足は、Windowsではまだしも、UNIXを使う上ではありえないため、若干のキーマップ変更は必須である。
さて、どのように変更しようか。
以前、無変換のところに '[`]' '[~]'
があるキーボードを 使っていたことがあり、親指で押せるキーは結構便利に思っていたのと、基本的に「無変換」とかの
Spaceの横にある日本語キーは 使わないので、有効に割り当てようと思っていた。しかし、Xmodemap を眺めていたら、これらに個別の
scancodeを 割り当てているようなので、そのまま生かすことにした。(これを使っているイカしたアプリケーションがあるかもしれない)。
キーが共通なのは英語を生かす (例えば'[6][&]'→'[6] [^]'、
'[^] [~]'→'[=]
[+]'として、 '[`]'、'[~]'
が足りなくて、 '[}]'、'[]]'が余っている。また、
'[¥] [|]'と'[-]
[_]'が あるので、'[¥]'と'[_]'は重複している。また、英語キーボードでは Enter が縦長ではなくて横長なので、日本語キーボードを使うときに '[}][]]'を Enterと間違えて叩いてしまうことが多い。
というわけで、以下のようにすることに決定。
キーボードドライバは、システム設定で変えて下さい。
レジストリをいじらなくてはなりません。具体的には、regedit を立ち上げて、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
に、"Scancode Map"を作成し、hex で以下を書き込みます。
00000000 00000000(手順に関しては下に詳しいのがあります)
06000000 1d003a00
3a001d00 1c002b00
29007300 2b007d00
00000000
と、ここまで書きましたが、「変換」とかのキーが 効いていないようです。使わないので気が付きませんでした。それで構わない方のみ実行して下さい。
これを解決するためには、日本語キーボードドライバから出発しないとならないと思われます。ですが、ここで紹介したレジストリの方法では、shift修飾だけを変えることができなくて、キーを入れ換えることしかできないのです。キーボードドライバを書き直したほうが良いかもしれません。どうもDDKが必要なようで無料では作れないようです。
さて、考えた通りのことは概ねできましたが、やっぱりなんだか使い難いなぁ。
※*.zip なファイルは解凍して使って下さい。
検索エンジンからこのページにいらっしゃる方が多いのですが、多分Windowsのキーマップの入れ換え方を捜しているんではないかと 思い、詳細を記載しておきます。
なお、行った変更を元に戻したい場合は、registryから"Scancode Map"のキーを削除します。
構成は、ヘッダと中身、フッタからなります。
| 項目 |
サイズ |
内容 |
| ヘッダ |
LONG x 2 |
全部0 |
| データ長 |
LONG |
フッタを含む残りのデータのLONG数 |
| データ |
SHORT x 2 |
前SHORT=スキャンコード、後SHORT=キーコード |
| データ |
繰り返し |
|
| フッタ |
LONG |
全部0 |
記述はLONG(=4バイト)、SHORT(=2バイト)です。注意しなくてはならないのは、IntelCPUでリトルエンディアンになっていますので、byte orderがひっくり返っていることです。[12AB]は、[B,A,2,1]となります。
例を1つ、

この例では、記述は3つで、CapsLock(003A)を左Control(001D)と入れ替え、右ALT(E038)を押すと左WIN(E05B)のキーコードを吐くようにしています。
なお、スキャンコードは、マイクロソフトの文書ms-scancode.pdfに記載されています。最新はMSのサイトscancode.docにあります。