undo: there are just two forms of deletion: backspacing and deleting

A third method does not exist.
master
Benno Schulenberg 2016-12-19 21:18:43 +01:00
parent 79a4bf81dc
commit 1cb6619d6a
1 changed files with 3 additions and 9 deletions

View File

@ -1366,21 +1366,15 @@ fprintf(stderr, " >> Updating... action = %d, openfile->last_action = %d, openf
} }
case BACK: case BACK:
case DEL: { case DEL: {
/* Add the removed character after or before earlier removed stuff. */
char *char_buf = charalloc(mb_cur_max()); char *char_buf = charalloc(mb_cur_max());
int char_len = parse_mbchar(&openfile->current->data[openfile->current_x], char_buf, NULL); int char_len = parse_mbchar(&openfile->current->data[openfile->current_x], char_buf, NULL);
if (openfile->current_x == u->begin) { if (action == DEL) {
/* They're deleting. */
u->strdata = addstrings(u->strdata, strlen(u->strdata), char_buf, char_len); u->strdata = addstrings(u->strdata, strlen(u->strdata), char_buf, char_len);
u->mark_begin_x = openfile->current_x; u->mark_begin_x = openfile->current_x;
} else if (openfile->current_x == u->begin - char_len) { } else {
/* They're backspacing. */
u->strdata = addstrings(char_buf, char_len, u->strdata, strlen(u->strdata)); u->strdata = addstrings(char_buf, char_len, u->strdata, strlen(u->strdata));
u->begin = openfile->current_x; u->begin = openfile->current_x;
} else {
/* They deleted something else on the line. */
free(char_buf);
add_undo(u->type);
return;
} }
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, " >> current undo data is \"%s\"\nu->begin = %lu\n", u->strdata, (unsigned long)u->begin); fprintf(stderr, " >> current undo data is \"%s\"\nu->begin = %lu\n", u->strdata, (unsigned long)u->begin);