pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Robert Haas <robertmhaas@gmail.com>
Cc: Christoph Berg <myon@debian.org>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Subject: Re: pgsql: Add basic TAP tests for psql's tab-completion logic.
Date: Sat, 04 Jan 2020 01:39:55 -0500
Message-ID: <8038.1578119995@sss.pgh.pa.us> (raw)
In-Reply-To: <CAH2-Wz=CtOruqXPd3naWXNiQ0WvLSFnCDYmSDWy0hKiLrppXDQ@mail.gmail.com>
References: <20200103170226.GB32629@msg.df7cb.de>
	<26339.1578072930@sss.pgh.pa.us>
	<20200103174839.GD32629@msg.df7cb.de>
	<CA+TgmoZsPe_G1ssO6KVPqbMQHDEz=vHPQH1jxaSjpG_QxM7wUg@mail.gmail.com>
	<CAH2-WznPzfWHu8PQwv1Qjpf4wQVPaaWpoO5NunFz9zsYKB4uJA@mail.gmail.com>
	<22669.1578104202@sss.pgh.pa.us>
	<CAH2-WznyU3QxzRr12W_tJAzjwM9qd6bh_ZGx3Xupk3RqE1t72A@mail.gmail.com>
	<25298.1578106280@sss.pgh.pa.us>
	<CAH2-Wzkq4OELzn3yZvuqsPuso5JfSXdaD+yW=1VMz2YpXTBYxA@mail.gmail.com>
	<CAH2-Wzk3xfc53A0KZRe4Xu9TALRU=HSfSVZqx3jBuws08mG-ew@mail.gmail.com>
	<3055.1578115809@sss.pgh.pa.us>
	<CAH2-Wz=CtOruqXPd3naWXNiQ0WvLSFnCDYmSDWy0hKiLrppXDQ@mail.gmail.com>

Peter Geoghegan <pg@bowt.ie> writes:
> On Fri, Jan 3, 2020 at 9:30 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> BTW, it seems somewhat likely that this is less about libreadline
>> than about its dependency libtinfo.  On my machine that's from
>> ii  libtinfo6:amd64                       6.1+20181013-2+deb10u2               amd64        shared low-level terminfo library for terminal handling

> This seems promising. By following the same ldd + dpkg -S workflow as
> before, I can see that my libtinfo is "libtinfo5:amd64".

Hmm.  Usually this sort of software gets more weird in newer
versions, not less so ;-).  Still, it's a starting point.

Attached is a blind attempt to fix this by allowing escape
sequence(s) instead of spaces between the words.  Does this
work for you?

			regards, tom lane

Attachments:

  [text/x-diff] allow-escape-sequences-1.patch (1.2K, ../8038.1578119995@sss.pgh.pa.us/2-allow-escape-sequences-1.patch)
  download | inline diff:
diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl
index 96221f8..7f1797c 100644
--- a/src/bin/psql/t/010_tab_completion.pl
+++ b/src/bin/psql/t/010_tab_completion.pl
@@ -38,6 +38,12 @@ $node->safe_psql('postgres',
 my $historyfile = "${TestLib::log_path}/010_psql_history.txt";
 $ENV{PSQL_HISTORY} = $historyfile;
 
+# Ensure that readline/libedit puts out xterm escapes, not something else.
+$ENV{TERM} = 'xterm';
+
+# regexp to match one xterm escape sequence (CSI style only, for now)
+my $escseq = "(\e\\[[0-9;]*[A-Za-z])";
+
 # fire up an interactive psql session
 my $in  = '';
 my $out = '';
@@ -101,8 +107,12 @@ check_completion(
 	"select \\* from my\a?tab",
 	"complete my<tab> to mytab when there are multiple choices");
 
-# some versions of readline/libedit require two tabs here, some only need one
-check_completion("\t\t", "mytab123 +mytab246",
+# some versions of readline/libedit require two tabs here, some only need one.
+# also, some might issue escape sequences to reposition the cursor, instead
+# of just printing some spaces.
+check_completion(
+	"\t\t",
+	"mytab$escseq*123( +|$escseq+)mytab$escseq*246",
 	"offer multiple table choices");
 
 check_completion("2\t", "246 ",

view thread (64+ messages)  latest in thread

Message-ID: <8038.1578119995@sss.pgh.pa.us>
Permalink:  ../8038.1578119995@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/8038.1578119995@sss.pgh.pa.us

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pg@bowt.ie, robertmhaas@gmail.com, myon@debian.org, pgsql-hackers@postgresql.org
  Subject: Re: pgsql: Add basic TAP tests for psql's tab-completion logic.
  In-Reply-To: <8038.1578119995@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox