From: David Kastrup Date: Wed, 06 Jun 2007 09:40:04 GMT Subject: Re: [PATCH] git-mergetool: Make default smarter by considering user's desktop environment and editor Message-ID: <86lkexjua3.fsf@lola.quinscape.zz> In-Reply-To: <7vabvd5u7t.fsf@assigned-by-dhcp.cox.net> Junio C Hamano writes: > David Kastrup writes: > >> Junio C Hamano writes: >> >>> Josh Triplett writes: >>> >>>> 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: Josh Triplett >>> >>> The basic idea is sound. However... >>> >>> (1) I wonder if we can get rid of the horribly long if .. elif >>> chain by using shell function and then iterate a list of them; >>> >>> (2) echo "${VISUAL-$EDITOR}" | grep '^emacs'??? >>> >>> Some people may have explicit path (/home/me/bin/emacs), >>> and/or runs a variant of emacs called 'xemacs'. Same for >>> vim. >> >> Actually, a lot of people run as editor a program called "emacsclient" >> or "gnuclient": this one connects to an existing Emacs session and >> passes its arguments to it. And of course, this is what git-mergetool >> should then also do. > > I do that too, but that is covered by the prefix rule Josh has, > so it is Ok. Another note: in my usual Emacs session, EDITOR is set to /usr/local/emacs-22/bin/emacsclient which would not be covered... So that should probably be useemacs=0 for i in ${VISUAL-$EDITOR} do case "`basename $i`" in [xX][eE]macs*|[eE]macs*|gnuclient*) useemacs=1 esac break done This should work even when we are talking about something like EDITOR="C:\My Programs\XEmacs\gnuclient.exe" -n "C:\My Programs\XEmacs\XEmacs" And it does not require starting grep for something which the shell can perfectly well handle on its own. Yes, it does need basename. I don't see a good way to avoid that. -- David Kastrup