diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 6385c78d1d619b50541e4af1f9129a824862f1e5..54fc3ee24ec0f6162f526a0cf0f7d2ef454be481 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -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. + 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> + <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. + 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> diff --git a/doc/src/sgml/release-9.1.sgml b/doc/src/sgml/release-9.1.sgml index a4f8e2459fcbdd8482a902ff2041013b374fd450..6c812cb6c47a8dda35c7c03e66705d6034b57c98 100644 --- a/doc/src/sgml/release-9.1.sgml +++ b/doc/src/sgml/release-9.1.sgml @@ -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> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 16ff9e91e55244ee8bd3a2d7f168f39b7bff7ad1..ad7a7da81635bec089769918b9f42ca52d2e6651 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -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); diff --git a/src/bin/psql/settings.h b/src/bin/psql/settings.h index 3aebf532991354f0c2df2b718759444098847d1a..2bb3f3153b87aa9ee3705c552e8dbbb6a0d476eb 100644 --- a/src/bin/psql/settings.h +++ b/src/bin/psql/settings.h @@ -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%# "