Fix \? and \pset pager handling. \? wasn't honoring pager before.
authorBruce Momjian
Mon, 15 Jul 2002 01:56:25 +0000 (01:56 +0000)
committerBruce Momjian
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 @@
 
 
@@ -1036,7 +1036,7 @@ lo_import 152801
      pager
      
      
-     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 PAGER is set, the output
      is piped to the specified program. Otherwise
      more 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 psql might not appear very
-     discriminating about when to use the pager and when not to.
+     discriminating about when to use the pager.
      
      
      
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 
@@ -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 -tag attributes, or unset if none\n"));
-   fprintf(fout, _(" \\timing        toggle timing of queries (currently %s)\n"),
+   fprintf(output, _(" \\T [STRING]    set HTML 
-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 
 #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 */