wez / wezterm

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

Dead key followed by unicode char ignores the dead key #3601

Open scajanus opened 1 year ago

scajanus commented 1 year ago

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

macOS 13.3.1 (22E261)

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

No response

WezTerm version

20230421-075330-e0a92c73

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

Pressing a dead key on a Finnish layout, e.g. ´ followed by keys other than letters where the diacritic exists or space ignores the preceding dead key.

In practice this shows up when I follow ~ (from pressing option + keycode 30/^) by nbsp, i.e. I don't release the option in time and get non-breaking space instead of space. To get just tilde character, I'm used to pressing alt-^-space followed by backspace, which this breaks (I would need to release the alt in time).

To Reproduce

No response

Configuration

no config

Expected Behavior

I would expect e.g. keypresses ´1 to produce the sequence ´1, not just 1.

Similarly for e.g. producing , not just å.

Logs

16:58:11.330 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Equal), modifiers: NONE, leds: (empty), phys_code: Some(Equal), raw_code: 24, repeat_count: 1, key_is_down: true, handled: Handled(false) } 16:58:11.396 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(Equal), modifiers: NONE, leds: (empty), phys_code: Some(Equal), raw_code: 24, repeat_count: 1, key_is_down: false, handled: Handled(false) } 16:58:14.379 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Char('1'), modifiers: NONE, leds: (empty), phys_code: Some(K1), raw_code: 18, repeat_count: 1, key_is_down: true, handled: Handled(false) } 16:58:14.380 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('1'), modifiers: NONE, leds: (empty), repeat_count: 1, key_is_down: true, raw: None } 16:58:14.380 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('1') mods=NONE 16:58:14.380 INFO wezterm_term::terminalstate::keyboard > key_down: sending "1", Char('1') NONE 16:58:14.469 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Char('1'), modifiers: NONE, leds: (empty), phys_code: Some(K1), raw_code: 18, repeat_count: 1, key_is_down: false, handled: Handled(false) } 16:58:14.469 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('1'), modifiers: NONE, leds: (empty), repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Char('1'), modifiers: NONE, leds: (empty), phys_code: Some(K1), raw_code: 18, repeat_count: 1, key_is_down: false, handled: Handled(false) }) } 16:58:14.469 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('1') mods=NONE

Anything else?

It seems keycodes get sent similarly in both cases, so the problem is downstream from the key handling.

kuva

scajanus commented 1 year ago

I tried to workaround my initial issue by remapping alt+space -> space, but this inserts space while keeping the dead key active (carrying it over to the next char). I would expect it to behave the same way as dead key + space does -- insert e.g. ~, then space.

config.keys = {
  {
    key = 'Space',
    mods = 'ALT',
    action = wezterm.action.SendKey {
      key = 'Space',
    },
  },
}
mickaelperrin commented 4 months ago

I can confirm the issue and basically the most annoying thing is that ~ (Option+n) + / produces a / and not ~/. I am new to wezterm and this is driving me nuts when I need to access folders under the home directory.

tambourine-man commented 1 month ago

I can confirm the issue and basically the most annoying thing is that ~ (Option+n) + / produces a / and not ~/. I am new to wezterm and this is driving me nuts when I need to access folders under the home directory.

Almost the same here, I can't type Shift-~ + /, which is probably one of my most often typed combinations. I need to press Shift-~ + space + /

Works everywhere else in macOS


Solved by adding this line to config

config.use_dead_keys = false

Theluga commented 3 weeks ago

config.use_dead_keys = false didn't work to me.

I am using Arch Linux on gnome. If I press ~ followed by / it just outputs /

If I press ~ and a it will output ã but its frustrating the terminal deleting the dead key already pressed followed by another keystroke.

Alacritty, Rio, Kitty don't even show the dead key preview ~ when pressed one time. Until now, only gnome-terminal has the correct behavior with dead keys...