diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 6e3525d768..bb8d8f5eb4 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1,5 +1,5 @@
@@ -1456,21 +1456,21 @@ lo_import 152801
pager
- 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 a platform-dependent default (such as
+ Controls 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 a platform-dependent default (such as
more) is used.
- In any case, psql only uses the
- pager if it seems appropriate. That means among other things
- that the output is to a terminal and that the table would
- normally not fit on the screen. Because of the modular nature
- 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.
+ When the pager is off, the pager is not used. When the pager
+ is on, the pager is used only when appropriate, i.e. the
+ output is to a terminal and will not fit on the screen.
+ (psql> does not do a perfect job of estimating
+ when to use the pager.) \pset pager> turns the
+ pager on and off. Pager can also be set to always>,
+ which causes the pager to be always used.
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 83ce799e51..bfe5b45e1e 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* 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 "command.h"
@@ -1873,11 +1873,18 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
/* toggle use of pager */
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 (popt->topt.pager)
+ if (popt->topt.pager == 1)
puts(gettext("Using pager is on."));
+ else if (popt->topt.pager == 2)
+ puts(gettext("Using pager is always."));
else
puts(gettext("Using pager is off."));
}
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 55af65a3ae..fcd898877a 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
*
* 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 "common.h"
@@ -548,7 +548,7 @@ PageOutput(int lines, bool pager)
struct winsize 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
pagerprog = getenv("PAGER");
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 6e5323c01a..f9dd6145ae 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,7 +3,7 @@
*
* 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 "common.h"
@@ -159,7 +159,7 @@ struct winsize
#endif
void
-slashUsage(bool pager)
+slashUsage(unsigned short int pager)
{
FILE *output;
diff --git a/src/bin/psql/help.h b/src/bin/psql/help.h
index 28a8786466..7b3078dd85 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.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
#define HELP_H
void usage(void);
-void slashUsage(bool pager);
+void slashUsage(unsigned short int pager);
void helpSQL(const char *topic, bool pager);
diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h
index 09ec685bfe..f97bf9ead5 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.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
#define PRINT_H
@@ -26,8 +26,9 @@ typedef struct _printTableOpt
enum printFormat format; /* one of the above */
bool expanded; /* expanded/vertical output (if supported
* by output format) */
- bool pager; /* use pager for output (if to stdout and
- * stdout is a tty) */
+ unsigned short int pager; /* use pager for output (if to stdout and
+ * stdout is a tty)
+ * 0=off 1=on 2=always */
bool tuples_only; /* don't output headers, row counts, etc. */
unsigned short int border; /* Print a border around the table.
* 0=none, 1=dividing lines, 2=full */
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 16e7ed9c28..3a9ab01e0e 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
*
* 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"
@@ -137,7 +137,7 @@ main(int argc, char *argv[])
pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout;
pset.popt.topt.border = 1;
- pset.popt.topt.pager = true;
+ pset.popt.topt.pager = 1;
pset.popt.default_footer = true;
SetVariable(pset.vars, "VERSION", PG_VERSION_STR);