aboutsummaryrefslogtreecommitdiff
path: root/readline/undo.c
diff options
context:
space:
mode:
Diffstat (limited to 'readline/undo.c')
-rw-r--r--readline/undo.c17
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;
}
}