Parent directory

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