summaryrefslogtreecommitdiff
path: root/readline/macro.c
diff options
context:
space:
mode:
Diffstat (limited to 'readline/macro.c')
-rw-r--r--readline/macro.c42
1 files changed, 39 insertions, 3 deletions
diff --git a/readline/macro.c b/readline/macro.c
index c2fac8addbe..c7017cc6b3d 100644
--- a/readline/macro.c
+++ b/readline/macro.c
@@ -121,6 +121,19 @@ _rl_next_macro_key ()
#endif
}
+int
+_rl_prev_macro_key ()
+{
+ if (rl_executing_macro == 0)
+ return (0);
+
+ if (executing_macro_index == 0)
+ return (0);
+
+ executing_macro_index--;
+ return (rl_executing_macro[executing_macro_index]);
+}
+
/* Save the currently executing macro on a stack of saved macros. */
void
_rl_push_executing_macro ()
@@ -206,7 +219,7 @@ rl_start_kbd_macro (ignore1, ignore2)
if (RL_ISSTATE (RL_STATE_MACRODEF))
{
_rl_abort_internal ();
- return -1;
+ return 1;
}
if (rl_explicit_arg)
@@ -231,10 +244,10 @@ rl_end_kbd_macro (count, ignore)
if (RL_ISSTATE (RL_STATE_MACRODEF) == 0)
{
_rl_abort_internal ();
- return -1;
+ return 1;
}
- current_macro_index -= rl_key_sequence_length - 1;
+ current_macro_index -= rl_key_sequence_length;
current_macro[current_macro_index] = '\0';
RL_UNSETSTATE(RL_STATE_MACRODEF);
@@ -263,6 +276,29 @@ rl_call_last_kbd_macro (count, ignore)
return 0;
}
+int
+rl_print_last_kbd_macro (count, ignore)
+ int count, ignore;
+{
+ char *m;
+
+ if (current_macro == 0)
+ {
+ rl_ding ();
+ return 0;
+ }
+ m = _rl_untranslate_macro_value (current_macro, 1);
+ rl_crlf ();
+ printf ("%s", m);
+ fflush (stdout);
+ rl_crlf ();
+ FREE (m);
+ rl_forced_update_display ();
+ rl_display_fixed = 1;
+
+ return 0;
+}
+
void
rl_push_macro_input (macro)
char *macro;