tex: move cursor to the first change after undoing :s - 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 54a452c55c89f3f3bc1a58741b81f2471c7a9c18 (DIR) parent 84fad00b295c1fb13ea3baa0c8267b7aa4b035de (HTM) Author: Kyryl Melekhin <k.melekhin@gmail.com> Date: Wed, 3 Mar 2021 11:18:33 +0330 ex: move cursor to the first change after undoing :s Diffstat: M ex.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) --- (DIR) diff --git a/ex.c b/ex.c t@@ -743,8 +743,10 @@ static int ec_substitute(char *ec) } for (i = beg; i < end; i++) { char *ln = lbuf_get(xb, i); - struct sbuf *r = sbuf_make(); + struct sbuf *r = NULL; while (rset_find(re, ln, LEN(offs) / 2, offs, 0) >= 0) { + if (!r) + r = sbuf_make(); sbuf_mem(r, ln, offs[0]); replace(r, rep, ln, offs); ln += offs[1]; t@@ -753,9 +755,11 @@ static int ec_substitute(char *ec) if (offs[1] <= 0) /* zero-length match */ sbuf_chr(r, (unsigned char) *ln++); } - sbuf_str(r, ln); - lbuf_edit(xb, sbuf_buf(r), i, i + 1); - sbuf_free(r); + if (r) { + sbuf_str(r, ln); + lbuf_edit(xb, sbuf_buf(r), i, i + 1); + sbuf_free(r); + } } rset_free(re); free(rep);