Browse Source

Add GIT_EDITOR environment and core.editor configuration variables

These variables let you specify an editor that will be launched in
preference to the EDITOR and VISUAL environment variables. The order
of preference is GIT_EDITOR, core.editor, EDITOR, VISUAL.

[jc: added a test and config variable documentation]

Signed-off-by: Adam Roben <aroben@apple.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Adam Roben 18 years ago committed by Junio C Hamano
parent
commit
ef0c2abf3e
  1. 8
      Documentation/config.txt
  2. 10
      Documentation/git-commit.txt
  3. 4
      Documentation/git-send-email.txt
  4. 2
      git-am.sh
  5. 11
      git-commit.sh
  6. 2
      git-rebase--interactive.sh
  7. 7
      git-send-email.perl
  8. 15
      git-sh-setup.sh
  9. 2
      git-tag.sh
  10. 91
      t/t7005-editor.sh

8
Documentation/config.txt

@ -281,6 +281,14 @@ core.excludesfile::
of files which are not meant to be tracked. See of files which are not meant to be tracked. See
gitlink:gitignore[5]. gitlink:gitignore[5].


core.editor::
Commands such as `commit` and `tag` that lets you edit
messages by lauching 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`, `EDITOR` and
`VISUAL` environment variables and then finally `vi`.

core.pager:: core.pager::
The command that git will use to paginate output. Can be overridden The command that git will use to paginate output. Can be overridden
with the `GIT_PAGER` environment variable. with the `GIT_PAGER` environment variable.

10
Documentation/git-commit.txt

@ -244,10 +244,12 @@ on the Subject: line and the rest of the commit in the body.


include::i18n.txt[] include::i18n.txt[]


ENVIRONMENT VARIABLES ENVIRONMENT AND CONFIGURATION VARIABLES
--------------------- ---------------------------------------
The command specified by either the VISUAL or EDITOR environment The editor used to edit the commit log message will be chosen from the
variables is used to edit the commit log message. GIT_EDITOR environment variable, the core.editor configuration variable, the
VISUAL environment variable, or the EDITOR environment variable (in that
order).


HOOKS HOOKS
----- -----

4
Documentation/git-send-email.txt

@ -44,8 +44,8 @@ The --cc option must be repeated for each user you want on the cc list.
value; if that is unspecified, default to --chain-reply-to. value; if that is unspecified, default to --chain-reply-to.


--compose:: --compose::
Use $EDITOR to edit an introductory message for the Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
patch series. introductory message for the patch series.


--from:: --from::
Specify the sender of the emails. This will default to Specify the sender of the emails. This will default to

2
git-am.sh

@ -364,7 +364,7 @@ do
[yY]*) action=yes ;; [yY]*) action=yes ;;
[aA]*) action=yes interactive= ;; [aA]*) action=yes interactive= ;;
[nN]*) action=skip ;; [nN]*) action=skip ;;
[eE]*) "${VISUAL:-${EDITOR:-vi}}" "$dotest/final-commit" [eE]*) git_editor "$dotest/final-commit"
action=again ;; action=again ;;
[vV]*) action=again [vV]*) action=again
LESS=-S ${PAGER:-less} "$dotest/patch" ;; LESS=-S ${PAGER:-less} "$dotest/patch" ;;

11
git-commit.sh

@ -544,18 +544,9 @@ fi


case "$no_edit" in case "$no_edit" in
'') '')
case "${VISUAL:-$EDITOR},$TERM" in
,dumb)
echo >&2 "Terminal is dumb but no VISUAL nor EDITOR defined."
echo >&2 "Please supply the commit log message using either"
echo >&2 "-m or -F option. A boilerplate log message has"
echo >&2 "been prepared in $GIT_DIR/COMMIT_EDITMSG"
exit 1
;;
esac
git-var GIT_AUTHOR_IDENT > /dev/null || die git-var GIT_AUTHOR_IDENT > /dev/null || die
git-var GIT_COMMITTER_IDENT > /dev/null || die git-var GIT_COMMITTER_IDENT > /dev/null || die
${VISUAL:-${EDITOR:-vi}} "$GIT_DIR/COMMIT_EDITMSG" git_editor "$GIT_DIR/COMMIT_EDITMSG"
;; ;;
esac esac



2
git-rebase--interactive.sh

@ -414,7 +414,7 @@ EOF
die_abort "Nothing to do" die_abort "Nothing to do"


cp "$TODO" "$TODO".backup cp "$TODO" "$TODO".backup
${VISUAL:-${EDITOR:-vi}} "$TODO" || git_editor "$TODO" ||
die "Could not execute editor" die "Could not execute editor"


test -z "$(grep -ve '^$' -e '^#' < $TODO)" && test -z "$(grep -ve '^$' -e '^#' < $TODO)" &&

7
git-send-email.perl

@ -49,8 +49,8 @@ Options:
--bcc Specify a list of email addresses that should be Bcc: --bcc Specify a list of email addresses that should be Bcc:
on all the emails. on all the emails.


--compose Use \$EDITOR to edit an introductory message for the --compose Use \$GIT_EDITOR, core.editor, \$EDITOR, or \$VISUAL to edit
patch series. an introductory message for the patch series.


--subject Specify the initial "Subject:" line. --subject Specify the initial "Subject:" line.
Only necessary if --compose is also set. If --compose Only necessary if --compose is also set. If --compose
@ -341,8 +341,7 @@ GIT: for the patch you are writing.
EOT EOT
close(C); close(C);


my $editor = $ENV{EDITOR}; my $editor = $ENV{GIT_EDITOR} || $repo->config("core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
$editor = 'vi' unless defined $editor;
system($editor, $compose_filename); system($editor, $compose_filename);


open(C2,">",$compose_filename . ".final") open(C2,">",$compose_filename . ".final")

15
git-sh-setup.sh

@ -28,6 +28,21 @@ set_reflog_action() {
fi fi
} }


git_editor() {
GIT_EDITOR=${GIT_EDITOR:-$(git config core.editor || echo ${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
"${GIT_EDITOR:-vi}" "$1"
}

is_bare_repository () { is_bare_repository () {
git rev-parse --is-bare-repository git rev-parse --is-bare-repository
} }

2
git-tag.sh

@ -177,7 +177,7 @@ if [ "$annotate" ]; then
( echo "#" ( echo "#"
echo "# Write a tag message" echo "# Write a tag message"
echo "#" ) > "$GIT_DIR"/TAG_EDITMSG echo "#" ) > "$GIT_DIR"/TAG_EDITMSG
${VISUAL:-${EDITOR:-vi}} "$GIT_DIR"/TAG_EDITMSG || exit git_editor "$GIT_DIR"/TAG_EDITMSG || exit
else else
printf '%s\n' "$message" >"$GIT_DIR"/TAG_EDITMSG printf '%s\n' "$message" >"$GIT_DIR"/TAG_EDITMSG
fi fi

91
t/t7005-editor.sh

@ -0,0 +1,91 @@
#!/bin/sh

test_description='GIT_EDITOR, core.editor, and stuff'

. ./test-lib.sh

for i in GIT_EDITOR core_editor EDITOR VISUAL vi
do
cat >e-$i.sh <<-EOF
echo "Edited by $i" >"\$1"
EOF
chmod +x e-$i.sh
done
unset vi
mv e-vi.sh vi
PATH=".:$PATH"
unset EDITOR VISUAL GIT_EDITOR

test_expect_success setup '

msg="Hand edited" &&
echo "$msg" >expect &&
git add vi &&
test_tick &&
git commit -m "$msg" &&
git show -s --pretty=oneline |
sed -e "s/^[0-9a-f]* //" >actual &&
diff actual expect

'

TERM=dumb
export TERM
test_expect_success 'dumb should error out when falling back on vi' '

if git commit --amend
then
echo "Oops?"
exit 1
else
: happy
fi
'

TERM=vt100
export TERM
for i in vi EDITOR VISUAL core_editor GIT_EDITOR
do
echo "Edited by $i" >expect
unset EDITOR VISUAL GIT_EDITOR
git config --unset-all core.editor
case "$i" in
core_editor)
git config core.editor ./e-core_editor.sh
;;
[A-Z]*)
eval "$i=./e-$i.sh"
export $i
;;
esac
test_expect_success "Using $i" '
git commit --amend &&
git show -s --pretty=oneline |
sed -e "s/^[0-9a-f]* //" >actual &&
diff actual expect
'
done

unset EDITOR VISUAL GIT_EDITOR
git config --unset-all core.editor
for i in vi EDITOR VISUAL core_editor GIT_EDITOR
do
echo "Edited by $i" >expect
case "$i" in
core_editor)
git config core.editor ./e-core_editor.sh
;;
[A-Z]*)
eval "$i=./e-$i.sh"
export $i
;;
esac
test_expect_success "Using $i (override)" '
git commit --amend &&
git show -s --pretty=oneline |
sed -e "s/^[0-9a-f]* //" >actual &&
diff actual expect
'
done

test_done
Loading…
Cancel
Save