tlbuf: when the last line lacks eol, append it - neatvi - [fork] simple vi-type… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit d2e6b8054daf567c687f0cb4b526b4a6f439d7d5 | |
parent 20cc8817475554d8448632970ff7c8d84ed2f9e2 | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Mon, 6 Jun 2016 23:40:14 +0430 | |
lbuf: when the last line lacks eol, append it | |
Diffstat: | |
M lbuf.c | 14 +++++++++----- | |
1 file changed, 9 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/lbuf.c b/lbuf.c | |
t@@ -133,7 +133,7 @@ static void lbuf_insertline(struct lbuf *lb, int pos, char… | |
/* low-level replacement */ | |
static void lbuf_replace(struct lbuf *lb, char *s, int pos, int n_del) | |
{ | |
- char *r; | |
+ char *r, *n; | |
int n_ins = 0; | |
int i; | |
for (i = 0; i < n_del; i++) | |
t@@ -141,12 +141,16 @@ static void lbuf_replace(struct lbuf *lb, char *s, int p… | |
memmove(lb->ln + pos, lb->ln + pos + n_del, | |
(lb->ln_n - pos - n_del) * sizeof(lb->ln[0])); | |
lb->ln_n -= n_del; | |
- while (s && (r = strchr(s, '\n'))) { | |
- char *n = malloc(r - s + 2); | |
- memcpy(n, s, r - s + 1); | |
+ while (s && *s) { | |
+ r = strchr(s, '\n'); | |
+ if (!r) /* no eol */ | |
+ r = strchr(s, '\0'); | |
+ n = malloc(r - s + 2); | |
+ memcpy(n, s, r - s); | |
+ n[r - s + 0] = '\n'; | |
n[r - s + 1] = '\0'; | |
lbuf_insertline(lb, pos + n_ins++, n); | |
- s = r + 1; | |
+ s = *r ? r + 1 : r; | |
} | |
for (i = 0; i < LEN(lb->mark); i++) { /* updating marks */ | |
if (!s && lb->mark[i] >= pos && lb->mark[i] < pos + n_del) |