diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index 870a2a182..d0d8c0e94 100644 --- a/repos/gems/src/server/terminal/main.cc +++ b/repos/gems/src/server/terminal/main.cc @@ -90,6 +90,8 @@ struct Terminal::Main : Character_consumer bool _shift_pressed = false; + unsigned _ctrl_pressed = 0; /* number of control keys pressed */ + bool _selecting = false; struct Paste_buffer { char buffer[READ_BUFFER_SIZE]; } _paste_buffer { }; @@ -320,11 +322,26 @@ void Terminal::Main::_handle_input() } } + if (event.key_press(Input::KEY_LEFTCTRL) + || event.key_press(Input::KEY_RIGHTCTRL)) + ++_ctrl_pressed; + + if (event.key_release(Input::KEY_LEFTCTRL) + || event.key_release(Input::KEY_RIGHTCTRL)) + --_ctrl_pressed; + if (event.key_press(Input::BTN_MIDDLE)) _paste_clipboard_content(); event.handle_press([&] (Input::Keycode, Codepoint codepoint) { + /* control-key combinations */ + if (_ctrl_pressed + && codepoint.value >= 'a' && codepoint.value <= 'z') { + _read_buffer.add(Codepoint { codepoint.value - 'a' + 1 } ); + return; + } + /* function-key unicodes */ enum { CODEPOINT_UP = 0xf700, CODEPOINT_DOWN = 0xf701, diff --git a/repos/os/src/server/input_filter/de_ch.chargen b/repos/os/src/server/input_filter/de_ch.chargen index fbc0e2ea4..898a434f9 100644 --- a/repos/os/src/server/input_filter/de_ch.chargen +++ b/repos/os/src/server/input_filter/de_ch.chargen @@ -129,46 +129,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/os/src/server/input_filter/de_de.chargen b/repos/os/src/server/input_filter/de_de.chargen index 85056d516..d1885f4a8 100644 --- a/repos/os/src/server/input_filter/de_de.chargen +++ b/repos/os/src/server/input_filter/de_de.chargen @@ -129,47 +129,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/os/src/server/input_filter/en_us.chargen b/repos/os/src/server/input_filter/en_us.chargen index f826357de..a7b70234d 100644 --- a/repos/os/src/server/input_filter/en_us.chargen +++ b/repos/os/src/server/input_filter/en_us.chargen @@ -133,50 +133,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/os/src/server/input_filter/en_workman.chargen b/repos/os/src/server/input_filter/en_workman.chargen index 432b5a531..e825065e4 100644 --- a/repos/os/src/server/input_filter/en_workman.chargen +++ b/repos/os/src/server/input_filter/en_workman.chargen @@ -118,32 +118,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/os/src/server/input_filter/fr_ch.chargen b/repos/os/src/server/input_filter/fr_ch.chargen index 094549897..a415289b0 100644 --- a/repos/os/src/server/input_filter/fr_ch.chargen +++ b/repos/os/src/server/input_filter/fr_ch.chargen @@ -129,46 +129,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/os/src/server/input_filter/fr_fr.chargen b/repos/os/src/server/input_filter/fr_fr.chargen index b6311dd49..64f0b66ea 100644 --- a/repos/os/src/server/input_filter/fr_fr.chargen +++ b/repos/os/src/server/input_filter/fr_fr.chargen @@ -129,42 +129,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -