wez / wezterm

A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
https://wezfurlong.org/wezterm/
Other
17.86k stars 800 forks source link

Espanso doesn't work #3840

Closed dodalovicgran closed 9 months ago

dodalovicgran commented 1 year ago

What Operating System(s) are you seeing this problem on?

Linux X11

Which Wayland compositor or X11 Window manager(s) are you using?

No response

WezTerm version

➜ ~ wezterm -V zsh: command not found: wezterm

Did you try the latest nightly build to see if the issue is better (or worse!) than your current version?

No, and I'll explain why below

Describe the bug

When using https://espanso.org/ nothing happens, the expansions don't take place. On alacritty, for instance, it works fine.

To Reproduce

When using https://espanso.org/ nothing happens, the expansions don't take place. On alacrity, for instance, it works fine.

Configuration

not important, didn't work even with no config file initially

Expected Behavior

No response

Logs

No response

Anything else?

No response

kimat commented 1 year ago

Expansion works fine on my setup using espanso defaults:

$ wezterm --version
wezterm 20230408-112425-69ae8472

$ espanso --version
espanso 2.1.8
wez commented 1 year ago

Please run through https://wezfurlong.org/wezterm/troubleshooting.html#debugging-keyboard-related-issues and provide more information.

dodalovicgran commented 1 year ago

Espanso seem to lowercase what actually needs to be expanded. My use-case, i have a root password in espanso

- trigger: ":rp"
  replace: "aAbB"

when I do this in wezterm, it gets expanded as aabb. In other terminals it works fine. I'm not sure if this is an issue of wezterm or espanso, tbh

➜  ~ espanso --version
espanso 2.1.8
➜  ~ wezterm --version
zsh: command not found: wezterm

wezterm installed as flatpack @ Pop!_OS 22.04 LTS

kimat commented 1 year ago

I could reproduce this issue, espanso matches do indeed get expanded in lowercase only, when expanding them in wezterm.

wez commented 1 year ago

I'm not going to install espanso; I simply don't have the time. I would love to see some actual information from wezterm here; there's no version information and no debug output. Could someone please add that here?

dodalovicgran commented 1 year ago

Nothing got printed out that I could understand. Bunch of DEBUG statements, no ERROR or whatsoever. I understand that you're busy. I'll switch back to alacritty. Feel free to close, if you feel like.

Thanks

wez commented 1 year ago

The debug is for me to understand, rather than you. Without it, I have nothing to act upon. If you don't wish to bother, then let's close this. Otherwise, please add that information and re-open it.

dodalovicgran commented 1 year ago

wezterm-gui-log-336279.txt

stravid commented 1 year ago

I'm using Windows and have the same problem and narrowed down the circumstances. It only happens if I open WezTerm as administrator. But I'm uncertain if this is a problem with WezTerm. The same problem occurs if I'm using cmd.exe. Espanso correctly works in a normal cmd.exe instance. Once I open it as administrator it also stops working.

wezterm-gui.exe-log-20548.txt

wezterm --version
wezterm 20230408-112425-69ae8472

espansod --version
espanso 2.1.8
kimat commented 1 year ago

Here's another debug log: wezterm.log

This log was generated by doing:

  1. WEZTERM_LOG=debug wezterm 1>wezterm.log 2>&1
  2. typing :espanso in wezterm (which is configured to expand to Hi there! in espanso)
  3. wezterm was closed after espanso replaced the :espanso string in wezterm by hi there! instead of Hi there!
$ wezterm --version
wezterm 20230408-112425-69ae8472
$ espanso --version
espanso 2.1.8

espanso's config is the default one with the following match:

matches:
  # Simple text replacement
  - trigger: ":espanso"
    replace: "Hi there!"
AndydeCleyre commented 1 year ago
3. wezterm was closed after espanso replaced the `:espanso` string in wezterm by `hi there!` instead of `Hi there!`

Can you confirm that it's producing hi there!? Just because in my case it would be hi there1.

kimat commented 1 year ago

