From 79b3ca06d820032ad84446e0a021b56422172d86 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 24 Jul 2011 00:25:29 +0300 Subject: [PATCH] Change EDITOR_LINENUMBER_SWITCH to an environment variable 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 | 105 ++++++++++++++++++--------------- doc/src/sgml/release-9.1.sgml | 2 +- src/bin/psql/command.c | 19 +++--- src/bin/psql/settings.h | 2 + 4 files changed, 73 insertions(+), 55 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 6385c78d1d..54fc3ee24e 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1440,25 +1440,21 @@ testdb=> \r to cancel. - - - psql checks the environment - variables PSQL_EDITOR, EDITOR, 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. - 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. + Note that if a single all-digits argument is given, + psql assumes it is a line number, + not a file name. + + + + See under 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 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 + + 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. diff --git a/doc/src/sgml/release-9.1.sgml b/doc/src/sgml/release-9.1.sgml index a4f8e2459f..6c812cb6c4 100644 --- a/doc/src/sgml/release-9.1.sgml +++ b/doc/src/sgml/release-9.1.sgml @@ -1994,7 +1994,7 @@ This is passed to the editor according to the - EDITOR_LINENUMBER_SWITCH psql variable. + PSQL_EDITOR_LINENUMBER_ARG environment variable. diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 16ff9e91e5..ad7a7da816 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 3aebf53299..2bb3f3153b 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%# "