I like how browsers show a little lock in the address bar depending on
whether SSL is in use.  This could be useful in psql as well.  Here is a
prototype patch.

Example:

Put this in .psqlrc:

\set PROMPT1 '%s%/%R%# '

$ psql test
psql (9.6devel)
Type "help" for help.

🔒test=#

Without SSL:

🃏test=#

Comments?
From b3a79d56507c61b6fa6efba6f97a37acf822d39f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Fri, 1 Apr 2016 00:00:00 +0000
Subject: [PATCH] psql: Add %s prompt placeholder for SSL status

---
 doc/src/sgml/ref/psql-ref.sgml |  9 +++++++++
 src/bin/psql/prompt.c          | 20 ++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 385cb59..b4044e2 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -3512,6 +3512,15 @@ <title id="APP-PSQL-prompting-title">Prompting</title>
       </varlistentry>
 
       <varlistentry>
+        <term><literal>%s</literal></term>
+        <listitem>
+         <para>
+          A character indicating whether SSL is in use.
+         </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><literal>%</literal><replaceable class="parameter">digits</replaceable></term>
         <listitem>
         <para>
diff --git a/src/bin/psql/prompt.c b/src/bin/psql/prompt.c
index 647e871..3c25a2f 100644
--- a/src/bin/psql/prompt.c
+++ b/src/bin/psql/prompt.c
@@ -21,6 +21,7 @@
 #include "input.h"
 #include "prompt.h"
 #include "settings.h"
+#include "mb/pg_wchar.h"
 
 
 /*--------------------------
@@ -44,6 +45,7 @@
  *			or a ! if session is not connected to a database;
  *		in prompt2 -, *, ', or ";
  *		in prompt3 nothing
+ * %s - SSL mode
  * %x - transaction status: empty, *, !, ? (unknown or no connection)
  * %l - The line number inside the current statement, starting from 1.
  * %? - the error code of the last query (not yet implemented)
@@ -218,6 +220,24 @@ get_prompt(promptStatus_t status)
 					}
 					break;
 
+				case 's':
+					if (pset.db && PQsslInUse(pset.db))
+					{
+						if (pset.encoding == PG_UTF8)
+							strlcpy(buf, "\xF0\x9F\x94\x92 ", sizeof(buf));  /* U+1F512 */
+						else
+							strlcpy(buf, "#", sizeof(buf));
+					}
+					else
+					{
+						if (pset.encoding == PG_UTF8)
+							strlcpy(buf, "\xF0\x9F\x83\x8F", sizeof(buf));  /* U+1F0CF */
+						else
+							strlcpy(buf, "_", sizeof(buf));
+
+					}
+					break;
+
 				case 'x':
 					if (!pset.db)
 						buf[0] = '?';
-- 
2.8.0

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to