Skip to content

Bug: deflocalkeys-winiov2 keys not recognized correctly in defsrc with winiov2 backend #1870

@imitombo

Description

@imitombo

Requirements

Describe the bug

Describe the bug
deflocalkeys-winiov2 defined keycodes (Y=220, B=219, A=192,S=221) conflict/duplicate in defsrc, preventing correct transparent (_) output. Want to avoid JIS keyboard keycode duplication while maintaining distinct physical key behavior.

Relevant kanata config

(defcfg
  process-unmapped-keys no
)

(deflocalkeys-winiov2
;; JIS keyboard keycord
;; https://www.toptal.com/developers/keycode
Y 220 ;;JIS \(|)
B 219 ;;JIS [({)
A 192 ;;JIS @(`) 
S 221 ;;JIS ](})
)

(defsrc
Y
B
A
S
)

(deflayer base
_ ;;KEY_BACKSLASH (220)
_ ;;KEY_RIGHTBRACE (221)
_ ;;KEY_LEFTBRACE (219)
_ ;;KEY_BACKSLASH (220)
;; JIS zenkaku/hankaku →KEY_GRAVE (192)
)

To Reproduce

kanata_windows_tty_winIOv2_x64.exe -c config.kbd --debug
pressing Y/B/A/S keys
Y: Expected 220 → Actual KEY_BACKSLASH (220)
B: Expected 219 → Actual KEY_RIGHTBRACE (221)
A: Expected 192 → Actual KEY_LEFTBRACE (219)
S: Expected 221 → Actual KEY_BACKSLASH (220) DUPLICATE
zenkaku/hankaku: → KEY_GRAVE (192) UNMAPPED

Expected behavior

I want the transparent (_) layer to output exactly the keycodes specified in deflocalkeys-winiov2 (Y=220, B=219, A=192,S=221) without any modification, matching the Windows native behavior for these JIS keyboard positions.
Or I want to avoid duplicate keycodes.

Kanata version

kanata v1.10.0

Debug logs

14:03:07.2407 [INFO] kanata v1.10.0 starting
14:03:07.2412 [INFO] using LLHOOK+SendInput for keyboard IO
14:03:07.2429 [DEBUG] (1) kanata_parser::cfg: custom mapping: Y 220
14:03:07.2447 [DEBUG] (1) kanata_parser::cfg: custom mapping: B 219
14:03:07.2449 [DEBUG] (1) kanata_parser::cfg: custom mapping: A 192
14:03:07.2450 [DEBUG] (1) kanata_parser::cfg: custom mapping: S 221
14:03:07.2452 [INFO] process unmapped keys: false
14:03:07.2454 [DEBUG] (1) kanata_parser::cfg::alloc: freeing allocations of length 0
14:03:07.2455 [DEBUG] (1) kanata_parser::cfg::alloc: sref type: kanata_keyberon::action::Action<', &&[&kanata_parser::custom_action::CustomAction]>, ptr:0x19e022ea7b0 sz:16
14:03:07.2457 [DEBUG] (1) kanata_parser::cfg::alloc: sref type: kanata_keyberon::action::Action<'
, &&[&kanata_parser::custom_action::CustomAction]>, ptr:0x19e022ea850 sz:16
14:03:07.2458 [DEBUG] (1) kanata_parser::cfg::alloc: sref type: kanata_keyberon::action::Action<', &&[&kanata_parser::custom_action::CustomAction]>, ptr:0x19e022eaa70 sz:16
14:03:07.2460 [DEBUG] (1) kanata_parser::cfg::alloc: sref type: kanata_keyberon::action::Action<'
, &&[&kanata_parser::custom_action::CustomAction]>, ptr:0x19e022eaad0 sz:16
14:03:07.2461 [DEBUG] (1) kanata_parser::cfg::alloc: bref_slice type: [[kanata_keyberon::action::Action<', &&[&kanata_parser::custom_action::CustomAction]>; 767]; 2], ptr:0x19e022fa650 sz:24544
14:03:07.2463 [DEBUG] (1) kanata_parser::cfg::alloc: sref type: [kanata_keyberon::action::Action<'
, &&[&kanata_parser::custom_action::CustomAction]>; 767], ptr:0x19e02300640 sz:12272
14:03:07.2464 [INFO] config file is valid
14:03:07.2466 [INFO] Asking Windows to improve timer precision
14:03:07.2467 [INFO] Asking Windows to increase process priority
14:03:07.2470 [DEBUG] (1) kanata_state_machine::kanata::output_logic::zippychord: zchd reset state
14:03:07.2471 [DEBUG] (1) kanata_state_machine::kanata::output_logic::zippychord: zchd soft reset state
14:03:07.2472 [DEBUG] (1) kanata_state_machine::kanata::output_logic::zippychord: zchd clear historical data
14:03:07.2473 [INFO] Sleeping for 2s. Please release all keys and don't press additional ones. Run kanata with --help to see how understand more and how to disable this sleep.
14:03:09.2480 [INFO] entering the processing loop
14:03:09.2490 [INFO] No mouse inputs were in defsrc on startup. Not activating mouse hook.
14:03:09.2518 [INFO] Init: catching only releases and sending immediately
14:03:10.0748 [INFO] Starting kanata proper
14:03:10.0757 [INFO] You may forcefully exit kanata by pressing lctl+spc+esc at any time. These keys refer to defsrc input, meaning BEFORE kanata remaps keys.
14:03:29.3682 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_BACKSLASH (220), value: Press }
14:03:29.3706 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_BACKSLASH (220), value: Press }
14:03:29.3715 [DEBUG] (2) kanata_state_machine::kanata: key press Bslash
14:03:29.4473 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_BACKSLASH (220), value: Release }
14:03:29.4485 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_BACKSLASH (220), value: Release }
14:03:29.4509 [DEBUG] (2) kanata_state_machine::kanata: key release Bslash
14:03:30.3755 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_RIGHTBRACE (221), value: Press }
14:03:30.3762 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_RIGHTBRACE (221), value: Press }
14:03:30.3768 [DEBUG] (2) kanata_state_machine::kanata: key press RBracket
14:03:30.4491 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_RIGHTBRACE (221), value: Release }
14:03:30.4516 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_RIGHTBRACE (221), value: Release }
14:03:30.4537 [DEBUG] (2) kanata_state_machine::kanata: key release RBracket
14:03:30.9526 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTBRACE (219), value: Press }
14:03:30.9558 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_LEFTBRACE (219), value: Press }
14:03:30.9581 [DEBUG] (2) kanata_state_machine::kanata: key press LBracket
14:03:31.0312 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_LEFTBRACE (219), value: Release }
14:03:31.0319 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_LEFTBRACE (219), value: Release }
14:03:31.0329 [DEBUG] (2) kanata_state_machine::kanata: key release LBracket
14:03:32.6472 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_BACKSLASH (220), value: Press }
14:03:32.6481 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_BACKSLASH (220), value: Press }
14:03:32.6509 [DEBUG] (2) kanata_state_machine::kanata: key press Bslash
14:03:32.7193 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_BACKSLASH (220), value: Release }
14:03:32.7213 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_BACKSLASH (220), value: Release }
14:03:32.7217 [DEBUG] (2) kanata_state_machine::kanata: key release Bslash
14:03:39.5273 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_GRAVE (192), value: Release }
14:03:39.5279 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_GRAVE (192), value: Press }
14:03:39.5293 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_GRAVE (192), value: Release }
14:03:39.5296 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_GRAVE (192), value: Press }
14:03:39.5298 [DEBUG] (2) kanata_state_machine::kanata: key press Grave
14:03:39.5300 [DEBUG] (1) kanata_state_machine::kanata::windows::llhook: event loop: KeyEvent { code: KEY_GRAVE (192), value: Release }
14:03:39.5313 [DEBUG] (2) kanata_state_machine::kanata: process recv ev KeyEvent { code: KEY_GRAVE (192), value: Release }
14:03:39.5315 [DEBUG] (2) kanata_state_machine::kanata: key release Grave

Operating system and I/O mechanism

Windows 11 Japanese environment, winiov2 backend, JIS keyboard layout

Additional context

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingwindowsIssue pertains to Windows only

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions