From: | Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: proposal - psql - use pager for \watch command |
Date: | 2022-06-07 04:50:06 |
Message-ID: | CA+hUKGJNUE=GtREvEneL9DR6smgEHOcdDuVOkEj7vPgv0rDQwA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Jun 7, 2022 at 3:23 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)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 | Content-Type | Size |
---|---|---|
v2-0001-Fix-watch-s-interaction-with-libedit-libreadline.patch | text/x-patch | 1.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2022-06-07 05:26:17 | Re: proposal - psql - use pager for \watch command |
Previous Message | Peter Smith | 2022-06-07 04:10:51 | tablesync copy ignores publication actions |