| delorie.com/archives/browse.cgi | search |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| DKIM-Filter: | OpenDKIM Filter v2.11.0 sourceware.org 758BA3860C3A |
| DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; |
| s=default; t=1595980966; | |
| bh=e+S/XdubRhA8w/JMxAXLlIO12ijH63RzdEl1//j60mU=; | |
| h=Date:To:Subject:In-Reply-To:References:List-Id:List-Unsubscribe: | |
| List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: | |
| From; | |
| b=uP8vEe8aR5suN+2OwY2/tXFoquaAWWa97yKDEGhqVosPuGoFFB35miStRXuD9p4b6 | |
| QALjurc3XBooX+Vf2oDWBmtcHnAc44QOLw1Ef4mJK345taHuiQIR9MyEXw/wtQl0Oo | |
| D47qhWGGR34m63xSFWXoOU6MRHrdgDyA9/+07RZg= | |
| X-Original-To: | cygwin AT cygwin DOT com |
| Delivered-To: | cygwin AT cygwin DOT com |
| DMARC-Filter: | OpenDMARC Filter v1.3.2 sourceware.org C06643858D35 |
| DKIM-Filter: | OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 06T02BI9009898 |
| X-Nifty-SrcIP: | [124.155.38.192] |
| Date: | Wed, 29 Jul 2020 09:02:22 +0900 |
| To: | cygwin AT cygwin DOT com |
| Subject: | Re: stty -cooked not usable since cygwin-3.1.1-1 |
| Message-Id: | <20200729090222.78d07bef3bfd116c89928d28@nifty.ne.jp> |
| In-Reply-To: | <22f2becd-1f2e-5ff8-4999-b34f2fb0bff3@bahnhof.se> |
| References: | <ad285b65-fed9-e6e5-eb3f-432fadc95daf AT bahnhof DOT se> |
| <20200113200152 DOT 5243a304d481677c61c12450 AT nifty DOT ne DOT jp> | |
| <12d7cb6e-b900-6780-1d1c-80ed84cc82d5 AT bahnhof DOT se> | |
| <1ea4e90c-7075-39e8-a518-40bc764a5237 AT bahnhof DOT se> | |
| <20200729013848 DOT cf6d4d99464e92d92d346029 AT nifty DOT ne DOT jp> | |
| <d78149b7-b4c8-5619-71ca-f3b70a04fd26 AT towo DOT net> | |
| <22f2becd-1f2e-5ff8-4999-b34f2fb0bff3 AT bahnhof DOT se> | |
| X-Mailer: | Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) |
| Mime-Version: | 1.0 |
| X-Spam-Status: | No, score=0.8 required=5.0 tests=BAYES_00, BODY_8BITS, |
| DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_NUMSUBJECT, | |
| RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, | |
| TXREP autolearn=no autolearn_force=no version=3.4.2 | |
| X-Spam-Checker-Version: | SpamAssassin 3.4.2 (2018-09-13) on |
| server2.sourceware.org | |
| X-BeenThere: | cygwin AT cygwin DOT com |
| X-Mailman-Version: | 2.1.29 |
| List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
| List-Unsubscribe: | <https://cygwin.com/mailman/options/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe> | |
| List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
| List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
| From: | Takashi Yano via Cygwin <cygwin AT cygwin DOT com> |
| Reply-To: | Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp> |
| Errors-To: | cygwin-bounces AT cygwin DOT com |
| Sender: | "Cygwin" <cygwin-bounces AT cygwin DOT com> |
| X-MIME-Autoconverted: | from base64 to 8bit by delorie.com id 06T03BnT003130 |
On Tue, 28 Jul 2020 21:51:33 +0200
Rabbe Fogelholm wrote:
> On 2020-07-28 18:56, 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.
> > Couldn't cygwin clear this flag when it sets up ConPTY while the pty is
> > in raw mode?
> > Thomas
> >
> >>
> >> Solution 3:
> >> Use a wrappwer instead of stty such as:
> >>
> >> #include <stdio.h>
> >> #include <unistd.h>
> >> #include <termios.h>
> >> #include <string.h>
> >> #include <pthread.h>
> >> #include <sys/wait.h>
> >>
> >> void *fwd(void *param)
> >> {
> >> Â Â Â Â FILE *f = (FILE *) param;
> >> Â Â Â Â char buf[128];
> >> Â Â Â Â int len;
> >> Â Â Â Â while (1) {
> >> Â Â Â Â Â Â Â Â if ((len = read(0, buf, sizeof(buf))) <= 0) break;
> >> Â Â Â Â Â Â Â Â if (write(fileno(f), buf, len) < len) break;
> >> Â Â Â Â }
> >> Â Â Â Â return NULL;
> >> }
> >>
> >> int main(int argc, char *argv[])
> >> {
> >> Â Â Â Â FILE *f;
> >> Â Â Â Â int i;
> >> Â Â Â Â pthread_t th;
> >> Â Â Â Â struct termios t, t_orig;
> >> Â Â Â Â char cmd[1024] = {0, };
> >> Â Â Â Â if (argc < 2) return 0;
> >> Â Â Â Â for (i = 1; i < argc && strlen(cmd)+strlen(argv[i]) <
> >> sizeof(cmd)-2; i++) {
> >> Â Â Â Â Â Â Â Â sprintf(cmd + strlen(cmd), (i>1)?" %s":"%s", argv[i]);
> >> Â Â Â Â }
> >> Â Â Â Â f = popen(cmd, "w");
> >> Â Â Â Â tcgetattr(0, &t_orig);
> >> Â Â Â Â t = t_orig;
> >> Â Â Â Â cfmakeraw(&t);
> >> Â Â Â Â tcsetattr(0, TCSANOW, &t);
> >> Â Â Â Â pthread_create(&th, NULL, fwd, f);
> >> Â Â Â Â wait(NULL);
> >> Â Â Â Â tcsetattr(0, TCSANOW, &t_orig);
> >> Â Â Â Â pclose(f);
> >> Â Â Â Â return 0;
> >> }
> >>
> >
> >
> Thanks Takashi for suggesting many ways to solve this! The C wrapper
> solution looks quite powerful.
>
> Meanwhile it has occurred to me that bash itself can provide a
> workaround. Since I start the Java console application from a bash
> wrapper already, I have now changed it so that it does something like
> this:
>
> (while true; do read -s -r -N 1 Key; echo "$Key"; done) | java ...
>
> With these options to 'read' I get action on every keystroke, and the
> Java program gets its input as terminated length-1 lines.
Another way to do this is:
stty -cooked; cat | java ...
However, this solution and yours need extra key input to quit program
after java program quited.
--
Takashi Yano <takashi DOT yano AT nifty DOT ne DOT 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
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |