From dfb86e4ce2cc63af0b91432c8db3e78cac900524 Mon Sep 17 00:00:00 2001 From: Mohammad AlSaleh Date: Thu, 4 Jan 2024 20:11:22 +0300 Subject: [PATCH] Handle Ctrl+key_code `tmux` in `cosmic-term` is now usable. Signed-off-by: Mohammad AlSaleh --- src/terminal_box.rs | 88 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/src/terminal_box.rs b/src/terminal_box.rs index cc9ade2..9a4ec13 100644 --- a/src/terminal_box.rs +++ b/src/terminal_box.rs @@ -388,8 +388,92 @@ where (true, _, _, _) => { // Ignore super keys } - (_, true, _, _) => { - // Ignore ctrl keys + (_, true, _, _) => match key_code { + KeyCode::Up => { + terminal.input_scroll(b"\x1B[1;5A".as_slice()); + status = Status::Captured; + } + KeyCode::Down => { + terminal.input_scroll(b"\x1B[1;5B".as_slice()); + status = Status::Captured; + } + KeyCode::Right => { + terminal.input_scroll(b"\x1B[1;5C".as_slice()); + status = Status::Captured; + } + KeyCode::Left => { + terminal.input_scroll(b"\x1B[1;5D".as_slice()); + status = Status::Captured; + } + KeyCode::End => { + terminal.input_scroll(b"\x1B[1;5F".as_slice()); + status = Status::Captured; + } + KeyCode::Home => { + terminal.input_scroll(b"\x1B[1;5H".as_slice()); + status = Status::Captured; + } + KeyCode::Delete => { + terminal.input_scroll(b"\x1B[3;5~".as_slice()); + status = Status::Captured; + } + KeyCode::PageUp => { + terminal.input_scroll(b"\x1B[5;5~".as_slice()); + status = Status::Captured; + } + KeyCode::PageDown => { + terminal.input_scroll(b"\x1B[6;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F1 => { + terminal.input_scroll(b"\x1BO;5P".as_slice()); + status = Status::Captured; + } + KeyCode::F2 => { + terminal.input_scroll(b"\x1BO;5Q".as_slice()); + status = Status::Captured; + } + KeyCode::F3 => { + terminal.input_scroll(b"\x1BO;5R".as_slice()); + status = Status::Captured; + } + KeyCode::F4 => { + terminal.input_scroll(b"\x1BO;5S".as_slice()); + status = Status::Captured; + } + KeyCode::F5 => { + terminal.input_scroll(b"\x1B[15;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F6 => { + terminal.input_scroll(b"\x1B[17;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F7 => { + terminal.input_scroll(b"\x1B[18;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F8 => { + terminal.input_scroll(b"\x1B[19;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F9 => { + terminal.input_scroll(b"\x1B[20;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F10 => { + terminal.input_scroll(b"\x1B[21;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F11 => { + terminal.input_scroll(b"\x1B[23;5~".as_slice()); + status = Status::Captured; + } + KeyCode::F12 => { + terminal.input_scroll(b"\x1B[24;5~".as_slice()); + status = Status::Captured; + } + _ => (), } (_, _, true, _) => { // Ignore alt keys