Mercurial > mxe-octave
diff src/readline-1-sigwinch.patch @ 2980:2cf09b449d88
readline patches for windows from goffioul
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 18 Apr 2013 02:04:36 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/readline-1-sigwinch.patch Thu Apr 18 02:04:36 2013 -0400 @@ -0,0 +1,83 @@ +diff -uNr a/readline.c b/readline.c +--- a/readline.c 2010-07-25 17:07:40.000000000 -0400 ++++ b/readline.c 2013-04-17 16:11:52.932653458 -0400 +@@ -970,6 +970,11 @@ + rl_initialized++; + RL_SETSTATE(RL_STATE_INITIALIZED); + } ++#if defined (__MINGW32__) ++ else ++ /* In case the console window has been resized outside of readline */ ++ rl_reset_screen_size (); ++#endif + + /* Initalize the current line information. */ + _rl_init_line_state (); +diff -uNr a/signals.c b/signals.c +--- a/signals.c 2011-02-11 10:53:33.000000000 -0500 ++++ b/signals.c 2013-04-17 16:07:57.476121748 -0400 +@@ -46,6 +46,11 @@ + + #include "rlprivate.h" + ++#if defined (__MINGW32__) ++# define WIN32_LEAN_AND_MEAN ++# include <windows.h> ++#endif ++ + #if defined (HANDLE_SIGNALS) + + #if !defined (RETSIGTYPE) +@@ -91,7 +96,7 @@ + int rl_catch_signals = 1; + + /* If non-zero, readline will install a signal handler for SIGWINCH. */ +-#ifdef SIGWINCH ++#if defined (SIGWINCH) || defined (__MINGW32__) + int rl_catch_sigwinch = 1; + #else + int rl_catch_sigwinch = 0; /* for the readline state struct in readline.c */ +@@ -422,6 +427,21 @@ + } + #endif /* SIGWINCH */ + ++#if defined (__MINGW32__) ++ if (rl_catch_sigwinch && sigwinch_set_flag == 0) ++ { ++ DWORD mode; ++ HANDLE hStdIn = GetStdHandle (STD_INPUT_HANDLE); ++ ++ if (GetConsoleMode (hStdIn, &mode)) ++ { ++ mode |= ENABLE_WINDOW_INPUT; ++ if (SetConsoleMode (hStdIn, mode)) ++ sigwinch_set_flag = 1; ++ } ++ } ++#endif ++ + return 0; + } + +@@ -467,6 +487,21 @@ + } + #endif + ++#if defined (__MINGW32__) ++ if (rl_catch_sigwinch && sigwinch_set_flag == 1) ++ { ++ DWORD mode; ++ HANDLE hStdIn = GetStdHandle (STD_INPUT_HANDLE); ++ ++ if (GetConsoleMode (hStdIn, &mode)) ++ { ++ mode &= ~ENABLE_WINDOW_INPUT; ++ if (SetConsoleMode (hStdIn, mode)) ++ sigwinch_set_flag = 0; ++ } ++ } ++#endif ++ + return 0; + } +