blog.euxn.me

Windowsで実用的なSandS環境を構築(AutoHotKey)

2016-01-11 Mon.

結論

ahk ファイル

yutaszk/win-sands-ahkに置いてあります。 スクリプトまたはバイナリをダウンロードしてお使いください。

手順

  1. レジストリをいじって Space と LShift を入れ替える(以下では KeySwap を使用)
  2. yutaszk/win-sands-ahkから ahk スクリプト/バイナリファイルをダウンロードし実行する

背景

SandS とは

Space and Shift: Space キーに Shift を割り当て、ワンショット(=他のキーを操作せずにキーを話す)の場合は Space を入力することの総称。

Windows における SandS の問題

Mac OS X では Karabiner 等で簡単に SandS(とキーリマップ)を設定することができるが、Windows ではそのようなもののベストプラクティスがないように見える。 (DvorakJ 等のソフトでもできるが、入力受付時間の都合などで誤入力が増えてしまいつらい) 自分で実装するためにキーリマップソフトのyamyAutoHotKeykeyhacがありますが、これらで実装した公開コードをそのまま実行しても受付時間による誤入力が発生してしまうものが多いのが問題です。 気をつければ使えるんですが、気を使うのが疲れるし、そもそも Mac では気にしなくても問題ないので、つらいなーという状態でした。

行っている処理

Windows で HHKB Professional2 を Mac 風に使うための設定を参考にスクリプトを記述しました。 こちらは SandS についてではないのですが、ここに書いてあるワンショットの処理を参考にしています。

今まで試した公開スクリプトはスペースキーを押してから待ち受けし、入力がなかった場合はスペースを入力といった処理のため誤入力の原因となっていました。 今回は、Space キーと Shift キーをそもそも入れ替えてしまい、スペースキーを話したタイミングで入力判定を行い、入力がない(=直前の入力キーが Shift 自身である)場合はスペースを入力するという処理を行っています。

注意点

一部 Space を含むショートカットが動作しなくなる可能性があるためご注意ください こちらでは「Win+Space の挙動がおかしい」点を現在確認しています。 また、複数キーでのショートカットに Shift を含む場合、Shift を先に押さないと正常に動作しない仕様になっています。 Shift としてのショートカットと Space としてのショートカットの兼ね合いになっているため、難しいところですがご了承お願いします。

実行手順

1. キー入れ替え

Space と Shift を入れ替えるために、レジストリを書き換えます。 直接触りたくないので今回はKeySwapを使用しました。 変更後はログオフが必要になります。

2. ダウンロード

yutaszk/win-sands-ahkに script ファイルを配置しています。 コンパイル済の実行ファイルはrelease v1.0より入手できます。

3. AutoHotKey の実行

AutoHotKey スクリプト、もしくはコンパイル済 exe ファイルを実行します。 AutoHotKey をインストールしていない場合は exe ファイルをお使いください。

コンパイル済ファイルをスタートアップに配置すると、PC 起動時に毎回実行されます。


以上で SandS は動作するようになりましたが、Space を含むショートカットで誤動作が発生する場合がありますので、ご了承ください。 不具合等ありましたらご連絡頂けますと幸いです。

Other Works
2024-12-01 Sun.
OpenAPI Spec を出力できる DSL、TypeSpec の実践例
- ドワンゴ教育サービス開発者ブログ

2024-11-16 Sat.
型付き API リクエストを実現するいくつかの手法とその選択
- TSKaigi Kansai 2024

2024-09-10 Tue.
corepack が標準同梱じゃなくなる未来、 mise でパッケージマネージャを管理する
- Zenn

2024-09-10 Tue.
言語環境の管理は *env や *vm を超えて、 mise へ
- Zenn

2024-06-28 Fri.
TypeSpec を使い倒してる
- Kyoto.js 22

2024-05-11 Sat.
Powerfully Typed TypeScript
- TSKaigi 2024

2024-05-10 Fri.
pnpm の node_modules を探検して理解しよう
- ドワンゴ教育サービス開発者ブログ

2024-03-17 Sun.
neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
- Zenn

2023-12-20 Wed.
レガシーブラウザ向けのビルドオプションを剪定する
- ドワンゴ教育サービス開発者ブログ

2023-05-26 Fri.
Next.js で dynamic import を使い Client だけで動かす Component を実現する
- Zenn

2023-05-02 Tue.
Node.js でファイル名から拡張子を取り除く/取り出すために path.parse を使う
- Zenn

2023-02-27 Mon.
WSL2 で外部からアクセス可能にするために bridge mode を有効にする
- Zenn

2023-01-26 Thu.
init.vim & dein から init.lua & lazy.nvim へ、シンプル設定で移行した
- Zenn

2023-01-13 Fri.
kindle の本をブクログ形式の csv でエクスポートする@2023初春
- Zenn

2023-01-10 Tue.
自宅サーバの移設に際して docker から nerdctl に移行した
- Zenn

2023-01-10 Tue.
自宅サーバを rootless に移行した際のトラブル対応
- Zenn

2021-11-11 Thu.
並列実行した Promise で throw されても全てハンドルしたいときの方法(allSettled, finally, etc...)
- Zenn