summaryrefslogtreecommitdiff
path: root/plugins/web-search/web-search.plugin.zsh
diff options
context:
space:
mode:
authorMarc Cornellà <marc.cornella@live.com>2014-12-26 22:33:36 +0100
committerMarc Cornellà <marc.cornella@live.com>2015-02-10 19:32:52 +0100
commit80d856e1655cc2b2e9d6899bae884631283a8063 (patch)
tree53b178eba39b3f6842375cda9f607d6137ce9a11 /plugins/web-search/web-search.plugin.zsh
parent13e5afe805f28749f4aa6a5e82272760a62ad573 (diff)
downloadzsh-80d856e1655cc2b2e9d6899bae884631283a8063.tar.gz
zsh-80d856e1655cc2b2e9d6899bae884631283a8063.tar.bz2
zsh-80d856e1655cc2b2e9d6899bae884631283a8063.zip
Clean up web-search plugin logic to allow easier changes
Diffstat (limited to 'plugins/web-search/web-search.plugin.zsh')
-rw-r--r--plugins/web-search/web-search.plugin.zsh55
1 files changed, 28 insertions, 27 deletions
diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh
index 28559deb9..1e661250a 100644
--- a/plugins/web-search/web-search.plugin.zsh
+++ b/plugins/web-search/web-search.plugin.zsh
@@ -1,42 +1,43 @@
# web_search from terminal
function web_search() {
- # get the open command
- local open_cmd
- if [[ "$OSTYPE" = darwin* ]]; then
- open_cmd='open'
- else
- open_cmd='xdg-open'
- fi
+ emulate -L zsh
+
+ # define search engine URLS
+ typeset -A urls
+ urls=(
+ google "https://www.google.com/search?q="
+ bing "https://www.bing.com/search?q="
+ yahoo "https://www.yahoo.com/search?q="
+ duckduckgo "https://www.duckduckgo.com/?q="
+ )
+
+ # define the open command
+ case "$OSTYPE" in
+ darwin*) open_cmd="open" ;;
+ linux*) open_cmd="xdg-open" ;;
+ *) echo "Platform $OSTYPE not supported"
+ return 1
+ ;;
+ esac
# check whether the search engine is supported
- if [[ ! $1 =~ '(google|bing|yahoo|duckduckgo)' ]];
- then
+ if [[ -z "$urls[$1]" ]]; then
echo "Search engine $1 not supported."
return 1
fi
- local url="http://www.$1.com"
-
- # no keyword provided, simply open the search engine homepage
- if [[ $# -le 1 ]]; then
- $open_cmd "$url"
- return
- fi
- if [[ $1 == 'duckduckgo' ]]; then
- #slightly different search syntax for DDG
- url="${url}/?q="
+ # search or go to main page depending on number of arguments passed
+ if [[ $# -gt 1 ]]; then
+ # build search url:
+ # join arguments passed with '+', then append to search engine URL
+ url="${urls[$1]}${(j:+:)@[2,-1]}"
else
- url="${url}/search?q="
+ # build main page url:
+ # split by '/', then rejoin protocol (1) and domain (2) parts with '//'
+ url="${(j://:)${(s:/:)urls[$1]}[1,2]}"
fi
- shift # shift out $1
-
- while [[ $# -gt 0 ]]; do
- url="${url}$1+"
- shift
- done
- url="${url%?}" # remove the last '+'
nohup $open_cmd "$url" >/dev/null 2&>1
}