psql: \pset pager 'always'?
I don't know if this is already done, but...
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. Or do you consider this being readable (copyed
verbatim from terminal window):
template1=# select * from pg_class limit 1;
relname | reltype | relowner | relam | relfilenode | relpages | reltuples |
reltoastrelid | reltoastidxid | relhasindex | relisshared | relkind |
relnatts | relchecks | reltriggers | relukeys | relfkeys | relrefs |
relhasoids | relhaspkey | relhasrules | relhassubclass | relacl
----------------------+---------+----------+-------+-------------+----------+-----------+---------------+---------------+-------------+-------------+---------+----------+-----------+-------------+----------+----------+---------+------------+------------+-
------------+----------------+--------
pg_type | 71 | 1 | 0 | 1247 |
2 |
143 | 0 | 0 | t | f
| r |
17 | 0 | 0 | 0 | 0 | 0
| t
Until that I need to avoid queries with too _few_ resulting rows in psql.
;-) (select * from pg_class works brilliantly).
--
Antti Haapala
-----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-----
Import Notes
Resolved by subject fallback
antti.haapala@iki.fi (Antti Haapala) writes:
I don't know if this is already done, but...
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. Or do you consider this being readable (copyed
verbatim from terminal window):
Yes, I'd like to second that.
My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.
- Justin
--
Justin Hawkins
Internode Professional Access
This has been saved for the 7.4 release:
http://candle.pha.pa.us/cgi-bin/pgpatches2
---------------------------------------------------------------------------
greg@turnstep.com wrote:
[ There is text before PGP section. ]
[ PGP not available, raw data follows ]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NotDashEscaped: You need GnuPG to verify this messageI'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 200209111525Index: 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 **** #endifvoid ! slashUsage(bool pager) { FILE *output, *pagerfd = NULL; --- 159,165 ---- #endifvoid
! 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.htmliD8DBQE9f5klvJuQZxSWSsgRAuFGAJwNsHiudvGq+Xq8WpQO4bSrd+QUtwCgo1lB
iolPoprltuDfsb4YSjAHHs4=
=5Kt2
-----END PGP SIGNATURE--------------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
[ Decrypting message... End of raw data. ]
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
On Thu, Sep 12, 2002 at 10:20:45AM +0930, Justin Hawkins wrote:
antti.haapala@iki.fi (Antti Haapala) writes:
I don't know if this is already done, but...
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. Or do you consider this being readable (copyed
verbatim from terminal window):Yes, I'd like to second that.
My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.
Remember, you can always use \g like this:
select * from table \g |less -S
Maybe not neat, but very effective.
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/
Show quoted text
There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.
Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.
---------------------------------------------------------------------------
Martijn van Oosterhout wrote:
On Thu, Sep 12, 2002 at 10:20:45AM +0930, Justin Hawkins wrote:
antti.haapala@iki.fi (Antti Haapala) writes:
I don't know if this is already done, but...
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. Or do you consider this being readable (copyed
verbatim from terminal window):Yes, I'd like to second that.
My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.Remember, you can always use \g like this:
select * from table \g |less -S
Maybe not neat, but very effective.
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.
Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.
Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200209180926
-----BEGIN PGP SIGNATURE-----
iD8DBQE9iID8vJuQZxSWSsgRAk2mAKDRRopF9H7PMW18+qq5WgPHRiga/QCcCG2e
G/ZxYw5fqwGxov9hVd+mhV0=
=9nqS
-----END PGP SIGNATURE-----
Import Notes
Resolved by subject fallback
On Wed, Sep 18, 2002 at 01:40:42PM -0000, greg@turnstep.com wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.
While this is true, if you do a select whose output wraps because it is too
wide, getting it to go through "less -S" is extremely useful to have the
columns line up. OTOH, sending everything to the pager is annoying if the
result is only one value.
I'd be happy with an easier way to force the pager than "\g |less -S".
Perhaps if \g is specified without a filename, it defaults to the pager.
Would such a patch be accepted?
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/
Show quoted text
There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.
There is a patch at:
http://candle.pha.pa.us/cgi-bin/pgpatches2
which will allow you to turn on the pager always. This is for 7.4.
---------------------------------------------------------------------------
Martijn van Oosterhout wrote:
On Wed, Sep 18, 2002 at 01:40:42PM -0000, greg@turnstep.com wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.While this is true, if you do a select whose output wraps because it is too
wide, getting it to go through "less -S" is extremely useful to have the
columns line up. OTOH, sending everything to the pager is annoying if the
result is only one value.I'd be happy with an easier way to force the pager than "\g |less -S".
Perhaps if \g is specified without a filename, it defaults to the pager.
Would such a patch be accepted?--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
OK, I have applied the following patch for 7.4. I made the following
changes:
o Pager code is now centralized in PageOutput
o You used 'small' when you meant 'short' in a few places
o Added documentation
o Fixed bug where '\pset pager' crashed psql
---------------------------------------------------------------------------
greg@turnstep.com wrote:
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"
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073