tex: all modifications of a :g should be undone with :u - neatvi - [fork] simple vi-type editor with UTF-8 support
 (HTM) git clone git://src.adamsgaard.dk/neatvi
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit d550e4e2117866d1f2d99bc5279d545d1c10a30d
 (DIR) parent dd40b8405b61a172a6712593ef0ceaa75ae0c5d3
 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
       Date:   Sun, 27 Dec 2015 08:04:03 +0330
       
       ex: all modifications of a :g should be undone with :u
       
       Diffstat:
         M ex.c                                |      18 ++++++++++++++----
       
       1 file changed, 14 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/ex.c b/ex.c
       t@@ -720,6 +720,8 @@ static int ec_cmap(char *ec)
                return 0;
        }
        
       +static int ex_exec(char *ln);
       +
        static int ec_glob(char *ec)
        {
                char loc[EXLEN], cmd[EXLEN];
       t@@ -750,7 +752,7 @@ static int ec_glob(char *ec)
                        if ((rset_find(re, ln, LEN(offs) / 2, offs, 0) < 0) == not) {
                                int len = lbuf_len(xb);
                                xrow = i;
       -                        ex_command(s);
       +                        ex_exec(s);
                                i += lbuf_len(xb) - len;
                                end += lbuf_len(xb) - len;
                        }
       t@@ -863,24 +865,32 @@ static struct excmd {
        };
        
        /* execute a single ex command */
       -void ex_command(char *ln)
       +static int ex_exec(char *ln)
        {
                char ec[EXLEN];
                char cmd[EXLEN];
                int i;
       +        int ret = 0;
                while (*ln) {
                        ln = ex_line(ln, ec);
                        ex_cmd(ec, cmd);
                        for (i = 0; i < LEN(excmds); i++) {
                                if (!strcmp(excmds[i].abbr, cmd) ||
                                                !strcmp(excmds[i].name, cmd)) {
       -                                excmds[i].ec(ec);
       +                                ret = excmds[i].ec(ec);
                                        break;
                                }
                        }
                        if (!xvis && !cmd[0])
       -                        ec_print(ec);
       +                        ret = ec_print(ec);
                }
       +        return ret;
       +}
       +
       +/* execute a single ex command */
       +void ex_command(char *ln)
       +{
       +        ex_exec(ln);
                lbuf_modified(xb);
        }