浏览代码

web-search: allow custom search engines

Marc Cornellà 3 年之前
父节点
当前提交
60442dc47b
共有 2 个文件被更改,包括 36 次插入1 次删除
  1. 24 0
      plugins/web-search/README.md
  2. 12 1
      plugins/web-search/web-search.plugin.zsh

+ 24 - 0
plugins/web-search/README.md

@@ -52,3 +52,27 @@ Also there are aliases for bang-searching DuckDuckGo:
 | `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>`.

+ 12 - 1
plugins/web-search/web-search.plugin.zsh

@@ -6,6 +6,7 @@ function web_search() {
   # 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="
     yahoo       "https://search.yahoo.com/search?p="
@@ -25,7 +26,7 @@ function web_search() {
 
   # check whether the search engine is supported
   if [[ -z "$urls[$1]" ]]; then
-    echo "Search engine $1 not supported."
+    echo "Search engine '$1' not supported."
     return 1
   fi
 
@@ -67,3 +68,13 @@ 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