/usr/share/zsh/functions/MIME/pick-web-browser is in zsh-common 5.0.2-3ubuntu6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | # Function to find a web browser to run on a URL or file.
# Can also be run as a script. It is suitable for use as
# a suffix alias:
# alias -s html=pick-web-browser
#
# The single argument is the URL or file name which may be of any type.
# The only processing which occurs is that if the argument is a file,
# it is converted into a URL. As the function takes account of
# any necessary conversions to the file name (for example, if it
# contains spaces), it is generally preferable to pass in raw file
# names rather than convert them to URLs elsewhere.
#
# The function takes account of the fact that many X Windows browsers
# which are already running on the current display can take a command
# to pass the URL to that process for handling. A typical sign
# that this has happened is that apparently nothing happens --- you
# need to check the browser window.
#
# If no $DISPLAY is set, the function tries to start a terminal-based
# browser instead.
emulate -L zsh
setopt extendedglob cbases nonomatch warncreateglobal
zmodload -i zsh/zutil
local -a xbrowsers ttybrowsers
# X Windows browsers which might be running and can accept
# a remote URL.
zstyle -a :mime: x-browsers xbrowsers ||
xbrowsers=(firefox mozilla netscape opera konqueror)
# Preferred command line browsers.
zstyle -a :mime: tty-browsers ttybrowsers ||
ttybrowsers=(elinks links lynx)
# Characters in addition to alphanumerics which can appear literally
# in a URL. `-' should be the first if it appears, so append others
# to the end.
local litc="-_./"
local -a windows remoteargs match mbegin mend
local url browser command
url=$1
if [[ -f $url ]]; then
if [[ $url = *[^-_[:alnum:]]* ]]; then
# Convert special characters into hex escapes.
local sofar
while [[ $url = (#b)([${litc}[:alnum:]]#)([^${litc}[:alnum:]])(*) ]]
do
sofar+="$match[1]%${$(( [#16] ##$match[2] ))##0x}"
url=$match[3]
done
url="$sofar$url"
fi
# Turn this into a local URL
if [[ $url = /* ]]; then
url=file://$url
else
url=file://$PWD/$url
fi
fi
local bstyle
local -a bstyles
zstyle -a :mime: browser-styles bstyles || bstyles=(running x tty)
for bstyle in $bstyles; do
case $bstyle in
(running)
[[ -z $DISPLAY ]] && continue
# X Windows running
# Get the name of all windows running; use the internal name, not
# the friendly name, which is less useful.
windows=(${(ou)${(M)${(f)"$(xwininfo -root -all)"}:#*\"*\"\:[[:space:]]\(\"*}/(#b)*\"*\"\:[[:space:]]\(\"(*)\"[[:space:]]\"*\"\)*/$match[1]})
#windows=(${(f)"$(xwininfo -root -all |
# perl -ne '/.*"(.*)": \("(.*)" "(.*)"\).*/ and $w{$2} = 1;
# END { print join("\n", keys %w), "\n" }')"})
# Is any browser we've heard of running?
for browser in $xbrowsers; do
# Some browser executables call themselves <browser>-bin
if [[ $windows[(I)(#i)$browser(|[.-]bin)] -ne 0 ]]; then
if zstyle -s ":mime:browser:running:${browser}:" command command; then
# The (q)'s here and below are pure paranoia: no browser
# name is going to include metacharacters, and we already
# converted difficult characters in the URL to hex.
zformat -f command $command b:${(q)browser} u:${(q)url}
eval $command
else
case $browser in
(konqueror)
# kfmclient is less hairy and better supported than direct
# use of dcop. Run kfmclient --commands
# for more information. Note that as konqueror is a fully
# featured file manager, this will actually do complete
# MIME handling, not just web pages.
kfmclient openURL $url ||
dcop $(dcop|grep konqueror) default openBrowserWindow $url
;;
(firefox)
# open in new tab
$browser -new-tab $url
;;
(opera)
$browser -newpage $url
;;
(*)
# Mozilla bells and whistles are described at:
# http://www.mozilla.org/unix/remote.html
$browser -remote "openURL($url)"
;;
esac
fi
return
fi
done
;;
(x)
[[ -z $DISPLAY ]] && continue
# Start our preferred X Windows browser in the background.
for browser in $xbrowsers; do
if eval "[[ =$browser != \\=$browser ]]"; then
if zstyle -s ":mime:browser:new:${browser}:" command command; then
zformat -f command $command b:${(q)browser} u:${(q)url}
eval $command "&"
else
# The following is to make the job text more readable.
eval ${(q)browser} ${(q)url} "&"
fi
return
fi
done
;;
(tty)
# Start up dumb terminal browser.
for browser in $ttybrowsers; do
if eval "[[ =$browser != \\=$browser ]]"; then
if zstyle -s ":mime:browser:new:${browser}" command command; then
zformat -f command $command b:${(q)browser} u:${(q)url}
eval $command
else
$browser $url
fi
return
fi
done
;;
esac
done
# No eligible browser.
return 255
|