* input.c (rl_getc): Use getch to read console input on
Windows. * readline.c (bind_arrow_keys_internal): Translate Windows keysequences into POSIX key sequences. * rldefs.h (NO_TTY_DRIVER): Define on MinGW. * rltty.c: Conditionalize on NO_TTY_DRIVER throughout.
This commit is contained in:
parent
7ef34f2cde
commit
fd8be987f8
|
@ -1,3 +1,12 @@
|
||||||
|
2005-07-25 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* input.c (rl_getc): Use getch to read console input on
|
||||||
|
Windows.
|
||||||
|
* readline.c (bind_arrow_keys_internal): Translate
|
||||||
|
Windows keysequences into POSIX key sequences.
|
||||||
|
* rldefs.h (NO_TTY_DRIVER): Define on MinGW.
|
||||||
|
* rltty.c: Conditionalize on NO_TTY_DRIVER throughout.
|
||||||
|
|
||||||
2005-07-03 Mark Kettenis <kettenis@gnu.org>
|
2005-07-03 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
From Martin Simmons:
|
From Martin Simmons:
|
||||||
|
|
|
@ -424,6 +424,13 @@ rl_getc (stream)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
/* On Windows, use a special routine to read a single character
|
||||||
|
from the console. (Otherwise, no characters are available
|
||||||
|
until the user hits the return key.) */
|
||||||
|
if (isatty (fileno (stream)))
|
||||||
|
return getch ();
|
||||||
|
#endif
|
||||||
result = read (fileno (stream), &c, sizeof (unsigned char));
|
result = read (fileno (stream), &c, sizeof (unsigned char));
|
||||||
|
|
||||||
if (result == sizeof (unsigned char))
|
if (result == sizeof (unsigned char))
|
||||||
|
|
|
@ -868,6 +868,22 @@ bind_arrow_keys_internal (map)
|
||||||
_rl_bind_if_unbound ("\033[0D", rl_get_next_history);
|
_rl_bind_if_unbound ("\033[0D", rl_get_next_history);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
/* Under Windows, when an extend key (like an arrow key) is
|
||||||
|
pressed, getch() will return 340 (octal) followed by a code for
|
||||||
|
the extended key. We use macros to transform those into the
|
||||||
|
normal ANSI terminal sequences for these keys. */
|
||||||
|
|
||||||
|
/* Up arrow. */
|
||||||
|
rl_macro_bind ("\340H", "\033[A", map);
|
||||||
|
/* Left arrow. */
|
||||||
|
rl_macro_bind ("\340K", "\033[D", map);
|
||||||
|
/* Right arrow. */
|
||||||
|
rl_macro_bind ("\340M", "\033[C", map);
|
||||||
|
/* Down arrow. */
|
||||||
|
rl_macro_bind ("\340P", "\033[B", map);
|
||||||
|
#endif
|
||||||
|
|
||||||
_rl_bind_if_unbound ("\033[A", rl_get_previous_history);
|
_rl_bind_if_unbound ("\033[A", rl_get_previous_history);
|
||||||
_rl_bind_if_unbound ("\033[B", rl_get_next_history);
|
_rl_bind_if_unbound ("\033[B", rl_get_next_history);
|
||||||
_rl_bind_if_unbound ("\033[C", rl_forward_char);
|
_rl_bind_if_unbound ("\033[C", rl_forward_char);
|
||||||
|
|
|
@ -32,7 +32,9 @@
|
||||||
|
|
||||||
#include "rlstdc.h"
|
#include "rlstdc.h"
|
||||||
|
|
||||||
#if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING)
|
#if defined (__MINGW32__)
|
||||||
|
# define NO_TTY_DRIVER
|
||||||
|
#elif defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING)
|
||||||
# define TERMIOS_TTY_DRIVER
|
# define TERMIOS_TTY_DRIVER
|
||||||
#else
|
#else
|
||||||
# if defined (HAVE_TERMIO_H)
|
# if defined (HAVE_TERMIO_H)
|
||||||
|
|
|
@ -152,7 +152,9 @@ set_winsize (tty)
|
||||||
#endif /* TIOCGWINSZ */
|
#endif /* TIOCGWINSZ */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (NEW_TTY_DRIVER)
|
#if defined (NO_TTY_DRIVER)
|
||||||
|
/* Nothing */
|
||||||
|
#elif defined (NEW_TTY_DRIVER)
|
||||||
|
|
||||||
/* Values for the `flags' field of a struct bsdtty. This tells which
|
/* Values for the `flags' field of a struct bsdtty. This tells which
|
||||||
elements of the struct bsdtty have been fetched from the system and
|
elements of the struct bsdtty have been fetched from the system and
|
||||||
|
@ -632,6 +634,22 @@ prepare_terminal_settings (meta_flag, oldtio, tiop)
|
||||||
}
|
}
|
||||||
#endif /* NEW_TTY_DRIVER */
|
#endif /* NEW_TTY_DRIVER */
|
||||||
|
|
||||||
|
/* Put the terminal in CBREAK mode so that we can detect key
|
||||||
|
presses. */
|
||||||
|
#if defined (NO_TTY_DRIVER)
|
||||||
|
void
|
||||||
|
rl_prep_terminal (meta_flag)
|
||||||
|
int meta_flag;
|
||||||
|
{
|
||||||
|
readline_echoing_p = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rl_deprep_terminal ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* ! NO_TTY_DRIVER */
|
||||||
/* Put the terminal in CBREAK mode so that we can detect key presses. */
|
/* Put the terminal in CBREAK mode so that we can detect key presses. */
|
||||||
void
|
void
|
||||||
rl_prep_terminal (meta_flag)
|
rl_prep_terminal (meta_flag)
|
||||||
|
@ -706,6 +724,7 @@ rl_deprep_terminal ()
|
||||||
|
|
||||||
release_sigint ();
|
release_sigint ();
|
||||||
}
|
}
|
||||||
|
#endif /* !NO_TTY_DRIVER */
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
|
@ -717,6 +736,10 @@ int
|
||||||
rl_restart_output (count, key)
|
rl_restart_output (count, key)
|
||||||
int count, key;
|
int count, key;
|
||||||
{
|
{
|
||||||
|
#if defined (__MINGW32__)
|
||||||
|
return 0;
|
||||||
|
#else /* !__MING32__ */
|
||||||
|
|
||||||
int fildes = fileno (rl_outstream);
|
int fildes = fileno (rl_outstream);
|
||||||
#if defined (TIOCSTART)
|
#if defined (TIOCSTART)
|
||||||
#if defined (apollo)
|
#if defined (apollo)
|
||||||
|
@ -744,12 +767,17 @@ rl_restart_output (count, key)
|
||||||
#endif /* !TIOCSTART */
|
#endif /* !TIOCSTART */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif /* !__MINGW32__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rl_stop_output (count, key)
|
rl_stop_output (count, key)
|
||||||
int count, key;
|
int count, key;
|
||||||
{
|
{
|
||||||
|
#if defined (__MINGW32__)
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
|
||||||
int fildes = fileno (rl_instream);
|
int fildes = fileno (rl_instream);
|
||||||
|
|
||||||
#if defined (TIOCSTOP)
|
#if defined (TIOCSTOP)
|
||||||
|
@ -772,6 +800,7 @@ rl_stop_output (count, key)
|
||||||
#endif /* !TIOCSTOP */
|
#endif /* !TIOCSTOP */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif /* !__MINGW32__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
@ -786,6 +815,7 @@ void
|
||||||
rltty_set_default_bindings (kmap)
|
rltty_set_default_bindings (kmap)
|
||||||
Keymap kmap;
|
Keymap kmap;
|
||||||
{
|
{
|
||||||
|
#if !defined (NO_TTY_DRIVER)
|
||||||
TIOTYPE ttybuff;
|
TIOTYPE ttybuff;
|
||||||
int tty = fileno (rl_instream);
|
int tty = fileno (rl_instream);
|
||||||
|
|
||||||
|
@ -844,6 +874,7 @@ rltty_set_default_bindings (kmap)
|
||||||
# endif /* VWERASE && TERMIOS_TTY_DRIVER */
|
# endif /* VWERASE && TERMIOS_TTY_DRIVER */
|
||||||
}
|
}
|
||||||
#endif /* !NEW_TTY_DRIVER */
|
#endif /* !NEW_TTY_DRIVER */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* New public way to set the system default editing chars to their readline
|
/* New public way to set the system default editing chars to their readline
|
||||||
|
@ -857,7 +888,7 @@ rl_tty_set_default_bindings (kmap)
|
||||||
|
|
||||||
#if defined (HANDLE_SIGNALS)
|
#if defined (HANDLE_SIGNALS)
|
||||||
|
|
||||||
#if defined (NEW_TTY_DRIVER)
|
#if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)
|
||||||
int
|
int
|
||||||
_rl_disable_tty_signals ()
|
_rl_disable_tty_signals ()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue