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);