diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 9066004..68fbd34 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -136,6 +136,7 @@ readline_getc(FILE *input) { rb_io_t *ifp = 0; VALUE c; + int ch; if (!readline_instream) return rl_getc(input); GetOpenFile(readline_instream, ifp); if (rl_instream != ifp->stdio_file) return rl_getc(input); @@ -169,7 +170,13 @@ readline_getc(FILE *input) #endif c = rb_funcall(readline_instream, id_getbyte, 0, 0); if (NIL_P(c)) return EOF; - return NUM2CHR(c); + ch = NUM2CHR(c); + if (RL_ISSTATE(RL_STATE_ISEARCH) + && ch == ESC + /* interested in bytes only, actually */ + && rb_io_read_pending(ifp)) + rl_execute_next(ESC); + return ch; } #elif defined HAVE_RL_EVENT_HOOK #define BUSY_WAIT 0