SandS
世の中には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ライフを送ろう。