Here is a patch that does just that, while maintaining the

"traditional" behavior, so the change should be transparent. Use the
command "\pset pager always" to turn it on. Anything else does the
normal toggle between "on" and "off"

Greg Sabino Mullane
This commit is contained in:
Bruce Momjian 2002-11-08 19:12:21 +00:00
parent c2b716ab68
commit b26dfbb0e3
7 changed files with 34 additions and 26 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.79 2002/10/19 00:22:14 tgl Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.80 2002/11/08 19:12:21 momjian Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -1456,21 +1456,21 @@ lo_import 152801
<term><literal>pager</literal></term> <term><literal>pager</literal></term>
<listitem> <listitem>
<para> <para>
Toggles the use of a pager for query and <application>psql</> help output. If the Controls use of a pager for query and <application>psql</>
environment variable <envar>PAGER</envar> is set, the output help output. If the environment variable <envar>PAGER</envar>
is piped to the specified program. Otherwise a platform-dependent default (such as is set, the output is piped to the specified program.
Otherwise a platform-dependent default (such as
<filename>more</filename>) is used. <filename>more</filename>) is used.
</para> </para>
<para> <para>
In any case, <application>psql</application> only uses the When the pager is off, the pager is not used. When the pager
pager if it seems appropriate. That means among other things is on, the pager is used only when appropriate, i.e. the
that the output is to a terminal and that the table would output is to a terminal and will not fit on the screen.
normally not fit on the screen. Because of the modular nature (<application>psql</> does not do a perfect job of estimating
of the printing routines it is not always possible to predict when to use the pager.) <literal>\pset pager</> turns the
the number of lines that will actually be printed. For that pager on and off. Pager can also be set to <literal>always</>,
reason <application>psql</application> might not appear very which causes the pager to be always used.
discriminating about when to use the pager.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000-2002 by PostgreSQL Global Development Group * Copyright 2000-2002 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.84 2002/10/23 19:23:56 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.85 2002/11/08 19:12:21 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "command.h" #include "command.h"
@ -1873,11 +1873,18 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
/* toggle use of pager */ /* toggle use of pager */
else if (strcmp(param, "pager") == 0) else if (strcmp(param, "pager") == 0)
{ {
popt->topt.pager = !popt->topt.pager; if (value && strcasecmp(value, "always") == 0)
popt->topt.pager = 2;
else if (popt->topt.pager == 1)
popt->topt.pager = 0;
else
popt->topt.pager = 1;
if (!quiet) if (!quiet)
{ {
if (popt->topt.pager) if (popt->topt.pager == 1)
puts(gettext("Using pager is on.")); puts(gettext("Using pager is on."));
else if (popt->topt.pager == 2)
puts(gettext("Using pager is always."));
else else
puts(gettext("Using pager is off.")); puts(gettext("Using pager is off."));
} }

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.51 2002/10/29 19:35:33 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.52 2002/11/08 19:12:21 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "common.h" #include "common.h"
@ -548,7 +548,7 @@ PageOutput(int lines, bool pager)
struct winsize screen_size; struct winsize screen_size;
result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size); result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
if (result == -1 || lines > screen_size.ws_row) if (result == -1 || lines > screen_size.ws_row || pager > 1)
{ {
#endif #endif
pagerprog = getenv("PAGER"); pagerprog = getenv("PAGER");

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.60 2002/10/24 01:33:50 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.61 2002/11/08 19:12:21 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "common.h" #include "common.h"
@ -159,7 +159,7 @@ struct winsize
#endif #endif
void void
slashUsage(bool pager) slashUsage(unsigned short int pager)
{ {
FILE *output; FILE *output;

View File

@ -3,14 +3,14 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.10 2002/10/23 19:23:57 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.11 2002/11/08 19:12:21 momjian Exp $
*/ */
#ifndef HELP_H #ifndef HELP_H
#define HELP_H #define HELP_H
void usage(void); void usage(void);
void slashUsage(bool pager); void slashUsage(unsigned short int pager);
void helpSQL(const char *topic, bool pager); void helpSQL(const char *topic, bool pager);

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.14 2002/09/04 20:31:36 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.15 2002/11/08 19:12:21 momjian Exp $
*/ */
#ifndef PRINT_H #ifndef PRINT_H
#define PRINT_H #define PRINT_H
@ -26,8 +26,9 @@ typedef struct _printTableOpt
enum printFormat format; /* one of the above */ enum printFormat format; /* one of the above */
bool expanded; /* expanded/vertical output (if supported bool expanded; /* expanded/vertical output (if supported
* by output format) */ * by output format) */
bool pager; /* use pager for output (if to stdout and unsigned short int pager; /* use pager for output (if to stdout and
* stdout is a tty) */ * stdout is a tty)
* 0=off 1=on 2=always */
bool tuples_only; /* don't output headers, row counts, etc. */ bool tuples_only; /* don't output headers, row counts, etc. */
unsigned short int border; /* Print a border around the table. unsigned short int border; /* Print a border around the table.
* 0=none, 1=dividing lines, 2=full */ * 0=none, 1=dividing lines, 2=full */

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.68 2002/10/18 22:05:36 petere Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.69 2002/11/08 19:12:21 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
@ -137,7 +137,7 @@ main(int argc, char *argv[])
pset.popt.topt.format = PRINT_ALIGNED; pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout; pset.queryFout = stdout;
pset.popt.topt.border = 1; pset.popt.topt.border = 1;
pset.popt.topt.pager = true; pset.popt.topt.pager = 1;
pset.popt.default_footer = true; pset.popt.default_footer = true;
SetVariable(pset.vars, "VERSION", PG_VERSION_STR); SetVariable(pset.vars, "VERSION", PG_VERSION_STR);