aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-07-15 01:56:25 +0000
committerBruce Momjian <bruce@momjian.us>2002-07-15 01:56:25 +0000
commit91dfa1af97b21a817ac4e4b5efdc510215c8774c (patch)
tree07e8e270884b99c2c61bf9f96f0951e11bc4bc39
parentd5fa19c6eeeeca1e6092344d8a83a2b9b0c8c7cb (diff)
downloadpostgresql-91dfa1af97b21a817ac4e4b5efdc510215c8774c.tar.gz
postgresql-91dfa1af97b21a817ac4e4b5efdc510215c8774c.zip
Fix \? and \pset pager handling. \? wasn't honoring pager before.
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml6
-rw-r--r--src/bin/psql/command.c4
-rw-r--r--src/bin/psql/help.c144
-rw-r--r--src/bin/psql/help.h4
-rw-r--r--src/bin/psql/print.c21
-rw-r--r--src/bin/psql/print.h11
6 files changed, 98 insertions, 92 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 85bc6852be4..923a8741112 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.67 2002/06/20 16:00:43 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.68 2002/07/15 01:56:25 momjian Exp $
PostgreSQL documentation
-->
@@ -1036,7 +1036,7 @@ lo_import 152801
<term><literal>pager</literal></term>
<listitem>
<para>
- Toggles the list of a pager to do table output. If the
+ Toggles the use of a pager for query and psql help output. If the
environment variable <envar>PAGER</envar> is set, the output
is piped to the specified program. Otherwise
<filename>more</filename> is used.
@@ -1050,7 +1050,7 @@ lo_import 152801
of the printing routines it is not always possible to predict
the number of lines that will actually be printed. For that
reason <application>psql</application> might not appear very
- discriminating about when to use the pager and when not to.
+ discriminating about when to use the pager.
</para>
</listitem>
</varlistentry>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index eceecd7d26a..f28af37d931 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.72 2002/04/24 05:24:00 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.73 2002/07/15 01:56:25 momjian Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -846,7 +846,7 @@ exec_command(const char *cmd,
/* \? -- slash command help */
else if (strcmp(cmd, "?") == 0)
- slashUsage();
+ slashUsage(pset.popt.topt.pager);
#if 0
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index becade93fb9..592a8af3fbc 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,9 +3,10 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.51 2002/06/20 20:29:42 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.52 2002/07/15 01:56:25 momjian Exp $
*/
#include "postgres_fe.h"
+#include "print.h"
#include "help.h"
#include <signal.h>
@@ -138,7 +139,6 @@ usage(void)
}
-
/*
* slashUsage
*
@@ -154,98 +154,106 @@ struct winsize
#endif
void
-slashUsage(void)
+slashUsage(bool pager)
{
- bool usePipe = false;
- const char *pagerenv;
- FILE *fout;
- struct winsize screen_size;
+ FILE *output, *pagerfd = NULL;
-#ifdef TIOCGWINSZ
- if (pset.notty == 0 &&
- (ioctl(fileno(stdout), TIOCGWINSZ, &screen_size) == -1 ||
- screen_size.ws_col == 0 ||
- screen_size.ws_row == 0))
+ /* check whether we need / can / are supposed to use pager */
+ if (pager
+#ifndef WIN32
+ &&
+ isatty(fileno(stdin)) &&
+ isatty(fileno(stdout))
+#endif
+ )
{
+ const char *pagerprog;
+
+#ifdef TIOCGWINSZ
+ int result;
+ struct winsize screen_size;
+
+ result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
+ if (result == -1 || 50 > screen_size.ws_row)
+ {
#endif
- screen_size.ws_row = 24;
- screen_size.ws_col = 80;
+ pagerprog = getenv("PAGER");
+ if (!pagerprog)
+ pagerprog = DEFAULT_PAGER;
+ pagerfd = popen(pagerprog, "w");
#ifdef TIOCGWINSZ
- }
+ }
#endif
+ }
- if (pset.notty == 0 &&
- (pagerenv = getenv("PAGER")) &&
- (pagerenv[0] != '\0') &&
- screen_size.ws_row <= 46 &&
- (fout = popen(pagerenv, "w")))
+ if (pagerfd)
{
- usePipe = true;
+ output = pagerfd;
#ifndef WIN32
pqsignal(SIGPIPE, SIG_IGN);
#endif
}
else
- fout = stdout;
+ output = stdout;
/* if you add/remove a line here, change the row test above */
/* if this " is the start of the string then it ought to end there to fit in 80 columns >> " */
- fprintf(fout, _(" \\a toggle between unaligned and aligned output mode\n"));
- fprintf(fout, _(" \\c[onnect] [DBNAME|- [USER]]\n"
+ fprintf(output, _(" \\a toggle between unaligned and aligned output mode\n"));
+ fprintf(output, _(" \\c[onnect] [DBNAME|- [USER]]\n"
" connect to new database (currently \"%s\")\n"),
PQdb(pset.db));
- fprintf(fout, _(" \\C [STRING] set table title, or unset if none\n"));
- fprintf(fout, _(" \\cd [DIR] change the current working directory\n"));
- fprintf(fout, _(" \\copy ... perform SQL COPY with data stream to the client host\n"));
- fprintf(fout, _(" \\copyright show PostgreSQL usage and distribution terms\n"));
- fprintf(fout, _(" \\d [NAME] describe table (or view, index, sequence)\n"));
- fprintf(fout, _(" \\d{t|i|s|v|S} [PATTERN]\n"));
- fprintf(fout, _(" list tables/indexes/sequences/views/system tables\n"));
- fprintf(fout, _(" \\da [PATTERN] list aggregate functions\n"));
- fprintf(fout, _(" \\dd [PATTERN] show comment for object\n"));
- fprintf(fout, _(" \\dD [PATTERN] list domains\n"));
- fprintf(fout, _(" \\df [PATTERN] list functions\n"));
- fprintf(fout, _(" \\do [NAME] list operators\n"));
- fprintf(fout, _(" \\dl list large objects, same as lo_list\n"));
- fprintf(fout, _(" \\dp [PATTERN] list table access privileges\n"));
- fprintf(fout, _(" \\dT [PATTERN] list data types\n"));
- fprintf(fout, _(" \\du [PATTERN] list users\n"));
- fprintf(fout, _(" \\e [FILE] edit the query buffer (or file) with external editor\n"));
- fprintf(fout, _(" \\echo [STRING] write string to standard output\n"));
- fprintf(fout, _(" \\encoding [ENCODING] show or set client encoding\n"));
- fprintf(fout, _(" \\f [STRING] show or set field separator for unaligned query output\n"));
- fprintf(fout, _(" \\g [FILE] send query buffer to server (and results to file or |pipe)\n"));
- fprintf(fout, _(" \\h [NAME] help on syntax of SQL commands, * for all commands\n"));
- fprintf(fout, _(" \\H toggle HTML output mode (currently %s)\n"),
+ fprintf(output, _(" \\C [STRING] set table title, or unset if none\n"));
+ fprintf(output, _(" \\cd [DIR] change the current working directory\n"));
+ fprintf(output, _(" \\copy ... perform SQL COPY with data stream to the client host\n"));
+ fprintf(output, _(" \\copyright show PostgreSQL usage and distribution terms\n"));
+ fprintf(output, _(" \\d [NAME] describe table (or view, index, sequence)\n"));
+ fprintf(output, _(" \\d{t|i|s|v|S} [PATTERN]\n"));
+ fprintf(output, _(" list tables/indexes/sequences/views/system tables\n"));
+ fprintf(output, _(" \\da [PATTERN] list aggregate functions\n"));
+ fprintf(output, _(" \\dd [PATTERN] show comment for object\n"));
+ fprintf(output, _(" \\dD [PATTERN] list domains\n"));
+ fprintf(output, _(" \\df [PATTERN] list functions\n"));
+ fprintf(output, _(" \\do [NAME] list operators\n"));
+ fprintf(output, _(" \\dl list large objects, same as lo_list\n"));
+ fprintf(output, _(" \\dp [PATTERN] list table access privileges\n"));
+ fprintf(output, _(" \\dT [PATTERN] list data types\n"));
+ fprintf(output, _(" \\du [PATTERN] list users\n"));
+ fprintf(output, _(" \\e [FILE] edit the query buffer (or file) with external editor\n"));
+ fprintf(output, _(" \\echo [STRING] write string to standard output\n"));
+ fprintf(output, _(" \\encoding [ENCODING] show or set client encoding\n"));
+ fprintf(output, _(" \\f [STRING] show or set field separator for unaligned query output\n"));
+ fprintf(output, _(" \\g [FILE] send query buffer to server (and results to file or |pipe)\n"));
+ fprintf(output, _(" \\h [NAME] help on syntax of SQL commands, * for all commands\n"));
+ fprintf(output, _(" \\H toggle HTML output mode (currently %s)\n"),
ON(pset.popt.topt.format == PRINT_HTML));
- fprintf(fout, _(" \\i FILE execute commands from file\n"));
- fprintf(fout, _(" \\l list all databases\n"));
- fprintf(fout, _(" \\lo_export, \\lo_import, \\lo_list, \\lo_unlink\n"
+ fprintf(output, _(" \\i FILE execute commands from file\n"));
+ fprintf(output, _(" \\l list all databases\n"));
+ fprintf(output, _(" \\lo_export, \\lo_import, \\lo_list, \\lo_unlink\n"
" large object operations\n"));
- fprintf(fout, _(" \\o FILE send all query results to file or |pipe\n"));
- fprintf(fout, _(" \\p show the contents of the query buffer\n"));
- fprintf(fout, _(" \\pset NAME [VALUE] set table output option (NAME := {format|border|expanded|\n"
+ fprintf(output, _(" \\o FILE send all query results to file or |pipe\n"));
+ fprintf(output, _(" \\p show the contents of the query buffer\n"));
+ fprintf(output, _(" \\pset NAME [VALUE] set table output option (NAME := {format|border|expanded|\n"
" fieldsep|null|recordsep|tuples_only|title|tableattr|pager})\n"));
- fprintf(fout, _(" \\q quit psql\n"));
- fprintf(fout, _(" \\qecho [STRING] write string to query output stream (see \\o)\n"));
- fprintf(fout, _(" \\r reset (clear) the query buffer\n"));
- fprintf(fout, _(" \\s [FILE] display history or save it to file\n"));
- fprintf(fout, _(" \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n"));
- fprintf(fout, _(" \\t show only rows (currently %s)\n"),
+ fprintf(output, _(" \\q quit psql\n"));
+ fprintf(output, _(" \\qecho [STRING] write string to query output stream (see \\o)\n"));
+ fprintf(output, _(" \\r reset (clear) the query buffer\n"));
+ fprintf(output, _(" \\s [FILE] display history or save it to file\n"));
+ fprintf(output, _(" \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n"));
+ fprintf(output, _(" \\t show only rows (currently %s)\n"),
ON(pset.popt.topt.tuples_only));
- fprintf(fout, _(" \\T [STRING] set HTML <table>-tag attributes, or unset if none\n"));
- fprintf(fout, _(" \\timing toggle timing of queries (currently %s)\n"),
+ fprintf(output, _(" \\T [STRING] set HTML <table>-tag attributes, or unset if none\n"));
+ fprintf(output, _(" \\timing toggle timing of queries (currently %s)\n"),
ON(pset.timing));
- fprintf(fout, _(" \\unset NAME unset (delete) internal variable\n"));
- fprintf(fout, _(" \\w [FILE] write query buffer to file\n"));
- fprintf(fout, _(" \\x toggle expanded output (currently %s)\n"),
+ fprintf(output, _(" \\unset NAME unset (delete) internal variable\n"));
+ fprintf(output, _(" \\w [FILE] write query buffer to file\n"));
+ fprintf(output, _(" \\x toggle expanded output (currently %s)\n"),
ON(pset.popt.topt.expanded));
- fprintf(fout, _(" \\z [PATTERN] list table access privileges (same as \\dp)\n"));
- fprintf(fout, _(" \\! [COMMAND] execute command in shell or start interactive shell\n"));
+ fprintf(output, _(" \\z [PATTERN] list table access privileges (same as \\dp)\n"));
+ fprintf(output, _(" \\! [COMMAND] execute command in shell or start interactive shell\n"));
- if (usePipe)
+ if (pagerfd)
{
- pclose(fout);
+ pclose(pagerfd);
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
diff --git a/src/bin/psql/help.h b/src/bin/psql/help.h
index 16d09480bf5..6c655f306b3 100644
--- a/src/bin/psql/help.h
+++ b/src/bin/psql/help.h
@@ -3,14 +3,14 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.8 2001/10/28 06:25:58 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.9 2002/07/15 01:56:25 momjian Exp $
*/
#ifndef HELP_H
#define HELP_H
void usage(void);
-void slashUsage(void);
+void slashUsage(bool pager);
void helpSQL(const char *topic);
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index 892d88fdf03..92368f9c2d9 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/print.c,v 1.26 2002/04/24 15:56:38 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/print.c,v 1.27 2002/07/15 01:56:25 momjian Exp $
*/
#include "postgres_fe.h"
#include "print.h"
@@ -23,12 +23,6 @@
#include "settings.h"
-#ifndef __CYGWIN__
-#define DEFAULT_PAGER "more"
-#else
-#define DEFAULT_PAGER "less"
-#endif
-
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#endif
@@ -1033,7 +1027,7 @@ printTable(const char *title,
{
const char *default_footer[] = {NULL};
unsigned short int border = opt->border;
- FILE *pager = NULL,
+ FILE *pagerfd = NULL,
*output;
@@ -1090,15 +1084,15 @@ printTable(const char *title,
pagerprog = getenv("PAGER");
if (!pagerprog)
pagerprog = DEFAULT_PAGER;
- pager = popen(pagerprog, "w");
+ pagerfd = popen(pagerprog, "w");
#ifdef TIOCGWINSZ
}
#endif
}
- if (pager)
+ if (pagerfd)
{
- output = pager;
+ output = pagerfd;
#ifndef WIN32
pqsignal(SIGPIPE, SIG_IGN);
#endif
@@ -1139,13 +1133,12 @@ printTable(const char *title,
fprintf(stderr, "+ Oops, you shouldn't see this!\n");
}
- if (pager)
+ if (pagerfd)
{
- pclose(pager);
+ pclose(pagerfd);
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
-
}
}
diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h
index 59c32830d22..bcb3495bc67 100644
--- a/src/bin/psql/print.h
+++ b/src/bin/psql/print.h
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.12 2001/11/05 17:46:31 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.13 2002/07/15 01:56:25 momjian Exp $
*/
#ifndef PRINT_H
#define PRINT_H
@@ -72,7 +72,12 @@ typedef struct _printQueryOpt
*
* It calls the printTable above with all the things set straight.
*/
-void
- printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout);
+void printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout);
+
+#ifndef __CYGWIN__
+#define DEFAULT_PAGER "more"
+#else
+#define DEFAULT_PAGER "less"
+#endif
#endif /* PRINT_H */