Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: pick-web-browser
- X-seq: zsh-workers 23759
- From: Peter Stephenson <pws@xxxxxxx>
- To: zsh-workers@xxxxxxxxxx (Zsh hackers list)
- Subject: PATCH: pick-web-browser
- Date: Tue, 14 Aug 2007 18:02:26 +0100
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
Some tweaks to the pick-web-browser MIME helper:
- Style browser-style can specify preferences to use an existing X
browser, start a new X browser, or start a terminal browser.
- Defaults for x-browsers and tty-browsers updated and documented.
- Better Opera syntax for attaching to existing browser. I can add
this for other browsers if you tell me how to do it.
- Return distinctive status 255 if it failed to find a browser.
Index: Doc/Zsh/contrib.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/contrib.yo,v
retrieving revision 1.70
diff -u -r1.70 contrib.yo
--- Doc/Zsh/contrib.yo 4 Jun 2007 12:07:36 -0000 1.70
+++ Doc/Zsh/contrib.yo 14 Aug 2007 16:55:59 -0000
@@ -1697,40 +1697,76 @@
alias -s html=pick-web-browser)
It is provided as an intelligent front end to dispatch a web browser.
-It will check if an X Windows display is available, and if so if there
-is already a browser running on the display which can accept a remote
-connection. In that case, the file will be displayed in that browser;
-you should check explicitly if it has appeared in the running browser's
-window. Otherwise, it will start a new browser according to a built-in
-set of preferences.
-
-Alternatively, tt(pick-web-browser) can be run as a zsh script.
-
-Two styles are available to customize the choice of browsers:
-tt(x-browsers) when running under the X Window System, and
-tt(tty-browsers) otherwise. These are arrays in decreasing order
-of preference consisting of the command name under which to start the
+It may be run as either a function or a shell script. The status
+255 is returned if no browser could be started.
+
+Various styles are available to customize the choice of browsers:
+
+startitem()
+item(tt(browser-style))(
+The value of the style is an array giving preferences in decreasing order
+for the type of browser to use. The values of elements may be
+
+startitem()
+item(tt(running))(
+Use a GUI browser that is already running when an X Window display is
+available. The browsers listed in the tt(x-browsers) style are tried
+in order until one is found; if it is, the file will be displayed in
+that browser, so the user may need to check whether it has appeared.
+If no running browser is found, one is not started. Browsers other than
+Firefox, Opera and Konqueror are assumed to understand the Mozilla
+syntax for opening a URL remotely.
+)
+item(tt(x))(
+Start a new GUI browser when an X Window display is available. Search for
+the availability of one of the browsers listed in the tt(x-browsers) style
+and start the first one that is found. No check is made for an already
+running browser.
+)
+item(tt(tty))(
+Start a terminal-based browser. Search for the availability of one
+of the browsers listed in the tt(tty-browsers) style and start the
+first one that is found.
+)
+enditem()
+
+If the style is not set the default tt(running x tty) is used.
+)
+item(tt(x-browsers))(
+An array in decreasing order
+of preference of browsers to use when running under the X Window System.
+The array consists of the command name under which to start the
browser. They are looked up in the context tt(:mime:) (which may
be extended in future, so appending `tt(*)' is recommended). For
example,
-example(zstyle ':mime:*' x-browsers opera konqueror netscape)
+example(zstyle ':mime:*' x-browsers opera konqueror firefox)
specifies that tt(pick-web-browser) should first look for a runing
-instance of Opera, Konqueror or Netscape, in that order, and if it
-fails to find any should attempt to start Opera.
-
-In addition, the style tt(command), if set, is used to pick the command
+instance of Opera, Konqueror or Firefox, in that order, and if it
+fails to find any should attempt to start Opera. The default is
+tt(firefox mozilla netscape opera konqueror).
+)
+item(tt(tty-browsers))(
+An array similar to tt(x-browsers), except that it gives browsers to
+use use when no X Window display is available. The default is
+tt(elinks links lynx).
+)
+item(tt(command))(
+If it is set this style is used to pick the command
used to open a page for a browser. The context is
tt(:mime:browser:new:$browser:) to start a new browser or
tt(:mime:browser:running:$browser:) to open a URL in a browser already
-runing on the current X display. The escape sequence tt(%b) in the
-style's value will be replaced by the browser, while tt(%u) will be
-replaced by the URL. If the style is not set, the default for all new
-instances is equivalent to tt(%b %u) and the defaults for using running
+runing on the current X display, where tt($browser) is the value matched
+in the tt(x-browsers) or tt(tty-browsers) style. The escape sequence
+tt(%b) in the style's value will be replaced by the browser, while tt(%u)
+will be replaced by the URL. If the style is not set, the default for all
+new instances is equivalent to tt(%b %u) and the defaults for using running
browsers are equivalent to the values tt(kfmclient openURL %u) for
-Konqueror, tt(firefox -new-tab %u) for Firefox and tt(%b -remote
-"openUrl+LPAR()%u+RPAR()") for all others.
+Konqueror, tt(firefox -new-tab %u) for Firefox, tt(opera -newpage %u)
+for Opera, and tt(%b -remote "openUrl+LPAR()%u+RPAR()") for all others.
+)
+enditem()
)
enditem()
Index: Functions/MIME/pick-web-browser
===================================================================
RCS file: /cvsroot/zsh/zsh/Functions/MIME/pick-web-browser,v
retrieving revision 1.4
diff -u -r1.4 pick-web-browser
--- Functions/MIME/pick-web-browser 19 Apr 2006 16:09:07 -0000 1.4
+++ Functions/MIME/pick-web-browser 14 Aug 2007 16:55:59 -0000
@@ -20,24 +20,23 @@
# browser instead.
emulate -L zsh
-setopt extendedglob cbases nonomatch
+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. You can change the order of preference.
-# If none is already running, starts the first in the array.
+# a remote URL.
zstyle -a :mime: x-browsers xbrowsers ||
xbrowsers=(firefox mozilla netscape opera konqueror)
-# Preferred command line browser. Used if there is on $DISPLAY set.
+# Preferred command line browsers.
zstyle -a :mime: tty-browsers ttybrowsers ||
- ttybrowsers=(links lynx)
+ 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.
-litc="-_./"
+local litc="-_./"
local -a windows remoteargs match mbegin mend
local url browser command
@@ -63,57 +62,76 @@
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.
+ #
+ # The nasty but portable version.
+ # The nice but non-portable version uses Perl, even though perl
+ # is more portable.
+ # windows=(${(f)"$(xwininfo -root -all |
+ # sed -ne 's/.*".*": ("\(.*\)" ".*").*/\1/p' |sort | uniq)"})
-if [[ -n $DISPLAY ]]; then
- # X Windows running
-
- # Get the name of all windows running; use the internal name, not
- # the friendly name, which is less useful.
- #
- # The nasty but portable version.
- # The nice but non-portable version uses Perl, even though perl
- # is more portable.
-# windows=(${(f)"$(xwininfo -root -all |
-# sed -ne 's/.*".*": ("\(.*\)" ".*").*/\1/p' |sort | uniq)"})
-
- windows=(${(f)"$(xwininfo -root -all |
+ 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
- if [[ $browser = konqueror ]]; then
- # 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 ||
+ # 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
- elif [[ $browser = firefox ]]; then
- # open in new tab
- $browser -new-tab $url
- else
- # Mozilla bells and whistles are described at:
- # http://www.mozilla.org/unix/remote.html
- $browser -remote "openURL($url)"
- fi
+ ;;
+
+ (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
- return
- fi
- done
+ done
+ ;;
- # Start our preferred X Windows browser in the background.
- for browser in $xbrowsers; do
+ (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}
@@ -122,20 +140,27 @@
# The following is to make the job text more readable.
eval ${(q)browser} ${(q)url} "&"
fi
- break
+ return
fi
- done
-else
- # 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
+ 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
- break
- fi
- done
-fi
+ done
+ ;;
+ esac
+done
+
+# No eligible browser.
+return 255
--
Peter Stephenson <pws@xxxxxxx> Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070
.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author