Repository: alacritty/alacritty (language: rust)

Issue:
Alt + Ctrl cannot be used
"Hello, thank you very much for your project. I really like it. However, when I switched to the new version, I was unable to use Alt + Ctrl together as a shortcut. Using Alt or Ctrl alone still works fine. My operating system is Windows 11."
![image](https://github.com/alacritty/alacritty/assets/76483540/c64fa2e0-c437-4644-97fd-ce39d9af44a9)



Discussion / hints:

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e65f85f382c..34e764b9ab0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Fixed
 
 - `alacritty migrate` failing with nonexistent imports
+- `Alt` bindings requiring composed key rather than pre-composed one on macOS
+- `Alt + Control` bindings not working on Windows
 
 ## 0.13.0
 
diff --git a/alacritty/src/input/keyboard.rs b/alacritty/src/input/keyboard.rs
index 423f8baea02..8e559be118d 100644
--- a/alacritty/src/input/keyboard.rs
+++ b/alacritty/src/input/keyboard.rs
@@ -172,7 +172,20 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
             // the time. However what we want is to manually lowercase the character to account
             // for both small and capital letters on regular characters at the same time.
             let logical_key = if let Key::Character(ch) = key.logical_key.as_ref() {
-                Key::Character(ch.to_lowercase().into())
+                // Match `Alt` bindings without `Alt` being applied, otherwise they use the
+                // composed chars, which are not intuitive to bind.
+                //
+                // On Windows, the `Ctrl + Alt` mangles `logical_key` to unidentified values, thus
+                // preventing them from being used in bindings
+                //
+                // For more see https://github.com/rust-windowing/winit/issues/2945.
+                if (cfg!(target_os = "macos") || (cfg!(windows) && mods.control_key()))
+                    && mods.alt_key()
+                {
+                    key.key_without_modifiers()
+                } else {
+                    Key::Character(ch.to_lowercase().into())
+                }
             } else {
                 key.logical_key.clone()
             };


Test patch: