Merge pull request #2867 from ousamabenyounes/fix/azerty-altgr-at-key-conflict

fix(tui): prevent AltGr from swallowing @/#/$/!/%/ characters in composer
This commit is contained in:
Hunter Bown
2026-06-06 10:37:48 -07:00
committed by GitHub
+24 -5
View File
@@ -3505,29 +3505,48 @@ async fn run_event_loop(
apply_alt_4_shortcut(app, key.modifiers);
continue;
}
KeyCode::Char('!') if key.modifiers.contains(KeyModifiers::ALT) => {
// Sidebar focus via Alt+! / Alt+@ / Alt+# / Alt+$ / Alt+%)
// AltGr on European keyboards emits Ctrl+Alt on Windows, so
// exclude Ctrl to avoid swallowing AltGr-typed characters
// like @ (AltGr+0 on French AZERTY) and # (AltGr+3). This
// matches the has_ctrl_or_alt / is_altgr philosophy in
// key_hint.rs: treat Ctrl+Alt as AltGr, not a shortcut.
KeyCode::Char('!')
if key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::CONTROL) =>
{
app.set_sidebar_focus(SidebarFocus::Work);
app.status_message = Some("Sidebar focus: work".to_string());
continue;
}
KeyCode::Char('@') if key.modifiers.contains(KeyModifiers::ALT) => {
KeyCode::Char('@')
if key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::CONTROL) =>
{
app.set_sidebar_focus(SidebarFocus::Tasks);
app.status_message = Some("Sidebar focus: tasks".to_string());
continue;
}
KeyCode::Char('#') if key.modifiers.contains(KeyModifiers::ALT) => {
KeyCode::Char('#')
if key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::CONTROL) =>
{
app.set_sidebar_focus(SidebarFocus::Agents);
app.status_message = Some("Sidebar focus: agents".to_string());
continue;
}
KeyCode::Char('$') | KeyCode::Char('%')
if key.modifiers.contains(KeyModifiers::ALT) =>
if key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::CONTROL) =>
{
app.set_sidebar_focus(SidebarFocus::Context);
app.status_message = Some("Sidebar focus: context".to_string());
continue;
}
KeyCode::Char(')') if key.modifiers.contains(KeyModifiers::ALT) => {
KeyCode::Char(')')
if key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::CONTROL) =>
{
app.set_sidebar_focus(SidebarFocus::Auto);
app.status_message = Some("Sidebar focus: auto".to_string());
continue;