ティンカラー日記

こなゆき(a.k.a. p-snow)

11 Nov 2024

左手小指だけ酷使するのはフェアじゃない、そうだ ' を Hyper にしよう

以前のポストでも書きましたが、最近は「'キー」(apostrophe/single quote)をEmacs内でHyperキーとして使っています。私はUS配列キーボードを使っているので、JIS配列で言うなら「]キー」(closing bracket)になりますかね。つまり「Enter/Returnキー」の左どなりのキーです。なぜいいのか、どうやって実現しているのか。少し詳らかにしてみましょう。

まずこうすることをやってみようと思ったのは、至極、単純な発想がきっかけです。普段から左手小指をCtrlとして酷使しているのに対し、右手小指は遊び勝ちでこれを活用すればいいんじゃないかというもの。もちろん同じことを考えている人は多くいるんですが、彼らの結論はEnterキーをCtrlとして使うというものでした。

私もこれを試したことがあるんですが、どうもしっくりこなかった。理由は二つで、ひとつは、Ctrlを使ったキー操作の選択肢が増えて迷いが生じてしまうことです。どういうことかというと、例えば C-a (org-beginning-of-line) を押すのに、これまでように左手の小指と薬指を使うこともできれば、右手小指と左手小指(or 薬指)を使うこともできる。選択肢が増えるのはよいかと思いきや、よく使うキーはマッスルメモリーで記憶しているので、プラスにならないどころか個人的には迷いが生じ得る分だけマイナスになるということに思い至りました。

もうひとつは、Enterキーの位置が修飾キーとして使うには右寄りすぎて右手首を若干、右に傾けなければいけない点です。これはかなり個人的な話なのかもしれませんね。とにかくEnterキーをCtrlとして使うのは個人的には合わなかったので何とかならないかと考えた挙句、冒頭で言ったようにEnterキーのひとつ左側で押しやすい「'キー」をCtrlではなくHyperとして使うことにしましあ。

ここで当然思いつく問題は、文字入力用のキーを修飾キーとして使うのは技術的に困難なのでは、仮にできたとしても、実用面において不都合が生じるのでは?というものですね。つまり文字(')を打とうとしたらHyperに解釈されてしまったり、逆にHyperとして使おうと思ったら ' が入力されてしまったりということです。結論から言う、前者の技術的な問題は keyd というLinuxのキーリマッパが解決してくれ、後者の問題は keyd で文字キーとして機能するタイムアウト値を適切に設定することで乗り越えることができました。では、keyd でどのように設定するかを少し見てみましょう。

/etc/keyd/default.conf

[main]

' = overloadt(apostrophe_layer, ', 200)

[apostrophe_layer:M]

残念ながら、HyperキーというのはX11レベルでサポートするキーではないそうなので、keydで直接 'キーをHyperキーにする設定は不可能です。なのでワークアラウンドとして 'キーを一旦Superキーとして定義して、Emacs上でSuperキーをHyperキーとして使う設定を施します。

(setf x-super-keysym 'hyper)

これでめでたく 'キーをEmacs上でHyperキーとして使うことができるようになりました。ちなみに、文字 ' を入力するタイムアウト値は200ミリ秒にしました。これはメインの作業環境で適用する値ですが、keydはキーボードごとに異なる設定をすることもできるので、別環境にも対応可能です。

ここでご紹介したのは、私の嗜好と作業環境に最適化されたものですので、みなさんも独自のよりよいキー運用を探してみてはいかがでしょうか。

Happy Tinkering!

Tags: emacs key