今回はyamyを使って モディファイヤ(ControlやShift等)も使ったキー割り当ての方法と、 モディファイヤ自体の変更方法について。
モディファイヤを使ったキー割り当て
Ref: 窓使いの憂鬱のマニュアルの モディファイヤキー割り当ての変更
例えばControl+aと押した時にbと出力させたい場合は
key C-a = b
の様に、キーの前にC-、A-、S-、W-とつけるとそれぞれ
Control、Alt、Shift、Windowsキーと一緒に押す、
と言う意味になります。
(Windowsキーは上記マニュアルにはありませんがyamyの104/106.mayuでは定義されています。)
複数与える事も可能でC-A-aとすればControl+Alt+aと押す意味になります。
逆に、Controlは押されてない状態でaを押す、とする場合には~C-aと~をモディファイヤの前に付けます。
さらに、押されていても押されていなくても同様の割り当てを行いたいときは*をつけます。
key C-a = b # Ctrl+a -> b, a -> a
key ~C-a = b # Ctrl+a -> Ctrl-a, a -> b
key *C-a = b # Ctrl+a -> b, a -> b
明示的に書かれていないモディファイヤについては、
デフォルトで定義されているものが使われて、
上記の4つに関しては~C-~A-~S-~W-と全て押されていない時に限り、
になります。
その他のモディファイヤについては上記マニュアルを参照してください。
(他にもNumLock状態、CapsLock状態等が扱えます。)
もし、明示的に書くモディファイヤ以外はどのような状態でも良い、というのであれば、
key C-a = b # Ctrl+a -> b, a -> a, Ctrl+Shift+a -> Ctrl+Shift+a
key C-*a = b # Ctrl+a -> b, a -> a, Ctrl+Shift+a -> b
の様に、*をキーの直前に持ってくることで
明示されたControl以外の状態は何でも良いことにできます。
また、押されたモディファイヤをそのまま割り当てキーにも伝えたいときは
key S-*C-a = S-*C-b
# a->a, Ctrl+a -> Ctrl+a, Shift+Ctrl+a -> Shift+Ctrl+b
# Shift+a -> Shift+b, Alt+Shift+a -> Alt+Shit+a
と言った感じ*を両辺の同じモディファイヤに付けることで、そのモディファイヤをそのまま伝える事が出来ます。
さらに
key C-*a = C-*b
# a->a, Ctrl+a -> Ctrl+b, Shift+Ctrl+a -> Shift+Ctrl+b
# Shift+a -> Shift+a, Alt+Shift+a -> Alt+Shit+a
の様に、両辺のキー自体に*をつけると、明示されたモディファイヤ以外全てがそのまま伝えられます。
従って、
key *a = *b
とすれば、aは完全にbと同じ働きをするようになります。
モディファイヤの変更
モディファイヤの変更については窓使いの憂鬱の上記マニュアル に詳しくあるので、取り敢えず自分で使っている設定を
# Thumb Shift
#mod shift += !!!Space
# CapsLock to Control
mod Control += CapsLock
key *CapsLock = *LControl
mod Control += E0CapsLock
key *E0CapsLock = *LControl
# Left Control to CapsLock
#key *LCtrl = $CapsLock
# NumLock to CapsLock
key *NumLock = $CapsLock
# Apps to CapsLock
key *Apps = $CapsLock
# Right Windows Button to CapsLock
key *RWin = $CapsLock
# Left Windows Button to CapsLock
#key LWin =
#key *LWin = $CapsLock
はずせないのはCapsLockをControlとして使っているところです。
Controlは頻繁に使う上、CapsLockはまず使いません。
Controlの元の位置は、どうやっても普通にキーボードを売っていたら小指でも押せないと思うのですが…
(ちょっと手を動かしてでも直ぐに小指がおかしくなりそうに…)
まず、
mod Control += CapsLock
で、CapsLockキーをControlモディファイヤとして使える様に追加登録しています。
ただ、このままだと、CapsLock自体はそのキーとしての機能を持っているので、
CapsLock+aと押すと、CapsLockを押した上で、Control+aを押した、
と解釈されてしまい、CapsLockの呪いにかかります。
そこでキー自体もConrolに変更しておきます。
上記にあるように*を両方に使って
key *CapsLock = *LControl
E0CapsLockは前回あったNLSキーの問題で、escapeNLSKeys=1
と設定した場合に設定されるキーです
(逆にこの時、CapsLockの方はキーに割り当てられてないので、
自分の現在の設定ではE0CapsLockだけが意味をなしてます)。
もしくは最初に
mod Control += !CapsLock
とすれば、真のモディファイヤと呼ばれ、CapsLockはモディファイヤ
としての働き以外を一切しなくなるので、Controlを押した時、
といったイベントを使うソフト等がない場合にはこれでもOKです。
その他の設定ですが、最初にコメントアウトしてあるのは 親指シフトをしたい場合で、
mod shift += !!!Space
とすると、まずはSpaceにShiftとしてのモディファイヤ機能を与えるわけですが、
!!または!!!を加えることでOne Shotモディファイヤと呼ばれる機能を持ち、
Space押して直ぐに離した場合はSpaceそのものを、
Space+aを押すと大文字Aを出力します。
!!と!!!の違いは、Spaceを長押しした時、!!の場合は
Spaceが離されるか他のキーが押されるのを待ち続けますが、
!!!の場合は、一定時間押し続けると普通にSpaceを押した時のように
Spaceが繰り返し入力されていく様に出来ます。
Space自体は普通に使いたいときは!!!を使ったほうがより自然に使えるかと。
後は、適当に余り使わないボタンのアプリケーションキー (Apps)

をCapsLockに当てたり、NumLockやRWinなども当てたりしてますが、
とりあえず、と言う感じで。