X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=readline%2Fundo.c;h=25c287b5a2df3df04c7d9fd98f1978949c6d7016;hb=84041b4c47edb0461f3b82afb77ca2d81819ebfa;hp=f7f30d17d9d8dc48d99e7c4e50069d04e647933d;hpb=f9267e152c9c4e2b150366c590674180e66d45df;p=deliverable%2Fbinutils-gdb.git diff --git a/readline/undo.c b/readline/undo.c index f7f30d17d9..25c287b5a2 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; } }