Fix libedit a bit more and discourage from using it

Přemysl Eric Janouch 3 years ago
parent 633f7007d1
commit b7b1198be7
Signed by: p
GPG Key ID: A0420B94F92B9493

@ -47,6 +47,9 @@ Build dependencies: CMake, pkg-config, help2man,
Runtime dependencies: libev, Jansson, cURL, openssl,
readline or libedit >= 2013-07-12,
Avoid libedit if you can, in general it works but at the moment history is
acting up and I have no clue about fixing it.
$ git clone --recursive
$ mkdir json-rpc-shell/build
$ cd json-rpc-shell/build

@ -619,7 +619,6 @@ input_el_on_run_editor (EditLine *editline, int key)
static void
input_el_install_prompt (struct input_el *self)
// XXX: the ignore doesn't quite work, see
el_set (self->editline, EL_PROMPT_ESC,
input_el_make_prompt, INPUT_START_IGNORE);
@ -634,7 +633,7 @@ input_el_start (struct input *input, const char *program_name)
el_set (self->editline, EL_CLIENTDATA, self);
input_el_install_prompt (self);
el_set (self->editline, EL_SIGNAL, false);
el_set (self->editline, EL_UNBUFFERED, true);
el_set (self->editline, EL_UNBUFFERED, isatty (fileno (stdin)));
el_set (self->editline, EL_EDITOR, "emacs");
el_wset (self->editline, EL_HIST, history_w, self->history);
@ -834,6 +833,17 @@ input_el_on_tty_readable (struct input *input)
int count = 0;
const wchar_t *buf = el_wgets (self->editline, &count);
// Editline works in a funny NO_TTY mode when the input is not a tty,
// we cannot use EL_UNBUFFERED and expect sane results then
int unbuffered = 0;
if (!el_get (self->editline, EL_UNBUFFERED, &unbuffered) && !unbuffered)
char *entered_line = buf ? input_el_wcstombs (buf) : NULL;
self->super.on_input (entered_line, self->super.user_data);
free (entered_line);
// Process data from our newline handler (async-friendly handling)
if (self->entered_line)