diff options
-rw-r--r-- | linenoise/linenoise.c | 31 | ||||
-rw-r--r-- | txr.1 | 7 |
2 files changed, 38 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; @@ -33653,6 +33653,13 @@ appears as such in multi-line mode, or as .code ^M in line mode. +.NP* Delete Current Line + +The Ctrl-X, Ctrl-K command sequence may be used in multi-line mode +to delete the entire physical line under the cursor. Any lines below that +line move up to close the gap. In line mode, the command has no effect, +other than canceling select mode. + .NP* History Recall By default, the most recent 500 lines submitted to the interactive listener are |