[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 1/2] vterm: vt100-Sequenzen für Strg+Pfeiltaste



+ vterm: vt100-Sequenzen für Strg+Pfeiltaste

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/vterm/input.c       |    3 ++-
 src/modules/vterm/vt100_input.c |   29 +++++++++++++++++++++++------
 src/modules/vterm/vterm.h       |    5 +++--
 3 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/src/modules/vterm/input.c b/src/modules/vterm/input.c
index 25fb78f..95cf991 100644
--- a/src/modules/vterm/input.c
+++ b/src/modules/vterm/input.c
@@ -167,7 +167,8 @@ static void send_key_to_vterm(vterminal_t* vterm, uint8_t keycode,
     }
 
     // Eingabe an vt100-Emulation weiterleiten
-    len = vt100_process_input(current_vterm, keycode, buf, sizeof(buf));
+    len = vt100_process_input(current_vterm, keycode, &modifiers,
+        buf, sizeof(buf));
     if (len != -1) {
         vterm_process_input(buf, len);
         return;
diff --git a/src/modules/vterm/vt100_input.c b/src/modules/vterm/vt100_input.c
index 0b3a02e..6520351 100644
--- a/src/modules/vterm/vt100_input.c
+++ b/src/modules/vterm/vt100_input.c
@@ -45,14 +45,15 @@
  *
  * @param vterm     VTerm-Handle
  * @param keycode   Keycode der gedrueckten Taste
+ * @param mod       Gedrueckte Modifier-Tasten
  * @param buffer    Puffer in dem das Resultat abgelegt werden kann
  * @param buffer_sz Groesse des Puffers
  *
  * @return Anzahl der Zeichen die neu im Puffer sind oder -1 wenn die Emulation
  *         nichts mit der Taste anfangen kann
  */
-int vt100_process_input(vterminal_t* vterm, uint8_t keycode, char* buffer,
-    size_t buffer_sz)
+int vt100_process_input(vterminal_t* vterm, uint8_t keycode,
+    struct modifiers* mod, char* buffer, size_t buffer_sz)
 {
     const char* res = NULL;
 
@@ -60,22 +61,38 @@ int vt100_process_input(vterminal_t* vterm, uint8_t keycode, char* buffer,
     switch (keycode) {
         case KEYCODE_ARROW_UP:
             // vt52: <ESC>A  w CKM: \033[A  wo CKM: \033OA
-            res = "\033[A";
+            if (mod->control) {
+                res = "\033[1;5A";
+            } else {
+                res = "\033[A";
+            }
             break;
 
         case KEYCODE_ARROW_DOWN:
             // vt52: <ESC>B  w CKM: \033[B  wo CKM: \033OB
-            res = "\033[B";
+            if (mod->control) {
+                res = "\033[1;5B";
+            } else {
+                res = "\033[B";
+            }
             break;
 
         case KEYCODE_ARROW_RIGHT:
             // vt52: <ESC>C  w CKM: \033[C  wo CKM: \033OC
-            res = "\033[C";
+            if (mod->control) {
+                res = "\033[1;5C";
+            } else {
+                res = "\033[C";
+            }
             break;
 
         case KEYCODE_ARROW_LEFT:
             // vt52: <ESC>D  w CKM: \033[D  wo CKM: \033OD
-            res = "\033[D";
+            if (mod->control) {
+                res = "\033[1;5D";
+            } else {
+                res = "\033[D";
+            }
             break;
 
         case KEYCODE_HOME:
diff --git a/src/modules/vterm/vterm.h b/src/modules/vterm/vterm.h
index 2f1f68e..a7b6ef7 100644
--- a/src/modules/vterm/vterm.h
+++ b/src/modules/vterm/vterm.h
@@ -241,14 +241,15 @@ static inline void buffer_position(vterm_output_t* out, position_t screen_pos,
  *
  * @param vterm     VTerm-Handle
  * @param keycode   Keycode der gedrueckten Taste
+ * @param mod       Gedrueckte Modifier-Tasten
  * @param buffer    Puffer in dem das Resultat abgelegt werden kann
  * @param buffer_sz Groesse des Puffers
  *
  * @return Anzahl der Zeichen die neu im Puffer sind oder -1 wenn die Emulation
  *         nichts mit der Taste anfangen kann
  */
-int vt100_process_input(vterminal_t* vterm, uint8_t keycode, char* buffer,
-    size_t buffer_sz);
+int vt100_process_input(vterminal_t* vterm, uint8_t keycode,
+    struct modifiers* mod, char* buffer, size_t buffer_sz);
 
 
 /// Ausgabe in vt100-Emulation verarbeiten
-- 
1.6.0.2