git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 5/8] add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 31, 2009, 01:42 UTC
Message-ID
<20091031014234.GF5160@progeny.tock>
In-Reply-To
<20091031012050.GA5160@progeny.tock>

Use the new "git var GIT_EDITOR" feature to decide what editor to use, instead of duplicating its logic elsewhere. This should make the behavior of commands in edge cases (e.g., editor names with spaces) a little more consistent.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 Documentation/config.txt         |    4 +---
 Documentation/git-commit.txt     |    2 +-
 Documentation/git-send-email.txt |    4 ++--
 contrib/fast-import/git-p4       |    5 +----
 git-add--interactive.perl        |    3 +--
 git-send-email.perl              |    3 ++-
 git-sh-setup.sh                  |   19 ++++++-------------
 git-svn.perl                     |    5 ++---
 8 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index d1e2120..5181b77 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -387,9 +387,7 @@ core.editor::
 	Commands such as `commit` and `tag` that lets you edit
 	messages by launching an editor uses the value of this
 	variable when it is set, and the environment variable
-	`GIT_EDITOR` is not set.  The order of preference is
-	`GIT_EDITOR` environment, `core.editor`, `VISUAL` and
-	`EDITOR` environment variables and then finally `vi`.
+	`GIT_EDITOR` is not set.  See linkgit:git-var[1].
 
 core.pager::
 	The command that git will use to paginate output.  Can
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 0578a40..3ea80c8 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -323,7 +323,7 @@ ENVIRONMENT AND CONFIGURATION VARIABLES
 The editor used to edit the commit log message will be chosen from the
 GIT_EDITOR environment variable, the core.editor configuration variable, the
 VISUAL environment variable, or the EDITOR environment variable (in that
-order).
+order).  See linkgit:git-var[1] for details.
 
 HOOKS
 -----
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 767cf4d..c85d7f4 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -60,8 +60,8 @@ The --bcc option must be repeated for each user you want on the bcc list.
 The --cc option must be repeated for each user you want on the cc list.
 
 --compose::
-	Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
-	introductory message for the patch series.
+	Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1])
+	to edit an introductory message for the patch series.
 +
 When '--compose' is used, git send-email will use the From, Subject, and
 In-Reply-To headers specified in the message. If the body of the message
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index e710219..48059d0 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -729,13 +729,10 @@ class P4Submit(Command):
             tmpFile.write(submitTemplate + separatorLine + diff + newdiff)
             tmpFile.close()
             mtime = os.stat(fileName).st_mtime
-            defaultEditor = "vi"
-            if platform.system() == "Windows":
-                defaultEditor = "notepad"
             if os.environ.has_key("P4EDITOR"):
                 editor = os.environ.get("P4EDITOR")
             else:
