cutting: when deleting whole words, don't join lines unexpectedly

That is, wait with deleting words until they start under cursor,
so the user can see which word is goin to be eaten, and join lines
only when the cursor already sits at the edge of a line.
master
Benno Schulenberg 2018-09-02 13:26:12 +02:00
parent e6429e782a
commit e21ce0db1f
1 changed files with 19 additions and 3 deletions

View File

@ -205,11 +205,27 @@ void do_cutword(bool backward)
cutbuffer = NULL;
cutbottom = NULL;
/* Move the cursor to a word start, to the left or to the right. */
if (backward)
/* Move the cursor to a word start, to the left or to the right.
* If that word is on another line and the cursor was not already
* on the edge of the original line, then put the cursor on that
* edge instead, so that lines will not be joined unexpectedly. */
if (backward) {
do_prev_word(ISSET(WORD_BOUNDS), FALSE);
else
if (openfile->current != is_current) {
if (is_current_x > 0) {
openfile->current = is_current;
openfile->current_x = 0;
} else
openfile->current_x = strlen(openfile->current->data);
}
} else {
do_next_word(FALSE, ISSET(WORD_BOUNDS), FALSE);
if (openfile->current != is_current &&
is_current->data[is_current_x] != '\0') {
openfile->current = is_current;
openfile->current_x = strlen(is_current->data);
}
}
/* Set the mark at the start of that word. */
openfile->mark = openfile->current;