Proposal: psql force prompting on notty

Started by Michael Maugerabout 22 years ago7 messages
#1Michael Mauger
mmaug@yahoo.com
1 attachment(s)

I'm the maintainer of sql.el in GNU Emacs. On both the Mac OS X
and the Windows/Cygwin platform we've had reports that psql run
under Emacs does not issue a prompt for commands.

I did a little research and it appears that the cause is that
pset.notty is being set to false because stdin/stdout are not
a tty (pgsql-server/src/bin/psql/startup.c). I'd like to
propose that an option be added to the psql command line to
override the detection of the tty and force the prompting for
commands on stdin.

I believe the attached patch should add the option -I to psql
and force the prompt to appear as if it were an interactive
session regardless of the state of stdin/stdout. I do not
have a configuration available to properly test this however.

Please be sure to include me in any replies since I do not
subscribe to this list. TIA.

-- Michael

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

Attachments:

interactive.difftext/plain; name=interactive.diffDownload
--- pgsql-server/src/bin/psql/startup.c	29 Sep 2003 18:21:33 -0000	1.80
+++ pgsql-server/src/bin/psql/startup.c	01 Nov 2003 06:10:42 -0000
@@ -322,6 +322,7 @@
 		{"field-separator", required_argument, NULL, 'F'},
 		{"host", required_argument, NULL, 'h'},
 		{"html", no_argument, NULL, 'H'},
+		{"interactive", no_argument, NULL, 'I'},
 		{"list", no_argument, NULL, 'l'},
 		{"no-readline", no_argument, NULL, 'n'},
 		{"output", required_argument, NULL, 'o'},
@@ -352,7 +353,7 @@

 	memset(options, 0, sizeof *options);

