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 (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers