mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
ext/readline/readline.c: [Bug #6601]
* ext/readline/readline.c (readline_getc): deal with ESC just followed by ASCII as meta prefix in incremental search mode. based on the patch from rctay (Tay Ray Chuan) at [ruby-core:45682]. [Bug #6601] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36123 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
90e812e81b
commit
e2ad92a075
3 changed files with 33 additions and 4 deletions
|
@ -130,7 +130,6 @@ static char **readline_attempted_completion_function(const char *text,
|
|||
|
||||
#if defined HAVE_RL_GETC_FUNCTION
|
||||
static VALUE readline_instream;
|
||||
static ID id_getbyte;
|
||||
|
||||
#ifndef HAVE_RL_GETC
|
||||
#define rl_getc(f) EOF
|
||||
|
@ -173,9 +172,19 @@ readline_getc(FILE *input)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
c = rb_funcall(readline_instream, id_getbyte, 0, 0);
|
||||
c = rb_io_getbyte(readline_instream);
|
||||
if (NIL_P(c)) return EOF;
|
||||
return NUM2CHR(c);
|
||||
if (c == INT2FIX(ESC) &&
|
||||
RL_ISSTATE(RL_STATE_ISEARCH) && /* isn't needed in other states? */
|
||||
rb_io_read_pending(ifp)) {
|
||||
int meta = 0;
|
||||
c = rb_io_getbyte(readline_instream);
|
||||
if (FIXNUM_P(c) && isascii(FIX2INT(c))) meta = 1;
|
||||
rb_io_ungetbyte(readline_instream, c);
|
||||
if (meta) rl_execute_next(ESC);
|
||||
return ESC;
|
||||
}
|
||||
return FIX2INT(c);
|
||||
}
|
||||
#elif defined HAVE_RL_EVENT_HOOK
|
||||
#define BUSY_WAIT 0
|
||||
|
@ -1703,7 +1712,6 @@ Init_readline()
|
|||
/* and using_history() call rl_initialize(). */
|
||||
/* This assignment should be placed before using_history() */
|
||||
rl_getc_function = readline_getc;
|
||||
id_getbyte = rb_intern_const("getbyte");
|
||||
#elif defined HAVE_RL_EVENT_HOOK
|
||||
rl_event_hook = readline_event;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue