OSX: Multiple libedit/readline fixes (#585)

* OSX: Multiple libedit/readline fixes.
This commit is contained in:
Michael Farrell 2018-03-22 02:05:03 +11:00 committed by pwpiwi
commit a5a830168f
2 changed files with 8 additions and 5 deletions

View file

@ -132,7 +132,7 @@ main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) {
printf("executing commands from file: %s\n", script_cmds_file); printf("executing commands from file: %s\n", script_cmds_file);
} }
} }
read_history(".history"); read_history(".history");
while(1) { while(1) {

View file

@ -53,8 +53,11 @@ void PrintAndLog(char *fmt, ...)
} }
} }
// If there is an incoming message from the hardware (eg: lf hid read) in
// the background (while the prompt is displayed and accepting user input),
// stash the prompt and bring it back later.
#ifdef RL_STATE_READCMD #ifdef RL_STATE_READCMD
// We are using GNU readline. // We are using GNU readline. libedit (OSX) doesn't support this flag.
int need_hack = (rl_readline_state & RL_STATE_READCMD) > 0; int need_hack = (rl_readline_state & RL_STATE_READCMD) > 0;
if (need_hack) { if (need_hack) {
@ -64,9 +67,6 @@ void PrintAndLog(char *fmt, ...)
rl_replace_line("", 0); rl_replace_line("", 0);
rl_redisplay(); rl_redisplay();
} }
#else
// We are using libedit (OSX), which doesn't support this flag.
int need_hack = 0;
#endif #endif
va_start(argptr, fmt); va_start(argptr, fmt);
@ -76,6 +76,8 @@ void PrintAndLog(char *fmt, ...)
va_end(argptr); va_end(argptr);
printf("\n"); printf("\n");
#ifdef RL_STATE_READCMD
// We are using GNU readline. libedit (OSX) doesn't support this flag.
if (need_hack) { if (need_hack) {
rl_restore_prompt(); rl_restore_prompt();
rl_replace_line(saved_line, 0); rl_replace_line(saved_line, 0);
@ -83,6 +85,7 @@ void PrintAndLog(char *fmt, ...)
rl_redisplay(); rl_redisplay();
free(saved_line); free(saved_line);
} }
#endif
if (logging && logfile) { if (logging && logfile) {
vfprintf(logfile, fmt, argptr2); vfprintf(logfile, fmt, argptr2);