-	while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:Hlno:p:P:qR:sStT:uU:v:VWxX?",
+	while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlMno:p:P:qR:sStT:uU:v:VWxX?",
 							long_options, &optindex)) != -1)
 	{
 		switch (c)
@@ -395,7 +396,10 @@
 			case 'H':
 				pset.popt.topt.format = PRINT_HTML;
 				break;
+			case 'I':
+				pset.notty = 0;
+				break;
 			case 'l':
 				options->action = ACT_LIST_DB;
 				break;
--- pgsql-server/src/bin/psql/help.c	02 Oct 2003 06:39:31 -0000	1.81
+++ pgsql-server/src/bin/psql/help.c	01 Nov 2003 06:29:50 -0000
@@ -103,6 +103,7 @@
 	puts(_("  -a              echo all input from script"));
 	puts(_("  -e              echo commands sent to server"));
 	puts(_("  -E              display queries that internal commands generate"));
+	puts(_("  -I              force interactive prompting for input"));
 	puts(_("  -q              run quietly (no messages, only query output)"));
 	puts(_("  -o FILENAME     send query results to file (or |pipe)"));
 	puts(_("  -n              disable enhanced command line editing (readline)"));
#2Peter Eisentraut
peter_e@gmx.net
In reply to: Michael Mauger (#1)
Re: Proposal: psql force prompting on notty

Michael Mauger writes:

I'm the maintainer of sql.el in GNU Emacs. On both the Mac OS X
and the Windows/Cygwin platform we've had reports that psql run
under Emacs does not issue a prompt for commands.

Why can't you make the Emacs session behave like a terminal for psql?

--
Peter Eisentraut peter_e@gmx.net

#3Michael Mauger
mmaug@yahoo.com
In reply to: Peter Eisentraut (#2)
Re: Proposal: psql force prompting on notty
--- Peter Eisentraut <peter_e@gmx.net> wrote:

Michael Mauger writes:

I'm the maintainer of sql.el in GNU Emacs. On both the Mac OS X
and the Windows/Cygwin platform we've had reports that psql run
under Emacs does not issue a prompt for commands.

Why can't you make the Emacs session behave like a terminal for psql?

Discussion on emacs-devel indicates that there are some known issues with
pty support on the Mac OS X port which are being addressed. The problem
however does still exist on the Windows platform.

Emacs is not a Cygwin (Un*x emulation on Windows) executable (like psql
is) so it is not setting the psql process up in a way that cygwin
recognizes as being a pty-like environment. Thus the isatty() on stdin
and stdout are returning false when run under Emacs.

My proposed patch is small and overrides psql's detection of it's
environment when the user knows better.

-- Michael

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

#4Peter Eisentraut
peter_e@gmx.net
In reply to: Michael Mauger (#3)
Re: Proposal: psql force prompting on notty

Michael Mauger writes:

Emacs is not a Cygwin (Un*x emulation on Windows) executable (like psql
is)

Why don't you use the native Windows version of psql?

--
Peter Eisentraut peter_e@gmx.net

#5Michael Mauger
mmaug@yahoo.com
In reply to: Peter Eisentraut (#4)
Re: Proposal: psql force prompting on notty
--- Peter Eisentraut <peter_e@gmx.net> wrote:

Michael Mauger writes:

Emacs is not a Cygwin (Un*x emulation on Windows) executable (like
psql is)

Why don't you use the native Windows version of psql?

The Cygwin setup program makes pre-built binaries of postgres readily
available on Windows. (In fact, using this version is encouraged in the
Postgres for Windows installation notes.) A native Windows version would
not work either since the isatty() implementation there will only
recognize a Command Prompt window as a tty.

-- Michael

__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

#6Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Michael Mauger (#1)
Re: [HACKERS] Proposal: psql force prompting on notty

This is an unusual one. The OS isn't handling things properly, and we
have to work around that. Can you get a Win32 user to test psql with
this patch to make sure it actually fixes the problem and behaves as
expected? If you want me to produce a psql binary, I can do that.

Thanks.

---------------------------------------------------------------------------

Michael Mauger wrote:

I'm the maintainer of sql.el in GNU Emacs. On both the Mac OS X
and the Windows/Cygwin platform we've had reports that psql run
under Emacs does not issue a prompt for commands.

I did a little research and it appears that the cause is that
pset.notty is being set to false because stdin/stdout are not
a tty (pgsql-server/src/bin/psql/startup.c). I'd like to
propose that an option be added to the psql command line to
override the detection of the tty and force the prompting for
commands on stdin.

I believe the attached patch should add the option -I to psql
and force the prompt to appear as if it were an interactive
session regardless of the state of stdin/stdout. I do not
have a configuration available to properly test this however.

Please be sure to include me in any replies since I do not
subscribe to this list. TIA.

-- Michael

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

Content-Description: interactive.diff

--- pgsql-server/src/bin/psql/startup.c	29 Sep 2003 18:21:33 -0000	1.80
+++ pgsql-server/src/bin/psql/startup.c	01 Nov 2003 06:10:42 -0000
@@ -322,6 +322,7 @@
{"field-separator", required_argument, NULL, 'F'},
{"host", required_argument, NULL, 'h'},
{"html", no_argument, NULL, 'H'},
+		{"interactive", no_argument, NULL, 'I'},
{"list", no_argument, NULL, 'l'},
{"no-readline", no_argument, NULL, 'n'},
{"output", required_argument, NULL, 'o'},
@@ -352,7 +353,7 @@

memset(options, 0, sizeof *options);

-	while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:Hlno:p:P:qR:sStT:uU:v:VWxX?",
+	while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlMno:p:P:qR:sStT:uU:v:VWxX?",
long_options, &optindex)) != -1)
{
switch (c)
@@ -395,7 +396,10 @@
case 'H':
pset.popt.topt.format = PRINT_HTML;
break;
+			case 'I':
+				pset.notty = 0;
+				break;
case 'l':
options->action = ACT_LIST_DB;
break;
--- pgsql-server/src/bin/psql/help.c	02 Oct 2003 06:39:31 -0000	1.81
+++ pgsql-server/src/bin/psql/help.c	01 Nov 2003 06:29:50 -0000
@@ -103,6 +103,7 @@
puts(_("  -a              echo all input from script"));
puts(_("  -e              echo commands sent to server"));
puts(_("  -E              display queries that internal commands generate"));
+	puts(_("  -I              force interactive prompting for input"));
puts(_("  -q              run quietly (no messages, only query output)"));
puts(_("  -o FILENAME     send query results to file (or |pipe)"));
puts(_("  -n              disable enhanced command line editing (readline)"));

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#7Michael Mauger
mmaug@yahoo.com
In reply to: Bruce Momjian (#6)
Re: [HACKERS] Proposal: psql force prompting on notty

You can send it to me to test. I've duplicated the reported behavior
here so I can test the fix. (Ideally, send me a url to downloaded it
from rather than attaching it.)

Just a thought, a corresponding option of --batch/-B could be added to do
the opposite of the --interactive/-I option. Having options to override
dynamically detected configuration is not all that uncommon.

Thanks.

-- Michael

PS. Beware of the first patch I sent -- it had a bug in the string sent
to getopt. It had an option "M" rather than "I". The second patch was
corrected.

--- Bruce Momjian <pgman@candle.pha.pa.us> wrote:

This is an unusual one. The OS isn't handling things properly, and we
have to work around that. Can you get a Win32 user to test psql with
this patch to make sure it actually fixes the problem and behaves as
expected? If you want me to produce a psql binary, I can do that.

Thanks.

---------------------------------------------------------------------------

Michael Mauger wrote:

I'm the maintainer of sql.el in GNU Emacs. On both the Mac OS X
and the Windows/Cygwin platform we've had reports that psql run
under Emacs does not issue a prompt for commands.

I did a little research and it appears that the cause is that
pset.notty is being set to false because stdin/stdout are not
a tty (pgsql-server/src/bin/psql/startup.c). I'd like to
propose that an option be added to the psql command line to
override the detection of the tty and force the prompting for
commands on stdin.

I believe the attached patch should add the option -I to psql
and force the prompt to appear as if it were an interactive
session regardless of the state of stdin/stdout. I do not
have a configuration available to properly test this however.

Please be sure to include me in any replies since I do not
subscribe to this list. TIA.

__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree