kanata icon indicating copy to clipboard operation
kanata copied to clipboard

shift key stuck after mapping triggered including insert key

Open jmlucjav opened this issue 2 years ago • 4 comments

Requirements

  • [X] I've searched issues to see if this has not been reported before.

Describe the bug

Hi the shift gets set after I use a mapping in a layer I defined. I am not sure what is wrong, cannot make sense of the debug output...

Relevant kanata config

(defsrc
 f1      f2      f3      f4      f5      f6      f7      f8      f9      f10     f11     f12       
 grv    1       2       3       4       5       6       7       8       9       0       -       =       bspc
 tab    q       w       e       r       t       y       u       i       o       p       [       ]       \
 caps   a       s       d       f       g       h       j       k       l       ;       '       ret
 lsft   z       x       c       v       b       n       m       ,       .       /       rsft
 lctl  lmet   lalt                     spc                     ralt    rmet    apps     rctl
 )

(deflayer default
 _     _       _      @f4      _       _       _       _       _       _       _       _
 _     _       _       _       _       _       _       _       _       _       _       _       _       _
 _     _       _       _       _       _       _       _       _       _       _       _       _       _
@caps  _       _       _       _       _       _       _       _       _       _       _       _   
 _     _       _       _       _       _       _       _       _       _       _       _    
 _     _       _                      @spc                     _    @w_rmet @w_apps  @rctl
 )

(deflayer spacemod
 _     _       _       _       _       _       _       _       _       _       _       _
 _     _       _       _       _       _       _       _       _       _       _       _       _      lrld
 _     _     C-rght    _      pgup   C-home   C-ins   C-z     home    end    S-ins     _       _       _
caps   _       _      C-x     pgdn   C-end    left   down      up     rght     _       _       _
 _     _      del      _       _     C-left    _       _       _      C-y      _       _
 _     _       _                       _                       _       _      apps     _
 )

To Reproduce

  1. with my config above (have more layers but not relevant I think)
  2. use Space-p with is mapped to S-ins (shift-insert) in the spacemod layer
  3. the shit-insert (paste) is done, but Shift is on, and I would expect it to be off, this messes all my workflow from this point on

Expected behavior

Shitf is off after the action has finished (paste)

Kanata version

kanata v1.5.0-prerelease-1

Debug logs

2023-10-08T12:02:44.5957802+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_SPACE, value: Press }
2023-10-08T12:02:44.5969958+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_SPACE, value: Press }
2023-10-08T12:02:44.7975872+02:00 [INFO] Entered layer:
(deflayer spacemod
         _       _       _       _       _       _       _       _       _       _       _       _
   _     _       _       _       _       _       _       _       _       _       _       _       _      lrld
   _     _     C-rght    _      pgup   C-home   C-ins   C-z     home    end    S-ins     _       _       _
 caps    _       _      C-x     pgdn   C-end    left   down      up     rght     _       _       _
   _     _      del      _       _     C-left    _       _       _      C-y      _       _
   _     _       _                       _                       _       _      apps     _
)
2023-10-08T12:02:44.8037858+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_P, value: Press }
2023-10-08T12:02:44.8055744+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_P, value: Press }
2023-10-08T12:02:44.8057336+02:00 [DEBUG] (2) kanata::kanata: key press     LShift
2023-10-08T12:02:44.8076723+02:00 [DEBUG] (2) kanata::kanata: key press     Insert
2023-10-08T12:02:44.8080443+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8094646+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8838026+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.8841244+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_P, value: Release }
2023-10-08T12:02:44.8850702+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.8854079+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_P, value: Release }
2023-10-08T12:02:44.8856957+02:00 [DEBUG] (2) kanata::kanata: key release   Insert
2023-10-08T12:02:44.8860615+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8867148+02:00 [DEBUG] (2) kanata::kanata::windows: lsft-arrowkey workaround: releasing LShift at its typical coordinate
2023-10-08T12:02:44.8868529+02:00 [DEBUG] (2) kanata::kanata::windows: releasing LShift from pressed keys
2023-10-08T12:02:44.8870362+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.887323+02:00 [DEBUG] (2) kanata::kanata: key release   LShift
2023-10-08T12:02:44.8874741+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8888775+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.8890157+02:00 [DEBUG] (2) kanata::kanata: key press     LShift
2023-10-08T12:02:45.0357525+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_SPACE, value: Release }
2023-10-08T12:02:45.0367611+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_SPACE, value: Release }
2023-10-08T12:02:45.0369204+02:00 [INFO] Entered layer:

(deflayer default
         _       _       _      @f4      _       _       _       _       _       _       _       _
   _     _       _       _       _       _       _       _       _       _       _       _       _       _
   _     _       _       _       _       _       _       _       _       _       _       _       _       _
 @caps   _       _       _       _       _       _       _       _       _       _       _       _
   _     _       _       _       _       _       _       _       _       _       _       _
   _     _       _                      @spc                     _    @w_rmet @w_apps  @rctl
)

Operating system

win10

Additional context

2023-10-08T12:32:37.9290345+02:00 [INFO] kanata v1.5.0-prerelease-1 starting
2023-10-08T12:32:37.9291603+02:00 [INFO] using LLHOOK+SendInput for keyboard IO
2023-10-08T12:32:37.9300306+02:00 [INFO] process unmapped keys: false
2023-10-08T12:32:37.9302881+02:00 [WARN] DANGER! cmd action is enabled.
2023-10-08T12:32:37.9320919+02:00 [INFO] config parsed
2023-10-08T12:32:37.9322038+02:00 [INFO] Asking Windows to improve timer precision
2023-10-08T12:32:37.9323704+02:00 [INFO] Asking Windows to increase process priority
2023-10-08T12:32:37.9325565+02:00 [INFO] Sleeping for 2s. Please release all keys and don't press additional ones.
2023-10-08T12:32:39.933412+02:00 [INFO] entering the processing loop
2023-10-08T12:32:39.9339522+02:00 [INFO] Init: catching only releases and sending immediately
2023-10-08T12:32:40.8084565+02:00 [INFO] Starting kanata proper

jmlucjav avatar Oct 08 '23 10:10 jmlucjav

This is mostly the fault of some arcane Windows weirdness. Snipping the relevant logs:

2023-10-08T12:02:44.8037858+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_P, value: Press }
2023-10-08T12:02:44.8854079+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_P, value: Release }
2023-10-08T12:02:44.8856957+02:00 [DEBUG] (2) kanata::kanata: key release   Insert
2023-10-08T12:02:44.8860615+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8867148+02:00 [DEBUG] (2) kanata::kanata::windows: lsft-arrowkey workaround: releasing LShift at its typical coordinate
2023-10-08T12:02:44.8868529+02:00 [DEBUG] (2) kanata::kanata::windows: releasing LShift from pressed keys
2023-10-08T12:02:44.8870362+02:00 [DEBUG] (1) kanata::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.887323+02:00 [DEBUG] (2) kanata::kanata: key release   LShift
2023-10-08T12:02:44.8874741+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Release }
2023-10-08T12:02:44.8888775+02:00 [DEBUG] (2) kanata::kanata: process recv ev KeyEvent { code: KEY_LEFTSHIFT, value: Press }
2023-10-08T12:02:44.8890157+02:00 [DEBUG] (2) kanata::kanata: key press     LShift

The llhook: event loop logs show events that Kanata receives from Windows. key press and key release are events sent out to Windows. Can see that Kanata sends releases for insert and shift to Windows. There's also logs showing an attempted workaround for other arcane Windows shift weirdness: lsft+arrowkey workaround.

The problem at the end with the event loop logs is that Windows itself has sent a pair of release+press of Shift to Kanata, in that order. So Kanata itself thinks the key is staying pressed.

You could try figuring out some workaround with release-key or something like that.

jtroo avatar Oct 08 '23 21:10 jtroo

Might be worth mentioning that interception has fewer weird Windows issues but has its own different issues.

jtroo avatar Oct 08 '23 21:10 jtroo

yeah I considered using interception but that issue mentioned sounds very inconvenient...

how would you try to hack this with release-key, something like invoking this alias on Space-p?

j_paste (multi (release-key lsft) S-ins)

not working at all, now the paste action (shift-insert) is not even done...

thanks for the help!

jmlucjav avatar Oct 09 '23 20:10 jmlucjav

I see the same issue although I notice that it only happens when the num lock is on

matcls avatar Nov 25 '23 21:11 matcls

The same is happening to me I change the layout holding pressed alt and then I use shift + ctrl + number in order to move apps between desktops in glazewm In my case it seemingly unstucks if I hold pressed the key mapped as shift

AB10110F avatar Nov 18 '24 18:11 AB10110F

Does using the winiov2 variant help?

jtroo avatar Nov 18 '24 19:11 jtroo

Does using the winiov2 variant help?

I didn't know about that, I installed it with scoop so I didn't read the release notes. It seems to be working with that version thanks.

AB10110F avatar Nov 23 '24 03:11 AB10110F