†Linuxなんて大キライ†

xmodmapによるダイヤモンドカーソルの実現

作成開始日 2019.11.20
最終更新日 2020.12.15

【注意】以下の記事は、AutoKeyの存在を知らない段階で書いたもの。故に、相当に的外れな部分がある。ただし、CapsLockをmode switchに変更して、擬似ダイヤモンドカーソルを実現する手法自体は、けっこう興味深いものだと思う。(2021.06.21)

Linuxにはまともなテキスト・エディタがない。 ここで言う「まとも」とは《キーカスタマイズ》が可能で《Shift-JIS》が扱えるエディタのこと。 或は、ハナからWordStar準拠のキーバインドのエディタでも良いのだが… そのようなLinux用エディタは(知る限りで)皆無である。 それが、私がLinuxに全面移行できない最大の障害になっている。

私にとって、WordStar/WordMaster準拠のエディタは必須で、これなしのPCは有り得ない。 少なくとも、Ctrl+MでReturn、Ctrl+HでBackSpaceは基本中の基本、絶対必須である。 ところが、なぜか(各OS共通だが)コマンドラインでは、このキーバインドを採用しながら、 GUIアプリでは一切サポートしてない(ごく希な例外は存在するが)。 そこまで否定するなら、何でコマンドラインで残しておくのかワケがわからん。

他の環境では、まずはCtrlとCapsLockの位置を交換し、 キーバインドを自由に変更できるテキストエディタを使って、WordStar準拠環境を構築していた。 DOSでもWinでもOS/2でも、キーバインドがフルカスタマイズ可能なエディタは必ず存在した。 Linuxの場合、Ctrlキーの位置変更は簡単だが、意外なことにキーカスタマイズが自由なエディタがない。 Shift-JIS対応が条件となると、コマンドライン版が除外されるので尚更である。 UTF-8のみで良ければ、nanoがかなり使えそうだが…

GeanyはShift-JISも扱えるし、キーカスタマイズ機能も付いているので期待したが、 DOSテキストは化けるし、Ctrl+HにBackSpaceを割り付けることもできないしで、役に立たなかった。 10本以上のエディタをチェックしたが、大同小異と言うか…むしろGeanyはそれでもまともな部類だった。 そこで、アプリレベルでの対応は諦め、OSレベルでキーマップを変更してしまおうと考えた。

その後、いろいろ試してみたが、一番実用的なのは、VirtualBox/VMWareをインストールして、WinMeのテキスト・エディタ(例えばApsaly)を使用する方法。Linuxは「環境」と割り切って、テキストベースの作業は仮想化環境上のWindowsやOS/2で行う方が現実的だと思う。

●CapsLockの擬似Ctrl化

では、xmodmapを使って、CtrlとCapsLockを交換した上で、Ctrl+MはEnterに、Ctrl+HをBackSpaceに、 Ctrl+S/D/E/Hは十字カーソルに強制割当をすれば済むのかと、そう簡単ではない。 まず単純に、キーの機能がカブるとどちらかを捨てなければならない。 たとえば、Ctrl+Sを左カーソルに設定すれば、ファイルの保存には使用できなくなる。

それ以前の問題として、上記の強制割当にはCtrlキーをmode switchキーに設定する必要があり、 CtrlキーがCtrlのkeysymを吐かなくなる;つまり本来のCtrl+の機能は全て無効化されてしまう。 Ctrl+C/X/Vによるコピペなども不可能になる。流石にこれは拙い。

で、思い付いたのが、CtrlとCapsLockの位置は交換せずに、CapsLockをmode switchとする方法。 つまり、通常のCtrlキーの機能は、本来のCtrlキーの位置(左下隅)で実行し、 WordStarライクなキー操作するときのみ、CapsLockを擬似Ctrlキーとして使用する。 これだと操作の一貫性が崩れるが、すべての機能が使用可能になる。

keycode 66 = Mode_switch

keycode 43 = h H BackSpace BackSpace
keycode 58 = m M Return Return
keycode 65 = space space Zenkaku_Hankaku Zenkaku_Hankaku
keycode 39 = s S Left Left
keycode 40 = d D Right Right
keycode 26 = e E Up Up
keycode 53 = x X Down Down
keycode 27 = r R Prior Prior
keycode 54 = c C Next Next
keycode 38 = a A Home
keycode 41 = f F End
キー設定を標準状態に戻した上で(CtrlとCapsLockが交換された状態では不可)、 上記設定を任意のテキストファイル(ここではdiamond.key)に書き込んで、「xmodmap diamond.key」を実行する。 これで、BackSpace/Enter、ダイヤモンドカーソル、PageUp/PageDown、Home/Endが「CapsLock+英字」で実現できる。 また、CapsLock +sapceでIMEのON/OFFができるように、全角/半角キーの機能を割り当てている。

この変更を加える前に、元に戻す方法を確保しておくこと;
変更前のキーマップを書き出す:xmodmap -pke > default.key
一度英語配列に変更したあと、再度日本語配列に戻す(設定の初期化)
なお、キー設定を弄り回していると、変更が効かなくなってしまうことがある。その場合は、一度デスクトップやXを再起動してみるとよい。

●使用感は…微妙

で、しばらく使ってみたが、使用感は微妙なところ。 確かにテキストエディタの操作性は圧倒的に改善された。LeafpadがWordStarになった!…は言い過ぎだが。 ブラウザなどの文字入力でもCtrl+H/Mが効くのは物凄く有り難い。 ただし、無意識的にCtrk+KS(保存)とかCtrl+QS(行頭)とか操作してしまっている事がある。 中途半端にWordStar準拠なのが、逆に混乱を招いている感じだ。

また、ブラウザではCtrl+クリック(別タブでリンクを開く)、Ctrl+W(タブを閉じる)などを多用するが、 やはり、ついつい本来のCtrlキーではなく、CapsLockの方を押してしまう。 この辺りは身体に染み付いている操作なので、何とも言えないところだ…

それに、そもそもCtrlが左下隅って、Win標準の操作系でも物凄く使いにくくないか? Altよりも多用するんだから、最下段だとしても、もっと内側に配置すべきだろう。 無変換とか要らないキーを置いておくのは無駄だよな… この操作系に全面移行するのは、やはり相当に抵抗がある。

てんで、CtrlとWinキーを交換して、ついでに[無変換]もCtrlキーにしてみた;

remove mod4 = Super_L
remove control = Control_L
keycode 115 = Control_L
keycode 131 = Control_L
keycode 37 = Super_L
add control = Control_L
add mod4 = Super_L
CtrlとAltを交換するときは(やっぱり[無変換]はCtrl);
remove control = Control_L
remove mod1 = Alt_L
keycode 37 = Alt_L
keycode 64 = Control_L
keycode 131 = Control_L
add control = Control_L
add mod1 = Alt_L
これとて、根本解決には程遠いが、まあ、何とか我慢できるレベルになった。


【Linuxなんて大キライ目次】 【ホーム】