<!-- 注: このサイトはまだ工事中です -->

SandS

{
  date: "",
}

世の中にはSKKという(Emacs用の)素晴しい日本語入力があって,今やその移植がほとんどのプラットフォームで使えるようになっている。 しかしSKKはShiftキーを多用するため,通常のキーボードで使いこなすには強靭な小指が必要になってくる。

一朝一夕に強靭な小指を手に入れることはできないが,そんな我々にはSandS(Space and Shift)という秘策がある。 これはスペースキーをShiftキーの代わりに使い,スペースキー単体が押された場合のみ通常のスペースとして動作させるというアイデアである。

Windowsでは,CorvusSKKとそこらへんのソフトでSandSを設定すれば快適な日本語入力の環境が手に入る。 実は他にもSKK-FEPという実装があって,単体でSandSができたり拡張で簡単にGoogle日本語入力の候補も使えたりして良かったのだが,Windows11からはIEが消えてWSHがうまく動いてくれないので将来性は微妙。

Linuxの場合

Linuxではxmodmapとxcapeで実現する。

まずは以下の内容を適当なファイルにペーストし,そのスクリプトファイルに実行権限を付与する。

#!/usr/bin/env bash
          xmodmap -e "keycode 255=space"
          xmodmap -e "keycode 65=Shift_L"
          xcape -de "#65=space"
          setxkbmap
          

1〜3行目がSandSの実質で,xmodmapで左ShiftとSpaceを置き換えて,xcapeで単体のスペースを拾っている。

このスクリプトを実行すればSandSが使用できるようになり,そしてkillall xcapeで無効化できる。

ここで,xcapeはデフォルトでバックグラウンドで動作するので-dオプションでフォアグラウンドで実行するようにしている。 というのも,SandSを設定したままキーボード等を抜き差しすると不具合があったりして,それを解消するためにxcapeが終了した後に続けて(xmodmapにより)設定されたキーをsetxkbmapでリセットしたいからだ。

(ここらへんの処理をudevのルールファイルかなんかで自動化できたら楽そうだなぁと思ってたり。)

macOSの場合

macOSにはKarabiner-Elementsという素晴らしいソフトウェアがあり,それを使用してSandSを実現する。

Karabiner-Elementsは~/.config/karabiner/assets/complex_modifications/以下から追加のルールを読み込むので,ここにJSON形式の設定ファイルを配置すれば良い。

では実際にSandS用の設定を先程のディレクトリの中にhoge.jsonとして保存する。

{
           "title": "SandS",
           "rules": [
           {
           "description": "SandS",
           "manipulators": [
           {
           "type": "basic",
           "from": {
           "key_code": "spacebar",
           "modifiers": {
           "optional": ["any"]
           }
           },
           "to": [
           {
           "key_code": "left_shift"
           }
           ],
           "to_if_alone": [
           {
           "key_code": "spacebar"
           }
           ],
           "conditions": [
           {
           "type": "frontmost_application_unless",
           "bundle_identifiers": ["^io\\.krunker\\.desktop$"]
           }
           ]
           }
           ]
           }
           ]
          }
          

conditions内のfrontmost_application_unlessは(名前から察せる通り),設定を適用しないアプリケーションをパッケージの名前空間っぽいやつの正規表現で指定する(ちなみにこのIDは付属のEventViewerで確認できる)。

これを設定しないとスペースキーを使うゲームがまともにプレイできなくなってしまう。

Mine○raftのように,ゲーム本体の形式がAppでない場合はこれ以外の方法でどうにかする必要がある。(具体的にどうやるかはわからない)

おわりに

SKKは便利だし,SandSを駆使して快適なPCライフを送ろう。