From: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: tanghy.fnst@fujitsu.com <tanghy.fnst@fujitsu.com>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: Japin Li <japinli@hotmail.com>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: smithpb2250@gmail.com <smithpb2250@gmail.com>
Cc: david.zhang@highgo.ca <david.zhang@highgo.ca>
Cc: pgsql-hackers@lists.postgresql.org <pgsql-hackers@lists.postgresql.org>
Subject: Re: Support tab completion for upper character inputs in psql
Date: Tue, 01 Feb 2022 13:15:45 +0000
Message-ID: <87wniezq0u.fsf@wibble.ilmari.org> (raw)
In-Reply-To: <838381.1643665141@sss.pgh.pa.us>
References: <OS0PR01MB611303B647967B6949B759F1FB4E9@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<80b093ae-88bd-8d8a-68b9-b535a3ab11be@enterprisedb.com>
<OS0PR01MB61137C7B2B09C0431415B9DBFBD69@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<54bd7839-f463-ef03-f2d2-ccb8184b9b27@enterprisedb.com>
<1068530.1641480996@sss.pgh.pa.us>
<TYCPR01MB6128BD8EA1529F4270114C18FB4D9@TYCPR01MB6128.jpnprd01.prod.outlook.com>
<MEYP282MB1669EAF2183E67EAF86F7F61B64D9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM>
<TYCPR01MB6128D4933189A74AAD326F98FB4D9@TYCPR01MB6128.jpnprd01.prod.outlook.com>
<3547066.1642272686@sss.pgh.pa.us>
<OS0PR01MB6113C130461FB8A9DBA0DAEBFB5A9@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<OS0PR01MB6113DB08D8CEA4E214DA37BBFB5F9@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<2304294.1643152287@sss.pgh.pa.us>
<OS0PR01MB611360D58EA41FC6557D92C0FB229@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<2771362.1643385796@sss.pgh.pa.us>
<2805502.1643405157@sss.pgh.pa.us>
<2818574.1643408192@sss.pgh.pa.us>
<OS0PR01MB61130E73CFDB2C0E8FD1A892FB249@OS0PR01MB6113.jpnprd01.prod.outlook.com>
<324281.1643567679@sss.pgh.pa.us>
<8735l41ynm.fsf@wibble.ilmari.org>
<534641.1643594097@sss.pgh.pa.us>
<838381.1643665141@sss.pgh.pa.us>
Tom Lane <tgl@sss.pgh.pa.us> writes:
> I wrote:
>> =?utf-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= <ilmari@ilmari.org> writes:
>>> First, as noted in the test, it doesn't preserve the case of the input
>>> for keywords appended to the query result. This is easily fixed by
>>> using `pg_strdup_keyword_case()`, per the first attached patch.
>
>> I thought about that, and intentionally didn't do it, because it
>> would also affect the menus produced by tab completion.
>> ...
>> We could do something hacky like matching case only when there's
>> no longer any matching object names, but that might be too magic.
>
> I experimented with that, and it actually doesn't seem as weird
> as I feared. See if you like this ...
That's a reasonable compromise, and the implementation is indeed less
hacky than one might have feared. Although I think putting the
`num_keywords` variable before `num_other` would read better.
Going through the uses of COMPLETE_WITH(_SCHEMA)_QUERY_PLUS, I noticed a
few that had the keywords in lower case, which is fixed in the attached
patch (except the hardcoded data types, which aren't really keywords).
While I was there, I also added completion of "AUTHORIZATION" after
"SHOW SESSSION", which is necessary since there are variables starting
with "session_".
> regards, tom lane
Cheers,
- ilmari
Attachments:0001-Make-all-tab-completion-keywords-upper-case.patch (text/x-diff, 2.0K) download
From 9cc255e0cdddeda3d655c1265d698b1f6027aec6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Tue, 1 Feb 2022 13:13:07 +0000
Subject: [PATCH] Make all tab completion keywords upper case.
So they stand out from the object names in the same tab completion
menu.
Also fix tab completion of SHOW SESSION AUTHORIZATION in the face of
config variables starting with session_.
---
src/bin/psql/tab-complete.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.cindex b2ec50b4f2..d2744cdb6f 100644--- a/src/bin/psql/tab-complete.c+++ b/src/bin/psql/tab-complete.c@@ -2059,7 +2059,7 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH("SET", "RESET");
else if (Matches("ALTER", "SYSTEM", "SET|RESET"))
COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_alter_system_set_vars,
- "all");+ "ALL");
else if (Matches("ALTER", "SYSTEM", "SET", MatchAny))
COMPLETE_WITH("TO");
/* ALTER VIEW <name> */
@@ -4039,16 +4039,18 @@ psql_completion(const char *text, int start, int end)
/* Complete with a variable name */
else if (TailMatches("SET|RESET") && !TailMatches("UPDATE", MatchAny, "SET"))
COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_set_vars,
- "constraints",- "transaction",- "session",- "role",- "tablespace",- "all");+ "CONSTRAINTS",+ "TRANSACTION",+ "SESSION",+ "ROLE",+ "TABLESPACE",+ "ALL");
else if (Matches("SHOW"))
COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_show_vars,
- "session authorization",- "all");+ "SESSION AUTHORIZATION",+ "ALL");+ else if (Matches("SHOW", "SESSION"))+ COMPLETE_WITH("AUTHORIZATION");
/* Complete "SET TRANSACTION" */
else if (Matches("SET", "TRANSACTION"))
COMPLETE_WITH("SNAPSHOT", "ISOLATION LEVEL", "READ", "DEFERRABLE", "NOT DEFERRABLE");
--
2.30.2
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-hackers@postgresql.org
Cc: ilmari@ilmari.org, tgl@sss.pgh.pa.us, tanghy.fnst@fujitsu.com, peter.eisentraut@enterprisedb.com, japinli@hotmail.com, horikyota.ntt@gmail.com, laurenz.albe@cybertec.at, smithpb2250@gmail.com, david.zhang@highgo.ca, pgsql-hackers@lists.postgresql.org
Subject: Re: Support tab completion for upper character inputs in psql
In-Reply-To: <87wniezq0u.fsf@wibble.ilmari.org>
* 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