Skip to content

Commit 301ac38

Browse files
committed
git-mergetool: Make default selection of merge-tool more intelligent
Make git-mergetool prefer meld under GNOME, and kdiff3 under KDE. When considering emerge and vimdiff, check $VISUAL and $EDITOR to see which the user might prefer. Signed-off-by: "Theodore Ts'o" <[email protected]> Cc: Josh Triplett <[email protected]>
1 parent 730b5b4 commit 301ac38

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

git-mergetool.sh

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -310,23 +310,35 @@ if test -z "$merge_tool"; then
310310
fi
311311

312312
if test -z "$merge_tool" ; then
313-
if type kdiff3 >/dev/null 2>&1 && test -n "$DISPLAY"; then
314-
merge_tool="kdiff3";
315-
elif type tkdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then
316-
merge_tool=tkdiff
317-
elif type xxdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then
318-
merge_tool=xxdiff
319-
elif type meld >/dev/null 2>&1 && test -n "$DISPLAY"; then
320-
merge_tool=meld
321-
elif type gvimdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then
322-
merge_tool=gvimdiff
323-
elif type opendiff >/dev/null 2>&1; then
324-
merge_tool=opendiff
325-
elif type emacs >/dev/null 2>&1; then
326-
merge_tool=emerge
327-
elif type vimdiff >/dev/null 2>&1; then
328-
merge_tool=vimdiff
329-
else
313+
if test -n "$DISPLAY"; then
314+
merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff"
315+
if test -n "$GNOME_DESKTOP_SESSION_ID" ; then
316+
merge_tool_candidates="meld $merge_tool_candidates"
317+
fi
318+
if test "$KDE_FULL_SESSION" = "true"; then
319+
merge_tool_candidates="kdiff3 $merge_tool_candidates"
320+
fi
321+
fi
322+
if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
323+
merge_tool_candidates="$merge_tool_candidates emerge"
324+
fi
325+
if echo "${VISUAL:-$EDITOR}" | grep 'vim' > /dev/null 2>&1; then
326+
merge_tool_candidates="$merge_tool_candidates vimdiff"
327+
fi
328+
merge_tool_candidates="$merge_tool_candidates opendiff emerge vimdiff"
329+
echo "merge tool candidates: $merge_tool_candidates"
330+
for i in $merge_tool_candidates; do
331+
if test $i = emerge ; then
332+
cmd=emacs
333+
else
334+
cmd=$i
335+
fi
336+
if type $cmd > /dev/null 2>&1; then
337+
merge_tool=$i
338+
break
339+
fi
340+
done
341+
if test -z "$merge_tool" ; then
330342
echo "No available merge resolution programs available."
331343
exit 1
332344
fi

0 commit comments

Comments
 (0)