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