web-search.plugin.zsh
4283 bytes
1# web_search from terminal
2
3function web_search() {
4 emulate -L zsh
5
6 # define search engine URLS
7 typeset -A urls
8 urls=(
9 $ZSH_WEB_SEARCH_ENGINES
10 google "https://www.google.com/search?q="
11 bing "https://www.bing.com/search?q="
12 brave "https://search.brave.com/search?q="
13 yahoo "https://search.yahoo.com/search?p="
14 duckduckgo "https://www.duckduckgo.com/?q="
15 startpage "https://www.startpage.com/do/search?q="
16 yandex "https://yandex.ru/yandsearch?text="
17 github "https://github.com/search?q="
18 baidu "https://www.baidu.com/s?wd="
19 ecosia "https://www.ecosia.org/search?q="
20 goodreads "https://www.goodreads.com/search?q="
21 qwant "https://www.qwant.com/?q="
22 givero "https://www.givero.com/search?q="
23 stackoverflow "https://stackoverflow.com/search?q="
24 wolframalpha "https://www.wolframalpha.com/input/?i="
25 archive "https://web.archive.org/web/*/"
26 scholar "https://scholar.google.com/scholar?q="
27 ask "https://www.ask.com/web?q="
28 youtube "https://www.youtube.com/results?search_query="
29 deepl "https://www.deepl.com/translator#auto/auto/"
30 dockerhub "https://hub.docker.com/search?q="
31 gems "https://rubygems.org/search?query="
32 npmpkg "https://www.npmjs.com/search?q="
33 packagist "https://packagist.org/?query="
34 gopkg "https://pkg.go.dev/search?m=package&q="
35 chatgpt "https://chatgpt.com/?q="
36 grok "https://grok.com/?q="
37 claudeai "https://claude.ai/new?q="
38 reddit "https://www.reddit.com/search/?q="
39 ppai "https://www.perplexity.ai/search/new?q="
40 rscrate "https://crates.io/search?q="
41 rsdoc "https://docs.rs/releases/search?query="
42 )
43
44 # check whether the search engine is supported
45 if [[ -z "$urls[$1]" ]]; then
46 echo "Search engine '$1' not supported."
47 return 1
48 fi
49
50 # search or go to main page depending on number of arguments passed
51 if [[ $# -gt 1 ]]; then
52 # if search goes in the query string ==> space as +, otherwise %20
53 # see https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20
54 local param="-P"
55 [[ "$urls[$1]" == *\?*= ]] && param=""
56
57 # build search url:
58 # join arguments passed with '+', then append to search engine URL
59 url="${urls[$1]}$(omz_urlencode $param ${(s: :)@[2,-1]})"
60 else
61 # build main page url:
62 # split by '/', then rejoin protocol (1) and domain (2) parts with '//'
63 url="${(j://:)${(s:/:)urls[$1]}[1,2]}"
64 fi
65
66 open_command "$url"
67}
68
69
70alias bing='web_search bing'
71alias brs='web_search brave'
72alias google='web_search google'
73alias yahoo='web_search yahoo'
74alias ddg='web_search duckduckgo'
75alias sp='web_search startpage'
76alias yandex='web_search yandex'
77alias github='web_search github'
78alias baidu='web_search baidu'
79alias ecosia='web_search ecosia'
80alias goodreads='web_search goodreads'
81alias qwant='web_search qwant'
82alias givero='web_search givero'
83alias stackoverflow='web_search stackoverflow'
84alias wolframalpha='web_search wolframalpha'
85alias archive='web_search archive'
86alias scholar='web_search scholar'
87alias ask='web_search ask'
88alias youtube='web_search youtube'
89alias deepl='web_search deepl'
90alias dockerhub='web_search dockerhub'
91alias gems='web_search gems'
92alias npmpkg='web_search npmpkg'
93alias packagist='web_search packagist'
94alias gopkg='web_search gopkg'
95alias chatgpt='web_search chatgpt'
96alias grokcom='web_search grok'
97alias claudeai='web_search claudeai'
98alias reddit='web_search reddit'
99alias ppai='web_search ppai'
100alias rscrate='web_search rscrate'
101alias rsdoc='web_search rsdoc'
102
103#add your own !bang searches here
104alias wiki='web_search duckduckgo \!w'
105alias news='web_search duckduckgo \!n'
106alias map='web_search duckduckgo \!m'
107alias image='web_search duckduckgo \!i'
108alias ducky='web_search duckduckgo \!'
109
110# other search engine aliases
111if [[ ${#ZSH_WEB_SEARCH_ENGINES} -gt 0 ]]; then
112 typeset -A engines
113 engines=($ZSH_WEB_SEARCH_ENGINES)
114 for key in ${(k)engines}; do
115 alias "$key"="web_search $key"
116 done
117 unset engines key
118fi
119