Leader Key
さて、前回はキーバインドを落とし込んだわけですが、今回はLeader
キーです。
A leader key is a a modal modifier key. If leader is specified in the configuration then pressing that key combination will enable a virtual LEADER modifier.
Leaderキーは、モーダルモディファイアキーです。Leaderキーが設定されている場合、そのキーの組み合わせを押すと、仮想的なリーダーモディファイアが有効になります。
Leader
キーという概念はWezTerm
特有のものではく、tmux
やvim
など古参のソフトウェアでも用いられています。
WezTerm でのデフォルトはCtrl-aです。 1
ということで、わたしはもうそのままCtrl-aで設定しています。 デフォルトのままでいいやー、って場合は書かなくてもOKです。
vim
やtmux
等を使用する場合は、これとバッティングしていないかチェックしときましょう。
macOSでUS配列なのに日本語IME使うような環境 2 ではCtrl-Spaceが入力ソースの切り替えに割り当てられています。
OSのショートカットキー等も含め、あらかじめ確認しておきましょう。
他のと被っちゃうと困っちゃいます。
timeout_milliseconds
これは前項で挙げたマニュアルの文章を引用しますが、
LEADER
stays active until a keypress is registered (whether it matches a key binding or not),
or until it has been active for the duration specified by timeout_milliseconds
, at which point it will automatically cancel itself.
LEADERはキーが登録されるまで(キーバインディングにマッチするかどうかに関わらず)、 あるいはtimeout_millisecondsで指定された時間だけアクティブになり、その時点で自動的にキャンセルされます。
Leader
キーが一回押されたら、とりあえず何か次のキーが押されるか、指定ミリ秒経過するまでは待つよ〜。ってことですね。
例えば、
...と、やる場合、CTRL-a → uと順番にキーを押す必要があるわけですが、 デフォルトでは、この操作が 1000ミリ秒( = 1秒)以内で完結しないといけないわけです。
1秒を長いと見るか短いと見るかは人それぞれなので、これをお好みに調整できるのが、前項のtimeout_milliseconds
です。
で、もう一回キーバインド
さて、皆さんはお気づきだろうか…。
デフォルトのキー設定ではLeader
キーなんて一切使われていないことに…😱
例えばこれ。
{ key = '"', mods = 'ALT|CTRL', action = act.SplitVertical{ domain = 'CurrentPaneDomain' } },
{ key = '%', mods = 'ALT|CTRL', action = act.SplitHorizontal{ domain = 'CurrentPaneDomain' } },
ALT|CTRL
はAltキーとCtrlキーを同時押しです。
さらに"
を押せと言われればShiftキーを押しながら'です。3
それだったら、下のようにしたほうが楽じゃないですか?
{ key = '"', mods = 'LEADER', action = act.SplitVertical { domain = 'CurrentPaneDomain' } },
{ key = '%', mods = 'LEADER', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } },
tmux
と同じキーバインドですね。ペイン操作もWezTerm
に一任しちゃいます。
tmux
使ってないのに同等の機能が実現できちゃうんですよ⁉️ すごくないです❓☺️
もしどこかでtmux
を使うことがあっても同一操作なので迷わず使えます、たぶん❗
さらにタイムリーなことに、Copy Mode
の各種jump
機能も実装されました。
update docs for new copy-mode functions
tmux
のキーバインドを完全に真似るのであれば、CopyMode
に入るキーバインドはこれですね。
{ key = '[', mods = 'LEADER', action = act.ActivateCopyMode },
jump
機能はデフォルトのままでtmux
と同じキーバインドが割り当てられているようなので、そのままいけます。
4
ということで、キーバインドは色々試してみてほしいです。
A KeyAssignment represents a pre-defined function that can be applied to control the Window, Tab, Pane state typically when a key or mouse event is triggered.
KeyAssignment は、キーまたはマウス イベントがトリガーされたときに、通常 Window、Tab、Pane の状態を制御するために適用できる事前定義された関数を表します。