neatvi

[fork] simple vi-type editor with UTF-8 support
git clone git://src.adamsgaard.dk/neatvi # fast
git clone https://src.adamsgaard.dk/neatvi.git # slow
Log | Files | Refs | README Back to index

commit b56cd611f89d222d7184c4845e910ecc2a9fba59
parent 0b29f0c4ffb2ed6a6e2d41d74f07a9824ab26502
Author: Ali Gholami Rudi <ali@rudi.ir>
Date:   Sun, 31 May 2015 14:05:19 +0430

vi: separate line-mode put in vc_put()

Diffstat:
Mvi.c | 44+++++++++++++++++++++-----------------------
1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/vi.c b/vi.c @@ -770,40 +770,38 @@ static int vc_put(int cmd) { int cnt = MAX(1, vi_arg1); int lnmode; - char *ln; char *buf = reg_get(vi_ybuf, &lnmode); - struct sbuf *sb; - int off; int i; if (!buf) return 1; - ln = lnmode ? NULL : lbuf_get(xb, xrow); - off = ren_noeol(ln, xoff) + (cmd == 'p'); - if (cmd == 'p' && !ln) - xrow++; - sb = sbuf_make(); - if (ln) { + if (lnmode) { + struct sbuf *sb = sbuf_make(); + for (i = 0; i < cnt; i++) + sbuf_str(sb, buf); + if (!lbuf_len(xb)) + lbuf_put(xb, 0, "\n"); + if (cmd == 'p') + xrow++; + lbuf_put(xb, xrow, sbuf_buf(sb)); + xoff = lbuf_indents(xb, xrow); + sbuf_free(sb); + } else { + struct sbuf *sb = sbuf_make(); + char *ln = xrow < lbuf_len(xb) ? lbuf_get(xb, xrow) : "\n"; + int off = ren_noeol(ln, xoff) + (ln[0] != '\n' && cmd == 'p'); char *s = uc_sub(ln, 0, off); sbuf_str(sb, s); free(s); - } - for (i = 0; i < cnt; i++) - sbuf_str(sb, buf); - if (ln) { - char *s = uc_sub(ln, off, -1); + for (i = 0; i < cnt; i++) + sbuf_str(sb, buf); + s = uc_sub(ln, off, -1); sbuf_str(sb, s); free(s); - } - if (!ln && !lbuf_len(xb)) - lbuf_put(xb, 0, "\n"); - if (ln) lbuf_rm(xb, xrow, xrow + 1); - lbuf_put(xb, xrow, sbuf_buf(sb)); - if (ln) + lbuf_put(xb, xrow, sbuf_buf(sb)); xoff = off + uc_slen(buf) * cnt - 1; - else - xoff = lbuf_indents(xb, xrow); - sbuf_free(sb); + sbuf_free(sb); + } return 0; }