ECH handled correctly. - st - Simple Terminal
Log
Files
Refs
README
LICENSE
---
commit 3ba517e796e0c7a73c5030ad791be1db36a8cec5
parent eff05c7b90429ac4dddbbc53ac7d4c05dfc5efd4
Author: Aurélien Aptel 
Date:   Sun, 21 Feb 2010 14:14:58 +0100

ECH handled correctly.

Diffstat:
  st.c                                |      27 ++++++++++++++++++++++-----

1 file changed, 22 insertions(+), 5 deletions(-)
---
diff --git a/st.c b/st.c
@@ -692,13 +692,24 @@ csihandle(void) {
                         default:
                                 goto unknown;
                         }
-                } else goto unknown;
+                } else {
+                        switch(escseq.arg[0]) {
+                        case 4:
+                                term.mode &= ~MODE_INSERT;
+                                break;
+                        default:
+                                goto unknown;
+                        }
+                }
                 break;
         case 'M': /* DL -- Delete  lines */
                 DEFAULT(escseq.arg[0], 1);
                 tdeleteline(escseq.arg[0]);
                 break;
-        case 'X': /* ECH -- Erase  char XXX: same? */
+        case 'X': /* ECH -- Erase  char */
+                DEFAULT(escseq.arg[0], 1);
+                tclearregion(term.c.x, term.c.y, term.c.x + escseq.arg[0], term.c.y);
+                break;
         case 'P': /* DCH -- Delete  char */
                 DEFAULT(escseq.arg[0], 1);
                 tdeletechar(escseq.arg[0]);
@@ -727,10 +738,16 @@ csihandle(void) {
                                 tcursor(CURSOR_SAVE);
                                 tclearregion(0, 0, term.col-1, term.row-1);
                                 break;
-                        default:
-                                goto unknown;
+                        default: goto unknown;
+                        }
+                } else {
+                        switch(escseq.arg[0]) {
+                        case 4:
+                                term.mode |= MODE_INSERT;
+                                break;
+                        default: goto unknown;
                         }
-                } else goto unknown;
+                };
                 break;
         case 'm': /* SGR -- Terminal attribute (color) */
                 tsetattr(escseq.arg, escseq.narg);