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

[PATCHv2 7/7] web--browse: look at the BROWSER env var

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Dec 3, 2010, 16:47 UTC
Message-ID
<1291394861-11989-8-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1291394861-11989-1-git-send-email-giuseppe.bilotta@gmail.com>

The BROWSER environment variables is used in Debian-based systems to set the user-preferred browser(s).

It contains a colon-separate list of commands to (try to) execute to open a web page. Each item in the list is allowed to have a %s placeholder to be replaced by the URL, in which case we try to run the command as is. If no placeholder is found, we only look at the command name to see if it matches one of our known browsers.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
---
 git-web--browse.sh |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/git-web--browse.sh b/git-web--browse.sh
index 48ea168..e3dbbe3 100755
--- a/git-web--browse.sh
+++ b/git-web--browse.sh
@@ -138,6 +138,51 @@ then
 	fi
 fi
 
+# Debian and derivatives provide a sensible-brower script that tries to
+# invoke the user or system preferred browser most appropriate for the
+# current situation (X or no X, GNOME or other/no DE).
+# We do not use the sensible-browser script directly since it doesn't
+# allow us to open pages in a new tab, but we can use the underlying
+# infrastructure to find the browser to use if the user didn't choose
+# one. This is done by looking at the BROWSER environment variable
+# first, and at the *www-browser links if the first search is
+# unsuccesful.
+
+# The BROWSER environment variable is a colon-separate list of commands
+# to (try and) execute to launch the browser. sensible-browser allows
+# each BROWSER entry to contain a %s placeholder that will be replaced
+# by the URL to be opened.
+# If an entry contains a %s we run it as-is, without doing any detection, on
+# the premise that it represents the exact way the user expects the browser to
+# be called. If the execution fails, we do not bail out, since the
+# failure might be due to the entry being for a graphical browser and
+# the GUI not being available, which is the reason why multiple entries
+# can be specified in BROWSER in the first place.
+# An entry without a %s is only taken as indication of the preferred
+# browser, so we proceed with our usual detection logic.
+if test -z "$browser" -a -n "$BROWSER"; then
+	OLDIFS="$IFS"
+	IFS=:
+	for i in $BROWSER; do
+		case "$i" in
+			*sensible-browser*)
+				;; # skip
+			*%s*)
+				IFS="$OLDIFS"
+				cmd=$(printf "$i\n" "$*")
+				$cmd && exit 0
+				;;
+			*)
+				prog=$(which "$i" 2> /dev/null)
+				if test -n "$prog" -a -x "$prog" && valid_exe "$prog" ; then
+					break
+				fi
+				;;
+		esac
+	done
+	IFS="$OLDIFS"
+fi
+
 # Debian and derivatives use gnome-www-browser, x-www-browser or www-browser to
 # set the default browser for the system. If the user did not specify a tool and
 # we detect that one of the *www-browser links to a supported one, we pick it.
-- 
1.7.3.2.664.g294b8.dirty
Previous: Giuseppe BilottaNext: Jonathan Nieder
Message 23 of 25 in “[PATCHv2 0/7] web--browse cleanup and extensions”
  1. Giuseppe BilottaDec 3, 2010
  2. 1/7 CodingGuidelines: mention whitespace preferences for shell scriptsGiuseppe Bilotta, Dec 3, 2010
  3. Junio C HamanoDec 3, 2010
  4. Giuseppe BilottaDec 3, 2010
  5. Junio C HamanoDec 3, 2010
  6. Giuseppe BilottaDec 3, 2010
  7. 2/7 web--browse: coding styleGiuseppe Bilotta, Dec 3, 2010
  8. Junio C HamanoDec 7, 2010
  9. 3/7 web--browse: split valid_tool listGiuseppe Bilotta, Dec 3, 2010
  10. 4/7 web--browse: support opera, seamonkey and elinksGiuseppe Bilotta, Dec 3, 2010
  11. Junio C HamanoDec 3, 2010
  12. Giuseppe BilottaDec 3, 2010
  13. 5/7 web--browse: better support for chromiumGiuseppe Bilotta, Dec 3, 2010
  14. Junio C HamanoDec 3, 2010
  15. Giuseppe BilottaDec 3, 2010
  16. 6/7 web--browse: use (x-)www-browser if availableGiuseppe Bilotta, Dec 3, 2010
  17. Christian CouderDec 3, 2010
  18. Giuseppe BilottaDec 3, 2010
  19. Junio C HamanoDec 3, 2010
  20. Giuseppe BilottaDec 3, 2010
  21. Jonathan NiederDec 4, 2010
  22. Giuseppe BilottaDec 4, 2010
  23. 7/7 web--browse: look at the BROWSER env varGiuseppe Bilotta, Dec 3, 2010
  24. Jonathan NiederDec 3, 2010
  25. Jonathan NiederDec 3, 2010

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.