Thread: Proposal: psql force prompting on notty
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--- 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)"));
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
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
--- 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
--- 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
--- Michael Mauger <mmaug@yahoo.com> wrote: > --- 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. > Are there further concerns with this patch? --- 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:HIlno: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 commandssent 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 enhancedcommand line editing (readline)")); __________________________________ Do you Yahoo!? Protect your identity with Yahoo! Mail AddressGuard http://antispam.yahoo.com/whatsnewfree
No, just getting to it now. Sorry. --------------------------------------------------------------------------- Michael Mauger wrote: > --- Michael Mauger <mmaug@yahoo.com> wrote: > > --- 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. > > > > Are there further concerns with this patch? > > --- 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:HIlno: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)")); > > > __________________________________ > Do you Yahoo!? > Protect your identity with Yahoo! Mail AddressGuard > http://antispam.yahoo.com/whatsnewfree > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- 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, Pennsylvania19073
Bruce Momjian <pgman@candle.pha.pa.us> writes: >> Are there further concerns with this patch? > No, just getting to it now. Sorry. Peter didn't agree with this patch, and I have to concur with him that the need for it is unproven. Given that it is certainly not going into 7.4 at this late date, I think Michael will be wanting to look for another solution anyway... regards, tom lane
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > >> Are there further concerns with this patch? > > > No, just getting to it now. Sorry. > > Peter didn't agree with this patch, and I have to concur with him > that the need for it is unproven. > > Given that it is certainly not going into 7.4 at this late date, > I think Michael will be wanting to look for another solution anyway... Yea, certainly not 7.4. I am not sure he has any other ideas about a solution, though. I will try to make him a test binary soon and see how that works --- maybe we can make it an option that only shows up on Win32. -- 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, Pennsylvania19073