## 経緯 左小指の負担を少しでも減らすため、スペースの2つ右のキーを『Shift』にしたい。 ![[Pasted image 20231031220859.png]] しかし、今はここの『ESC』を割り当てており、それを上書きしてしまうと[[Vim]]をはじめとしたモードを持つツールで不便になってしまう。そのため、はじめは『Shift』を1つ右の『Opt Alt R』に割り当てていたが、右親指を結構曲げる必要があるためあまり望ましくない。 一方、以下の特性があることに気づいた。 - 『Shift』は単体で押すことがほぼない - [[AutoHotkeyの押しっぱなし問題]]から復帰するときくらい - 『ESC』は他のキーと同時押しすることがほぼない なので、以下の戦略が可能になる。 - 『Shift』を単体で押すと『ESC』になる - 『Shift』を他のキーと同時押しすると通常の挙動になる [[🦉Spinal reflex bindings template]]で『Ctrl』に対して似たようなことをやったことがあるので、できそうな気がしている。 ## 調査 [[🦉Spinal reflex bindings template]]で『Ctrl』の実装を見てみる。 ```autohotkey $Ctrl:: if (isSecondKey()) { MoveCenterInActiveWindow() } else { MouseGetPos, , , hWindow WinActivate, ahk_id %hWindow% FlashWindow() } return ``` 普通に行けそう。ちなみに『ESC』もある。 ```autohotkey $ESC:: send {ESC} setIME(false) setMode(_MODE.NORMAL) return ``` [[AutoHotkey]]としては、`$ESC`と同じ実装を『Ctrl』単押しに対して行えば良さそう。 ```autohotkey $Shift:: ; 『ESC』と同じ send {ESC} setIME(false) setMode(_MODE.NORMAL) return ``` ## 欠点 設定前は『ESC』がkey down時に発動したが、設定後は『ESC』がkey up時に発動するようになってしまった。同時押し判定待ちなのでそれはそう。 一件大したことがないように見えるが、これが意味する違いは大きい。[[Vim]]のキーバインドを用いる操作では、『ESC』と[[ノーマルモード]]のコマンドを連続して打つことが多く、後に打ったコマンドが『Shift』との同時押しとみなされてしまう。これはスピードが求められる文章入力時には致命的なラグだ。 ==最終的に、このキーマップは断念した。==