On Tue, Jan 12, 2016 at 1:15 AM, David G. Johnston
<[email protected]> wrote:
> On Mon, Jan 11, 2016 at 9:03 AM, Tom Lane <[email protected]> wrote:
>>
>> "David G. Johnston" <[email protected]> writes:
>> > On Mon, Jan 11, 2016 at 8:14 AM, Tom Lane <[email protected]> wrote:
>> >> Perhaps we should replace the "Watch every Ns" text by the user-given
>> >> title if a title has been set? That would conserve screen space.
>>
>> > The extra line doesn't both me and given the length of the timestamp I
>> > suspect many titles would cause the combined line length to exceed
>> > terminal
>> > width and cause wrapping anyway. In my specific case it would though I
>> > am
>> > using an abnormally narrow width.
>>
>> You speak as though the title will be chosen without any regard for the
>> context it's used in, which I rather doubt. Wouldn't people pick the
>> title for a \watch query so that it fits? (In any case they could
>> force the issue by including a \n in their title...)
>>
>
> True that.
>
> I don't have a strong opinion either way. Having a single, condensed, title
> line would be nice though using two in order to not be cryptic has its own
> appeal.
Just looking at that I just hacked the attached that enforces \n at
the end of the user-defined title (that's easily changeable):
=# \pset title 'foo bar'
Title is "foo bar".
=# select 1;
foo bar
?column?
----------
1
(1 row)
=# \watch 1
foo bar
Watch every 1s Tue Jan 12 13:54:04 2016
?column?
----------
1
(1 row)
--
Michael
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 9750a5b..9612c8a 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3020,7 +3020,8 @@ static bool
do_watch(PQExpBuffer query_buf, long sleep)
{
printQueryOpt myopt = pset.popt;
- char title[50];
+ char *title;
+ bool *head_title = NULL;
if (!query_buf || query_buf->len <= 0)
{
@@ -3034,6 +3035,18 @@ do_watch(PQExpBuffer query_buf, long sleep)
*/
myopt.topt.pager = 0;
+ /*
+ * Take into account any title present in the user setup as a part of
+ * what is printed for each iteration by using it as a header.
+ */
+ if (myopt.title)
+ {
+ title = pg_malloc(strlen(myopt.title) + 50);
+ head_title = pg_strdup(myopt.title);
+ }
+ else
+ title = pg_malloc(50);
+
for (;;)
{
int res;
@@ -3045,8 +3058,13 @@ do_watch(PQExpBuffer query_buf, long sleep)
* of completion of the command?
*/
timer = time(NULL);
- snprintf(title, sizeof(title), _("Watch every %lds\t%s"),
- sleep, asctime(localtime(&timer)));
+ if (head_title)
+ snprintf(title, strlen(myopt.title) + 50,
+ _("%s\nWatch every %lds\t%s"),
+ head_title, sleep, asctime(localtime(&timer)));
+ else
+ snprintf(title, 50, _("Watch every %lds\t%s"),
+ sleep, asctime(localtime(&timer)));
myopt.title = title;
/* Run the query and print out the results */
@@ -3059,7 +3077,11 @@ do_watch(PQExpBuffer query_buf, long sleep)
if (res == 0)
break;
if (res == -1)
+ {
+ pg_free(title);
+ pg_free(head_title);
return false;
+ }
/*
* Set up cancellation of 'watch' via SIGINT. We redo this each time
@@ -3084,6 +3106,8 @@ do_watch(PQExpBuffer query_buf, long sleep)
sigint_interrupt_enabled = false;
}
+ pg_free(title);
+ pg_free(head_title);
return true;
}
--
Sent via pgsql-general mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general