Can you confirm that it's producing hi there!? Just because in my case it would be hi there1.

@AndydeCleyre yes: espanso

AndydeCleyre commented 1 year ago

image

$ wezterm -e zsh -f &>wez.log  # in wezterm, type: :wez3840
`wez.log` ``` 12:36:34.412 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:34.412 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:34.412 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE 12:36:34.690 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:34.690 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:34.690 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char(':') mods=SHIFT 12:36:34.690 INFO wezterm_term::terminalstate::keyboard > key_down: sending ":", Char(':') SHIFT 12:36:34.819 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:34.819 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char(':') mods=SHIFT 12:36:35.056 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:35.057 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT 12:36:35.644 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(W), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(W), raw_code: 25, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:35.645 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('w'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(W), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(W), raw_code: 25, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:35.645 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('w') mods=NONE 12:36:35.645 INFO wezterm_term::terminalstate::keyboard > key_down: sending "w", Char('w') NONE 12:36:35.770 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('w'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(W), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(W), raw_code: 25, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:35.770 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('w') mods=NONE 12:36:35.972 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:35.972 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:35.972 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('e') mods=NONE 12:36:35.972 INFO wezterm_term::terminalstate::keyboard > key_down: sending "e", Char('e') NONE 12:36:36.072 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:36.072 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('e') mods=NONE 12:36:36.516 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Z), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Z), raw_code: 52, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:36.516 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('z'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Z), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Z), raw_code: 52, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:36.516 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('z') mods=NONE 12:36:36.516 INFO wezterm_term::terminalstate::keyboard > key_down: sending "z", Char('z') NONE 12:36:36.658 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('z'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Z), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Z), raw_code: 52, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:36.658 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('z') mods=NONE 12:36:37.246 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:37.246 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('3'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:37.246 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('3') mods=NONE 12:36:37.246 INFO wezterm_term::terminalstate::keyboard > key_down: sending "3", Char('3') NONE 12:36:37.381 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('3'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:37.381 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('3') mods=NONE 12:36:37.599 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:37.599 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('8'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:37.599 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('8') mods=NONE 12:36:37.599 INFO wezterm_term::terminalstate::keyboard > key_down: sending "8", Char('8') NONE 12:36:37.701 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('8'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:37.701 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('8') mods=NONE 12:36:38.032 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.032 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('4'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.032 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('4') mods=NONE 12:36:38.032 INFO wezterm_term::terminalstate::keyboard > key_down: sending "4", Char('4') NONE 12:36:38.138 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('4'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.138 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('4') mods=NONE 12:36:38.429 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.429 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.429 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('0') mods=NONE 12:36:38.429 INFO wezterm_term::terminalstate::keyboard > key_down: sending "0", Char('0') NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.432 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.432 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.432 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.432 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.433 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.433 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.433 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.433 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.433 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 12:36:38.434 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(S), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(S), raw_code: 39, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('s'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(S), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(S), raw_code: 39, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('s') mods=NONE 12:36:38.434 INFO wezterm_term::terminalstate::keyboard > key_down: sending "s", Char('s') NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('s'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(S), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(S), raw_code: 39, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('s') mods=NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Y), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Y), raw_code: 29, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('y'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Y), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Y), raw_code: 29, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('y') mods=NONE 12:36:38.434 INFO wezterm_term::terminalstate::keyboard > key_down: sending "y", Char('y') NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('y'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Y), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Y), raw_code: 29, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('y') mods=NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('m'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('m') mods=NONE 12:36:38.434 INFO wezterm_term::terminalstate::keyboard > key_down: sending "m", Char('m') NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('m'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('m') mods=NONE 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K1), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K1), raw_code: 10, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('1'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K1), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K1), raw_code: 10, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.434 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('1') mods=NONE 12:36:38.434 INFO wezterm_term::terminalstate::keyboard > key_down: sending "1", Char('1') NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('1'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K1), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K1), raw_code: 10, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('1') mods=NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K2), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K2), raw_code: 11, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('2'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K2), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K2), raw_code: 11, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('2') mods=NONE 12:36:38.435 INFO wezterm_term::terminalstate::keyboard > key_down: sending "2", Char('2') NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('2'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K2), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K2), raw_code: 11, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('2') mods=NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('3'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('3') mods=NONE 12:36:38.435 INFO wezterm_term::terminalstate::keyboard > key_down: sending "3", Char('3') NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('3'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K3), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K3), raw_code: 12, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('3') mods=NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('4'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('4') mods=NONE 12:36:38.435 INFO wezterm_term::terminalstate::keyboard > key_down: sending "4", Char('4') NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('4'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K4), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K4), raw_code: 13, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('4') mods=NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K5), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K5), raw_code: 14, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('5'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K5), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K5), raw_code: 14, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('5') mods=NONE 12:36:38.435 INFO wezterm_term::terminalstate::keyboard > key_down: sending "5", Char('5') NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('5'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K5), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K5), raw_code: 14, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('5') mods=NONE 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K6), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K6), raw_code: 15, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('6'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K6), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K6), raw_code: 15, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.435 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('6') mods=NONE 12:36:38.435 INFO wezterm_term::terminalstate::keyboard > key_down: sending "6", Char('6') NONE 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('6'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K6), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K6), raw_code: 15, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('6') mods=NONE 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K7), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K7), raw_code: 16, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('7'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K7), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K7), raw_code: 16, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('7') mods=NONE 12:36:38.436 INFO wezterm_term::terminalstate::keyboard > key_down: sending "7", Char('7') NONE 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('7'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K7), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K7), raw_code: 16, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('7') mods=NONE 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('8'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('8') mods=NONE 12:36:38.436 INFO wezterm_term::terminalstate::keyboard > key_down: sending "8", Char('8') NONE 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('8'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K8), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K8), raw_code: 17, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.436 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('8') mods=NONE 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K9), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K9), raw_code: 18, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('9'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K9), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K9), raw_code: 18, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('9') mods=NONE 12:36:38.437 INFO wezterm_term::terminalstate::keyboard > key_down: sending "9", Char('9') NONE 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('9'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K9), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K9), raw_code: 18, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('9') mods=NONE 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('0') mods=NONE 12:36:38.437 INFO wezterm_term::terminalstate::keyboard > key_down: sending "0", Char('0') NONE 12:36:38.437 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('0') mods=NONE 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Minus), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Minus), raw_code: 20, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('-'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Minus), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Minus), raw_code: 20, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('-') mods=NONE 12:36:38.438 INFO wezterm_term::terminalstate::keyboard > key_down: sending "-", Char('-') NONE 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('-'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Minus), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Minus), raw_code: 20, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('-') mods=NONE 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Equal), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Equal), raw_code: 21, repeat_count: 1, key_is_down: true, handled: Handled(false) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('='), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Equal), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Equal), raw_code: 21, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('=') mods=NONE 12:36:38.438 INFO wezterm_term::terminalstate::keyboard > key_down: sending "=", Char('=') NONE 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('='), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Equal), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Equal), raw_code: 21, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.438 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('=') mods=NONE 12:36:38.509 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 12:36:38.509 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('0') mods=NONE ```

