From 82b5464178fe53cb19966ff597946cfb1a71cd13 Mon Sep 17 00:00:00 2001 From: Niclas Overby Date: Fri, 14 Aug 2026 14:11:20 +0200 Subject: [PATCH] fix(cider): charactersIgnoringModifiers was the modified string, so no shortcut could match -characters is what a key produced WITH modifiers applied; -charactersIgnoringModifiers is what it would have produced without them. This backend sent the same string for both, and xkbcommon applies the control transformation, so Control and A arrived as U+0001 in both. No binding for control plus a was ever found and the application inserted the control character into the document: the selection was replaced by an invisible character and the word count went to one. The bare string now comes from the keysym, which carries no modifier transformation. After the fix Control and A leaves the document alone and keeps the selection. Command and A already worked and now has a picture: docs/wayland-command-a-selects.png, where the status bar reads Selected: 4 words, 18 characters with the text highlighted. That is a modified shortcut going all the way from the compositor to the application, which nothing had tested before. --- docs/wayland-command-a-selects.png | Bin 0 -> 54323 bytes docs/wayland-port.md | 16 +++++++++++++ src/darwin/wayland/input.rs | 36 ++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 docs/wayland-command-a-selects.png diff --git a/docs/wayland-command-a-selects.png b/docs/wayland-command-a-selects.png new file mode 100644 index 0000000000000000000000000000000000000000..69e734e3c16e2b16ff0001aa98f01ba4425aa712 GIT binary patch literal 54323 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

fbwMXfKc^-;60`LRKh_sb?Nh8t`Oyyr#w>-jS} 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 f9CF6Zti%7=S%1D*A#~{)_^@+NS3j3^P6 u32; + /// The text a KEYSYM stands for, with no modifier transformation applied. + /// + /// This is what -charactersIgnoringModifiers has to answer, and it is not the same string as + /// the one the state produces: xkbcommon applies the control transformation to the state text, + /// so Control and A give U+0001 there and the letter a here. AppKit key bindings are written + /// against the SECOND one, which is why control shortcuts did nothing. + fn xkb_keysym_to_utf8(keysym: u32, buffer: *mut c_char, size: usize) -> i32; + fn xkb_state_key_get_utf8( state: *mut XkbState, key: u32, @@ -605,13 +613,39 @@ extern "C" fn on_keyboard_key( let mut chars = text.unwrap_or_default(); chars.push(0); + /* + * THE TWO STRINGS ARE NOT THE SAME STRING. + * + * -characters is what the key produced WITH the modifiers applied, and -charactersIgnoringModifiers + * is what it would have produced without them. AppKit key equivalents and key bindings are + * matched against the second, so sending the first for both means every control and command + * shortcut is looked up under a character nobody wrote a binding for. + * + * Measured: Control and A arrived as U+0001 in both, the binding for control plus a was never + * found, and the application inserted the control character into the document instead of + * selecting anything. + */ + let mut bare = { + let mut buffer = [0u8; 64]; + let n = unsafe { + xkb_keysym_to_utf8(keysym, buffer.as_mut_ptr() as *mut c_char, buffer.len()) + }; + if n > 1 { + buffer[..(n as usize - 1)].to_vec() + } else { + chars.clone() + } + }; + if bare.last() != Some(&0) { + bare.push(0); + } unsafe { cider_wayland_post_key( if pressed { 1 } else { 0 }, modifiers, number, chars.as_ptr() as *const c_char, - chars.as_ptr() as *const c_char, + bare.as_ptr() as *const c_char, if repeat { 1 } else { 0 }, // THE CARBON VIRTUAL KEY CODE, not the evdev one. An application reads the key code // and applies its own layout; handing it the raw number means it looks up an unrelated -- 2.51.2