diff options
Diffstat (limited to 'readline/undo.c')
-rw-r--r-- | readline/undo.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/readline/undo.c b/readline/undo.c index f7f30d1..25c287b 100644 --- a/readline/undo.c +++ b/readline/undo.c @@ -48,8 +48,7 @@ #include "history.h" #include "rlprivate.h" - -#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) +#include "xmalloc.h" /* Non-zero tells rl_delete_text and rl_insert_text to not add to the undo list. */ @@ -86,7 +85,7 @@ rl_add_undo (what, start, end, text) /* Free the existing undo list. */ void -free_undo_list () +rl_free_undo_list () { while (rl_undo_list) { @@ -107,17 +106,18 @@ int rl_do_undo () { UNDO_LIST *release; - int waiting_for_begin = 0; - int start, end; + int waiting_for_begin, start, end; #define TRANS(i) ((i) == -1 ? rl_point : ((i) == -2 ? rl_end : (i))) + start = end = waiting_for_begin = 0; do { if (!rl_undo_list) return (0); _rl_doing_an_undo = 1; + RL_SETSTATE(RL_STATE_UNDOING); /* To better support vi-mode, a start or end value of -1 means rl_point, and a value of -2 means rl_end. */ @@ -152,11 +152,12 @@ rl_do_undo () if (waiting_for_begin) waiting_for_begin--; else - ding (); + rl_ding (); break; } _rl_doing_an_undo = 0; + RL_UNSETSTATE(RL_STATE_UNDOING); release = rl_undo_list; rl_undo_list = rl_undo_list->next; @@ -231,7 +232,7 @@ rl_revert_line (count, key) int count, key; { if (!rl_undo_list) - ding (); + rl_ding (); else { while (rl_undo_list) @@ -254,7 +255,7 @@ rl_undo_command (count, key) count--; else { - ding (); + rl_ding (); break; } } |