From fb96e203d8830bc40eb2f5b599f24c606efcd4b3 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 11 Jul 2014 14:35:23 +0200 Subject: [PATCH] * sysdep.c (suppress_echo_on_tty): New function. * minibuf.c (read_minibuf_noninteractive): Use it. --- src/ChangeLog | 5 +++++ src/minibuf.c | 14 +++++--------- src/sysdep.c | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 52ba04d2f5f..a5debc00acf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-07-11 Michael Albinus + + * sysdep.c (suppress_echo_on_tty): New function. + * minibuf.c (read_minibuf_noninteractive): Use it. + 2014-07-11 Dmitry Antipov * alloc.c (Fmemory_info) [HAVE_LINUX_SYSINFO]: Return nil if diff --git a/src/minibuf.c b/src/minibuf.c index 6c6ab7f5865..44d319c5e67 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -38,6 +38,7 @@ along with GNU Emacs. If not, see . */ #include "systty.h" extern void emacs_get_tty (int, struct emacs_tty *); extern int emacs_set_tty (int, struct emacs_tty *, bool); +extern void suppress_echo_on_tty (int); /* List of buffers for use as minibuffers. The first element of the list is used for the outermost minibuffer @@ -229,7 +230,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial, Lisp_Object val; int c; unsigned char hide_char = 0; - struct emacs_tty old, new; + struct emacs_tty etty; /* Check, whether we need to suppress echoing. */ if (CHARACTERP (Vread_hide_char)) @@ -238,13 +239,8 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial, /* Manipulate tty. */ if (hide_char) { - emacs_get_tty (fileno (stdin), &old); - new = old; -#ifndef WINDOWSNT - new.main.c_lflag &= ~ICANON; /* Disable buffering */ - new.main.c_lflag &= ~ECHO; /* Disable echoing */ -#endif - emacs_set_tty (fileno (stdin), &new, 0); + emacs_get_tty (fileno (stdin), &etty); + suppress_echo_on_tty (fileno (stdin)); } fprintf (stdout, "%s", SDATA (prompt)); @@ -281,7 +277,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial, if (hide_char) { fprintf (stdout, "\n"); - emacs_set_tty (fileno (stdin), &old, 0); + emacs_set_tty (fileno (stdin), &etty, 0); } if (len || c == '\n') diff --git a/src/sysdep.c b/src/sysdep.c index 14d9f43c4db..46078807b43 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -1140,6 +1140,21 @@ tabs_safe_p (int fd) return 0; #endif /* DOS_NT */ } + +/* Discard echoing. */ + +void +suppress_echo_on_tty (int fd) +{ + struct emacs_tty etty; + + emacs_get_tty (fd, &etty); +#ifndef WINDOWSNT + etty.main.c_lflag &= ~ICANON; /* Disable buffering */ + etty.main.c_lflag &= ~ECHO; /* Disable echoing */ +#endif /* ! WINDOWSNT */ + emacs_set_tty (fd, &etty, 0); +} /* Get terminal size from system. Store number of lines into *HEIGHTP and width into *WIDTHP. -- 2.39.5