Re: proposal - psql - use pager for \watch command - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: proposal - psql - use pager for \watch command
Date
Msg-id CA+hUKGJNUE=GtREvEneL9DR6smgEHOcdDuVOkEj7vPgv0rDQwA@mail.gmail.com
Whole thread Raw
In response to Re: proposal - psql - use pager for \watch command  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: proposal - psql - use pager for \watch command
List pgsql-hackers
On Tue, Jun 7, 2022 at 3:23 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> The code needs a comment about why it's emitting a newline, though.
> In particular, it had better explain why that should be conditional
> on !pagerpipe, because that makes no sense to me.

Yeah.  OK, here's my take:

+               /*
+                * If the terminal driver echoed "^C",
libedit/libreadline might be
+                * confused about the cursor position.  Therefore,
inject a newline
+                * before the next prompt is displayed.  We only do
this when not using
+                * a pager, because pagers are expected to restore the
screen to a sane
+                * state on exit.
+                */

AFAIK pagers conventionally use something like termcap ti/te[1] to
restore the screen, or equivalents in tinfo etc (likely via curses).
If we were to inject an extra newline we'd just have a blank line for
nothing.  I suppose there could be a hypothetical pager that doesn't
follow that convention, and in fact both less and pspg have a -X
option to preserve last output, but in any case I expect that pagers
disable echoing, so I don't think the ^C will make it to the screen,
and furthermore ^C isn't used for exit anyway.  Rather than speculate
about the precise details, I just said "... sane state on exit".
Pavel, do you agree?

Here's how it looks after I enter and then exit Pavel's streaming pager:

$ PSQL_WATCH_PAGER='pspg --stream' ~/install/bin/psql postgres
psql (15beta1)
Type "help" for help.

postgres=# select;
--
(1 row)

postgres=# \watch 1
postgres=#

FWIW it's the same with PSQL_WATCH_PAGER='less'.

[1] https://www.gnu.org/software/termutils/manual/termcap-1.3/html_node/termcap_39.html

Attachment

pgsql-hackers by date:

Previous
From: Peter Smith
Date:
Subject: tablesync copy ignores publication actions
Next
From: Pavel Stehule
Date:
Subject: Re: proposal - psql - use pager for \watch command