From: Andy K. <and...@gm...> - 2011-02-22 15:34:32
|
2011/2/22 Mathias Fröhlich: > > Hi, > > On Tuesday 22 February 2011, Earnie wrote: >> A console isn't cmd.exe. The console is the window giving you stdin, >> stdout and stderr. So to that end cmd.exe uses a console, sh.exe uses a >> console, rxvt.exe is a terminal emulation wrapper to the console, mintty >> is a terminal emulation wrapper to the console. The terminal emulation >> wrappers cannot do the job they need to do because there is no method to >> perform PTY emulation on Windows. > > This thread points me to a question I was willing to understand for a long > time. > > How is mintty or rxvt switched to raw input mode? > > On unix I will use tcsetattr with the apropriate setting of the ICANON flag. > On a win32 console I use SetConsoleMode, alternatively I can get character > input instead of line input using the _getch and kbhit functions. > > But on win32 using mintty or rxvt, I do have neither tcsetattr nor a win32 > console. > But I can see bash working on rxvt/mintty doing all the line editing stuff > itself using readline - True!? > > How does this work? Bash is an MSYS program, i.e. it's linked against the MSYS (née Cygwin) DLL. For such programs, everything works just as on Unix, i.e. they get working pseudo terminal (pty) devices, termios, readline, and all that stuff . MSYS vim and ssh also tend to be happier in rxvt or mintty than in the Windows console. Native Windows programs such as those built with the MinGW compiler, however, only see pipes where MSYS programs see ptys, with various unfortunate consequences: - isatty(stdin) returns false - stdout defaults to full buffering instead of line buffering - Calls to console-specific functions such as WriteConsole() fail The underlying issue isn't so much that Windows doesn't provide ptys, since Windows programs don't expect those anyway. The problem is that it doesn't provide an API that would allow 3rd party programs to impersonate a Windows console without resorting to console.sf.net's approach of grabbing the screen content from a hidden console window, which is still subject to many of the limitations of the console. Note besides: mintty and rxvt are not console wrappers. They're pty-based terminal emulators. Andy |