プログラミングが捗る親指Ctrl

LinuxではCtrlキーを多用する

 私は普段の仕事ではLinuxを使用しています。勿論Windowsも使用しますがTera Termなどの端末エミュレータばかり使うので、結局Linuxを使用しているのと本質的には変わりません。Linuxを普段から使用している方なら分かると思いますが、LinuxではGUIよりも端末画面でコマンドを打ち込むことが多いです。かくゆう私も毎日毎日コマンドを打ち込むような使い方をしています。そんなコマンド大好きな私ですが、40歳を過ぎたある日、左手の小指に激痛が走りました。原因は大体わかっていました。左手の小指でCtrlキーを押してばかりだったからです。

 Linux(Unix)はCtrlキーを多用するOSと言えます。例えばbashでは、カーソルを行頭に移動させるのにCtrl-aを使い、またカーソルの位置から行末までを削除する場合はCtrl-kを使います。他にもtmuxなどのターミナルマルチプレクサを利用している場合はCtrl-bを多用しますし、vimでもCtrl-fやCtrk-bで画面スクロールさせてファイルの内容を確認したりします。そして私がよくプログラミングで使うエディタは「emacs」です。そうです、私はemacs pinkyになってしまったのです。emacs pinkyとはemacsでCtrlキーを酷使することで小指を痛めてしまうことを指す言葉ですが、emacsユーザーでなくてもCtrlキーは結構使うので小指を痛める可能性はあります。若い頃はemacs pinkyなんて都市伝説だと思っていましたが、そうではなかったのです。

Ctrlキーに小指を使わない

 やばい!と思った私は早速Caps Lockと左下Ctrlを入れ替えてみることにしました。これは非常に有名な対策ですが、小指でCtrlキーを押すことには変わりがなく、私には効果がありませんでした。だからといってemacsの利用をやめることは現実的では無いし、そもそもLinuxはCtrlキーを多用するOSなので、emacsだけの問題でも無いです。というわけで私はwebでemacs pinky対策を色々調べたのですが、親指でCtrlキーを押すようにすれば良いという結論に至りました。

 JISキーボードを使用している方の大多数は「変換」「無変換」キーを積極的に利用したことが無いのではないでしょうか?というよりも何のために存在しているのか分からない人もいるかと思います。私も今だに本来の使い方はわかりませんが、これらのキーにCtrlをアサインすれば親指Ctrlが可能になります。この設定がコマンド大好き人間には素晴らしく使いやすかったので、ここで設定方法など紹介したいと思います。

私が普段使用しているキーボードです。変換キーと無変換キーはスペースの隣にあります。

windowsで親指Ctrl

 先ずはwindowsでの親指Ctrlの設定方法です。親指Ctrlは、便利過ぎて指が覚えてしまうのでLinux場合だけ設定するわけには行かないのです。windowsではキーの割当てをカスタマイズするフリーツールがいくつかあります。私が利用しているのは「KeySwap」というツールです。古くからあるツールのようですが、windows10でも問題なく使えています。

1. インストール

 KeySwapはVectorからダウンロードできます。インストールは落としたZIPファイルを適当なフォルダにおいて解凍するだけです。解凍するとkeyswapという名前のフォルダが作成されるので、その中にある「KeySwap.exe」というファイルを起動すれば使用できます。ここで注意すべきは、ファイルを選択してから右クリックで管理者として実行を選択して起動しなければなりません。

KeySwapのフォルダ内のファイル一覧

2. 設定方法

 設定方法は 先ず画面の【キー名】の列のセルを選択し、変換対象のキーを押します。右側のキーボード図からクリックしても大丈夫です。次にすぐ右隣りのセルを選択して、変換後のキーを押すか右側のキーボード図から選択します。これを必要なキーの数だけ登録して「終了」をクリックして「現在の設定を登録しますか」の質問に「はい」をクリックします。その後一旦Windowsを再起動するえばキーの変換が有効になります。

KeySwapの設定画面

3. 自分の設定例

 私の設定は上図で示している通りです。基本は、スペース右側の変換キーをCtrlにして、スペース左側の無変換をAltにしています。左手の親指でAltキーを押せるようになることで、更にemacsが使いやすくなります。もっと良いことはウインドウの切り替え(Alt + Tab)もホームポジションを崩さず行えます。私の場合は両方をCtrlにしてしまわないで、上記のようにする方が使いやすいです。

Ubuntu Linuxで親指Ctrl

 Linuxの場合はwindowsと違って「KeySwap」のような便利ツールは、私は知りません。したがって親指Ctrlを設定するのは少々面倒くさいです。いくつか方法はあると思いますが私が実践している方法を紹介します。ここで、Linuxには色々なディストリビューションがありますが、デスクトップPCとして利用する場合に広く使われているUbuntu系(xkbを使っているなら他のLinuxでも応用できます)での使用を前提に話を進めます。

