summaryrefslogtreecommitdiffstats
path: root/linenoise
diff options
context:
space:
mode:
Diffstat (limited to 'linenoise')
-rw-r--r--linenoise/linenoise.c31
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;