diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-01-30 21:18:13 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-01-30 21:18:13 +0100 |
commit | 56b6fb198ab7bf77664da54c2f1bcaa322037317 (patch) | |
tree | 5ec860a43ec4546b635516274b19708ada0ad8d6 | |
parent | f176af7cd1ff978e6444b273fa1a81fa9998c83f (diff) | |
download | serenity-56b6fb198ab7bf77664da54c2f1bcaa322037317.zip |
Add support for keyboard arrow keys.
Also have them send the appropriate escape sequences in Terminal.
Basic history browsing now works in bash. How nice! :^)
-rw-r--r-- | Kernel/Keyboard.cpp | 37 | ||||
-rw-r--r-- | Terminal/main.cpp | 18 |
2 files changed, 49 insertions, 6 deletions
diff --git a/Kernel/Keyboard.cpp b/Kernel/Keyboard.cpp index d747019e62..9da766c5dd 100644 --- a/Kernel/Keyboard.cpp +++ b/Kernel/Keyboard.cpp @@ -42,12 +42,26 @@ static KeyCode unshifted_key_map[0x80] = Key_Return, // 28 Key_Control, // 29 Key_A, Key_S, Key_D, Key_F, Key_G, Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Apostrophe, Key_Backtick, - Key_Shift, + Key_Shift, // 42 Key_Backslash, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, - Key_Alt, + Key_Alt, // 54 + Key_Invalid, Key_Invalid, + Key_Space, // 57 Key_Invalid, Key_Invalid, - Key_Space + Key_Invalid, // 60 + Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, + Key_Invalid, // 70 + Key_Invalid, + Key_Up, + Key_Invalid, + Key_Invalid, + Key_Left, + Key_Invalid, + Key_Right, // 77 + Key_Invalid, + Key_Invalid, + Key_Down, // 80 }; static KeyCode shifted_key_map[0x100] = @@ -64,10 +78,23 @@ static KeyCode shifted_key_map[0x100] = Key_Z, Key_X, Key_C, Key_V, Key_B, Key_N, Key_M, Key_LessThan, Key_GreaterThan, Key_QuestionMark, Key_Alt, Key_Invalid, Key_Invalid, - Key_Space + Key_Space, + Key_Invalid, Key_Invalid, + Key_Invalid, // 60 + Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, Key_Invalid, + Key_Invalid, // 70 + Key_Invalid, + Key_Up, + Key_Invalid, + Key_Invalid, + Key_Left, + Key_Invalid, + Key_Right, // 77 + Key_Invalid, + Key_Invalid, + Key_Down, // 80 }; - void Keyboard::key_state_changed(byte raw, bool pressed) { Event event; diff --git a/Terminal/main.cpp b/Terminal/main.cpp index 98b29047dd..2fee6aaa4c 100644 --- a/Terminal/main.cpp +++ b/Terminal/main.cpp @@ -12,6 +12,7 @@ #include <sys/select.h> #include <LibC/gui.h> #include "Terminal.h" +#include <Kernel/KeyCode.h> static void make_shell(int ptm_fd) { @@ -128,7 +129,22 @@ int main(int, char**) ch = 0x1c; } } - write(ptm_fd, &ch, 1); + switch (event.key.key) { + case KeyCode::Key_Up: + write(ptm_fd, "\033[A", 3); + break; + case KeyCode::Key_Down: + write(ptm_fd, "\033[B", 3); + break; + case KeyCode::Key_Left: + write(ptm_fd, "\033[C", 3); + break; + case KeyCode::Key_Right: + write(ptm_fd, "\033[D", 3); + break; + default: + write(ptm_fd, &ch, 1); + } } else if (event.type == GUI_Event::Type::WindowActivated) { terminal.set_in_active_window(true); } else if (event.type == GUI_Event::Type::WindowDeactivated) { |