#!/bin/sh # # This program launch a web browser on the html page # describing a git command. # # Copyright (c) 2007 Christian Couder # Copyright (c) 2006 Theodore Y. Ts'o # # This file is heavily stolen from git-mergetool.sh, by # Theodore Y. Ts'o (thanks) that is: # # Copyright (c) 2006 Theodore Y. Ts'o # # This file is licensed under the GPL v2, or a later version # at the discretion of Junio C Hamano or any other official # git maintainer. # setglobal USAGE = ''[--browser=browser|--tool=browser] [--config=conf.var] url/file ...'' # This must be capable of running outside of git directory, so # the vanilla git-sh-setup should not be used. setglobal NONGIT_OK = 'Yes' source git-sh-setup proc valid_custom_tool { setglobal browser_cmd = $[git config "browser.$1.cmd] test -n $browser_cmd } proc valid_tool { match $1 { with firefox | iceweasel | seamonkey | iceape | \ chrome | google-chrome | chromium | chromium-browser | \ konqueror | opera | w3m | elinks | links | lynx | dillo | open | \ start | cygstart | xdg-open # happy with * valid_custom_tool $1 || return 1 } } proc init_browser_path { setglobal browser_path = $[git config "browser.$1.path] if test -z $browser_path && test $1 = chromium && type chromium-browser >/dev/null !2 > !1 { setglobal browser_path = 'chromium-browser' } : $(browser_path:="$1") } while test $# != 0 { match $1 { with -b|--browser*|-t|--tool* match "$Argc,$1" { with *,*=* setglobal browser = $[expr "z$1" : 'z-[^=]*=\(.*\)] with 1,* usage with * setglobal browser = $2 shift } with -c|--config* match "$Argc,$1" { with *,*=* setglobal conf = $[expr "z$1" : 'z-[^=]*=\(.*\)] with 1,* usage with * setglobal conf = $2 shift } with -- break with -* usage with * break } shift } test $Argc = 0 && usage if test -z $browser { for opt in [$conf "web.browser]" { test -z $opt && continue setglobal browser = $[git config $opt] test -z $browser || break } if test -n $browser && ! valid_tool $browser { echo >&2 "git config option $opt set to unknown browser: $browser> !2 "git config option $opt set to unknown browser: $browser" echo >&2 "Resetting to default...> !2 "Resetting to default..." unset browser } } if test -z $browser { if test -n $DISPLAY { setglobal browser_candidates = '"firefox iceweasel google-chrome chrome chromium chromium-browser konqueror opera seamonkey iceape w3m elinks links lynx dillo xdg-open'" if test $KDE_FULL_SESSION = "true" { setglobal browser_candidates = ""konqueror $browser_candidates"" } } else { setglobal browser_candidates = '"w3m elinks links lynx'" } # SECURITYSESSIONID indicates an OS X GUI login session if test -n $SECURITYSESSIONID || test -n $TERM_PROGRAM { setglobal browser_candidates = ""open $browser_candidates"" } # /bin/start indicates MinGW if test -x /bin/start { setglobal browser_candidates = ""start $browser_candidates"" } # /usr/bin/cygstart indicates Cygwin if test -x /usr/bin/cygstart { setglobal browser_candidates = ""cygstart $browser_candidates"" } for i in [$browser_candidates] { init_browser_path $i if type $browser_path > /dev/null !2 > !1 { setglobal browser = $i break } } test -z $browser && die "No known browser available." } else { valid_tool $browser || die "Unknown browser '$browser'." init_browser_path $browser if test -z $browser_cmd && ! type $browser_path > /dev/null !2 > !1 { die "The browser $browser is not available as '$browser_path'." } } match $browser { with firefox|iceweasel|seamonkey|iceape # Check version because firefox < 2.0 does not support "-new-tab". setglobal vers = $[expr $[$browser_path -version] : '.* \([0-9][0-9]*\)\..*] setglobal NEWTAB = ''-new-tab'' test $vers -lt 2 && setglobal NEWTAB = '''' $browser_path $NEWTAB @Argv & with google-chrome|chrome|chromium|chromium-browser # No need to specify newTab. It's default in chromium $browser_path @Argv & with konqueror match $[basename $browser_path] { with konqueror # It's simpler to use kfmclient to open a new tab in konqueror. setglobal browser_path = $[echo $browser_path | sed -e 's/konqueror$/kfmclient/] type $browser_path > /dev/null !2 > !1 || die "No '$browser_path' found." $browser_path newTab @Argv & with kfmclient $browser_path newTab @Argv & with * $browser_path @Argv & } with w3m|elinks|links|lynx|open|cygstart|xdg-open $browser_path @Argv with start exec $browser_path '"web-browse"' @Argv with opera|dillo $browser_path @Argv & with * if test -n $browser_cmd { shell { eval "$browser_cmd \"\$@\"" } } }