OK, after more fiddling with espanso options, I found that it all seems to work ok if I set disable_x11_fast_inject: true in espanso's config. The docs say for that option:

NOTE: This is only relevant on Linux under X11 environments. Switch to a slower (but sometimes more supported) way of injecting key events based on XTestFakeKeyEvent instead of XSendEvent. From my experiements, disabling fast inject becomes particularly slow when using the Gnome desktop environment.

dodalovicgran commented 1 year ago

disable_x11_fast_inject: true

didn't help in my case :disappointed:

AndydeCleyre commented 1 year ago

Even with my config, I have now found issues with inputting Ŧ and Ł into wezterm (only) with espanso.

$ tail -n 4 ~/.config/espanso/match/chars.yml
  - trigger: ":ten"
    replace: Ŧ
  - trigger: ":lem"
    replace: Ł

:ten:

wez.log ```yaml 14:21:19.000 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:19.000 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:19.000 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE 14:21:19.258 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:19.258 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:19.258 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char(':') mods=SHIFT 14:21:19.258 INFO wezterm_term::terminalstate::keyboard > key_down: sending ":", Char(':') SHIFT 14:21:19.371 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:19.371 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char(':') mods=SHIFT 14:21:19.430 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:19.431 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT 14:21:19.757 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:19.757 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('t'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:19.757 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('t') mods=NONE 14:21:19.757 INFO wezterm_term::terminalstate::keyboard > key_down: sending "t", Char('t') NONE 14:21:19.876 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('t'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:19.876 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('t') mods=NONE 14:21:19.886 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:19.886 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:19.886 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('e') mods=NONE 14:21:19.886 INFO wezterm_term::terminalstate::keyboard > key_down: sending "e", Char('e') NONE 14:21:20.009 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.009 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('e') mods=NONE 14:21:20.128 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.128 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('n'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.128 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('n') mods=NONE 14:21:20.128 INFO wezterm_term::terminalstate::keyboard > key_down: sending "n", Char('n') NONE 14:21:20.130 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('n'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.130 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('n') mods=NONE 14:21:20.130 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:21:20.131 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.131 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:21:20.131 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:21:20.132 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.132 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:21:20.132 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.132 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.132 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:21:20.132 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:21:20.135 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.135 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:21:20.135 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.135 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.135 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:21:20.135 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:21:20.136 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.136 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:21:20.249 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.249 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.249 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftControl mods=CTRL 14:21:20.250 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.250 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.250 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=RightControl mods=CTRL 14:21:20.260 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:21:20.260 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:21:20.260 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('v') mods=CTRL 14:21:20.260 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{16}", Char('v') CTRL 14:21:20.270 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.270 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftControl mods=CTRL 14:21:20.270 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.270 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=RightControl mods=CTRL 14:21:20.271 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(V), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:21:20.271 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('v') mods=NONE ```

:lem:

wez.log ```yaml 14:16:06.604 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:06.604 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:06.604 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE 14:16:06.850 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:06.850 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:06.850 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char(':') mods=SHIFT 14:16:06.850 INFO wezterm_term::terminalstate::keyboard > key_down: sending ":", Char(':') SHIFT 14:16:07.004 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.004 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char(':') mods=SHIFT 14:16:07.048 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.048 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT 14:16:07.189 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(L), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(L), raw_code: 46, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.190 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('l'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(L), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(L), raw_code: 46, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.190 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('l') mods=NONE 14:16:07.190 INFO wezterm_term::terminalstate::keyboard > key_down: sending "l", Char('l') NONE 14:16:07.314 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('l'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(L), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(L), raw_code: 46, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.315 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('l') mods=NONE 14:16:07.330 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.330 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.331 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('e') mods=NONE 14:16:07.331 INFO wezterm_term::terminalstate::keyboard > key_down: sending "e", Char('e') NONE 14:16:07.463 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.463 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('e') mods=NONE 14:16:07.487 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.487 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('m'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.487 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('m') mods=NONE 14:16:07.487 INFO wezterm_term::terminalstate::keyboard > key_down: sending "m", Char('m') NONE 14:16:07.489 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('m'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(M), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(M), raw_code: 58, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.489 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('m') mods=NONE 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:16:07.490 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:16:07.490 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.490 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:16:07.491 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:16:07.491 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.491 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:16:07.605 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftControl), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.606 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.606 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftControl mods=NONE 14:16:07.606 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.606 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.606 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=RightControl mods=CTRL 14:16:07.616 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:16:07.616 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:16:07.616 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('v') mods=CTRL 14:16:07.616 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{16}", Char('v') CTRL 14:16:07.631 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.631 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftControl mods=CTRL 14:16:07.631 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.631 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=RightControl mods=CTRL 14:16:07.632 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(V), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:16:07.632 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('v') mods=NONE ```

