Skip to content

Commit b7a4f15

Browse files
committed
mp-readline: Save "prompt" string in readline state.
1 parent ad9daad commit b7a4f15

3 files changed

Lines changed: 16 additions & 16 deletions

File tree

lib/mp-readline/readline.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ typedef struct _readline_t {
8585
int hist_cur;
8686
int cursor_pos;
8787
char escape_seq_buf[1];
88+
const char *prompt;
8889
} readline_t;
8990

9091
STATIC readline_t rl;
@@ -260,23 +261,26 @@ int readline_process_char(int c) {
260261
return -1;
261262
}
262263

263-
void readline_note_newline(void) {
264+
void readline_note_newline(const char *prompt) {
264265
rl.orig_line_len = rl.line->len;
265266
rl.cursor_pos = rl.orig_line_len;
267+
rl.prompt = prompt;
268+
mp_hal_stdout_tx_str(prompt);
266269
}
267270

268-
void readline_init(vstr_t *line) {
271+
void readline_init(vstr_t *line, const char *prompt) {
269272
rl.line = line;
270273
rl.orig_line_len = line->len;
271274
rl.escape_seq = ESEQ_NONE;
272275
rl.escape_seq_buf[0] = 0;
273276
rl.hist_cur = -1;
274277
rl.cursor_pos = rl.orig_line_len;
278+
rl.prompt = prompt;
279+
mp_hal_stdout_tx_str(prompt);
275280
}
276281

277282
int readline(vstr_t *line, const char *prompt) {
278-
mp_hal_stdout_tx_str(prompt);
279-
readline_init(line);
283+
readline_init(line, prompt);
280284
for (;;) {
281285
int c = mp_hal_stdin_rx_chr();
282286
int r = readline_process_char(c);

lib/mp-readline/readline.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@
3333
void readline_init0(void);
3434
int readline(vstr_t *line, const char *prompt);
3535

36-
void readline_init(vstr_t *line);
37-
void readline_note_newline(void);
36+
void readline_init(vstr_t *line, const char *prompt);
37+
void readline_note_newline(const char *prompt);
3838
int readline_process_char(int c);

stmhal/pyexec.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,13 @@ friendly_repl_t repl;
181181
void pyexec_friendly_repl_init(void) {
182182
vstr_init(&repl.line, 32);
183183
repl.cont_line = false;
184-
readline_init(&repl.line);
185-
mp_hal_stdout_tx_str(">>> ");
184+
readline_init(&repl.line, ">>> ");
186185
}
187186

188-
void pyexec_friendly_repl_reset() {
189-
repl.cont_line = false;
187+
void pyexec_friendly_repl_reset(void) {
190188
vstr_reset(&repl.line);
191-
readline_init(&repl.line);
189+
repl.cont_line = false;
190+
readline_init(&repl.line, ">>> ");
192191
}
193192

194193
int pyexec_friendly_repl_process_char(int c) {
@@ -229,8 +228,7 @@ int pyexec_friendly_repl_process_char(int c) {
229228

230229
vstr_add_byte(&repl.line, '\n');
231230
repl.cont_line = true;
232-
mp_hal_stdout_tx_str("... ");
233-
readline_note_newline();
231+
readline_note_newline("... ");
234232
return 0;
235233

236234
} else {
@@ -251,8 +249,7 @@ int pyexec_friendly_repl_process_char(int c) {
251249

252250
if (mp_repl_continue_with_input(vstr_null_terminated_str(&repl.line))) {
253251
vstr_add_byte(&repl.line, '\n');
254-
mp_hal_stdout_tx_str("... ");
255-
readline_note_newline();
252+
readline_note_newline("... ");
256253
return 0;
257254
}
258255

@@ -270,7 +267,6 @@ exec: ;
270267
friendly_repl_reset: // TODO
271268
input_restart:
272269
pyexec_friendly_repl_reset();
273-
mp_hal_stdout_tx_str(">>> ");
274270
return 0;
275271
}
276272
}

0 commit comments

Comments
 (0)