Change EDITOR_LINENUMBER_SWITCH to an environment variable

Also change "switch" to "arg" because "switch" is a bit of a sloppy
term.  So the environment variable is called
PSQL_EDITOR_LINENUMBER_ARG.  Set "+" as hardcoded default value on
Unix (since "vi" is the hardcoded default editor), so many users won't
have to configure this at all.  Move the documentation around a bit to
centralize the editor configuration under environment variables,
rather than repeating bits of it under every backslash command that
invokes an editor.
This commit is contained in:
Peter Eisentraut 2011-07-24 00:25:29 +03:00
parent 988cccc620
commit 79b3ca06d8
4 changed files with 73 additions and 55 deletions

View File

@ -1440,25 +1440,21 @@ testdb=>
<literal>\r</> to cancel.
</para>
<tip>
<para>
<application>psql</application> checks the environment
variables <envar>PSQL_EDITOR</envar>, <envar>EDITOR</envar>, and
<envar>VISUAL</envar> (in that order) for an editor to use. If
all of them are unset, <filename>vi</filename> is used on Unix
systems, <filename>notepad.exe</filename> on Windows systems.
</para>
</tip>
<para>
If a line number is specified, <application>psql</application> will
position the cursor on the specified line of the file or query buffer.
This feature requires the <varname>EDITOR_LINENUMBER_SWITCH</varname>
variable to be set, so that <application>psql</application> knows how
to specify the line number to the editor. Note that if a single
all-digits argument is given, <application>psql</application> assumes
it is a line number not a file name.
Note that if a single all-digits argument is given,
<application>psql</application> assumes it is a line number,
not a file name.
</para>
<tip>
<para>
See under <xref linkend="app-psql-environment"
endterm="app-psql-environment-title"> for how to configure and
customize your editor.
</para>
</tip>
</listitem>
</varlistentry>
@ -1514,13 +1510,18 @@ Tue Oct 26 21:40:57 CEST 1999
<para>
If a line number is specified, <application>psql</application> will
position the cursor on the specified line of the function body
(note that the function body typically does not begin on the
first line of the file).
This feature requires the <varname>EDITOR_LINENUMBER_SWITCH</varname>
variable to be set, so that <application>psql</application> knows how
to specify the line number to the editor.
position the cursor on the specified line of the function body.
(Note that the function body typically does not begin on the first
line of the file.)
</para>
<tip>
<para>
See under <xref linkend="app-psql-environment"
endterm="app-psql-environment-title"> for how to configure and
customize your editor.
</para>
</tip>
</listitem>
</varlistentry>
@ -2598,27 +2599,6 @@ bar
</listitem>
</varlistentry>
<varlistentry>
<term><varname>EDITOR_LINENUMBER_SWITCH</varname></term>
<listitem>
<para>
When <command>\edit</command> or <command>\ef</command> is used with a
line number argument, this variable specifies the command-line switch
used to pass the line number to the user's editor. For editors such
as <productname>emacs</> or <productname>vi</>, you can simply set
this variable to a plus sign. Include a trailing space in the value
of the variable if there needs to be space between the switch name and
the line number.
Examples:
<programlisting>
\set EDITOR_LINENUMBER_SWITCH +
\set EDITOR_LINENUMBER_SWITCH '--line '
</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>ENCODING</varname></term>
<listitem>
@ -3167,8 +3147,8 @@ $endif
</refsect1>
<refsect1>
<title>Environment</title>
<refsect1 id="app-psql-environment">
<title id="app-psql-environment-title">Environment</title>
<variablelist>
@ -3218,8 +3198,41 @@ $endif
<listitem>
<para>
Editor used by the <command>\e</command> command. The variables
are examined in the order listed; the first that is set is used.
Editor used by the <command>\e</command> and
<command>\ef</command> commands. The variables are examined in
the order listed; the first that is set is used.
</para>
<para>
The built-in default editors are <filename>vi</filename> on Unix
systems and <filename>notepad.exe</filename> on Windows systems.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><envar>PSQL_EDITOR_LINENUMBER_ARG</envar></term>
<listitem>
<para>
When <command>\e</command> or <command>\ef</command> is used
with a line number argument, this variable specifies the
command-line argument used to pass the starting line number to
the user's editor. For editors such as <productname>Emacs</> or
<productname>vi</>, this is a plus sign. Include a trailing
space in the value of the variable if there needs to be space
between the option name and the line number. Examples:
<programlisting>
PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '
</programlisting>
</para>
<para>
The default is <literal>+</literal> on Unix systems
(corresponding to the default editor <filename>vi</filename>,
and useful for many other common editors); but there is no
default on Windows systems.
</para>
</listitem>
</varlistentry>

View File

@ -1994,7 +1994,7 @@
<para>
This is passed to the editor according to the
<envar>EDITOR_LINENUMBER_SWITCH</> psql variable.
<envar>PSQL_EDITOR_LINENUMBER_ARG</> environment variable.
</para>
</listitem>

View File

@ -1753,7 +1753,7 @@ static bool
editFile(const char *fname, int lineno)
{
const char *editorName;
const char *editor_lineno_switch = NULL;
const char *editor_lineno_arg = NULL;
char *sys;
int result;
@ -1768,14 +1768,17 @@ editFile(const char *fname, int lineno)
if (!editorName)
editorName = DEFAULT_EDITOR;
/* Get line number switch, if we need it. */
/* Get line number argument, if we need it. */
if (lineno > 0)
{
editor_lineno_switch = GetVariable(pset.vars,
"EDITOR_LINENUMBER_SWITCH");
if (editor_lineno_switch == NULL)
editor_lineno_arg = getenv("PSQL_EDITOR_LINENUMBER_ARG");
#ifdef DEFAULT_EDITOR_LINENUMBER_ARG
if (!editor_lineno_arg)
editor_lineno_arg = DEFAULT_EDITOR_LINENUMBER_ARG;
#endif
if (!editor_lineno_arg)
{
psql_error("EDITOR_LINENUMBER_SWITCH variable must be set to specify a line number\n");
psql_error("environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n");
return false;
}
}
@ -1783,7 +1786,7 @@ editFile(const char *fname, int lineno)
/* Allocate sufficient memory for command line. */
if (lineno > 0)
sys = pg_malloc(strlen(editorName)
+ strlen(editor_lineno_switch) + 10 /* for integer */
+ strlen(editor_lineno_arg) + 10 /* for integer */
+ 1 + strlen(fname) + 10 + 1);
else
sys = pg_malloc(strlen(editorName) + strlen(fname) + 10 + 1);
@ -1798,7 +1801,7 @@ editFile(const char *fname, int lineno)
#ifndef WIN32
if (lineno > 0)
sprintf(sys, "exec %s %s%d '%s'",
editorName, editor_lineno_switch, lineno, fname);
editorName, editor_lineno_arg, lineno, fname);
else
sprintf(sys, "exec %s '%s'",
editorName, fname);

View File

@ -18,8 +18,10 @@
#if defined(WIN32) || defined(__CYGWIN__)
#define DEFAULT_EDITOR "notepad.exe"
/* no DEFAULT_EDITOR_LINENUMBER_ARG for Notepad */
#else
#define DEFAULT_EDITOR "vi"
#define DEFAULT_EDITOR_LINENUMBER_ARG "+"
#endif
#define DEFAULT_PROMPT1 "%/%R%# "