While pasting the characters manually via ctrl+v does work.

wez commented 1 year ago

@AndydeCleyre try starting wezterm like this:

$ WEZTERM_LOG=window::os::x11::keyboard=trace,info wezterm --config debug_key_events=true

that will log more information about the X11 events being received; then retry your :ten scenario and share the output

AndydeCleyre commented 1 year ago

Thanks!

wez.log ```yaml 14:55:19.892 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:19.892 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "", 65505. kc -> None def_sym=65505 14:55:19.892 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:19.893 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE 14:55:20.154 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:20.155 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: ":", 58. kc -> Some(Char(':')) def_sym=59 14:55:20.155 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:20.155 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char(':') mods=SHIFT 14:55:20.155 INFO wezterm_term::terminalstate::keyboard > key_down: sending ":", Char(':') SHIFT 14:55:20.281 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char(':'), modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Semicolon), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(Semicolon), raw_code: 47, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:20.281 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char(':') mods=SHIFT 14:55:20.360 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: SHIFT, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: SHIFT, leds: NUM_LOCK, phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:20.360 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT 14:55:20.658 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:20.658 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "t", 116. kc -> Some(Char('t')) def_sym=116 14:55:20.658 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('t'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:20.658 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('t') mods=NONE 14:55:20.659 INFO wezterm_term::terminalstate::keyboard > key_down: sending "t", Char('t') NONE 14:55:20.758 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('t'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(T), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(T), raw_code: 28, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:20.759 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('t') mods=NONE 14:55:20.767 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:20.767 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "e", 101. kc -> Some(Char('e')) def_sym=101 14:55:20.767 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:20.767 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('e') mods=NONE 14:55:20.767 INFO wezterm_term::terminalstate::keyboard > key_down: sending "e", Char('e') NONE 14:55:20.878 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('e'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(E), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(E), raw_code: 26, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:20.878 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('e') mods=NONE 14:55:21.034 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.034 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "n", 110. kc -> Some(Char('n')) def_sym=110 14:55:21.034 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('n'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.034 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('n') mods=NONE 14:55:21.034 INFO wezterm_term::terminalstate::keyboard > key_down: sending "n", Char('n') NONE 14:55:21.037 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('n'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(N), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(N), raw_code: 57, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.037 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('n') mods=NONE 14:55:21.037 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.037 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "\u{8}", 65288. kc -> Some(Char('\u{8}')) def_sym=65288 14:55:21.037 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.037 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:55:21.037 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:55:21.038 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.038 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:55:21.038 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.038 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "\u{8}", 65288. kc -> Some(Char('\u{8}')) def_sym=65288 14:55:21.038 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.038 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:55:21.038 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:55:21.047 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.047 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:55:21.047 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.047 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "\u{8}", 65288. kc -> Some(Char('\u{8}')) def_sym=65288 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:55:21.048 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.048 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "\u{8}", 65288. kc -> Some(Char('\u{8}')) def_sym=65288 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Backspace mods=NONE 14:55:21.048 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{7f}", Backspace NONE 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('\u{8}'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(Backspace), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(Backspace), raw_code: 22, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.048 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Backspace mods=NONE 14:55:21.156 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.156 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "", 65507. kc -> None def_sym=65507 14:55:21.156 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.156 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftControl mods=CTRL 14:55:21.173 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.173 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "", 65508. kc -> None def_sym=65508 14:55:21.173 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.173 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=RightControl mods=CTRL 14:55:21.175 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) } 14:55:21.175 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "\u{16}", 118. kc -> None def_sym=118 14:55:21.175 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(V), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 14:55:21.175 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('v') mods=CTRL 14:55:21.175 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{16}", Char('v') CTRL 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(LeftControl), raw_code: 37, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftControl mods=CTRL 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: RightControl, modifiers: CTRL, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(RightControl), modifiers: CTRL, leds: NUM_LOCK, phys_code: Some(RightControl), raw_code: 105, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=RightControl mods=CTRL 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('v'), modifiers: NONE, leds: NUM_LOCK, repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(V), modifiers: NONE, leds: NUM_LOCK, phys_code: Some(V), raw_code: 55, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 14:55:21.186 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('v') mods=NONE ```
wez commented 1 year ago