dconfで下準備

 まずは下準備としてdconfというツールでちょっとした設定を行います。この設定がされていないと日本語変換する度に親指Ctrlの設定がキャンセルされてしまいます。端末を開いて以下の手順でコマンドを入力してください。

1. dconfのインストール

$ sudo apt install dconf-editor

2. gnomeの設定

$ dconf write /org/gnome/settings-daemon/plugins/keyboard/active false
$ dconf update

xkbでキーマップ変更

 次に親指Ctrlの設定を行います。Ubuntuではxkbを使うやり方が一般的なようです。

1. キーマップをファイルに出力

 一旦テンプレートとなるキーマップファイルを作成します。以下のコマンドを実行してmykbdファイルを”${HOME}/.xkb/keymap”の下に作成してください。

$ mkdir -p ~/.xkb/keymap
$ setxkbmap -print > ~/.xkb/keymap/mykbd

 作成したmykbdファイルは次のようになっています。

xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete+japan"      };
        xkb_symbols   { include "pc+jp+inet(evdev)+terminate(ctrl_alt_bksp)"
        };
        xkb_geometry  { include "pc(pc105)"     };
};

2. ファイルの編集

 次に出力したmykbdファイルを編集します。xkb_symbolsセクションに以下の様にkey <HENK> ~ key <LALT>までの4行を挿入します。この例では、<HENK>(変換キー)をCtrlキーに、<HKTG>(ひらがなカタカナキー)をAltキーに、<MUHE>(無変換キー)をAltキーに、そして<LALT>(左Altキー)をF7に置き換えています。この例はあくまでも私の場合の設定なので、必要に応じて編集して頂ければと思います。

xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete+japan"      };
        xkb_symbols   { include "pc+jp+inet(evdev)+terminate(ctrl_alt_bksp)"
                        key <HENK> { [Control_R] };
			key <HKTG> { [Alt_R] };
                        key <MUHE> { [Alt_L] };
			key <LALT> { [F7] };
        };
        xkb_geometry  { include "pc(pc105)"     };
};

3. 設定の反映

 設定ファイル(mykbd)が作成できたら、以下のコマンドでそれを反映させます。ちなみに、普通にコマンドを実行すると標準エラー出力に色々出力されてウザイので、/dev/nullに放り込んでいます。

$ xkbcomp ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

 注意すべきは、この方法では再起動したりログアウトすると設定が元に戻ってしまいます。毎回上記コマンドを打ち込みたくない場合は以下のようにすると良いでしょう。

自動でキーの設定を反映させる

 自動でキーマップの設定が反映されるように、”${HOME}/.bashrc”ファイルに以下のスクリプトを追加します。リモートで接続している場合は環境変数DISPLAYが設定されていない場合があるので、if文を入れています。

if [ -n "$DISPLAY" ]; then
  xkbcomp ${HOME}/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
fi

別の方法

 自動で設定されるといっても、Ubuntuにログインしてから一旦端末を開らかないと結局.bashrcが実行されないです。上記の方法は各ユーザー毎に設定する方法で、もっと大本のところを編集するやり方もあります。この方法であればdconfの設定は要らないし、ある意味簡単かもしれません。

 やり方は簡単で、”/usr/share/X11/xkb/symbols”の下にある”inet”というファイルがあるのでそれを編集します。

$ cd /usr/share/X11/xkb/symbols
$ sudo cp inet org_inet
$ sudo vim inet

そのinetファイルの107行目あたりの”key <HENK> {…}”と書いてある行などを書き換えます。以下に編集例を示しています。ファイルの書式は前述した場合と同じなので、見れば大体分かると思います。あと、このファイルを弄るにはroot権限が必要です。編集したら一旦再起動してください。ちなみに、私の場合は大本のファイルに手を付けるのをあまり好まないので、この設定まではやっておりません

    key <HKTG>   {      [ Alt_R                 ]       };
    key <HENK>   {      [ Control_R             ]       };
    key <MUHE>   {      [ Alt_L                 ]       };
    key <LALT>   {      [ F7                    ]       };

結局

 結論としては親指Ctrlは最高です。キーボードのホームポジションを崩さないで済むのでタイピングが非常にラクです。特にLinux(Unix)を使用する機会の多い人は、小指が痛いかどうかに関わらず一度検討してみる事をお勧めします。私自身も左小指を痛めるまで何故このことに気が付かなかったのか悔やまれます。

 ここでは「変換」キーへCtrlのアサイン方法を紹介しましたが、そもそも親指で押せる位置にCtrlキーがあるキーボードがあればいいのになぁと思っています。しかしながら、恐らく親指Ctrlのキーボードなど販売されることはないでしょう。最近自作キーボードなるものが静かに人気を集めているらしいので、売っていないなら自分で作るのもアリかもしれません。機会があればチャレンジしたいです。