tled: indenting and deindenting when auto-indent buffer is empty - neatvi - [fo… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit 49e4029728927afb1a22864698be10cf445413aa | |
parent edaafb4c0b7285982922d36a1e8b671e3d679691 | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Thu, 4 Jun 2020 12:32:27 +0430 | |
led: indenting and deindenting when auto-indent buffer is empty | |
Diffstat: | |
M led.c | 15 ++++++++++++++- | |
1 file changed, 14 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/led.c b/led.c | |
t@@ -291,6 +291,16 @@ static char *led_line(char *pref, char *post, char *ai, | |
ai[ai_len] = '\0'; | |
break; | |
case TK_CTL('d'): | |
+ /* when ai and pref are empty, remove the first space … | |
+ if (ai_len == 0 && !pref[0]) { | |
+ char *buf = sbuf_buf(sb); | |
+ if (buf[0] == ' ' || buf[0] == '\t') { | |
+ char *dup = uc_dup(buf + 1); | |
+ sbuf_cut(sb, 0); | |
+ sbuf_str(sb, dup); | |
+ free(dup); | |
+ } | |
+ } | |
if (ai_len > 0) | |
ai[--ai_len] = '\0'; | |
break; | |
t@@ -337,7 +347,7 @@ char *led_input(char *pref, char *post, int *kmap, char *s… | |
{ | |
struct sbuf *sb = sbuf_make(); | |
char ai[128]; | |
- int ai_max = xai ? sizeof(ai) - 1 : 0; | |
+ int ai_max = sizeof(ai) - 1; | |
int n = 0; | |
int key; | |
while (n < ai_max && (*pref == ' ' || *pref == '\t')) | |
t@@ -348,6 +358,7 @@ char *led_input(char *pref, char *post, int *kmap, char *s… | |
int ln_sp = 0; /* number of initial spaces in ln */ | |
while (ln[ln_sp] && (ln[ln_sp] == ' ' || ln[ln_sp] == '\t')) | |
ln_sp++; | |
+ /* append the auto-indent only if there are other characters */ | |
if (ln[ln_sp] || (pref && pref[0]) || | |
(key != '\n' && post[0] && post[0] != '\n')) | |
sbuf_str(sb, ai); | |
t@@ -368,6 +379,8 @@ char *led_input(char *pref, char *post, int *kmap, char *s… | |
memcpy(ai + ai_len, ln, ai_new); | |
ai[ai_len + ai_new] = '\0'; | |
} | |
+ if (!xai) | |
+ ai[0] = '\0'; | |
free(ln); | |
if (key != '\n') | |
break; |