delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
X-Original-To: | cygwin AT cygwin DOT com |
Delivered-To: | cygwin AT cygwin DOT com |
DMARC-Filter: | OpenDMARC Filter v1.3.2 sourceware.org B14503858D35 |
Authentication-Results: | sourceware.org; |
dmarc=none (p=none dis=none) header.from=towo.net | |
Authentication-Results: | sourceware.org; spf=none smtp.mailfrom=towo AT towo DOT net |
Subject: | Re: stty -cooked not usable since cygwin-3.1.1-1 |
To: | cygwin AT cygwin DOT com |
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> | |
From: | Thomas Wolff <towo AT towo DOT net> |
X-Tagtoolbar-Keys: | D20200729013044810 |
Message-ID: | <f935b0f6-1de3-e2d1-285e-f26cd945985a@towo.net> |
Date: | Wed, 29 Jul 2020 01:30:44 +0200 |
User-Agent: | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 |
Thunderbird/68.10.0 | |
MIME-Version: | 1.0 |
In-Reply-To: | <22f2becd-1f2e-5ff8-4999-b34f2fb0bff3@bahnhof.se> |
X-Provags-ID: | V03:K1:q89Lf+n2OY/XQ9TwADUWxRgdusjHwY1eyi8gSPnpgYy+7olKGFR |
TmMSY6gj2S0RKgh9ook95qtsiPMnfdrix5yR1RqIZRb6jgpPXFRZsDjyb3gj+zMJOkBRGrk | |
1m0JvxkPx0pjddAUWXRESOCiJDe1HNW7fFRBrZqVHoAUFC/t3bbt3HViZjEJaRls8T2KgXc | |
AO/P2PQIVdjyGTnYCpdSA== | |
X-UI-Out-Filterresults: | notjunk:1;V03:K0:klLJwkXsLuQ=:NB+/uLXufS5DcUscHAAvwL |
6zVgNg6XwaV4igLVySHG7M+vmZOKV1yWjLdiH74wFwA/BkRrhwN07hJ6PQmHQYpn1yOXzz4Hf | |
JGdKPEB3CNGbIy2+XPkYsvdj/WzGtGrIMJS5o2AHhv7lGpZWS6j5TXfWZN23yfUinbEEuZxWY | |
8WOwtE3sMdlsbxS3GTBV/BmGwBLxVvWxb5adY9+XY/YjVw72mwm98enfk1u7nL9bUfPrlfPKg | |
zZNm7/qJAZV7WBehGXwxnLoRBoOjS98GcbSb1sKr53fnCup+jT80ZGYS61iQfbu7ukbshndyC | |
n2FDxyINT61koy6FY7hS20WH0f0zqYEltvCx1k9hc/KPQIPatd8ELDPZY3rr8RMllewFV2zVY | |
pHIST+SM5mp+wJFPpy+NIdRAJJX3cmsn8tikDp/PXvcy4KgocJyl9yBDhR50Y91bdxfjJQzQW | |
Dga/8656YMwc5B54B52sD3iWHkpLM29h8Ku/vz87GbZ0UvJnMX48gaNNRI1HCbKMYZE75JZCI | |
AHG187Ftcqpnh2riMvqcKS6QLk6A6DHoiwVh9FjZdBzk+xxo3/Q3H2P6bB6evv8ywNDKV2dlp | |
kATjNaR3ccqRvWor4dGsIk8zeioMaVKD6K6MGV9/GsJrBKPUjUKZS9YHJndGAF7jn3s1n0/i2 | |
tQuCQaD2AHs282S2H/iqdfSKZcJU01W/cC4cEBdHKDLip82scb2/Z6oUDqSPA+bqyxCmlzhBT | |
LWlBuTSq86am/DqLWKYuszSwQYZHxAgV2r/Vnqw2aLUvWOH+7YlwmECT1Rqo2vuyTRxZB6TT1 | |
7A67r6Mfl72bUsS1wtU8mpXeXa8ReiLaHskLEkOqwDj8tZ5Po0VnLwN7kXlkMEKIMX2ewUo | |
X-Spam-Status: | No, score=-5.2 required=5.0 tests=BAYES_00, BODY_8BITS, |
KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, | |
RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, | |
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> | |
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 06SNVKpp032360 |
Am 28.07.2020 um 21:51 schrieb Rabbe Fogelholm: > 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. Can you please provide a full test case, as it worked for you in cygwin 3.0.7, i.e. the Java program and the wrapping commands, for some experiments. Thomas > > 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. > -- > 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 -- 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 |