summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-10-01 07:04:53 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-10-01 07:04:53 -0700
commit2d234f9d416cab25fb7d3d334bcfe1ef7ffa461f (patch)
treedbbaadb050fb8851bfc12304046dcb61fe6143a1
parentca0ca229837e344df05bfa79333b1ed4993f9719 (diff)
downloadtxr-2d234f9d416cab25fb7d3d334bcfe1ef7ffa461f.tar.gz
txr-2d234f9d416cab25fb7d3d334bcfe1ef7ffa461f.tar.bz2
txr-2d234f9d416cab25fb7d3d334bcfe1ef7ffa461f.zip
linenoise: Ctrl-A/E overloaded in multi-line mode.
* linenoise/linenoise.c (edit_move_sol): If the cursor is already at the beginning of a line, then move it to the start of the buffer. (edit_move_eol): If the cursor is at the end of the line, then move it to the end of the buffer. This also fixes a bug: previously, if the cursor was at the end of the line already, it moved to the end of the following line. * txr.1: Documented.
-rw-r--r--linenoise/linenoise.c5
-rw-r--r--txr.111
2 files changed, 13 insertions, 3 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c
index 01e48ed9..de12bdb4 100644
--- a/linenoise/linenoise.c
+++ b/linenoise/linenoise.c
@@ -1339,6 +1339,8 @@ static void edit_move_sol(lino_t *l) {
if (l->dpos != dpos) {
l->dpos = dpos;
l->need_refresh = 1;
+ } else {
+ edit_move_home(l);
}
}
}
@@ -1357,12 +1359,13 @@ static void edit_move_eol(lino_t *l) {
} else {
size_t dpos = l->dpos;
- dpos += strspn(l->data + dpos, "\r");
dpos += strcspn(l->data + dpos, "\r");
if (l->dpos != dpos) {
l->dpos = dpos;
l->need_refresh = 1;
+ } else {
+ edit_move_end(l);
}
}
}
diff --git a/txr.1 b/txr.1
index c57548a7..92c2f3ca 100644
--- a/txr.1
+++ b/txr.1
@@ -33997,10 +33997,17 @@ such that the last character of the line is to the left of the cursor
position. On terminals which have the Home and End keys, these may also
be used instead of Ctrl-A and Ctrl-E.
-In multi-line mode, these commands jump to the beginning or end of the
-current physical line. In line mode, they move to the beginning or end of the
+In line mode, these commands move the cursor to the beginning or end of the
edit buffer.
+In multi-line mode, if the cursor is not already at the beginning of a physical
+line, then Ctrl-A moves it to the first character of the physical line.
+Otherwise, Ctrl-A moves the cursor to the beginning of the edit buffer.
+
+Similarly, in multi-line mode, if the cursor not already at the end of a
+physical line, Ctrl-E moves it there. Otherwise, the cursor moves to the
+end of the edit buffer.
+
.NP* Jump to Matching Parenthesis
If the cursor is on an opening or closing parenthesis, brace or bracket,