On Tue, 28 Jul 2020 18:56:06 +0200 Thomas Wolff wrote: > Am 28.07.2020 um 18:38 schrieb Takashi Yano via Cygwin: > > On Tue, 28 Jul 2020 15:56:54 +0200 > > Rabbe Fogelholm wrote: > >> Rabbe Fogelholm wrote: > >>> Takashi Yano wrote: > >>>> On Mon, 13 Jan 2020 11:52:43 +0100 > >>>> Rabbe Fogelholm wrote: > >>>>> I am running a console Java program that is started from a shellscript > >>>>> wrapper. Before invoking Java the wrapper calls `stty -cooked'. The Java > >>>>> program polls the keyboard using System.in.available() and reads > >>>>> characters immediately using System.in.read(), without waiting for the > >>>>> Enter key to be pressed. > >>>>> > >>>>> This way of combining `stty -cooked' and Java has stopped working since > >>>>> version 3.1.1-1 of the Cygwin package. The Java thread that reads the > >>>>> keyboard hangs until Enter is pressed, which is not desirable. > >>>>> > >>>>> I had to downgrade to version 3.0.7-1 to resolve the problem. > >>>>> > >>>>> Versioning information: > >>>>> > >>>>> java version "1.8.0_202" > >>>>> Java(TM) SE Runtime Environment (build 1.8.0_202-b08) > >>>>> Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) > >>>>> > >>>>> OS Name: Microsoft Windows 10 Pro > >>>>> Version: 10.0.17763 Build 17763 > >>>>> System Type: x64-based PC > >>>>> > >>>>> See also the enclosed cygcheck.out. > >>>>> > >>>>> To demonstrate the issue I enclose a small Java program that should be > >>>>> able to read single keystrokes when `stty -cooked' is in effect. > >>>> Does your java program work in command prompt? cygwin 3.1.x uses > >>>> pseudo console, so the native (non cygwin) program works as if it > >>>> is executed in command prompt. > >>>> > >>> With cygwin 3.1.x I can't find a way to make my program work. > >>> > >>> When running from within a Cygwin64 terminal the `stty -cooked' command > >>> terminates with exit code 0, but the Java program behaves just as if > >>> `stty -cooked' is not in effect: It does not handle single keystrokes > >>> immediately. > >>> > >>> When running from a Windows command prompt I can execute the stty > >>> program as \cygwin64\bin\stty. However, when given the '-cooked' > >>> argument it complains: > >>> /usr/bin/stty: 'standard input': unable to perform all requested > >>> operations > >>> > >>> - and here as well the Java program behaves as if `stty -cooked' is not > >>> in effect. > >> Some time has passed; I am just curious if anyone may have found a > >> solution to the "stty -cooked" issue. With cygwin-3.0.* it was possible > >> to have a Java program act on single keystrokes, with cygwin-3.1 I don't > >> know how to do it. Any ideas welcome! > > Solution 1: > > Redesign your java program using JNA with kbhit()/getch() instead of > > System.in.available()/System.in.read(). > > > > Solution 2: > > Add SetConsoleMode() call with ENABLE_LINE_INPUT flag cleared using JNA.
I'm sorry, but this does not work as far as I tested. I'm not sure why. > Couldn't cygwin clear this flag when it sets up ConPTY while the pty is > in raw mode? Thomas's proposal will not work as well. -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple