summaryrefslogtreecommitdiff
path: root/lib/mp-readline
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-04-26 17:52:01 +0100
committerDamien George <damien.p.george@gmail.com>2015-04-29 00:32:35 +0100
commitb7a4f15b34a490040d87fbcffc728c9c3f64b85a (patch)
tree709ce0c6449e02aadc0517b8c7cc4432c702f9cc /lib/mp-readline
parentad9daadf8aa3b3e07abad3a85520624cef62911a (diff)
mp-readline: Save "prompt" string in readline state.
Diffstat (limited to 'lib/mp-readline')
-rw-r--r--lib/mp-readline/readline.c12
-rw-r--r--lib/mp-readline/readline.h4
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/mp-readline/readline.c b/lib/mp-readline/readline.c
index 303d95b15..ce2a75905 100644
--- a/lib/mp-readline/readline.c
+++ b/lib/mp-readline/readline.c
@@ -85,6 +85,7 @@ typedef struct _readline_t {
int hist_cur;
int cursor_pos;
char escape_seq_buf[1];
+ const char *prompt;
} readline_t;
STATIC readline_t rl;
@@ -260,23 +261,26 @@ end_key:
return -1;
}
-void readline_note_newline(void) {
+void readline_note_newline(const char *prompt) {
rl.orig_line_len = rl.line->len;
rl.cursor_pos = rl.orig_line_len;
+ rl.prompt = prompt;
+ mp_hal_stdout_tx_str(prompt);
}
-void readline_init(vstr_t *line) {
+void readline_init(vstr_t *line, const char *prompt) {
rl.line = line;
rl.orig_line_len = line->len;
rl.escape_seq = ESEQ_NONE;
rl.escape_seq_buf[0] = 0;
rl.hist_cur = -1;
rl.cursor_pos = rl.orig_line_len;
+ rl.prompt = prompt;
+ mp_hal_stdout_tx_str(prompt);
}
int readline(vstr_t *line, const char *prompt) {
- mp_hal_stdout_tx_str(prompt);
- readline_init(line);
+ readline_init(line, prompt);
for (;;) {
int c = mp_hal_stdin_rx_chr();
int r = readline_process_char(c);
diff --git a/lib/mp-readline/readline.h b/lib/mp-readline/readline.h
index c80dfb54a..c901464f4 100644
--- a/lib/mp-readline/readline.h
+++ b/lib/mp-readline/readline.h
@@ -33,6 +33,6 @@
void readline_init0(void);
int readline(vstr_t *line, const char *prompt);
-void readline_init(vstr_t *line);
-void readline_note_newline(void);
+void readline_init(vstr_t *line, const char *prompt);
+void readline_note_newline(const char *prompt);
int readline_process_char(int c);