feat: make shortcut works even with capslock (#5049)

Shortcut where not working in caps-lock. Fixing this
This commit is contained in:
jif-oai
2025-10-10 15:35:28 +01:00
committed by GitHub
parent 85e7357973
commit 961ed31901
3 changed files with 19 additions and 7 deletions

View File

@@ -213,7 +213,7 @@ async fn shell_output_reserializes_truncated_content() -> Result<()> {
let call_id = "shell-truncated"; let call_id = "shell-truncated";
let args = json!({ let args = json!({
"command": ["/bin/sh", "-c", "seq 1 400"], "command": ["/bin/sh", "-c", "seq 1 400"],
"timeout_ms": 1_000, "timeout_ms": 5_000,
}); });
let responses = vec![ let responses = vec![
sse(vec![ sse(vec![

View File

@@ -1034,20 +1034,20 @@ impl ChatWidget {
pub(crate) fn handle_key_event(&mut self, key_event: KeyEvent) { pub(crate) fn handle_key_event(&mut self, key_event: KeyEvent) {
match key_event { match key_event {
KeyEvent { KeyEvent {
code: KeyCode::Char('c'), code: KeyCode::Char(c),
modifiers: crossterm::event::KeyModifiers::CONTROL, modifiers,
kind: KeyEventKind::Press, kind: KeyEventKind::Press,
.. ..
} => { } if modifiers.contains(KeyModifiers::CONTROL) && c.eq_ignore_ascii_case(&'c') => {
self.on_ctrl_c(); self.on_ctrl_c();
return; return;
} }
KeyEvent { KeyEvent {
code: KeyCode::Char('v'), code: KeyCode::Char(c),
modifiers: KeyModifiers::CONTROL, modifiers,
kind: KeyEventKind::Press, kind: KeyEventKind::Press,
.. ..
} => { } if modifiers.contains(KeyModifiers::CONTROL) && c.eq_ignore_ascii_case(&'v') => {
if let Ok((path, info)) = paste_image_to_temp_png() { if let Ok((path, info)) = paste_image_to_temp_png() {
self.attach_image(path, info.width, info.height, info.encoded_format.label()); self.attach_image(path, info.width, info.height, info.encoded_format.label());
} }

View File

@@ -676,6 +676,18 @@ fn streaming_final_answer_keeps_task_running_state() {
assert!(chat.bottom_pane.ctrl_c_quit_hint_visible()); assert!(chat.bottom_pane.ctrl_c_quit_hint_visible());
} }
#[test]
fn ctrl_c_shutdown_ignores_caps_lock() {
let (mut chat, _rx, mut op_rx) = make_chatwidget_manual();
chat.handle_key_event(KeyEvent::new(KeyCode::Char('C'), KeyModifiers::CONTROL));
match op_rx.try_recv() {
Ok(Op::Shutdown) => {}
other => panic!("expected Op::Shutdown, got {other:?}"),
}
}
#[test] #[test]
fn exec_history_cell_shows_working_then_completed() { fn exec_history_cell_shows_working_then_completed() {
let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(); let (mut chat, mut rx, _op_rx) = make_chatwidget_manual();