Here's a patch to fix what has been discussed:
* Change EDITOR_LINENUMBER_SWITCH to environment variable.
* I also changed "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.
* I moved the documentation around a bit to centralize the editor
configuration under environment variables, rather than repeating
bits of it under every backslash command that invoked an editor.
*** i/doc/src/sgml/ref/psql-ref.sgml
--- w/doc/src/sgml/ref/psql-ref.sgml
***************
*** 1440,1464 **** 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.
</para>
</listitem>
</varlistentry>
--- 1440,1460 ----
<literal>\r</> to cancel.
</para>
<para>
! If a line number is specified, <application>psql</application> will
! position the cursor on the specified line of the file or query buffer.
! 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,1526 **** 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.
</para>
</listitem>
</varlistentry>
--- 1510,1527 ----
<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.)
! </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>
***************
*** 2599,2625 **** bar
</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>
<para>
--- 2600,2605 ----
***************
*** 3167,3174 **** $endif
</refsect1>
! <refsect1>
! <title>Environment</title>
<variablelist>
--- 3147,3154 ----
</refsect1>
! <refsect1 id="app-psql-environment">
! <title id="app-psql-environment-title">Environment</title>
<variablelist>
***************
*** 3218,3225 **** $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.
</para>
</listitem>
</varlistentry>
--- 3198,3238 ----
<listitem>
<para>
! 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>
*** i/doc/src/sgml/release-9.1.sgml
--- w/doc/src/sgml/release-9.1.sgml
***************
*** 1994,2000 ****
<para>
This is passed to the editor according to the
! <envar>EDITOR_LINENUMBER_SWITCH</> psql variable.
</para>
</listitem>
--- 1994,2000 ----
<para>
This is passed to the editor according to the
! <envar>PSQL_EDITOR_LINENUMBER_ARG</> environment variable.
</para>
</listitem>
*** i/src/bin/psql/command.c
--- w/src/bin/psql/command.c
***************
*** 1753,1759 **** static bool
editFile(const char *fname, int lineno)
{
const char *editorName;
! const char *editor_lineno_switch = NULL;
char *sys;
int result;
--- 1753,1759 ----
editFile(const char *fname, int lineno)
{
const char *editorName;
! const char *editor_lineno_arg = NULL;
char *sys;
int result;
***************
*** 1768,1781 **** editFile(const char *fname, int lineno)
if (!editorName)
editorName = DEFAULT_EDITOR;
! /* Get line number switch, if we need it. */
if (lineno > 0)
{
! editor_lineno_switch = GetVariable(pset.vars,
! "EDITOR_LINENUMBER_SWITCH");
! if (editor_lineno_switch == NULL)
{
! psql_error("EDITOR_LINENUMBER_SWITCH variable must be set to specify a line number\n");
return false;
}
}
--- 1768,1784 ----
if (!editorName)
editorName = DEFAULT_EDITOR;
! /* Get line number argument, if we need it. */
if (lineno > 0)
{
! 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("environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number\n");
return false;
}
}
***************
*** 1783,1789 **** 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 */
+ 1 + strlen(fname) + 10 + 1);
else
sys = pg_malloc(strlen(editorName) + strlen(fname) + 10 + 1);
--- 1786,1792 ----
/* Allocate sufficient memory for command line. */
if (lineno > 0)
sys = pg_malloc(strlen(editorName)
! + strlen(editor_lineno_arg) + 10 /* for integer */
+ 1 + strlen(fname) + 10 + 1);
else
sys = pg_malloc(strlen(editorName) + strlen(fname) + 10 + 1);
***************
*** 1798,1804 **** editFile(const char *fname, int lineno)
#ifndef WIN32
if (lineno > 0)
sprintf(sys, "exec %s %s%d '%s'",
! editorName, editor_lineno_switch, lineno, fname);
else
sprintf(sys, "exec %s '%s'",
editorName, fname);
--- 1801,1807 ----
#ifndef WIN32
if (lineno > 0)
sprintf(sys, "exec %s %s%d '%s'",
! editorName, editor_lineno_arg, lineno, fname);
else
sprintf(sys, "exec %s '%s'",
editorName, fname);
*** i/src/bin/psql/settings.h
--- w/src/bin/psql/settings.h
***************
*** 18,25 ****
--- 18,27 ----
#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%# "
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers