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

Reply via email to