diff options
Diffstat (limited to 'linenoise/linenoise.c')
-rw-r--r-- | linenoise/linenoise.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c index 5753e7a4..fedb7805 100644 --- a/linenoise/linenoise.c +++ b/linenoise/linenoise.c @@ -1369,6 +1369,33 @@ static void edit_delete_prev_word(lino_t *l) { } } +static void edit_delete_line(lino_t *l) +{ + clear_sel(l); + + if (l->mlmode) { + char *e = l->data + l->dpos, *s = e; + size_t delta; + + while (s > l->data && s[-1] != '\r') + s--; + e += strcspn(e, "\r"); + if (*e == '\r') + e++; + + delta = e - s; + + if (delta > 0) { + record_undo(l); + memmove(s, e, l->data + l->dlen - e); + l->dlen -= delta; + l->dpos = s - l->data; + l->data[l->dlen] = 0; + l->need_refresh = 1; + } + } +} + static void tr(char *s, int find, int rep) { for (; *s; s++) @@ -1524,6 +1551,10 @@ static int edit(lino_t *l, const char *prompt) extended = 0; edit_in_editor(l); break; + case CTL('K'): + extended = 0; + edit_delete_line(l); + break; case CTL('V'): extended = 0; paste = 1; |