Attached is a patch to tweak Windows keyboard handling. It adds
a working 'pause_or_input' function, allowing echo area messages
to be seen. Windows 10 can now apparently seek console input, so
just use GetConsoleMode to determine that. Sets the 'term_??'
definitions for KEY_HOME, KEY_END (and KEY_INSERT), allowing Home
and End to be used in the echo area (rather than having to
explicitly define 'M-<' and 'M->').
--
Jason.
diff -urp texinfo-6-3/info/echo-area.c texinfo-6.3/info/echo-area.c
--- texinfo-6-3/info/echo-area.c 2015-09-30 23:13:31 +1000
+++ texinfo-6.3/info/echo-area.c 2017-01-21 15:35:12 +1000
@@ -1525,6 +1525,11 @@ echo_area_stack_contains_completions_p (
# define HAVE_STRUCT_TIMEVAL
#endif /* HAVE_SYS_TIME_H */
+#if !defined (FD_SET) && defined (__MINGW32__)
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
static void
pause_or_input (void)
{
@@ -1537,6 +1542,11 @@ pause_or_input (void)
timer.tv_sec = 2;
timer.tv_usec = 0;
select (fileno (stdin) + 1, &readfds, NULL, NULL, &timer);
+#elif defined (__MINGW32__)
+ /* This is signalled on key release, so flush it and wait again. */
+ WaitForSingleObject (GetStdHandle (STD_INPUT_HANDLE), 2000);
+ FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE));
+ WaitForSingleObject (GetStdHandle (STD_INPUT_HANDLE), 2000);
#endif /* FD_SET */
}
diff -urp texinfo-6-3/info/pcterm.c texinfo-6.3/info/pcterm.c
--- texinfo-6-3/info/pcterm.c 2016-09-03 23:09:25 +1000
+++ texinfo-6.3/info/pcterm.c 2017-01-21 15:35:12 +1000
@@ -174,10 +185,11 @@ gettextinfo (struct text_info *ti)
hstdin = GetStdHandle (STD_INPUT_HANDLE);
hstdout = GetStdHandle (STD_OUTPUT_HANDLE);
- if (hstdin != INVALID_HANDLE_VALUE
- && hstdout != INVALID_HANDLE_VALUE
- && GetConsoleMode (hstdout, &ignored)
- && GetConsoleMode (hstdin, &old_inpmode))
+ if (!GetConsoleMode (hstdin, &ignored))
+ hstdin = INVALID_HANDLE_VALUE;
+
+ if (hstdout != INVALID_HANDLE_VALUE
+ && GetConsoleMode (hstdout, &ignored))
{
hinfo = CreateConsoleScreenBuffer (GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
@@ -486,15 +518,9 @@ sleep (unsigned sec)
static int
w32_our_tty (int fd)
{
- return
- isatty (fd)
- /* Windows `isatty' actually tests for character devices, so the
- null device gets reported as a tty. Fix that by calling
- `lseek'. */
- && lseek (fd, SEEK_CUR, 0) == -1
- /* Is this our tty? */
- && hstdin != INVALID_HANDLE_VALUE
- && hstdin == (HANDLE)_get_osfhandle (fd);
+ /* Is this our tty? */
+ return hstdin != INVALID_HANDLE_VALUE
+ && hstdin == (HANDLE)_get_osfhandle (fd);
}
/* Translate a Windows key event into the equivalent sequence of bytes
@@ -1211,6 +1301,10 @@ pc_initialize_terminal (term_name)
term_ke = (char *)find_sequence (K_End);
term_ki = (char *)find_sequence (K_Insert);
term_kD = (char *)find_sequence (K_Delete);
+#elif defined _WIN32
+ term_kh = "\033<";
+ term_ke = "\033>";
+ term_ki = "\033[L";
#endif /* __MSDOS__ */
/* Set all the hooks to our PC-specific functions. */