undo: there are just two forms of deletion: backspacing and deleting
A third method does not exist.master
parent
79a4bf81dc
commit
1cb6619d6a
12
src/text.c
12
src/text.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue