diff options
| author | navewindre <boneyaard@gmail.com> | 2025-07-13 06:42:05 +0200 |
|---|---|---|
| committer | navewindre <boneyaard@gmail.com> | 2025-07-13 06:42:05 +0200 |
| commit | 02f14a9cb152561a5e44062aac79f3b700403b40 (patch) | |
| tree | 2db8ebda3b7f6f8777783aeb5c60018e6e1359d8 /home/.oh-my-zsh/plugins/web-search | |
| parent | cbbdeb2f6b40a102a829f0c47cff052937231f00 (diff) | |
omz
Diffstat (limited to 'home/.oh-my-zsh/plugins/web-search')
| -rw-r--r-- | home/.oh-my-zsh/plugins/web-search/README.md | 87 | ||||
| -rw-r--r-- | home/.oh-my-zsh/plugins/web-search/web-search.plugin.zsh | 108 |
2 files changed, 195 insertions, 0 deletions
diff --git a/home/.oh-my-zsh/plugins/web-search/README.md b/home/.oh-my-zsh/plugins/web-search/README.md new file mode 100644 index 0000000..d0b03df --- /dev/null +++ b/home/.oh-my-zsh/plugins/web-search/README.md @@ -0,0 +1,87 @@ +# web-search plugin + +This plugin adds aliases for searching with Google, Wiki, Bing, YouTube and other popular services. + +Open your `~/.zshrc` file and enable the `web-search` plugin: + +```zsh +plugins=( ... web-search) +``` + +## Usage + +You can use the `web-search` plugin in these two forms: + +- `web_search <context> <term> [more terms if you want]` +- `<context> <term> [more terms if you want]` + +For example, these two are equivalent: + +```zsh +$ web_search google oh-my-zsh +$ google oh-my-zsh +``` + +Available search contexts are: + +| Context | URL | +| --------------------- | ----------------------------------------------- | +| `bing` | `https://www.bing.com/search?q=` | +| `google` | `https://www.google.com/search?q=` | +| `brs` or `brave` | `https://search.brave.com/search?q=` | +| `yahoo` | `https://search.yahoo.com/search?p=` | +| `ddg` or `duckduckgo` | `https://www.duckduckgo.com/?q=` | +| `sp` or `startpage` | `https://www.startpage.com/do/search?q=` | +| `yandex` | `https://yandex.ru/yandsearch?text=` | +| `github` | `https://github.com/search?q=` | +| `baidu` | `https://www.baidu.com/s?wd=` | +| `ecosia` | `https://www.ecosia.org/search?q=` | +| `goodreads` | `https://www.goodreads.com/search?q=` | +| `qwant` | `https://www.qwant.com/?q=` | +| `givero` | `https://www.givero.com/search?q=` | +| `stackoverflow` | `https://stackoverflow.com/search?q=` | +| `wolframalpha` | `https://wolframalpha.com/input?i=` | +| `archive` | `https://web.archive.org/web/*/` | +| `scholar` | `https://scholar.google.com/scholar?q=` | +| `ask` | `https://www.ask.com/web?q=` | +| `youtube` | `https://www.youtube.com/results?search_query=` | +| `deepl` | `https://www.deepl.com/translator#auto/auto/` | +| `dockerhub` | `https://hub.docker.com/search?q=` | +| `npmpkg` | `https://www.npmjs.com/search?q=` | +| `packagist` | `https://packagist.org/?query=` | +| `gopkg` | `https://pkg.go.dev/search?m=package&q=` | +| `chatgpt` | `https://chatgpt.com/?q=` | +| `reddit` | `https://www.reddit.com/search/?q=` | +| `ppai` | `https://www.perplexity.ai/search/new?q=` | + +Also there are aliases for bang-searching DuckDuckGo: + +| Context | Bang | +| ------- | ---- | +| `wiki` | `!w` | +| `news` | `!n` | +| `map` | `!m` | +| `image` | `!i` | +| `ducky` | `!` | + +### Custom search engines + +If you want to add other search contexts to the plugin, you can use the `$ZSH_WEB_SEARCH_ENGINES` variable. +Set it before Oh My Zsh is sourced, with the following format: + +```zsh +ZSH_WEB_SEARCH_ENGINES=( + <context> <URL> + <context> <URL> +) +``` + +where `<context>` is the name of the search context, and `<URL>` a URL of the same type as the search contexts +above. For example, to add `reddit`, you'd do: + +```zsh +ZSH_WEB_SEARCH_ENGINES=(reddit "https://www.reddit.com/search/?q=") +``` + +These custom search engines will also be turned to aliases, so you can both do `web_search reddit <query>` or +`reddit <query>`. diff --git a/home/.oh-my-zsh/plugins/web-search/web-search.plugin.zsh b/home/.oh-my-zsh/plugins/web-search/web-search.plugin.zsh new file mode 100644 index 0000000..ff77fae --- /dev/null +++ b/home/.oh-my-zsh/plugins/web-search/web-search.plugin.zsh @@ -0,0 +1,108 @@ +# web_search from terminal + +function web_search() { + emulate -L zsh + + # define search engine URLS + typeset -A urls + urls=( + $ZSH_WEB_SEARCH_ENGINES + google "https://www.google.com/search?q=" + bing "https://www.bing.com/search?q=" + brave "https://search.brave.com/search?q=" + yahoo "https://search.yahoo.com/search?p=" + duckduckgo "https://www.duckduckgo.com/?q=" + startpage "https://www.startpage.com/do/search?q=" + yandex "https://yandex.ru/yandsearch?text=" + github "https://github.com/search?q=" + baidu "https://www.baidu.com/s?wd=" + ecosia "https://www.ecosia.org/search?q=" + goodreads "https://www.goodreads.com/search?q=" + qwant "https://www.qwant.com/?q=" + givero "https://www.givero.com/search?q=" + stackoverflow "https://stackoverflow.com/search?q=" + wolframalpha "https://www.wolframalpha.com/input/?i=" + archive "https://web.archive.org/web/*/" + scholar "https://scholar.google.com/scholar?q=" + ask "https://www.ask.com/web?q=" + youtube "https://www.youtube.com/results?search_query=" + deepl "https://www.deepl.com/translator#auto/auto/" + dockerhub "https://hub.docker.com/search?q=" + npmpkg "https://www.npmjs.com/search?q=" + packagist "https://packagist.org/?query=" + gopkg "https://pkg.go.dev/search?m=package&q=" + chatgpt "https://chatgpt.com/?q=" + reddit "https://www.reddit.com/search/?q=" + ppai "https://www.perplexity.ai/search/new?q=" + ) + + # check whether the search engine is supported + if [[ -z "$urls[$1]" ]]; then + echo "Search engine '$1' not supported." + return 1 + fi + + # search or go to main page depending on number of arguments passed + if [[ $# -gt 1 ]]; then + # if search goes in the query string ==> space as +, otherwise %20 + # see https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20 + local param="-P" + [[ "$urls[$1]" == *\?*= ]] && param="" + + # build search url: + # join arguments passed with '+', then append to search engine URL + url="${urls[$1]}$(omz_urlencode $param ${(s: :)@[2,-1]})" + else + # build main page url: + # split by '/', then rejoin protocol (1) and domain (2) parts with '//' + url="${(j://:)${(s:/:)urls[$1]}[1,2]}" + fi + + open_command "$url" +} + + +alias bing='web_search bing' +alias brs='web_search brave' +alias google='web_search google' +alias yahoo='web_search yahoo' +alias ddg='web_search duckduckgo' +alias sp='web_search startpage' +alias yandex='web_search yandex' +alias github='web_search github' +alias baidu='web_search baidu' +alias ecosia='web_search ecosia' +alias goodreads='web_search goodreads' +alias qwant='web_search qwant' +alias givero='web_search givero' +alias stackoverflow='web_search stackoverflow' +alias wolframalpha='web_search wolframalpha' +alias archive='web_search archive' +alias scholar='web_search scholar' +alias ask='web_search ask' +alias youtube='web_search youtube' +alias deepl='web_search deepl' +alias dockerhub='web_search dockerhub' +alias npmpkg='web_search npmpkg' +alias packagist='web_search packagist' +alias gopkg='web_search gopkg' +alias chatgpt='web_search chatgpt' +alias reddit='web_search reddit' +alias ppai='web_search ppai' + +#add your own !bang searches here +alias wiki='web_search duckduckgo \!w' +alias news='web_search duckduckgo \!n' +alias map='web_search duckduckgo \!m' +alias image='web_search duckduckgo \!i' +alias ducky='web_search duckduckgo \!' + +# other search engine aliases +if [[ ${#ZSH_WEB_SEARCH_ENGINES} -gt 0 ]]; then + typeset -A engines + engines=($ZSH_WEB_SEARCH_ENGINES) + for key in ${(k)engines}; do + alias "$key"="web_search $key" + done + unset engines key +fi |
