wezterm
wezterm copied to clipboard
Capital cyrrillic letters are not displayed when using TMUX with `ModifyOtherKeys` option
What Operating System(s) are you seeing this problem on?
Linux X11
Which Wayland compositor or X11 Window manager(s) are you using?
XFCE4 on Manjaro
WezTerm version
wezterm 20240203-110809-5046fc22
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
I belive it is the same problem as in https://github.com/wez/wezterm/issues/4234.
In Tmux wiki is said:
tmux must be told to turn it [ModifyOtherKeys] on:
set -s extended-keys on
tmux must recognise that the terminal supports it. tmux will automatically detect newer versions of these three terminals, but if it does not then the terminal-features option can also be modified to enable it manually:
set -as terminal-features 'xterm*:extkeys'
Well, when i set extended-keys on nothing happens. When I add the second option (set -as terminal-features ...) then <C-1>
, etc. work but capital cyrrillic letters stop displaying.
Tmux with these options works without problems in xterm
.
Debug log with WEZTERM_LOG=window::os::x11::keyboard=trace,info wezterm -n --config debug_key_events=true
shows something like this - pressing first lowercase "ф" and then uppercase "Ф":
07:38:31.327 TRACE window::os::x11::keyboard > Compose::feed(fallback) XK_a -> result=Accepted status=Nothing
07:38:31.328 TRACE window::os::x11::keyboard > Compose::feed(selected) XK_Cyrillic_ef -> result=Accepted status=Nothing
07:38:31.328 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "ф", XK_Cyrillic_ef. kc -> Some(Char('ф')) fallback_feed=Nothing("a", XK_a)
07:38:31.328 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('ф'), modifiers: NONE, leds: (empty), repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(A), modifiers: NONE, leds: (empty), phys_code: Some(A), raw_code: 38, repeat_count: 1, key_is_down: true, handled: Handled(false) }) }
07:38:31.329 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('ф') mods=NONE
07:38:31.329 INFO wezterm_term::terminalstate::keyboard > key_down: sending "ф", Char('ф') NONE
07:38:31.491 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(selected); state before=StateFromXcbStateNotify { depressed_mods: 0, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8192
07:38:31.491 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(fallback); state before=StateFromXcbStateNotify { depressed_mods: 0, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8192
07:38:31.491 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('ф'), modifiers: NONE, leds: (empty), repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(A), modifiers: NONE, leds: (empty), phys_code: Some(A), raw_code: 38, repeat_count: 1, key_is_down: false, handled: Handled(false) }) }
07:38:31.492 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('ф') mods=NONE
07:38:32.997 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(selected); state before=StateFromXcbStateNotify { depressed_mods: 0, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8192
07:38:32.998 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(fallback); state before=StateFromXcbStateNotify { depressed_mods: 0, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8192
07:38:32.998 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) }
07:38:32.998 TRACE window::os::x11::keyboard > Compose::feed(fallback) XK_Shift_L -> result=Ignored status=Nothing
07:38:32.999 TRACE window::os::x11::keyboard > Compose::feed(selected) XK_Shift_L -> result=Ignored status=Nothing
07:38:32.999 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "", XK_Shift_L. kc -> None fallback_feed=Nothing("", XK_Shift_L)
07:38:32.999 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) }) }
07:38:32.999 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=LeftShift mods=NONE
07:38:33.000 TRACE window::os::x11::keyboard > update_state(selected) with StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }
07:38:33.000 TRACE window::os::x11::keyboard > update_state(fallback) with StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }
07:38:33.391 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(selected); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.391 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(fallback); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.391 INFO wezterm_gui::termwindow::keyevent > key_event RawKeyEvent { key: Physical(A), modifiers: SHIFT, leds: (empty), phys_code: Some(A), raw_code: 38, repeat_count: 1, key_is_down: true, handled: Handled(false) }
07:38:33.392 TRACE window::os::x11::keyboard > Compose::feed(fallback) XK_A -> result=Accepted status=Nothing
07:38:33.392 TRACE window::os::x11::keyboard > Compose::feed(selected) XK_Cyrillic_EF -> result=Accepted status=Nothing
07:38:33.393 TRACE window::os::x11::keyboard > process_key_event: RawKeyEvent FeedResult::Nothing: "Ф", XK_Cyrillic_EF. kc -> Some(Char('Ф')) fallback_feed=Nothing("A", XK_A)
07:38:33.393 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('Ф'), modifiers: SHIFT, leds: (empty), repeat_count: 1, key_is_down: true, raw: Some(RawKeyEvent { key: Physical(A), modifiers: SHIFT, leds: (empty), phys_code: Some(A), raw_code: 38, repeat_count: 1, key_is_down: true, handled: Handled(false) }) }
07:38:33.393 INFO wezterm_gui::termwindow::keyevent > send to pane DOWN key=Char('Ф') mods=SHIFT
07:38:33.394 INFO wezterm_term::terminalstate::keyboard > key_down: sending "Ф", Char('Ф') SHIFT
07:38:33.550 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(selected); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.550 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(fallback); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.551 INFO wezterm_gui::termwindow::keyevent > key_event KeyEvent { key: Char('Ф'), modifiers: SHIFT, leds: (empty), repeat_count: 1, key_is_down: false, raw: Some(RawKeyEvent { key: Physical(A), modifiers: SHIFT, leds: (empty), phys_code: Some(A), raw_code: 38, repeat_count: 1, key_is_down: false, handled: Handled(false) }) }
07:38:33.551 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=Char('Ф') mods=SHIFT
07:38:33.571 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(selected); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.571 TRACE window::os::x11::keyboard > merge_current_xcb_modifiers(fallback); state before=StateFromXcbStateNotify { depressed_mods: 1, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }, mods=8193
07:38:33.571 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) }) }
07:38:33.572 INFO wezterm_gui::termwindow::keyevent > send to pane UP key=LeftShift mods=SHIFT
07:38:33.572 TRACE window::os::x11::keyboard > update_state(selected) with StateFromXcbStateNotify { depressed_mods: 0, latched_mods: 0, locked_mods: 0, depressed_layout: 0, latched_layout: 0, locked_layout: 1 }
To Reproduce
Use tmux
with described options or emac -nw
. In emacs capital cyrrillic leters (without tmux) behave as in https://github.com/wez/wezterm/issues/4234.
It affects 20240203 and the last night build too.
Configuration
no config
Expected Behavior
ModifyOtherKeys protocol should work.
Logs
No response
Anything else?
This bug makes it impossible for me to use wezterm. I am a long-time user of tmux and do not want to give up it. And using extended keys is now a "must have" for me to work in neovim.