-                editor = os.environ.get("EDITOR", defaultEditor);
+                editor = read_pipe("git var GIT_EDITOR")
             system(editor + " " + fileName)
 
             response = "y"
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 69aeaf0..0c74e5c 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -987,8 +987,7 @@ sub edit_hunk_manually {
 EOF
 	close $fh;
 
-	my $editor = $ENV{GIT_EDITOR} || $repo->config("core.editor")
-		|| $ENV{VISUAL} || $ENV{EDITOR} || "vi";
+	chomp(my $editor = run_cmd_pipe(qw(git var GIT_EDITOR)));
 	system('sh', '-c', $editor.' "$@"', $editor, $hunkfile);
 
 	if ($? != 0) {
diff --git a/git-send-email.perl b/git-send-email.perl
index a0279de..4f5da4e 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -162,7 +162,8 @@ my $compose_filename;
 
 # Handle interactive edition of files.
 my $multiedit;
-my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
+my $editor = Git::command_oneline('var', 'GIT_EDITOR');
+
 sub do_edit {
 	if (defined($multiedit) && !$multiedit) {
 		map {
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index c41c2f7..99cceeb 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -99,19 +99,12 @@ set_reflog_action() {
 }
 
 git_editor() {
-	: "${GIT_EDITOR:=$(git config core.editor)}"
-	: "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}"
-	case "$GIT_EDITOR,$TERM" in
-	,dumb)
-		echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL,"
-		echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb."
-		echo >&2 "Please set one of these variables to an appropriate"
-		echo >&2 "editor or run $0 with options that will not cause an"
-		echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)."
-		exit 1
-		;;
-	esac
-	eval "${GIT_EDITOR:=vi}" '"$@"'
+	if test -z "${GIT_EDITOR:+set}"
+	then
+		GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
+	fi
+
+	eval "$GIT_EDITOR" '"$@"'
 }
 
 is_bare_repository () {
diff --git a/git-svn.perl b/git-svn.perl
index 6a3b501..42c9a72 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1321,9 +1321,8 @@ sub get_commit_entry {
 	close $log_fh or croak $!;
 
 	if ($_edit || ($type eq 'tree')) {
-		my $editor = $ENV{VISUAL} || $ENV{EDITOR} || 'vi';
-		# TODO: strip out spaces, comments, like git-commit.sh
-		system($editor, $commit_editmsg);
+		chomp(my $editor = command_oneline(qw(var GIT_EDITOR)));
+		system('sh', '-c', $editor.' "$@"', $editor, $commit_editmsg);
 	}
 	rename $commit_editmsg, $commit_msg or croak $!;
 	{
-- 
1.6.5.2
Previous: Jonathan NiederNext: Jonathan Nieder
Message 44 of 65 in “packaging vs default pager”
  1. Ben WaltonOct 28, 2009
  2. Junio C HamanoOct 28, 2009
  3. 0/2 Re: packaging vs default pagerJonathan Nieder, Oct 29, 2009
  4. 1/2 Provide a build time default-pager settingJonathan Nieder, Oct 29, 2009
  5. 2/2 Provide a build time default-editor settingJonathan Nieder, Oct 29, 2009
  6. David RoundyOct 29, 2009
  7. Johannes SixtOct 29, 2009
  8. Junio C HamanoOct 29, 2009
  9. Johannes SixtOct 29, 2009
  10. Junio C HamanoOct 29, 2009
  11. David RoundyOct 30, 2009
  12. Junio C HamanoOct 29, 2009
  13. 0/8 Default pager and editorJonathan Nieder, Oct 30, 2009
  14. 1/8 launch_editor: Longer error message when TERM=dumbJonathan Nieder, Oct 30, 2009
  15. 2/8 Handle more shell metacharacters in editor namesJonathan Nieder, Oct 30, 2009
  16. 3/8 Teach git var about GIT_EDITORJonathan Nieder, Oct 30, 2009
  17. Johannes SixtOct 30, 2009
  18. Jonathan NiederOct 30, 2009
  19. Junio C HamanoOct 30, 2009
  20. Jonathan NiederOct 31, 2009
  21. 4/8 Teach git var about GIT_PAGERJonathan Nieder, Oct 30, 2009
  22. 5/8 add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"Jonathan Nieder, Oct 30, 2009
  23. 6/8 am -i, git-svn: use "git var GIT_PAGER"Jonathan Nieder, Oct 30, 2009
  24. 7/8 Provide a build time default-editor settingJonathan Nieder, Oct 30, 2009
  25. Jonathan NiederOct 30, 2009
  26. 8/8 Provide a build time default-pager settingJonathan Nieder, Oct 30, 2009
  27. Junio C HamanoOct 30, 2009
  28. 9/8 Teach git var to run the editorJonathan Nieder, Oct 30, 2009
  29. 0/8 Default pager and editorJonathan Nieder, Oct 31, 2009
  30. 1/8 Handle more shell metacharacters in editor namesJonathan Nieder, Oct 31, 2009
  31. 2/8 Do not use VISUAL editor on dumb terminalsJonathan Nieder, Oct 31, 2009
  32. 2/8 Do not use VISUAL editor on dumb terminalsJonathan Nieder, Oct 31, 2009
  33. 3/8 Teach git var about GIT_EDITORJonathan Nieder, Oct 31, 2009
  34. Junio C HamanoOct 31, 2009
  35. Jonathan NiederOct 31, 2009
  36. Junio C HamanoOct 31, 2009
  37. Jonathan NiederOct 31, 2009
  38. Teach git var about GIT_EDITORJonathan Nieder, Oct 31, 2009
  39. Jonathan NiederOct 31, 2009
  40. Teach git var about GIT_EDITORJonathan Nieder, Oct 31, 2009
  41. Junio C HamanoNov 1, 2009
  42. Johannes SixtOct 31, 2009
  43. 4/8 Teach git var about GIT_PAGERJonathan Nieder, Oct 31, 2009
  44. 5/8 add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"Jonathan Nieder, Oct 31, 2009
  45. 6/8 am -i, git-svn: use "git var GIT_PAGER"Jonathan Nieder, Oct 31, 2009
  46. 7/8 Provide a build time default-editor settingJonathan Nieder, Oct 31, 2009
  47. Junio C HamanoOct 31, 2009
  48. Jonathan NiederOct 31, 2009
  49. Junio C HamanoOct 31, 2009
  50. Jonathan NiederOct 31, 2009
  51. Junio C HamanoNov 1, 2009
  52. 8/8 Provide a build time default-pager settingJonathan Nieder, Oct 31, 2009
  53. 0/9 Default pager and editorJonathan Nieder, Nov 11, 2009
  54. 1/9 Handle more shell metacharacters in editor namesJonathan Nieder, Nov 11, 2009
  55. 2/9 Do not use VISUAL editor on dumb terminalsJonathan Nieder, Nov 11, 2009
  56. 3/9 Suppress warnings from "git var -l"Jonathan Nieder, Nov 11, 2009
  57. 4/9 Teach git var about GIT_EDITORJonathan Nieder, Nov 12, 2009
  58. 5/9 Teach git var about GIT_PAGERJonathan Nieder, Nov 12, 2009
  59. 6/9 add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"Jonathan Nieder, Nov 12, 2009
  60. 7/9 am -i, git-svn: use "git var GIT_PAGER"Jonathan Nieder, Nov 12, 2009
  61. 8/9 Provide a build time default-editor settingJonathan Nieder, Nov 12, 2009
  62. 9/9 Provide a build time default-pager settingJonathan Nieder, Nov 12, 2009
  63. Junio C HamanoNov 15, 2009
  64. 0/2 Default Pager and Editor at build-timeBen Walton, Oct 29, 2009
  65. 1/2 Provide a build time default-pager settingBen Walton, Oct 29, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.