aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2018-02-12 01:27:06 -0500
committerBruce Momjian <bruce@momjian.us>2018-02-12 01:27:06 -0500
commit91389228a1007fa3845e29e17568e52ab1726d5d (patch)
treef36bd342b40e6acf58d4dfd007b583311608804f /src
parent5c9f2564fabbc770ead3bd92136fdafc43654f27 (diff)
downloadpostgresql-91389228a1007fa3845e29e17568e52ab1726d5d.tar.gz
postgresql-91389228a1007fa3845e29e17568e52ab1726d5d.zip
psql: give ^D hint for \q in place where \q is ignored
Also add comment on why exit/quit are not documented. Discussion: https://postgr.es/m/20180202053928.GA13472@momjian.us
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/mainloop.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c
index a3ef15058fc..c06ce3ca09c 100644
--- a/src/bin/psql/mainloop.c
+++ b/src/bin/psql/mainloop.c
@@ -223,6 +223,7 @@ MainLoop(FILE *source)
char *rest_of_line = NULL;
bool found_help = false;
bool found_exit_or_quit = false;
+ bool found_q = false;
/* Search for the words we recognize; must be first word */
if (pg_strncasecmp(first_word, "help", 4) == 0)
@@ -237,10 +238,18 @@ MainLoop(FILE *source)
found_exit_or_quit = true;
}
+ else if (strncmp(first_word, "\\q", 2) == 0)
+ {
+ rest_of_line = first_word + 2;
+ found_q = true;
+ }
+
/*
* If we found a command word, check whether the rest of the line
* contains only whitespace plus maybe one semicolon. If not,
- * ignore the command word after all.
+ * ignore the command word after all. These commands are only
+ * for compatibility with other SQL clients and are not
+ * documented.
*/
if (rest_of_line != NULL)
{
@@ -288,6 +297,7 @@ MainLoop(FILE *source)
continue;
}
}
+
/*
* "quit" and "exit" are only commands when the query buffer is
* empty, but we emit a one-line message even when it isn't to
@@ -318,6 +328,21 @@ MainLoop(FILE *source)
break;
}
}
+
+ /*
+ * If they typed "\q" in a place where "\q" is not active,
+ * supply a hint. The text is still added to the query
+ * buffer.
+ */
+ if (found_q && query_buf->len != 0 &&
+ prompt_status != PROMPT_READY &&
+ prompt_status != PROMPT_CONTINUE &&
+ prompt_status != PROMPT_PAREN)
+#ifndef WIN32
+ puts(_("Use control-D to quit."));
+#else
+ puts(_("Use control-C to quit."));
+#endif
}
/* echo back if flag is set, unless interactive */