mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
psql: Add documentation URL to \help output
Add a link to the specific command's reference web page to the bottom of its \help output. Discussion: https://www.postgresql.org/message-id/flat/40179bd0-fa7d-4108-1991-a20ae9ad5667%402ndquadrant.com
This commit is contained in:
parent
f2d84a4a6b
commit
27f3dea648
@ -64,6 +64,7 @@ struct _helpStruct
|
|||||||
{
|
{
|
||||||
const char *cmd; /* the command name */
|
const char *cmd; /* the command name */
|
||||||
const char *help; /* the help associated with it */
|
const char *help; /* the help associated with it */
|
||||||
|
const char *docbook_id; /* DocBook XML id (for generating URL) */
|
||||||
void (*syntaxfunc)(PQExpBuffer); /* function that prints the syntax associated with it */
|
void (*syntaxfunc)(PQExpBuffer); /* function that prints the syntax associated with it */
|
||||||
int nl_count; /* number of newlines in syntax (for pager) */
|
int nl_count; /* number of newlines in syntax (for pager) */
|
||||||
};
|
};
|
||||||
@ -92,7 +93,7 @@ my %entries;
|
|||||||
|
|
||||||
foreach my $file (sort readdir DIR)
|
foreach my $file (sort readdir DIR)
|
||||||
{
|
{
|
||||||
my (@cmdnames, $cmddesc, $cmdsynopsis);
|
my ($cmdid, @cmdnames, $cmddesc, $cmdsynopsis);
|
||||||
$file =~ /\.sgml$/ or next;
|
$file =~ /\.sgml$/ or next;
|
||||||
|
|
||||||
open(my $fh, '<', "$docdir/$file") or next;
|
open(my $fh, '<', "$docdir/$file") or next;
|
||||||
@ -104,6 +105,9 @@ foreach my $file (sort readdir DIR)
|
|||||||
m!<refmiscinfo>\s*SQL - Language Statements\s*</refmiscinfo>!i
|
m!<refmiscinfo>\s*SQL - Language Statements\s*</refmiscinfo>!i
|
||||||
or next;
|
or next;
|
||||||
|
|
||||||
|
$filecontent =~ m!<refentry id="([a-z-]+)">!
|
||||||
|
and $cmdid = $1;
|
||||||
|
|
||||||
# Collect multiple refnames
|
# Collect multiple refnames
|
||||||
LOOP:
|
LOOP:
|
||||||
{
|
{
|
||||||
@ -116,7 +120,7 @@ foreach my $file (sort readdir DIR)
|
|||||||
$filecontent =~ m!<synopsis>\s*(.+?)\s*</synopsis>!is
|
$filecontent =~ m!<synopsis>\s*(.+?)\s*</synopsis>!is
|
||||||
and $cmdsynopsis = $1;
|
and $cmdsynopsis = $1;
|
||||||
|
|
||||||
if (@cmdnames && $cmddesc && $cmdsynopsis)
|
if (@cmdnames && $cmddesc && $cmdid && $cmdsynopsis)
|
||||||
{
|
{
|
||||||
s/\"/\\"/g foreach @cmdnames;
|
s/\"/\\"/g foreach @cmdnames;
|
||||||
|
|
||||||
@ -144,6 +148,7 @@ foreach my $file (sort readdir DIR)
|
|||||||
foreach my $cmdname (@cmdnames)
|
foreach my $cmdname (@cmdnames)
|
||||||
{
|
{
|
||||||
$entries{$cmdname} = {
|
$entries{$cmdname} = {
|
||||||
|
cmdid => $cmdid,
|
||||||
cmddesc => $cmddesc,
|
cmddesc => $cmddesc,
|
||||||
cmdsynopsis => $cmdsynopsis,
|
cmdsynopsis => $cmdsynopsis,
|
||||||
params => \@params,
|
params => \@params,
|
||||||
@ -186,6 +191,7 @@ foreach (sort keys %entries)
|
|||||||
$id =~ s/ /_/g;
|
$id =~ s/ /_/g;
|
||||||
print $cfile_handle " { \"$_\",
|
print $cfile_handle " { \"$_\",
|
||||||
N_(\"$entries{$_}{cmddesc}\"),
|
N_(\"$entries{$_}{cmddesc}\"),
|
||||||
|
\"$entries{$_}{cmdid}\",
|
||||||
sql_help_$id,
|
sql_help_$id,
|
||||||
$entries{$_}{nl_count} },
|
$entries{$_}{nl_count} },
|
||||||
|
|
||||||
|
@ -623,16 +623,23 @@ helpSQL(const char *topic, unsigned short int pager)
|
|||||||
strcmp(topic, "*") == 0)
|
strcmp(topic, "*") == 0)
|
||||||
{
|
{
|
||||||
PQExpBufferData buffer;
|
PQExpBufferData buffer;
|
||||||
|
char *url;
|
||||||
|
|
||||||
initPQExpBuffer(&buffer);
|
initPQExpBuffer(&buffer);
|
||||||
QL_HELP[i].syntaxfunc(&buffer);
|
QL_HELP[i].syntaxfunc(&buffer);
|
||||||
help_found = true;
|
help_found = true;
|
||||||
|
url = psprintf("https://www.postgresql.org/docs/%s/%s.html",
|
||||||
|
strstr(PG_VERSION, "devel") ? "devel" : PG_MAJORVERSION,
|
||||||
|
QL_HELP[i].docbook_id);
|
||||||
fprintf(output, _("Command: %s\n"
|
fprintf(output, _("Command: %s\n"
|
||||||
"Description: %s\n"
|
"Description: %s\n"
|
||||||
"Syntax:\n%s\n\n"),
|
"Syntax:\n%s\n\n"
|
||||||
|
"URL: %s\n\n"),
|
||||||
QL_HELP[i].cmd,
|
QL_HELP[i].cmd,
|
||||||
_(QL_HELP[i].help),
|
_(QL_HELP[i].help),
|
||||||
buffer.data);
|
buffer.data,
|
||||||
|
url);
|
||||||
|
free(url);
|
||||||
/* If we have an exact match, exit. Fixes \h SELECT */
|
/* If we have an exact match, exit. Fixes \h SELECT */
|
||||||
if (pg_strcasecmp(topic, QL_HELP[i].cmd) == 0)
|
if (pg_strcasecmp(topic, QL_HELP[i].cmd) == 0)
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user