お雑煮研究会

好きな焼肉は魚

ghostty v1.2.0 以上でキーバインドを設定する場合 JIS 配列環境では注意が必要

TL; DR

主に @ ; : [ ] ^ キーを含む keybind を設定する際は、この記事に書いてあることを確認してから設定することを推奨する。

特に [ ] はデフォルトでタブ / ペイン移動のキーにバインドされているため、タブやペインの移動が動かなくて困っている場合はおそらく v1.2.0 での変更が影響している。

タブ / ペイン移動についてはこのような設定を書けば今までのデフォルト設定と同じ挙動で利用できる。

github.com

何に注意する必要があるのか

Ghostty 1.2.0 の key binding rework では、key bind の設定を W3CKeyboardEvent.code に基づいて行うような変更が行われた。
(以下、本記事では W3C KeyboardEvent Code と表記する)

ghostty.org

www.w3.org

これはキーボード上の物理的な位置に基づいてユーザーが押下したキーを特定するための値で、キーボード配列に依存せず US ANSI 配列を基準とした一意な値を返すように実装するように求められている。

このため US 配列以外のキーボードでは、キーによって OS が解釈して入力する文字と W3C KeyboardEvent Code が異なる場合がある。 JIS 配列では主に @ ; : [ ] ^ キーがこれに当てはまる。

たとえば、JIS 配列の ] キーの位置は US 配列だと \ キーに相当するため W3C KeyboardEvent Code は Backslash となる。

Key.js ウェブツールのスクリーンショット。]キーを押した結果、JavaScript の keydown イベント情報が表示されている。e.key は ]、e.code は Backslash、e.which と e.keyCode は 221。
W3C KeyboardEvent Code は https://keyjs.deve.code で簡単に確認できる

つまり Ghostty が W3C KeyboardEvent Code ベースで key bind を処理するようになった結果、US 配列以外のキーボードでは一部キーの解釈が変わってしまったので、この不一致を念頭に置いてキーバインドを設定する必要がある。

どうすればよいか

OS が解釈して入力する文字と W3C KeyboardEvent Code が異なるキーを含むキーバインドに対して、今まで利用していた物理キーに対応する W3C KeyboardEvent Code を利用したバインド設定を書き直せばよい。 修正する際には https://keyjs.dev が役立つだろう。

参考までに、タブ / ペイン移動についてはこのような設定を書けば今までのデフォルト設定と同じ挙動で利用できる。

github.com

おわり

おわり