Checkpoint, have caret notation implemented

Mikayla Maki created

Change summary

crates/terminal/src/connection/events.rs | 69 +++++++++++++++++++++++++
crates/terminal/src/terminal.rs          |  2 
2 files changed, 69 insertions(+), 2 deletions(-)

Detailed changes

crates/terminal/src/connection/events.rs 🔗

@@ -6,6 +6,10 @@ pub enum ModifierCombinations {
     Alt,
     Ctrl,
     Shift,
+    AltCtrl,
+    AltShift,
+    CtrlShift,
+    AltCtrlShift,
     Other,
 }
 
@@ -16,6 +20,10 @@ impl ModifierCombinations {
             (true, false, false, false) => ModifierCombinations::Alt,
             (false, true, false, false) => ModifierCombinations::Ctrl,
             (false, false, true, false) => ModifierCombinations::Shift,
+            (true, true, false, false) => ModifierCombinations::AltCtrl,
+            (true, false, true, false) => ModifierCombinations::AltShift,
+            (false, true, true, false) => ModifierCombinations::CtrlShift,
+            (true, true, true, false) => ModifierCombinations::AltCtrlShift,
             _ => ModifierCombinations::Other,
         }
     }
@@ -26,7 +34,6 @@ pub fn to_esc_str(event: &KeyDownEvent, mode: &TermMode) -> Option<String> {
 
     // Manual Bindings including modifiers
     let manual_esc_str = match (event.keystroke.key.as_ref(), modifiers) {
-        ("l", ModifierCombinations::Ctrl) => Some("\x0c".to_string()),
         ("tab", ModifierCombinations::Shift) => Some("\x1b[Z".to_string()),
         ("backspace", ModifierCombinations::Alt) => Some("\x1b\x7f".to_string()),
         ("backspace", ModifierCombinations::Shift) => Some("\x7f".to_string()),
@@ -104,6 +111,66 @@ pub fn to_esc_str(event: &KeyDownEvent, mode: &TermMode) -> Option<String> {
         ("f19", ModifierCombinations::None) => Some("\x1b[33~".to_string()),
         ("f20", ModifierCombinations::None) => Some("\x1b[34~".to_string()),
         // NumpadEnter, Action::Esc("\n".into());
+        //Make all mappings for caret notation keys!
+        ("a", ModifierCombinations::Ctrl) => Some("\x01".to_string()), //1
+        ("A", ModifierCombinations::CtrlShift) => Some("\x01".to_string()), //1
+        ("b", ModifierCombinations::Ctrl) => Some("\x02".to_string()), //2
+        ("B", ModifierCombinations::CtrlShift) => Some("\x02".to_string()), //2
+        ("c", ModifierCombinations::Ctrl) => Some("\x03".to_string()), //3
+        ("C", ModifierCombinations::CtrlShift) => Some("\x03".to_string()), //3
+        ("d", ModifierCombinations::Ctrl) => Some("\x04".to_string()), //4
+        ("D", ModifierCombinations::CtrlShift) => Some("\x04".to_string()), //4
+        ("e", ModifierCombinations::Ctrl) => Some("\x05".to_string()), //5
+        ("E", ModifierCombinations::CtrlShift) => Some("\x05".to_string()), //5
+        ("f", ModifierCombinations::Ctrl) => Some("\x06".to_string()), //6
+        ("F", ModifierCombinations::CtrlShift) => Some("\x06".to_string()), //6
+        ("g", ModifierCombinations::Ctrl) => Some("\x07".to_string()), //7
+        ("G", ModifierCombinations::CtrlShift) => Some("\x07".to_string()), //7
+        ("h", ModifierCombinations::Ctrl) => Some("\x08".to_string()), //8
+        ("H", ModifierCombinations::CtrlShift) => Some("\x08".to_string()), //8
+        ("i", ModifierCombinations::Ctrl) => Some("\x09".to_string()), //9
+        ("I", ModifierCombinations::CtrlShift) => Some("\x09".to_string()), //9
+        ("j", ModifierCombinations::Ctrl) => Some("\x0a".to_string()), //10
+        ("J", ModifierCombinations::CtrlShift) => Some("\x0a".to_string()), //10
+        ("k", ModifierCombinations::Ctrl) => Some("\x0b".to_string()), //11
+        ("K", ModifierCombinations::CtrlShift) => Some("\x0b".to_string()), //11
+        ("l", ModifierCombinations::Ctrl) => Some("\x0c".to_string()), //12
+        ("L", ModifierCombinations::CtrlShift) => Some("\x0c".to_string()), //12
+        ("m", ModifierCombinations::Ctrl) => Some("\x0d".to_string()), //13
+        ("M", ModifierCombinations::CtrlShift) => Some("\x0d".to_string()), //13
+        ("n", ModifierCombinations::Ctrl) => Some("\x0e".to_string()), //14
+        ("N", ModifierCombinations::CtrlShift) => Some("\x0e".to_string()), //14
+        ("o", ModifierCombinations::Ctrl) => Some("\x0f".to_string()), //15
+        ("O", ModifierCombinations::CtrlShift) => Some("\x0f".to_string()), //15
+        ("p", ModifierCombinations::Ctrl) => Some("\x10".to_string()), //16
+        ("P", ModifierCombinations::CtrlShift) => Some("\x10".to_string()), //16
+        ("q", ModifierCombinations::Ctrl) => Some("\x11".to_string()), //17
+        ("Q", ModifierCombinations::CtrlShift) => Some("\x11".to_string()), //17
+        ("r", ModifierCombinations::Ctrl) => Some("\x12".to_string()), //18
+        ("R", ModifierCombinations::CtrlShift) => Some("\x12".to_string()), //18
+        ("s", ModifierCombinations::Ctrl) => Some("\x13".to_string()), //19
+        ("S", ModifierCombinations::CtrlShift) => Some("\x13".to_string()), //19
+        ("t", ModifierCombinations::Ctrl) => Some("\x14".to_string()), //20
+        ("T", ModifierCombinations::CtrlShift) => Some("\x14".to_string()), //20
+        ("u", ModifierCombinations::Ctrl) => Some("\x15".to_string()), //21
+        ("U", ModifierCombinations::CtrlShift) => Some("\x15".to_string()), //21
+        ("v", ModifierCombinations::Ctrl) => Some("\x16".to_string()), //22
+        ("V", ModifierCombinations::CtrlShift) => Some("\x16".to_string()), //22
+        ("w", ModifierCombinations::Ctrl) => Some("\x17".to_string()), //23
+        ("W", ModifierCombinations::CtrlShift) => Some("\x17".to_string()), //23
+        ("x", ModifierCombinations::Ctrl) => Some("\x18".to_string()), //24
+        ("X", ModifierCombinations::CtrlShift) => Some("\x18".to_string()), //24
+        ("y", ModifierCombinations::Ctrl) => Some("\x19".to_string()), //25
+        ("Y", ModifierCombinations::CtrlShift) => Some("\x19".to_string()), //25
+        ("z", ModifierCombinations::Ctrl) => Some("\x1a".to_string()), //26
+        ("Z", ModifierCombinations::CtrlShift) => Some("\x1a".to_string()), //26
+        ("@", ModifierCombinations::Ctrl) => Some("\x00".to_string()), //0
+        ("[", ModifierCombinations::Ctrl) => Some("\x1b".to_string()), //27
+        ("\\", ModifierCombinations::Ctrl) => Some("\x1c".to_string()), //28
+        ("]", ModifierCombinations::Ctrl) => Some("\x1d".to_string()), //29
+        ("^", ModifierCombinations::Ctrl) => Some("\x1e".to_string()), //30
+        ("_", ModifierCombinations::Ctrl) => Some("\x1f".to_string()), //31
+        ("?", ModifierCombinations::Ctrl) => Some("\x7f".to_string()), //127
         _ => None,
     };
     if manual_esc_str.is_some() {