summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--linenoise/linenoise.c31
-rw-r--r--txr.17
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;
diff --git a/txr.1 b/txr.1
index 673c1d5e..53d7e32a 100644
--- a/txr.1
+++ b/txr.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