wez / wezterm

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

Cannot insert numbers (shift + ") in Kakoune (sent text looks messed up) #6087

Open hadronized opened 2 weeks ago

hadronized commented 2 weeks ago

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

Linux Wayland

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

mutter 46.4

WezTerm version

wezterm 20240812-215703-30345b36

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

Yes, and I updated the version box above to show the version of the nightly that I tried

Describe the bug

In Kakoune, typing numbers on my bépo keyboard layout(shift + " for 1 for instance) doesn’t do anything as the sent data looks like messed up ("\u{1b}[27;2;48~", see the logs).

To Reproduce

  1. cargo run --bin wezterm-gui
  2. kak -n # this prevent loading any user configuration file
  3. Ensure to have selected a French bépo keyboard layout in your wayland session (I’m using GNOME / mutter).
  4. Type i0 to enter insert mode and insert a 0.

Configuration

no config

Expected Behavior

0 should be inserted in my editor. I tried with Helix and it works, so I’m not completely what’s going on.

Logs

00:21:42.326 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: (empty), phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) } 00:21:42.327 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: NONE, leds: (empty), repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: NONE, leds: (empty), phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 00:21:42.327 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE 00:21:42.430 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(K0), modifiers: SHIFT, leds: (empty), phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) } 00:21:42.431 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: SHIFT, leds: (empty), repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: SHIFT, leds: (empty), phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: true, handled: Handled(false) }) } 00:21:42.431 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('0') mods=SHIFT 00:21:42.431 INFO wezterm_term::terminalstate::keyboard > key_down: sending "\u{1b}[27;2;48~", Char('0') SHIFT 00:21:42.486 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('0'), modifiers: SHIFT, leds: (empty), repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(K0), modifiers: SHIFT, leds: (empty), phys_code: Some(K0), raw_code: 19, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 00:21:42.486 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('0') mods=SHIFT 00:21:42.582 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: LeftShift, modifiers: SHIFT, leds: (empty), repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(LeftShift), modifiers: SHIFT, leds: (empty), phys_code: Some(LeftShift), raw_code: 50, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 00:21:42.582 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT

Anything else?

My issue looks very similar to this one but the conversation was locked.

hadronized commented 2 weeks ago

From my initial investigation, I think this is a problem with CSI u — or similar. Either Wezterm doesn’t send what the app (kakoune) expects, or kakoune doesn’t parse it correctly — or both?

Disabling ESC ]>4;1m seems to solve the issue; I’m not entirely sure why.