Do you know why it is sending CTRL-v at the end? Is it trying to paste? Can you tell espanso to use ctrl-shift-v for pasting?

Alternatively, you could try adding a keybinding:

config.keys = {
  { key = 'v', mods = 'CTRL', action = wezterm.action.PasteFrom 'Clipboard' },
}

but note that some terminal programs want CTRL-v to do things, and that key assignment would prevent them from seeing it.

AndydeCleyre commented 1 year ago

Do you know why it is sending CTRL-v at the end? Is it trying to paste?

Yeah, when it uses the Clipboard backend (and often when it uses the default Auto backend it's effectively Clipboard) that's how it's doing the snippet expansion, with an automated paste.

Can you tell espanso to use ctrl-shift-v for pasting?

Ahh lemme see . . . yes!

paste_shortcut Customize the keyboard shortcut used to paste an expansion. This should follow this format: CTRL+SHIFT+V

Trying it . . . yes it works! Thanks very much.

wez commented 1 year ago

So does that mean that the other folks having problems here in this issue probably also need to change that same config? Could you share a summary of what espanso config working for you in wezterm @AndydeCleyre ?

AndydeCleyre commented 1 year ago

So here's my working (AFAICT) espanso config:

disable_x11_fast_inject: true
paste_shortcut: "CTRL+SHIFT+V"

I'll note that the paste_shortcut option can be set on a per-app basis.

dodalovicgran commented 1 year ago

Unfortunately, it didn't help.

bew commented 1 year ago

Hello @wez :wave:

Trying out Espanso now, and trying to get it to work under wezterm..

My wezterm config uses Ctrl-shift-v to paste, it works when I do it manually, and I get this key event log (I close the window before up events): wz-standalone-ctrl-shift-v.log

With Espanso I made a trigger !wez, which for some reason ONLY sends v to the pane instead of triggering PasteFrom action :thinking: : wz-espanso-trigger-then-ctrl-shift-v.log (with comments)


To reproduce

Wezterm version: 20230712-072601-f4abf8fd Install method: Flatpak (works well for Signal also installed via Flatpak, so shouldn't be a factor?)

Espanso version: v2.1.8 Install method: Nix

OS: Linux X11

File ~/.config/espanso/config/wezterm.yml:

filter_class: org.wezfurlong.wezterm

backend: Clipboard
paste_shortcut: "CTRL+SHIFT+V"

extra_includes:
  - "../match/_wezterm.yml"

File ~/.config/espanso/match/_wezterm.yml:

matches:
  - trigger: "!wez"
    replace: Yes!123

Run Espanso in foreground using: espanso daemon

Run wezterm: WEZTERM_LOG=window::os::x11::keyboard=trace,info wezterm -n --config debug_key_events=true Type !wez

wez commented 1 year ago

@bew: Hi! The v key press event has no modifiers set; neither Shift nor Control.

Others reported that they also needed disable_x11_fast_inject: true to be set in espanso config; is that missing from your config?

bew commented 1 year ago

And that works with disable_x11_fast_inject: true, forgot to test it again after some change of espanso version :grimacing:

Good catch on the missing modifiers, but that's weird isn't it? Who/What is supposed to tell you which modifiers are pressed?

  1. Does that come from the X event? (and the espanso key injector is missing filling them in maybe?)
  2. Isn't wezterm using its previous knowledge of which modifiers are pressed (like ctrl, shift) to deduce which modifiers are active when a non-modifier key (like v) is pressed?
wez commented 1 year ago

wezterm uses the standard libxkbcommon-x11.so.0 under the covers; X events are fed into an internal state machine in that library, which produces decoded events and modifiers that respect both the keyboard layout and modifier mapping that may be configured by the user. wezterm doesn't have direct knowledge of that mapping; it leaves all of that to xkbdcommon and consumes its results.

espanso is simulating input for wezterm. It's espanso's responsibility to send appropriate input events in order for xkbdcommon to produce the normal output.

I don't know exactly what effect disable_x11_fast_inject: false has, but from the name I'd assume that it is taking some shortcuts that aren't guaranteed to work with every application.

bew commented 1 year ago

I think I've found something:

Looking at the xcb event with this diff:

diff --git a/window/src/os/x11/keyboard.rs b/window/src/os/x11/keyboard.rs
index 11c37b5dd..cce83ac35 100644
--- a/window/src/os/x11/keyboard.rs
+++ b/window/src/os/x11/keyboard.rs
@@ -174,6 +174,7 @@ impl KeyboardWithFallback {
         xcb_ev: &xcb::x::KeyPressEvent,
         events: &mut WindowEventSender,
     ) {
+        dbg!(xcb_ev);
         let xcode = xkb::Keycode::from(xcb_ev.detail());
         self.process_key_event_impl(xcode, true, events, false);
     }

The Ctrl-Shift-v sent by Espanso does have the modifers: (albeit shifted: ctrl has ctrl modifier even though ctrl wasn't pressed yet, I made a PR to fix that) wz-debug-xcb-event.log (commented)

I'm digging

bew commented 1 year ago

Ok so the main issue is that key press events sent by Espanso through XSendEvent are rather direct, and doesn't seem to pass through XKB' state handling, and thus don't send XkbStateNotify events that would tell Wezterm to update its knowledge of the modifiers.

Option A (change Wezterm, don't change Espanso)

Option B (change Espanso, don't change Wezterm)


What do you think would be the best option to solve this?

dodalovicgran commented 1 year ago

The one that works. I would assume Wezterm.

Pistahh commented 9 months ago

Hi, I have a very similar issue, triggered on a QMK keyboard. In my case it looked related to ibus and as I can "fix" it by 1. not using ibus 2. using ibus but killing the ibus daemon, I assumed it is an ibus issue so filed a bug report for ibus: https://github.com/ibus/ibus/issues/2600

Do you think it could be a wezterm issue? Happy to re-file the issue here if needed.

My issue also happens on wezterm-nightly 20240121-180215-76028ca1

wez commented 9 months ago

I don't think it is a wezterm bug per-se, but rather a weird interaction between ibus, the X server and xkbdcommon that wezterm is sensitive to

wez commented 9 months ago

This should be resolved now in main.

It typically takes about an hour before commits are available as nightly builds for all platforms. Linux builds are the fastest to build and are often available within about 20 minutes. Windows and macOS builds take a bit longer.

Please take a few moments to try out the fix and let me know how that works out. You can find the nightly downloads for your system in the wezterm installation docs.

If you prefer to use packages provided by your distribution or package manager of choice and don't want to replace that with a nightly download, keep in mind that you can download portable packages (eg: a .dmg file on macOS, a .zip file on Windows and an .AppImage file on Linux) that can be run without permanently installing or replacing an existing package, and can then simply be deleted once you no longer need them.

If you are eager and can build from source then you may be able to try this out more quickly.

AndydeCleyre commented 9 months ago

Excellent! As far as I can tell, I no longer need to set disable_x11_fast_inject: true in the Espanso config, which in turn helps me avoid some Espanso bugs. Thank you!

Pistahh commented 9 months ago

This should be resolved now in main.

Can confirm, I don't see the issue anymore with the latest nightly.

HaleTom commented 9 months ago

For a temporary work-around for those not yet using the latest main commit:

~/.config/espanso/config/wezterm-TEMP.yml:

filter_class: org.wezfurlong.wezterm
disable_x11_fast_inject: true
wez commented 9 months ago

note that these changes have also been in the most recent couple of releases

github-actions[bot] commented 8 months ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.