Implement echo suppression in non-interactive mode for MS-Windows.
src/minibuf.c (read_minibuf_noninteractive): Finish reading on '\r', not only on '\n'. src/sysdep.c (emacs_get_tty, emacs_set_tty, suppress_echo_on_tty) [DOS_NT]: Implement for WINDOWSNT. src/systty.h (struct emacs_tty) [DOS_NT]: The struct member is now unsigned. Fixes: debbugs:17839
This commit is contained in:
parent
ca849522fe
commit
e8963bd757
4 changed files with 47 additions and 7 deletions
|
@ -1,3 +1,14 @@
|
|||
2014-07-11 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* minibuf.c (read_minibuf_noninteractive): Finish reading on '\r',
|
||||
not only on '\n'.
|
||||
|
||||
* sysdep.c (emacs_get_tty, emacs_set_tty, suppress_echo_on_tty)
|
||||
[DOS_NT]: Implement for WINDOWSNT.
|
||||
|
||||
* systty.h (struct emacs_tty) [DOS_NT]: The struct member is now
|
||||
unsigned.
|
||||
|
||||
2014-07-11 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* sysdep.c (suppress_echo_on_tty): New function.
|
||||
|
|
|
@ -251,7 +251,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
|
|||
len = 0;
|
||||
line = xmalloc (size);
|
||||
|
||||
while ((c = getchar ()) != '\n')
|
||||
while ((c = getchar ()) != '\n' && c != '\r')
|
||||
{
|
||||
if (c == EOF)
|
||||
{
|
||||
|
@ -280,7 +280,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
|
|||
emacs_set_tty (fileno (stdin), &etty, 0);
|
||||
}
|
||||
|
||||
if (len || c == '\n')
|
||||
if (len || c == '\n' || c == '\r')
|
||||
{
|
||||
val = make_string (line, len);
|
||||
xfree (line);
|
||||
|
|
37
src/sysdep.c
37
src/sysdep.c
|
@ -783,9 +783,20 @@ void
|
|||
emacs_get_tty (int fd, struct emacs_tty *settings)
|
||||
{
|
||||
/* Retrieve the primary parameters - baud rate, character size, etcetera. */
|
||||
#ifndef DOS_NT
|
||||
/* We have those nifty POSIX tcmumbleattr functions. */
|
||||
memset (&settings->main, 0, sizeof (settings->main));
|
||||
#ifdef DOS_NT
|
||||
#ifdef WINDOWSNT
|
||||
HANDLE h = (HANDLE)_get_osfhandle (fd);
|
||||
DWORD console_mode;
|
||||
|
||||
if (h && h != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (GetConsoleMode (h, &console_mode))
|
||||
settings->main = console_mode;
|
||||
}
|
||||
#endif /* WINDOWSNT */
|
||||
#else /* !DOS_NT */
|
||||
/* We have those nifty POSIX tcmumbleattr functions. */
|
||||
tcgetattr (fd, &settings->main);
|
||||
#endif
|
||||
}
|
||||
|
@ -799,7 +810,22 @@ int
|
|||
emacs_set_tty (int fd, struct emacs_tty *settings, bool flushp)
|
||||
{
|
||||
/* Set the primary parameters - baud rate, character size, etcetera. */
|
||||
#ifndef DOS_NT
|
||||
#ifdef DOS_NT
|
||||
#ifdef WINDOWSNT
|
||||
HANDLE h = (HANDLE)_get_osfhandle (fd);
|
||||
|
||||
if (h && h != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
DWORD new_mode;
|
||||
|
||||
/* Assume the handle is open for input. */
|
||||
if (flushp)
|
||||
FlushConsoleInputBuffer (h);
|
||||
new_mode = settings->main;
|
||||
SetConsoleMode (h, new_mode);
|
||||
}
|
||||
#endif /* WINDOWSNT */
|
||||
#else /* !DOS_NT */
|
||||
int i;
|
||||
/* We have those nifty POSIX tcmumbleattr functions.
|
||||
William J. Smith <wjs@wiis.wang.com> writes:
|
||||
|
@ -1149,7 +1175,10 @@ suppress_echo_on_tty (int fd)
|
|||
struct emacs_tty etty;
|
||||
|
||||
emacs_get_tty (fd, &etty);
|
||||
#ifndef WINDOWSNT
|
||||
#ifdef DOS_NT
|
||||
/* Set raw input mode. */
|
||||
etty.main = 0;
|
||||
#else
|
||||
etty.main.c_lflag &= ~ICANON; /* Disable buffering */
|
||||
etty.main.c_lflag &= ~ECHO; /* Disable echoing */
|
||||
#endif /* ! WINDOWSNT */
|
||||
|
|
|
@ -74,7 +74,7 @@ struct emacs_tty {
|
|||
#ifndef DOS_NT
|
||||
struct termios main;
|
||||
#else /* DOS_NT */
|
||||
int main;
|
||||
unsigned main;
|
||||
#endif /* DOS_NT */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue