summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/web-search
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/web-search')
-rw-r--r--oh-my-zsh/plugins/web-search/README.md81
-rw-r--r--oh-my-zsh/plugins/web-search/web-search.plugin.zsh86
2 files changed, 167 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/web-search/README.md b/oh-my-zsh/plugins/web-search/README.md
new file mode 100644
index 0000000..0bf9f26
--- /dev/null
+++ b/oh-my-zsh/plugins/web-search/README.md
@@ -0,0 +1,81 @@
+# 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=` |
+
+Also there are aliases for bang-searching DuckDuckGo:
+
+| Context | Bang |
+|-----------|-------|
+| `wiki` | `!w` |
+| `news` | `!n` |
+| `youtube` | `!yt` |
+| `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/oh-my-zsh/plugins/web-search/web-search.plugin.zsh b/oh-my-zsh/plugins/web-search/web-search.plugin.zsh
new file mode 100644
index 0000000..ec176dd
--- /dev/null
+++ b/oh-my-zsh/plugins/web-search/web-search.plugin.zsh
@@ -0,0 +1,86 @@
+# 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="
+ )
+
+ # 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
+ # build search url:
+ # join arguments passed with '+', then append to search engine URL
+ url="${urls[$1]}$(omz_urlencode ${@[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'
+
+#add your own !bang searches here
+alias wiki='web_search duckduckgo \!w'
+alias news='web_search duckduckgo \!n'
+alias youtube='web_search duckduckgo \!yt'
+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