Re: [GENERAL] psql: \pset pager 'always'? - Mailing list pgsql-patches

From greg@turnstep.com
Subject Re: [GENERAL] psql: \pset pager 'always'?
Date
Msg-id 20020911193602.C1EED476944@postgresql.org
Whole thread Raw
List 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@turnstep.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-----



pgsql-patches by date:

Previous
From: Lee Kindness
Date:
Subject: fmgr.h: PG_NARGS() for number of arguments passed
Next
From: Bruce Momjian
Date:
Subject: Re: fmgr.h: PG_NARGS() for number of arguments passed