* sysdep.c (suppress_echo_on_tty): New function.
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 11 Jul 2014 12:35:23 +0000 (14:35 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 11 Jul 2014 12:35:23 +0000 (14:35 +0200)
* minibuf.c (read_minibuf_noninteractive): Use it.

src/ChangeLog
src/minibuf.c
src/sysdep.c

index 52ba04d2f5ff171150ac236bbe8325cd13d431df..a5debc00acf98ea86b6902abf0c4c173bb8b690f 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       * sysdep.c (suppress_echo_on_tty): New function.
+       * minibuf.c (read_minibuf_noninteractive): Use it.
+
 2014-07-11  Dmitry Antipov  <dmantipov@yandex.ru>
 
        * alloc.c (Fmemory_info) [HAVE_LINUX_SYSINFO]: Return nil if
index 6c6ab7f5865692ba0fa66dc6012581a9c2081326..44d319c5e67aff9cc04000863ed6bc277c4dfcf3 100644 (file)
@@ -38,6 +38,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #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')
index 14d9f43c4db743391cbcdab50db0c253e0a41fc3..46078807b4368b82948ab694c7d760ea524fdc54 100644 (file)
@@ -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);
+}
 \f
 /* Get terminal size from system.
    Store number of lines into *HEIGHTP and width into *WIDTHP.