Fix \? and \pset pager handling. \? wasn't honoring pager before.
authorBruce Momjian <bruce@momjian.us>
Mon, 15 Jul 2002 01:56:25 +0000 (01:56 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 15 Jul 2002 01:56:25 +0000 (01:56 +0000)
doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/command.c
src/bin/psql/help.c
src/bin/psql/help.h
src/bin/psql/print.c
src/bin/psql/print.h

index 85bc6852be41578fc33ea561e0d18c6d9e0a7814..923a87411127d79dca7715dcb49c0c35948860fc 100644 (file)
@@ -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>
index eceecd7d26a57bb2c777cd8c368164f2cd1b80f0..f28af37d931cb0dd598153d9a674714acf252a74 100644 (file)
@@ -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
 
index becade93fb9fec1a288abc0673d4facc62883550..592a8af3fbc001880385d670ba35e17ac5327412 100644 (file)
@@ -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
index 16d09480bf5be86e7d53b2b3b2d1118e010c4897..6c655f306b379f5d87de0b8c0a322780c3306185 100644 (file)
@@ -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);
 
index 892d88fdf03a2806ab3369fba0bf0fcbd3e2ac00..92368f9c2d97566fbb5e3963b378a15e1758b64a 100644 (file)
@@ -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"
 
 #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
-
        }
 }
 
index 59c32830d22705e08641c0053a58371fa0250f80..bcb3495bc67abc01a4dd7b9d6c1f81ef2aea0b78 100644 (file)
@@ -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 */