Re: psql: \pset pager 'always'?

From: greg(at)turnstep(dot)com
To: pgsql-general(at)postgresql(dot)org, pgsql-patches(at)postgresql(dot)org
Cc: antti(dot)haapala(at)iki(dot)fi
Subject: Re: psql: \pset pager 'always'?
Date: 2002-09-11 19:29:06
Message-ID: 20020911193602.BE04347693B@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-patches


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NotDashEscaped: You need GnuPG to verify this message

> I'm really annoyed by that little 'feature' of psql that decides whether
> to use pager or not. I personally use GNU 'less' with options -S -F as my
> pager, which allows me to scroll vertically AS WELL AS horizontally on
> long input. So a "use pager always" option with no strange automagic
> behaviour would be nice.

Not a bad idea. 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 greg(at)turnstep(dot)com
PGP Key: 0x14964AC8 200209111525

Index: command.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/command.c,v
retrieving revision 1.80
diff -c -r1.80 command.c
*** command.c 2002/09/04 20:31:35 1.80
--- command.c 2002/09/11 19:24:41
***************
*** 1867,1877 ****
/* toggle use of pager */
else if (strcmp(param, "pager") == 0)
{
! popt->topt.pager = !popt->topt.pager;
if (!quiet)
{
! if (popt->topt.pager)
puts(gettext("Using pager is on."));
else
puts(gettext("Using pager is off."));
}
--- 1867,1884 ----
/* toggle use of pager */
else if (strcmp(param, "pager") == 0)
{
! if (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 == 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."));
}
Index: help.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.c,v
retrieving revision 1.56
diff -c -r1.56 help.c
*** help.c 2002/09/04 20:31:35 1.56
--- help.c 2002/09/11 19:24:41
***************
*** 159,165 ****
#endif

void
! slashUsage(bool pager)
{
FILE *output,
*pagerfd = NULL;
--- 159,165 ----
#endif

void
! slashUsage(unsigned small int pager)
{
FILE *output,
*pagerfd = NULL;
***************
*** 180,186 ****
struct winsize screen_size;

result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! if (result == -1 || 50 > screen_size.ws_row)
{
#endif
pagerprog = getenv("PAGER");
--- 180,186 ----
struct winsize screen_size;

result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! if (result == -1 || 50 > screen_size.ws_row || pager == 2)
{
#endif
pagerprog = getenv("PAGER");
Index: help.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.h,v
retrieving revision 1.9
diff -c -r1.9 help.h
*** help.h 2002/07/15 01:56:25 1.9
--- help.h 2002/09/11 19:24:41
***************
*** 10,16 ****

void usage(void);

! void slashUsage(bool pager);

void helpSQL(const char *topic);

--- 10,16 ----

void usage(void);

! void slashUsage(unsigned small int pager);

void helpSQL(const char *topic);

Index: print.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.c,v
retrieving revision 1.31
diff -c -r1.31 print.c
*** print.c 2002/09/01 23:30:46 1.31
--- print.c 2002/09/11 19:24:41
***************
*** 1022,1028 ****
lines++;

result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! if (result == -1 || lines > screen_size.ws_row)
{
#endif
pagerprog = getenv("PAGER");
--- 1022,1028 ----
lines++;

result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! if (result == -1 || lines > screen_size.ws_row || opt->pager == 2)
{
#endif
pagerprog = getenv("PAGER");
Index: print.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.h,v
retrieving revision 1.14
diff -c -r1.14 print.h
*** print.h 2002/09/04 20:31:36 1.14
--- print.h 2002/09/11 19:24:41
***************
*** 26,33 ****
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) */
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 */
--- 26,34 ----
enum printFormat format; /* one of the above */
bool expanded; /* expanded/vertical output (if supported
* by output format) */
! 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 */
Index: startup.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.66
diff -c -r1.66 startup.c
*** startup.c 2002/09/06 02:33:47 1.66
--- startup.c 2002/09/11 19:24:41
***************
*** 137,143 ****
pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout;
pset.popt.topt.border = 1;
! pset.popt.topt.pager = true;
pset.popt.default_footer = true;

SetVariable(pset.vars, "VERSION", PG_VERSION_STR);
--- 137,143 ----
pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout;
pset.popt.topt.border = 1;
! pset.popt.topt.pager = 1;
pset.popt.default_footer = true;

SetVariable(pset.vars, "VERSION", PG_VERSION_STR);

-----BEGIN PGP SIGNATURE-----
Comment: http://www.turnstep.com/pgp.html

iD8DBQE9f5klvJuQZxSWSsgRAuFGAJwNsHiudvGq+Xq8WpQO4bSrd+QUtwCgo1lB
iolPoprltuDfsb4YSjAHHs4=
=5Kt2
-----END PGP SIGNATURE-----

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Francisco J Reyes 2002-09-11 19:37:57 pg_dumpall between Linux and FreeBSD.
Previous Message Jan Wieck 2002-09-11 18:58:04 Re: transactions

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2002-09-11 23:56:09 Re: fmgr.h: PG_NARGS() for number of arguments passed
Previous Message Lee Kindness 2002-09-11 13:25:01 fmgr.h: PG_NARGS() for number of arguments passed