tInsert characters to row buffer in insert mode - ve - a minimal text editor (work in progress)
 (HTM) git clone git://src.adamsgaard.dk/ve
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 27dc307eae9e93c25bc9bba5fa30e92fc2eba879
 (DIR) parent 0ebc6405b29708897e7f73c3216dbabaef92e852
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Tue,  6 Aug 2019 15:51:22 +0200
       
       Insert characters to row buffer in insert mode
       
       Diffstat:
         M input.c                             |       3 +++
         M row.c                               |      16 +++++++++++++---
         M row.h                               |       1 +
       
       3 files changed, 17 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/input.c b/input.c
       t@@ -2,6 +2,7 @@
        #include <stdlib.h>
        #include "byote.h"
        #include "terminal.h"
       +#include "edit.h"
        
        #define CTRL_KEY(k) ((k) & 0x1f)
        
       t@@ -126,6 +127,8 @@ editor_process_keypress()
                                case 27:  /* escape */
                                        E.mode = 0;
                                        break;
       +                        default:
       +                                editor_insert_char(c);
                        }
                }
        }
 (DIR) diff --git a/row.c b/row.c
       t@@ -1,9 +1,6 @@
        #include <stdlib.h>
       -#include <stdio.h>
       -#include <sys/types.h>
        #include <string.h>
        #include "byote.h"
       -#include "terminal.h"
        
        /* navigate over tab-representative string as one character */
        int
       t@@ -69,3 +66,16 @@ editor_append_row(char *s, size_t len)
        
                ++E.num_rows;
        }
       +
       +/* insert character to row, making sure to allocate memory accordingly */
       +void
       +editor_row_insert_char(eRow *row, int i, int c)
       +{
       +        if (i<0 || i>row->size)
       +                i = row->size;
       +        row->chars = realloc(row->chars, row->size + 2);
       +        memmove(&row->chars[i+1], &row->chars[i], row->size - i+1);
       +        row->size++;
       +        row->chars[i] = c;
       +        editor_update_row(row);
       +}
 (DIR) diff --git a/row.h b/row.h
       t@@ -5,5 +5,6 @@
        
        int editor_row_cursor_x_to_rx(eRow *row, int cursor_x);
        void editor_append_row(char *s, size_t len);
       +void editor_row_insert_char(eRow *row, int i, int c);
        
        #endif