Re: proposal - psql - use pager for \watch command

Поиск
Список
Период
Сортировка
От Thomas Munro
Тема Re: proposal - psql - use pager for \watch command
Дата
Msg-id CA+hUKGJNUE=GtREvEneL9DR6smgEHOcdDuVOkEj7vPgv0rDQwA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: proposal - psql - use pager for \watch command  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: proposal - psql - use pager for \watch command  (Pavel Stehule <pavel.stehule@gmail.com>)
Список 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

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Smith
Дата:
Сообщение: tablesync copy ignores publication actions
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: proposal - psql - use pager for \watch command