Hi Ben,
Thanks very much for the links.
On 27 April 2018 at 12:39, Ben Coman btc@openinworld.com wrote:
On 16 April 2018 at 21:17, Alistair Grant akgrant0710@gmail.com wrote:
Hi Eliot & Subbu,
On 16 April 2018 at 05:50, K K Subbu kksubbu.ml@gmail.com wrote:
On Sunday 15 April 2018 11:42 PM, Eliot Miranda wrote:
On Windows in sqFileStdioHandlesInto() in sqWin32FilePrims.c:
files[0].sessionID = thisSession; files[0].file = GetStdHandle(STD_INPUT_HANDLE); files[0].writable = false; files[0].lastOp = 0; /* unused on win32 */ files[0].isStdioStream = GetConsoleMode(files[0].file, &mode) != 0; AddHandleToTable(win32Files, files[0].file);
This could be causing problems, because AFAIA GetConsoleMode(files[0].file, &mode) is no longer reliable. Can you test?
I believe _isatty(fd) from io.h is the syscall on Windows:
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isatty
HTH .. Subbu
Right, _isatty sounds like the more sensible call. Just looking at the docs, the return value of GetConsoleMode() is simply whether it succeeded or not.
However, in some quick tests it appears that both _isatty() and GetConsoleMode() return the correct value when called from a cmd.exe terminal window (I guess GetConsoleMode() fails if there isn't a terminal). They both fail when called from a cygwin shell (mintty). It looks like vim (yes, the text editor) has some MIT licensed code that does the check correctly from within mintty.
I've was reading around this topic to see if I could find anything useful. I haven't really got my head around it yet to tell what is directly related, but here is the most interesting links I found...
How can I tell whether my console program was launched from Explorer or from a command prompt? https://blogs.msdn.microsoft.com/oldnewthing/20160125-00/?p=92922
What Is conhost.exe and Why Is It Running? https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-runni...
GetConsoleMode fails when input piped http://comp.os.ms-windows.programmer.win32.narkive.com/xiPamaWm/getconsolemo...
Both isatty() and GetConsoleScreenBufferInfo() fail with mintty 2.1.5 in MSYS2 [okay with Cygwin] https://github.com/mintty/mintty/issues/482
This is the one that says that Windows Consoles and MinTTY terminals are basically incompatible.
MSVC's native _isatty() thinks Cygwin Bash is a pipe, not an interactive shell, because it just uses GetFileType() deep under the hood.
This is how Vincent's code checks to see if we're running in a MinTTY terminal. It looks for a pipe with a particular name.
https://stackoverflow.com/questions/45223868/how-do-i-play-nice-with-cygwin
ReadConsole and WriteConsole can only be used with console handles; ReadConsole and WriteConsole fail if used with a standard handle that has been redirected and is no longer a console handle. ReadFile and WriteFile can be used with other handles (such as files or pipes). https://docs.microsoft.com/en-us/windows/console/high-level-console-input-an...
"GetConsoleMode error: 6" when running under Unix emulation environments such as cygwin and msys. What this means is that GetConsoleMode is being called on an invalid file handle (STD_INPUT_HANDLE). https://lists.osuosl.org/pipermail/darcs-users/2004-June/002104.html
Windows: Improve terminal detection mechanism https://phabricator.haskell.org/D2809 https://github.com/git/git/blob/0767172b9068b225c06fd7ce66422e5936ec60a2/com... https://fossies.org/linux/vim/src/iscygpty.c https://hackage.haskell.org/package/base-4.6.0.0/src/cbits/consUtils.c
Cunningly conquering communicated console caveats. Comprende, mon Capitán? http://archives.miloush.net/michkap/archive/2010/05/07/10008232.html
What does CreateFile(“CONIN$” ..) do? https://stackoverflow.com/questions/377152/what-does-createfileconin-do?utm_...
The CreateFile function enables a process to get a handle to its console's input buffer and active screen buffer, even if STDIN and STDOUT have been redirected. To open a handle to a console's input buffer, specify the CONIN$ value in a call to CreateFile https://docs.microsoft.com/en-us/windows/console/console-handles
Where do writes to stdout go when launched from a cygwin shell, no redirection https://stackoverflow.com/questions/4028353/where-do-writes-to-stdout-go-whe...
How to create a Windows program that works both as a GUI and console application https://www.tillett.info/2013/05/13/how-to-create-a-windows-program-that-wor...
It will take me a while to read through the rest. :-)
Thanks again, Alistair