クリック対応 SandS を諦めた

こないだ 2ch の mayu スレで 月は空き地でいっぱい | 繭tips 第3回 というのを知って試してみたけど、完全に望んだ動作はさせられなかったという話。

やりたかったのは:

  • Space をふつーに押すと Space 入力
  • Space を押したまま他のキーを押すと、S-<キー>
  • Space を押したままクリックすると、S-クリック
  • Space 押しっぱなしにして放すと無視

月は空き地でいっぱい | 繭tips 第3回 そのままだと

  • def subst S- = ... の代用定義が反映されなかった
  • Space を押したままで、def subst S- したキーを押すと Shift が解除されてしまう

なので、なにか考えることに。

なにはともあれ &VK で Shift を押したり放したりすればいいようだというのはわかった。S- の代用定義を生かすには mod Shift += Space しとかなきゃならんようだというのもわかった。んで、R-Space で keymap SandS に入って、&VK(D-Shift)。Repeat してるあいだはその状態で、U-Space で &VK(U-Shift) する作戦。

mod Shift += !!!Space

keymap SandS : Global
   event prefixed = &VK(D-Shift)
   key R-*Space = &Prefix(SandS)
   key U-*Space = &VK(U-Shift)   # これを拾ってくれない

keymap Global
   key R-*Space = &Prefix(SandS)
   key U-*Space = Space

これだと、どうしてなのかわよくわからんのだが、Space を押しっぱなしにして他のキーを押さずに(マウスクリックは mayu には見えないんで、クリックしても押されたことにはならない)Space を放しても U-*Space を拾ってくれない。なので &VK(U-Shift) が実行されず、Shift 押されっぱなし状態になってしまう。event after-key-up でも同じだった。

どうも Log 見てみたりした感じだと、Repeatable OneShot Modifier は Repeat しただけとか、Modifier として機能した後でそのキーの U- は発生しなくなるっぽい

3時間ほど色々やってみたが、結局 Repeatable な OneShot Modifier を Repeat だけさせた後で &VK(U-Shift) させる方法は見つけられず、クリック対応を諦めた。