Added patch by Johan Bevemyr (jb@bevemyr.com)
[apps/madtty.git] / inject.c
index f9f40e8..031b809 100644 (file)
--- a/inject.c
+++ b/inject.c
@@ -23,6 +23,7 @@ Copyright (c) 2004 Bruno T. C. de Oliveira
 #include "roteprivate.h"
 #include "inject_csi.h"
 #include <string.h>
+#include <stdio.h>
 
 static void cursor_line_down(RoteTerm *rt) {
    int i;
@@ -80,6 +81,13 @@ static inline void put_normal_char(RoteTerm *rt, char c) {
       cursor_line_down(rt);
    }
 
+   if (rt->insert) {
+       int i;
+
+       for(i = rt->cols - 1; i >= rt->ccol+1; i--)
+          rt->cells[rt->crow][i] = rt->cells[rt->crow][i-1];
+   }
+
    rt->cells[rt->crow][rt->ccol].ch = c;
    rt->cells[rt->crow][rt->ccol].attr = rt->curattr;
    rt->ccol++;
@@ -128,7 +136,8 @@ static void handle_control_char(RoteTerm *rt, char c) {
          rt->curpos_dirty = true;
          break;
       case '\t': /* tab */
-         while (rt->ccol % 8) put_normal_char(rt, ' ');
+         rt->ccol += 8 - (rt->ccol % 8);
+         clamp_cursor_to_bounds(rt);
          break;
       case '\x1B': /* begin escape sequence (aborting previous one if any) */
          new_escape_sequence(rt);