diff options
Diffstat (limited to 'oh-my-zsh/plugins/dash/dash.plugin.zsh')
-rw-r--r-- | oh-my-zsh/plugins/dash/dash.plugin.zsh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/dash/dash.plugin.zsh b/oh-my-zsh/plugins/dash/dash.plugin.zsh new file mode 100644 index 0000000..f6801a8 --- /dev/null +++ b/oh-my-zsh/plugins/dash/dash.plugin.zsh @@ -0,0 +1,84 @@ +# Usage: dash [keyword:]query +dash() { open -a Dash.app dash://"$*" } +compdef _dash dash + +_dash() { + # No sense doing this for anything except the 2nd position and if we haven't + # specified which docset to query against + if [[ $CURRENT -ne 2 || "$words[2]" =~ ":" ]]; then + return + fi + + local -aU docsets + docsets=() + + # Use defaults to get the array of docsets from preferences + # Have to smash it into one big line so that each docset is an element of our docsets array + # Only output docsets that are actually enabled + local -a enabled_docsets + enabled_docsets=("${(@f)$(defaults read com.kapeli.dashdoc docsets \ + | tr -d '\n' | grep -oE '\{.*?\}' | grep -E 'isEnabled = 1;')}") + + local docset name keyword + # Now get each docset and output each on their own line + for docset in "$enabled_docsets[@]"; do + keyword='' + # Order of preference as explained to me by @kapeli via email + for locator in keyword suggestedKeyword platform; do + # Echo the docset, try to find the appropriate keyword + # Strip doublequotes and colon from any keyword so that everything has the + # same format when output (we'll add the colon in the completion) + if [[ "$docset" =~ "$locator = ([^;]*);" ]]; then + keyword="${match[1]//[\":]}" + fi + + if [[ -z "$keyword" ]]; then + continue + fi + + # if we fall back to platform, we should do some checking per @kapeli + if [[ "$locator" == "platform" ]]; then + # Since these are the only special cases right now, let's not do the + # expensive processing unless we have to + if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then + if [[ "$docset" =~ "docsetName = ([^;]*);" ]]; then + name="${match[1]//[\":]}" + case "$keyword" in + python) + case "$name" in + "Python 2") keyword="python2" ;; + "Python 3") keyword="python3" ;; + esac ;; + java) + case "$name" in + "Java SE7") keyword="java7" ;; + "Java SE6") keyword="java6" ;; + "Java SE8") keyword="java8" ;; + esac ;; + qt) + case "$name" in + "Qt 5") keyword="qt5" ;; + "Qt 4"|Qt) keyword="qt4" ;; + esac ;; + cocos2d) + case "$name" in + Cocos3D) keyword="cocos3d" ;; + esac ;; + esac + fi + fi + fi + + # Bail once we have a match + break + done + + # If we have a keyword, add it to the list! + if [[ -n "$keyword" ]]; then + docsets+=($keyword) + fi + done + + # special thanks to [arx] on #zsh for getting me sorted on this piece + compadd -qS: -- "$docsets[@]" +} |