Change EDITOR_LINENUMBER_SWITCH to an environment variable
authorPeter Eisentraut
Sat, 23 Jul 2011 21:25:29 +0000 (00:25 +0300)
committerPeter Eisentraut
Sat, 23 Jul 2011 21:25:29 +0000 (00:25 +0300)
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.

doc/src/sgml/ref/psql-ref.sgml
doc/src/sgml/release-9.1.sgml
src/bin/psql/command.c
src/bin/psql/settings.h

index 6385c78d1d619b50541e4af1f9129a824862f1e5..54fc3ee24ec0f6162f526a0cf0f7d2ef454be481 100644 (file)
@@ -1440,25 +1440,21 @@ testdb=>
         \r to cancel.
         
 
-        
         
-        psql checks the environment
-        variables PSQL_EDITOREDITOR, and
-        VISUAL (in that order) for an editor to use. If
-        all of them are unset, vi is used on Unix
-        systems, notepad.exe on Windows systems.
+        If a line number is specified, psql will
+        position the cursor on the specified line of the file or query buffer.
+        Note that if a single all-digits argument is given,
+        psql assumes it is a line number,
+        not a file name.
         
-        
 
+        
         
-        If a line number is specified, psql will
-        position the cursor on the specified line of the file or query buffer.
-        This feature requires the EDITOR_LINENUMBER_SWITCH
-        variable to be set, so that psql knows how
-        to specify the line number to the editor.  Note that if a single
-        all-digits argument is given, psql assumes
-        it is a line number not a file name.
+        See under 
+        endterm="app-psql-environment-title"> for how to configure and
+        customize your editor.
         
+        
         
       
 
@@ -1514,13 +1510,18 @@ Tue Oct 26 21:40:57 CEST 1999
 
         
         If a line number is specified, psql 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 EDITOR_LINENUMBER_SWITCH
-        variable to be set, so that psql 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.)
+        
+
+        
+        
+        See under 
+        endterm="app-psql-environment-title"> for how to configure and
+        customize your editor.
         
+        
         
       
 
@@ -2598,27 +2599,6 @@ bar
         
       
 
-      
-        EDITOR_LINENUMBER_SWITCH
-        
-        
-        When \edit or \ef 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 emacs or 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:
-
-
-\set EDITOR_LINENUMBER_SWITCH +
-\set EDITOR_LINENUMBER_SWITCH '--line '
-
-        
-        
-      
-
       
         ENCODING
         
@@ -3167,8 +3147,8 @@ $endif
  
 
 
-  Environment
 id="app-psql-environment">
+   id="app-psql-environment-title">Environment
 
   
 
@@ -3218,8 +3198,41 @@ $endif
 
     
      
-      Editor used by the \e command.  The variables
-      are examined in the order listed; the first that is set is used.
+      Editor used by the \e and
+      \ef commands.  The variables are examined in
+      the order listed; the first that is set is used.
+     
+
+     
+      The built-in default editors are vi on Unix
+      systems and notepad.exe on Windows systems.
+     
+    
+   
+
+   
+    PSQL_EDITOR_LINENUMBER_ARG
+
+    
+     
+      When \e or \ef 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 Emacs or
+      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:
+
+PSQL_EDITOR_LINENUMBER_ARG='+'
+PSQL_EDITOR_LINENUMBER_ARG='--line '
+
+     
+
+     
+      The default is + on Unix systems
+      (corresponding to the default editor vi,
+      and useful for many other common editors); but there is no
+      default on Windows systems.
      
     
    
index a4f8e2459fcbdd8482a902ff2041013b374fd450..6c812cb6c47a8dda35c7c03e66705d6034b57c98 100644 (file)
 
        
         This is passed to the editor according to the
-        EDITOR_LINENUMBER_SWITCH psql variable.
+        PSQL_EDITOR_LINENUMBER_ARG environment variable.
        
       
 
index 16ff9e91e55244ee8bd3a2d7f168f39b7bff7ad1..ad7a7da81635bec089769918b9f42ca52d2e6651 100644 (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);
index 3aebf532991354f0c2df2b718759444098847d1a..2bb3f3153b87aa9ee3705c552e8dbbb6a0d476eb 100644 (file)
 
 #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%# "