+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.
len = 0;
line = xmalloc (size);
- while ((c = getchar ()) != '\n')
+ while ((c = getchar ()) != '\n' && c != '\r')
{
if (c == EOF)
{
emacs_set_tty (fileno (stdin), &etty, 0);
}
- if (len || c == '\n')
+ if (len || c == '\n' || c == '\r')
{
val = make_string (line, len);
xfree (line);
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
}
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:
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 */