From: Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
To: zsh-workers@sunsite.auc.dk
Subject: PATCH: Re: Question
Date: Thu, 13 Apr 2000 10:40:36 +0200 (MET DST) [thread overview]
Message-ID: <200004130840.KAA13428@beta.informatik.hu-berlin.de> (raw)
In-Reply-To: "Bart Schaefer"'s message of Wed, 12 Apr 2000 16:06:33 +0000
Bart Schaefer wrote:
> ...
>
> integer i=0
> while read -E
> do
> (( ++i == LINES-2 )) &&
> { i=0; read -q '?Continue? [no] ' </dev/tty || break }
> done
>
> (The above reveals a possible bug: "read -q" prints a prompt only if
> standard input is a TTY, but it always reads from the TTY if there is
> one. So I had to throw in that redirection.)
Hm. This should fix it. It also copies the code to set up shout when
a new SHTTY was opened from bin_vared().
Bye
Sven
Index: Src/builtin.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v
retrieving revision 1.5
diff -u -r1.5 builtin.c
--- Src/builtin.c 2000/04/12 11:10:52 1.5
+++ Src/builtin.c 2000/04/13 08:40:08
@@ -3356,11 +3356,12 @@
bin_read(char *name, char **args, char *ops, int func)
{
char *reply, *readpmpt;
- int bsiz, c = 0, gotnl = 0, al = 0, first, nchars = 1, bslash;
+ int bsiz, c = 0, gotnl = 0, al = 0, first, nchars = 1, bslash, keys = 0;
int haso = 0; /* true if /dev/tty has been opened specially */
int isem = !strcmp(term, "emacs"), izle = zleactive && getkeyptr;
char *buf, *bptr, *firstarg, *zbuforig;
LinkList readll = newlinklist();
+ FILE *oshout = NULL;
if ((ops['k'] || ops['b']) && *args && idigit(**args)) {
if (!(nchars = atoi(*args)))
@@ -3385,8 +3386,11 @@
if (!zleactive) {
if (SHTTY == -1) {
/* need to open /dev/tty specially */
- SHTTY = open("/dev/tty", O_RDWR|O_NOCTTY);
- haso = 1;
+ if ((SHTTY = open("/dev/tty", O_RDWR|O_NOCTTY)) != -1) {
+ haso = 1;
+ oshout = shout;
+ init_shout();
+ }
}
/* We should have a SHTTY opened by now. */
if (SHTTY == -1) {
@@ -3403,6 +3407,7 @@
setcbreak();
readfd = SHTTY;
}
+ keys = 1;
} else if (ops['u'] && !ops['p']) {
/* -u means take input from the specified file descriptor. *
* -up means take input from the coprocess. */
@@ -3419,9 +3424,9 @@
for (readpmpt = firstarg;
*readpmpt && *readpmpt != '?'; readpmpt++);
if (*readpmpt++) {
- if (isatty(0)) {
- zputs(readpmpt, stderr);
- fflush(stderr);
+ if (keys || isatty(0)) {
+ zputs(readpmpt, (haso ? shout : stderr));
+ fflush(haso ? shout : stderr);
}
readpmpt[-1] = '\0';
}
@@ -3462,6 +3467,8 @@
settyinfo(&shttyinfo);
if (haso) {
close(SHTTY);
+ fclose(shout);
+ shout = oshout;
SHTTY = -1;
}
}
@@ -3493,6 +3500,8 @@
/* dispose of result appropriately, etc. */
if (haso) {
close(SHTTY);
+ fclose(shout);
+ shout = oshout;
SHTTY = -1;
}
}
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
next reply other threads:[~2000-04-13 8:41 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-04-13 8:40 Sven Wischnowsky [this message]
-- strict thread matches above, loose matches on Subject: below --
2000-04-13 7:59 Sven Wischnowsky
2000-04-12 8:30 Sven Wischnowsky
2000-04-12 16:10 ` Bart Schaefer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200004130840.KAA13428@beta.informatik.hu-berlin.de \
--to=wischnow@informatik.hu-berlin.de \
--cc=zsh-workers@sunsite.auc.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).