is_tty <- fdIsTTY (haFD handle_)
when (is_tty && isReadableHandleType (haType handle_)) $
case mode of
-#ifndef mingw32_HOST_OS
- -- 'raw' mode under win32 is a bit too specialised (and troublesome
- -- for most common uses), so simply disable its use here.
+ -- Note: we used to disable 'cooked' mode setting
+ -- for mingw / win32 here, but it is now back on (and well
+ -- behaved for Console-connected Handles.)
NoBuffering -> setCooked (haFD handle_) False
-#else
- NoBuffering -> return ()
-#endif
_ -> setCooked (haFD handle_) True
-- throw away spare buffers, they might be the wrong size
DWORD flgs = ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
if ( (h = (HANDLE)_get_osfhandle(fd)) != INVALID_HANDLE_VALUE ) {
+ /* Only for console-connected Handles */
+ if ( GetFileType(h) == FILE_TYPE_CHAR ) {
if ( GetConsoleMode(h,&st) &&
- SetConsoleMode(h, cooked ? (st | ENABLE_LINE_INPUT) : st & ~flgs) ) {
+ SetConsoleMode(h, cooked ? (st | flgs) : st & ~flgs) ) {
return 0;
- }
+ }
+ }
}
return -1;
}