diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/capistrano/_capistrano | 53 | ||||
| -rw-r--r-- | plugins/capistrano/capistrano.plugin.zsh | 11 | ||||
| -rw-r--r-- | plugins/coffee/coffee.plugin.zsh | 4 | ||||
| -rw-r--r-- | plugins/git-extras/git-extras.plugin.zsh | 194 | ||||
| -rw-r--r-- | plugins/gnu-utils/gnu-utils.plugin.zsh | 5 | ||||
| -rw-r--r-- | plugins/gradle/gradle.plugin.zsh | 2 | ||||
| -rw-r--r-- | plugins/gulp/gulp.plugin.zsh | 29 | ||||
| -rw-r--r-- | plugins/npm/npm.plugin.zsh | 3 | ||||
| -rw-r--r-- | plugins/osx/osx.plugin.zsh | 84 | ||||
| -rw-r--r-- | plugins/rails/rails.plugin.zsh | 4 | ||||
| -rw-r--r-- | plugins/scw/README.md | 7 | ||||
| -rw-r--r-- | plugins/scw/_scw | 333 | ||||
| -rw-r--r-- | plugins/sudo/sudo.plugin.zsh | 6 | ||||
| -rw-r--r-- | plugins/svn/svn.plugin.zsh | 10 | ||||
| -rw-r--r-- | plugins/terminalapp/terminalapp.plugin.zsh | 45 | 
15 files changed, 620 insertions, 170 deletions
| diff --git a/plugins/capistrano/_capistrano b/plugins/capistrano/_capistrano index 3cadf3d54..e6e71ffcc 100644 --- a/plugins/capistrano/_capistrano +++ b/plugins/capistrano/_capistrano @@ -1,10 +1,49 @@ -#compdef cap +#compdef shipit  #autoload -if [[ -f config/deploy.rb || -f Capfile ]]; then -  if [[ ! -f .cap_tasks~ || config/deploy.rb -nt .cap_tasks~ ]]; then -    echo "\nGenerating .cap_tasks~..." > /dev/stderr -    cap -v --tasks | grep '#' | cut -d " " -f 2 > .cap_tasks~ +# Added `shipit` because `cap` is a reserved word. `cap` completion doesn't work. +# http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fcap-Module + +local curcontext="$curcontext" state line ret=1 +local -a _configs + +_arguments -C \ +  '1: :->cmds' \ +  '2:: :->args' && ret=0 + +_cap_tasks() { +  if [[ -f config/deploy.rb || -f Capfile ]]; then +    if [[ ! -f .cap_tasks~ ]]; then +      shipit -v --tasks | sed 's/\(\[\)\(.*\)\(\]\)/\2:/' | awk '{command=$2; $1=$2=$3=""; gsub(/^[ \t\r\n]+/, "", $0); gsub(":", "\\:", command); print command"["$0"]"}' > .cap_tasks~ +    fi + +    OLD_IFS=$IFS +    IFS=$'\n' +    _values 'cap commands' $(< .cap_tasks~) +    IFS=$OLD_IFS +    # zmodload zsh/mapfile +    # _values ${(f)mapfile[.cap_tasks~]}    fi -  compadd `cat .cap_tasks~` -fi +} + +_cap_stages() { +  compadd $(find config/deploy -name \*.rb | cut -d/ -f3 | sed s:.rb::g) +} + +case $state in +  cmds) +    # check if it uses multistage +    if [[ -d config/deploy ]]; then +      _cap_stages +    else +      _cap_tasks +    fi +    ret=0 +    ;; +  args) +    _cap_tasks +    ret=0 +    ;; +esac + +return ret diff --git a/plugins/capistrano/capistrano.plugin.zsh b/plugins/capistrano/capistrano.plugin.zsh new file mode 100644 index 000000000..c85eb474c --- /dev/null +++ b/plugins/capistrano/capistrano.plugin.zsh @@ -0,0 +1,11 @@ +# Added `shipit` because `cap` is a reserved word. `cap` completion doesn't work. +# http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fcap-Module + +func shipit() { +  if [ -f Gemfile ] +  then +    bundle exec cap $* +  else +    cap $* +  fi +} diff --git a/plugins/coffee/coffee.plugin.zsh b/plugins/coffee/coffee.plugin.zsh index 1a7bedd87..4e98e0228 100644 --- a/plugins/coffee/coffee.plugin.zsh +++ b/plugins/coffee/coffee.plugin.zsh @@ -2,11 +2,11 @@  # compile a string of coffeescript and print to output  cf () { -  coffee -peb $1 +  coffee -peb "$1"  }  # compile & copy to clipboard  cfc () { -  cf $1 | pbcopy +  cf "$1" | pbcopy  }  # compile from pasteboard & print diff --git a/plugins/git-extras/git-extras.plugin.zsh b/plugins/git-extras/git-extras.plugin.zsh index 8419166ab..d91c1af81 100644 --- a/plugins/git-extras/git-extras.plugin.zsh +++ b/plugins/git-extras/git-extras.plugin.zsh @@ -3,19 +3,20 @@  # Description  # -----------  # -#  Completion script for git-extras (http://github.com/visionmedia/git-extras). +#  Completion script for git-extras (http://github.com/tj/git-extras).  #  # ------------------------------------------------------------------------------  # Authors  # -------  #  #  * Alexis GRIMALDI (https://github.com/agrimaldi) +#  * spacewander (https://github.com/spacewander)  #  # ------------------------------------------------------------------------------  # Inspirations  # -----------  # -#  * git-extras (http://github.com/visionmedia/git-extras) +#  * git-extras (http://github.com/tj/git-extras)  #  * git-flow-completion (http://github.com/bobthecow/git-flow-completion)  #  # ------------------------------------------------------------------------------ @@ -30,10 +31,21 @@ __git_command_successful () {  } +__git_commits() { +    declare -A commits +    git log --oneline -15 | sed 's/\([[:alnum:]]\{7\}\) /\1:/' | while read commit +    do +        hash=$(echo $commit | cut -d':' -f1) +        commits[$hash]="$commit" +    done +    local ret=1 +    _describe -t commits commit commits && ret=0 +} +  __git_tag_names() {      local expl      declare -a tag_names -    tag_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/}) +    tag_names=(${${(f)"$(_call_program tags git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/})      __git_command_successful || return      _wanted tag-names expl tag-name compadd $* - $tag_names  } @@ -47,31 +59,27 @@ __git_branch_names() {      _wanted branch-names expl branch-name compadd $* - $branch_names  } - -__git_feature_branch_names() { +__git_specific_branch_names() {      local expl      declare -a branch_names -    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/feature 2>/dev/null)"}#refs/heads/feature/}) +    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/"$1" 2>/dev/null)"}#refs/heads/$1/})      __git_command_successful || return      _wanted branch-names expl branch-name compadd $* - $branch_names  } +__git_feature_branch_names() { +    __git_specific_branch_names 'feature' +} + +  __git_refactor_branch_names() { -    local expl -    declare -a branch_names -    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/refactor 2>/dev/null)"}#refs/heads/refactor/}) -    __git_command_successful || return -    _wanted branch-names expl branch-name compadd $* - $branch_names +    __git_specific_branch_names 'refactor'  }  __git_bug_branch_names() { -    local expl -    declare -a branch_names -    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/bug 2>/dev/null)"}#refs/heads/bug/}) -    __git_command_successful || return -    _wanted branch-names expl branch-name compadd $* - $branch_names +    __git_specific_branch_names 'bug'  } @@ -92,19 +100,43 @@ __git_author_names() {      _wanted author-names expl author-name compadd $* - $author_names  } +# subcommands -_git-changelog() { -    _arguments \ -        '(-l --list)'{-l,--list}'[list commits]' \ +_git-bug() { +    local curcontext=$curcontext state line ret=1 +    declare -A opt_args + +    _arguments -C \ +        ': :->command' \ +        '*:: :->option-or-argument' && ret=0 + +    case $state in +        (command) +            declare -a commands +            commands=( +                'finish:merge bug into the current branch' +            ) +            _describe -t commands command commands && ret=0 +            ;; +        (option-or-argument) +            curcontext=${curcontext%:*}-$line[1]: +            case $line[1] in +                (finish) +                    _arguments -C \ +                        ':branch-name:__git_bug_branch_names' +                    ;; +            esac +    esac  } -_git-effort() { +_git-changelog() {      _arguments \ -        '--above[ignore file with less than x commits]' \ +        '(-l --list)'{-l,--list}'[list commits]' \  } +  _git-contrib() {      _arguments \          ':author:__git_author_names' @@ -135,6 +167,11 @@ _git-delete-tag() {  } +_git-effort() { +    _arguments \ +        '--above[ignore file with less than x commits]' +} +  _git-extras() {      local curcontext=$curcontext state line ret=1      declare -A opt_args @@ -154,20 +191,7 @@ _git-extras() {      esac      _arguments \ -        '(-v --version)'{-v,--version}'[show current version]' \ -} - - -_git-graft() { -    _arguments \ -        ':src-branch-name:__git_branch_names' \ -        ':dest-branch-name:__git_branch_names' -} - - -_git-squash() { -    _arguments \ -        ':branch-name:__git_branch_names' +        '(-v --version)'{-v,--version}'[show current version]'  } @@ -199,6 +223,25 @@ _git-feature() {  } +_git-graft() { +    _arguments \ +        ':src-branch-name:__git_branch_names' \ +        ':dest-branch-name:__git_branch_names' +} + + +_git-ignore() { +    _arguments  -C \ +        '(--local -l)'{--local,-l}'[show local gitignore]' \ +        '(--global -g)'{--global,-g}'[show global gitignore]' +} + +_git-missing() { +    _arguments \ +        ':first-branch-name:__git_branch_names' \ +        ':second-branch-name:__git_branch_names' +} +  _git-refactor() {      local curcontext=$curcontext state line ret=1      declare -A opt_args @@ -227,59 +270,62 @@ _git-refactor() {  } -_git-bug() { -    local curcontext=$curcontext state line ret=1 -    declare -A opt_args - -    _arguments -C \ -        ': :->command' \ -        '*:: :->option-or-argument' && ret=0 +_git-squash() { +    _arguments \ +        ':branch-name:__git_branch_names' +} -    case $state in -        (command) -            declare -a commands -            commands=( -                'finish:merge bug into the current branch' -            ) -            _describe -t commands command commands && ret=0 -            ;; -        (option-or-argument) -            curcontext=${curcontext%:*}-$line[1]: -            case $line[1] in -                (finish) -                    _arguments -C \ -                        ':branch-name:__git_bug_branch_names' -                    ;; -            esac -    esac +_git-summary() { +    _arguments '--line[summarize with lines other than commits]' +    __git_commits  } +_git-undo(){ +    _arguments  -C \ +        '(--soft -s)'{--soft,-s}'[only rolls back the commit but changes remain un-staged]' \ +        '(--hard -h)'{--hard,-h}'[wipes your commit(s)]' +} +  zstyle ':completion:*:*:git:*' user-commands \ +    alias:'define, search and show aliases' \ +    archive-file:'export the current HEAD of the git repository to a archive' \ +    back:'undo and stage latest commits' \ +    bug:'create a bug branch' \      changelog:'populate changelog file with commits since the previous tag' \ +    commits-since:'list commits since a given date' \      contrib:'display author contributions' \      count:'count commits' \ +    create-branch:'create local and remote branch' \      delete-branch:'delete local and remote branch' \ +    delete-merged-brancees:'delete merged branches'\      delete-submodule:'delete submodule' \      delete-tag:'delete local and remote tag' \ +    effort:'display effort statistics' \      extras:'git-extras' \ -    graft:'merge commits from source branch to destination branch' \ -    squash:'merge commits from source branch into the current one as a single commit' \      feature:'create a feature branch' \ -    refactor:'create a refactor branch' \ -    bug:'create a bug branch' \ -    summary:'repository summary' \ -    effort:'display effort statistics' \ -    repl:'read-eval-print-loop' \ -    commits-since:'list commits since a given date' \ -    release:'release commit with the given tag' \ -    alias:'define, search and show aliases' \ +    fork:'fork a repo on github' \ +    fresh-branch:'create empty local branch' \ +    gh-pages:'create the GitHub Pages branch' \ +    graft:'merge commits from source branch to destination branch' \      ignore:'add patterns to .gitignore' \      info:'show info about the repository' \ -    create-branch:'create local and remote branch' \ -    fresh-branch:'create empty local branch' \ -    undo:'remove the latest commit' \ +    local-commits:'list unpushed commits on the local branch' \ +    lock:'lock a file excluded from version control' \ +    locked:'ls files that have been locked' \ +    missing:'show commits missing from another branch' \ +    pr:'checks out a pull request locally' \ +    rebase-patch:'rebases a patch' \ +    refactor:'create a refactor branch' \ +    release:'commit, tag and push changes to the repository' \ +    rename-tag:'rename a tag' \ +    repl:'read-eval-print-loop' \ +    reset-file:'reset one file' \ +    root:'show path of root' \      setup:'setup a git repository' \ +    show-tree:'show branch tree of commit history' \ +    squash:'merge commits from source branch into the current one as a single commit' \ +    summary:'repository summary' \      touch:'one step creation of new files' \ -    obliterate:'Completely remove a file from the repository, including past commits and tags' \ -    local-commits:'list unpushed commits on the local branch' \ +    undo:'remove the latest commit' \ +    unlock:'unlock a file excluded from version control' diff --git a/plugins/gnu-utils/gnu-utils.plugin.zsh b/plugins/gnu-utils/gnu-utils.plugin.zsh index e59265d66..de95f7e6c 100644 --- a/plugins/gnu-utils/gnu-utils.plugin.zsh +++ b/plugins/gnu-utils/gnu-utils.plugin.zsh @@ -29,7 +29,10 @@ if [[ -x "${commands[gwhoami]}" ]]; then      'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho'      'gwhoami' 'gyes') -    # Not part of coreutils, installed separately. +    # findutils +    gcmds+=('gfind' 'gxargs' 'glocate') + +    # Not part of either coreutils or findutils, installed separately.      gcmds+=('gsed' 'gtar' 'gtime')      for gcmd in "${gcmds[@]}"; do diff --git a/plugins/gradle/gradle.plugin.zsh b/plugins/gradle/gradle.plugin.zsh index 6f634d1ba..97941756d 100644 --- a/plugins/gradle/gradle.plugin.zsh +++ b/plugins/gradle/gradle.plugin.zsh @@ -82,7 +82,7 @@ _gradlew_tasks () {    if [ in_gradle ]; then      _gradle_arguments      if _gradle_does_task_list_need_generating; then -     gradlew tasks --all | grep "^[ ]*[a-zA-Z0-9:]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache +     ./gradlew tasks --all | grep "^[ ]*[a-zA-Z0-9:]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache      fi      compadd -X "==== Gradlew Tasks ====" `cat .gradletasknamecache`    fi diff --git a/plugins/gulp/gulp.plugin.zsh b/plugins/gulp/gulp.plugin.zsh new file mode 100644 index 000000000..6017c7b60 --- /dev/null +++ b/plugins/gulp/gulp.plugin.zsh @@ -0,0 +1,29 @@ +#!/usr/bin/env zsh + +# +# gulp-autocompletion-zsh +#  +# Autocompletion for your gulp.js tasks +# +# Copyright(c) 2014 André König <andre.koenig@posteo.de> +# MIT Licensed +#  + +# +# André König +# Github: https://github.com/akoenig +# Twitter: https://twitter.com/caiifr +# + +# +# Grabs all available tasks from the `gulpfile.js` +# in the current directory. +# +function $$gulp_completion() { +    compls=$(grep -Eo "gulp.task\(('(([a-zA-Z0-9]|-)*)',)" gulpfile.js 2>/dev/null | grep -Eo "'(([a-zA-Z0-9]|-)*)'" | sed s/"'"//g | sort) + +    completions=(${=compls}) +    compadd -- $completions +} + +compdef $$gulp_completion gulp
\ No newline at end of file diff --git a/plugins/npm/npm.plugin.zsh b/plugins/npm/npm.plugin.zsh index 68ec5fabd..595105d3c 100644 --- a/plugins/npm/npm.plugin.zsh +++ b/plugins/npm/npm.plugin.zsh @@ -12,3 +12,6 @@ alias npmS="npm i -S "  # Install and save to dev-dependencies in your package.json  # npmd is used by https://github.com/dominictarr/npmd  alias npmD="npm i -D " +# Execute command from node_modules folder based on current directory +# i.e npmE gulp +alias npmE='PATH="$(npm bin)":"$PATH"' diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh index 390960fdc..2cbb95977 100644 --- a/plugins/osx/osx.plugin.zsh +++ b/plugins/osx/osx.plugin.zsh @@ -5,29 +5,35 @@  #       VERSION:  1.1.0  # ------------------------------------------------------------------------------ -function tab() { -  local command="cd \\\"$PWD\\\"; clear" -  (( $# > 0 )) && command="${command}; $*" - -  the_app=$( +function _omz_osx_get_frontmost_app() { +  local the_app=$(      osascript 2>/dev/null <<EOF        tell application "System Events"          name of first item of (every process whose frontmost is true)        end tell  EOF    ) +  echo "$the_app" +} -  [[ "$the_app" == 'Terminal' ]] && { -    osascript 2>/dev/null <<EOF +function tab() { +  # Must not have trailing semicolon, for iTerm compatibility +  local command="cd \\\"$PWD\\\"; clear" +  (( $# > 0 )) && command="${command}; $*" + +  local the_app=$(_omz_osx_get_frontmost_app) + +  if [[ "$the_app" == 'Terminal' ]]; then +    # Discarding stdout to quash "tab N of window id XXX" output +    osascript >/dev/null <<EOF        tell application "System Events"          tell process "Terminal" to keystroke "t" using command down -        tell application "Terminal" to do script "${command}" in front window        end tell +      tell application "Terminal" to do script "${command}" in front window  EOF -  } -  [[ "$the_app" == 'iTerm' ]] && { -    osascript 2>/dev/null <<EOF +  elif [[ "$the_app" == 'iTerm' ]]; then +    osascript <<EOF        tell application "iTerm"          set current_terminal to current terminal          tell current_terminal @@ -35,29 +41,27 @@ EOF            set current_session to current session            tell current_session              write text "${command}" -            keystroke return            end tell          end tell        end tell  EOF -  } + +  else +    echo "tab: unsupported terminal app: $the_app" +    false + +  fi  }  function vsplit_tab() { -  local command="cd \\\"$PWD\\\"" +  local command="cd \\\"$PWD\\\"; clear"    (( $# > 0 )) && command="${command}; $*" -  the_app=$( -    osascript 2>/dev/null <<EOF -      tell application "System Events" -        name of first item of (every process whose frontmost is true) -      end tell -EOF -  ) +  local the_app=$(_omz_osx_get_frontmost_app) -  [[ "$the_app" == 'iTerm' ]] && { -    osascript 2>/dev/null <<EOF -      tell application "iTerm" to activate +  if [[ "$the_app" == 'iTerm' ]]; then +    osascript <<EOF +      -- tell application "iTerm" to activate        tell application "System Events"          tell process "iTerm" @@ -65,26 +69,24 @@ EOF              click            end tell          end tell -        keystroke "${command}; clear;" -        keystroke return +        keystroke "${command} \n"        end tell  EOF -  } + +  else +    echo "$0: unsupported terminal app: $the_app" >&2 +    false + +  fi  }  function split_tab() { -  local command="cd \\\"$PWD\\\"" +  local command="cd \\\"$PWD\\\"; clear"    (( $# > 0 )) && command="${command}; $*" -  the_app=$( -    osascript 2>/dev/null <<EOF -      tell application "System Events" -        name of first item of (every process whose frontmost is true) -      end tell -EOF -  ) +  local the_app=$(_omz_osx_get_frontmost_app) -  [[ "$the_app" == 'iTerm' ]] && { +  if [[ "$the_app" == 'iTerm' ]]; then      osascript 2>/dev/null <<EOF        tell application "iTerm" to activate @@ -94,11 +96,15 @@ EOF              click            end tell          end tell -        keystroke "${command}; clear;" -        keystroke return +        keystroke "${command} \n"        end tell  EOF -  } + +  else +    echo "$0: unsupported terminal app: $the_app" >&2 +    false + +  fi  }  function pfd() { diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh index 6824836fc..39e388494 100644 --- a/plugins/rails/rails.plugin.zsh +++ b/plugins/rails/rails.plugin.zsh @@ -54,10 +54,12 @@ alias rdrs='rake db:reset'  alias rdtc='rake db:test:clone'  alias rdtp='rake db:test:prepare'  alias rdmtc='rake db:migrate db:test:clone' -  alias rlc='rake log:clear'  alias rn='rake notes'  alias rr='rake routes' +alias rrg='rake routes | grep' +alias rt='rake test' +  # legacy stuff  alias sstat='thin --stats "/thin/stats" start' diff --git a/plugins/scw/README.md b/plugins/scw/README.md new file mode 100644 index 000000000..d2312c2e5 --- /dev/null +++ b/plugins/scw/README.md @@ -0,0 +1,7 @@ +## Scaleway CLI autocomplete plugin + +[scw](https://github.com/scaleway/scaleway-cli): Manage Bare Metal servers from Command Line (as easily as with Docker) + +- Adds autocomplete options for all `scw` commands. + +Maintainer : Manfred Touron ([@moul](https://github.com/moul)) diff --git a/plugins/scw/_scw b/plugins/scw/_scw new file mode 100644 index 000000000..f9fdf916e --- /dev/null +++ b/plugins/scw/_scw @@ -0,0 +1,333 @@ +#compdef scw +# +# zsh completion for scw (http://scaleway.com) +# +# Inspired by https://github.com/felixr/docker-zsh-completion + +__scw_get_servers() { +    local expl +    declare -a servers +    servers=(${(f)"$(_call_program commands scw _completion servers-names)"}) +    _describe -t servers "servers" servers +} + +__scw_stoppedservers() { +    __scw_get_servers +} + +__scw_runningservers() { +    __scw_get_servers +} + +__scw_servers () { +    __scw_get_servers +} + +__scw_images () { +    local expl +    declare -a images +    images=(${(f)"$(_call_program commands scw _completion images-names)"}) +    _describe -t images "images" images +} + +__scw_images_and_snapshots () { +    __scw_images +    __scw_snapshots +} + +__scw_snapshots () { +    local expl +    declare -a snapshots +    snapshots=(${(f)"$(_call_program commands scw _completion --prefix snapshots-names)"}) +    _describe -t snapshots "snapshots" snapshots +} + +__scw_bootscripts () { +    local expl +    declare -a bootscripts +    bootscripts=(${(f)"$(_call_program commands scw _completion bootscripts-names)"}) +    _describe -t bootscripts "bootscripts" bootscripts +} + +__scw_tags() { +    __scw_images +} + +__scw_repositories_with_tags() { +    __scw_images +} + +__scw_search() { +    # declare -a scwsearch +    local cache_policy +    zstyle -s ":completion:${curcontext}:" cache-policy cache_policy +    if [[ -z "$cache_policy" ]]; then +        zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy +    fi + +    local searchterm cachename +    searchterm="${words[$CURRENT]%/}" +    cachename=_scw-search-$searchterm + +    local expl +    local -a result +    if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \ +        && ! _retrieve_cache ${cachename#_}; then +        _message "Searching for ${searchterm}..." +        result=(${${${(f)"$(_call_program commands scw search ${searchterm})"}%% *}[2,-1]}) +        _store_cache ${cachename#_} result +    fi +    _wanted scwsearch expl 'available images' compadd -a result +} + +__scw_caching_policy() +{ +  oldp=( "$1"(Nmh+1) )     # 1 hour +  (( $#oldp )) +} + + +__scw_repositories () { +    __scw_images +} + +__scw_commands () { +    # local -a  _scw_subcommands +    local cache_policy + +    zstyle -s ":completion:${curcontext}:" cache-policy cache_policy +    if [[ -z "$cache_policy" ]]; then +        zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy +    fi + +    if ( [[ ${+_scw_subcommands} -eq 0 ]] || _cache_invalid scw_subcommands) \ +        && ! _retrieve_cache scw_subcommands; +    then +        local -a lines +        lines=(${(f)"$(_call_program commands scw 2>&1)"}) +        _scw_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I)    *]}]}## #}/ ##/:}) +        _scw_subcommands=($_scw_subcommands 'help:Show help for a command') +        _store_cache scw_subcommands _scw_subcommands +    fi +    _describe -t scw-commands "scw command" _scw_subcommands +} + +__scw_subcommand () { +    local -a _command_args +    case "$words[1]" in +        (attach) +            _arguments \ +                '--no-stdin[Do not attach stdin]' \ +                ':servers:__scw_runningservers' +            ;; +        (commit) +            _arguments \ +                {-v,--volume=0}'[Volume slot]:volume: ' \ +                ':server:__scw_servers' \ +                ':repository:__scw_repositories_with_tags' +            ;; +        (cp) +            _arguments \ +                ':server:->server' \ +                ':hostpath:_files' +            case $state in +                (server) +                    if compset -P '*:'; then +                        _files +                    else +                        __scw_servers -qS ":" +                    fi +                    ;; +            esac +            ;; +        (exec) +            local state ret +            _arguments \ +                {-T,--timeout=0}'[Set timeout values to seconds]' \ +                {-w,--wait}'[Wait for SSH to be ready]' \ +                ':servers:__scw_runningservers' \ +                '*::command:->anycommand' && ret=0 + +            case $state in +                (anycommand) +                    shift 1 words +                    (( CURRENT-- )) +                    _normal +                    ;; +            esac + +            return ret +            ;; +        (history) +            _arguments \ +                '--no-trunc[Do not truncate output]' \ +                {-q,--quiet}'[Only show numeric IDs]' \ +                '*:images:__scw_images' +            ;; +        (images) +            _arguments \ +                {-a,--all}'[Show all images]' \ +                '--no-trunc[Do not truncate output]' \ +                {-q,--quiet}'[Only show numeric IDs]' \ +                ':repository:__scw_repositories' +            ;; +        (info) +            ;; +        (inspect) +            _arguments \ +                {-f,--format=-}'[Format the output using the given go template]:template: ' \ +                '*:servers:__scw_servers' +            ;; +        (kill) +            _arguments \ +                '*:servers:__scw_runningservers' +            ;; +        (login) +            _arguments \ +                {-o,--organization=-}'[Organization]:organization: ' \ +                {-t,--token=-}'[Token]:token: ' \ +                ':server: ' +            ;; +        (logout) +            _arguments \ +                ':server: ' +            ;; +        (logs) +            _arguments \ +                '*:servers:__scw_servers' +            ;; +        (port) +            _arguments \ +                '1:servers:__scw_runningservers' \ +                '2:port:_ports' +            ;; +        (start) +            _arguments \ +                {-T,--timeout=0}'[Set timeout values to seconds]' \ +                {-w,--wait}'[Wait for SSH to be ready]' \ +                '*:servers:__scw_stoppedservers' +            ;; +        (rm) +            _arguments \ +                '*:servers:__scw_stoppedservers' +            ;; +        (rmi) +            _arguments \ +                '*:images:__scw_images' +            ;; +        (restart) +            _arguments \ +                '*:servers:__scw_runningservers' +            ;; +        (stop) +            _arguments \ +                {-t,--terminate}'[Stop and trash a server with its volumes]' \ +                {-w,--wait}'[Synchronous stop. Wait for server to be stopped]' \ +                '*:servers:__scw_runningservers' +            ;; +        (top) +            _arguments \ +                '1:servers:__scw_runningservers' \ +                '(-)*:: :->ps-arguments' +            case $state in +                (ps-arguments) +                    _ps +                    ;; +            esac +            ;; +        (ps) +            _arguments \ +                {-a,--all}'[Show all servers. Only running servers are shown by default]' \ +                {-l,--latest}'[Show only the latest created server]' \ +                '-n[Show n last created servers, include non-running one]:n:(1 5 10 25 50)' \ +                '--no-trunc[Do not truncate output]' \ +                {-q,--quiet}'[Only show numeric IDs]' +            ;; +        (tag) +            _arguments \ +                {-f,--force}'[force]'\ +                ':image:__scw_images'\ +                ':repository:__scw_repositories_with_tags' +            ;; +        (create|run) +            _arguments \ +                {-a,--attach}'[Attach to stdin, stdout or stderr]' \ +                '*'{-e,--environment=-}'[Set environment variables]:environment variable: ' \ +                '--name=-[Server name]:name: ' \ +                '--bootscript=-[Assign a bootscript]:bootscript:__scw_bootscripts ' \ +                '*-v[Bind mount a volume]:volume: '\ +                '(-):images:__scw_images_and_snapshots' \ +                '(-):command: _command_names -e' \ +                '*::arguments: _normal' + +            case $state in +                (link) +                    if compset -P '*:'; then +                        _wanted alias expl 'Alias' compadd -E "" +                    else +                        __scw_runningservers -qS ":" +                    fi +                    ;; +            esac +            ;; +        (rename) +            _arguments \ +                ':old name:__scw_servers' \ +                ':new name: ' +            ;; +        (search) +            _arguments \ +                '--no-trunc[Do not truncate output]' \ +                ':term: ' +            ;; +        (wait) +            _arguments '*:servers:__scw_runningservers' +            ;; +        (help) +            _arguments ':subcommand:__scw_commands' +            ;; +        (*) +            _message 'Unknown sub command' +    esac + +} + +_scw () { +    # Support for subservices, which allows for `compdef _scw scw-shell=_scw_servers`. +    # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. +    if [[ $service != scw ]]; then +        _call_function - _$service +        return +    fi + +    local curcontext="$curcontext" state line +    typeset -A opt_args + +    _arguments -C \ +      '-H[tcp://host:port to bind/connect to]:socket: ' \ +         '(-): :->command' \ +         '(-)*:: :->option-or-argument' + +    if (( CURRENT == 1 )); then + +    fi +    case $state in +        (command) +            __scw_commands +            ;; +        (option-or-argument) +            curcontext=${curcontext%:*:*}:scw-$words[1]: +            __scw_subcommand +            ;; +    esac +} + +_scw "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 4 +# indent-tabs-mode: nil +# sh-basic-offset: 4 +# End: +# vim: ft=zsh sw=4 ts=4 et diff --git a/plugins/sudo/sudo.plugin.zsh b/plugins/sudo/sudo.plugin.zsh index e3ba39918..0ba8bed5b 100644 --- a/plugins/sudo/sudo.plugin.zsh +++ b/plugins/sudo/sudo.plugin.zsh @@ -14,7 +14,11 @@  sudo-command-line() {      [[ -z $BUFFER ]] && zle up-history -    [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER" +    if [[ $BUFFER == sudo\ * ]]; then +        LBUFFER="${LBUFFER#sudo }" +    else +        LBUFFER="sudo $LBUFFER" +    fi  }  zle -N sudo-command-line  # Defined shortcut keys: [Esc] [Esc] diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh index 9f7a4c6eb..816055afe 100644 --- a/plugins/svn/svn.plugin.zsh +++ b/plugins/svn/svn.plugin.zsh @@ -1,16 +1,17 @@  # vim:ft=zsh ts=2 sw=2 sts=2  #  function svn_prompt_info() { +  local _DISPLAY    if in_svn; then      if [ "x$SVN_SHOW_BRANCH" = "xtrue" ]; then        unset SVN_SHOW_BRANCH        _DISPLAY=$(svn_get_branch_name)      else        _DISPLAY=$(svn_get_repo_name) +      _DISPLAY=$(omz_urldecode "${_DISPLAY}")      fi      echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\  $ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$(svn_dirty_pwd)$ZSH_PROMPT_BASE_COLOR" -    unset _DISPLAY    fi  } @@ -30,7 +31,7 @@ function svn_get_repo_name() {  }  function svn_get_branch_name() { -  _DISPLAY=$( +  local _DISPLAY=$(      svn info 2> /dev/null | \        awk -F/ \        '/^URL:/ { \ @@ -49,7 +50,6 @@ function svn_get_branch_name() {    else      echo $_DISPLAY    fi -  unset _DISPLAY  }  function svn_get_rev_nr() { @@ -60,7 +60,7 @@ function svn_get_rev_nr() {  function svn_dirty_choose() {    if in_svn; then -    root=`svn info 2> /dev/null | sed -n 's/^Working Copy Root Path: //p'` +    local root=`svn info 2> /dev/null | sed -n 's/^Working Copy Root Path: //p'`      if $(svn status $root 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'); then        # Grep exits with 0 when "One or more lines were selected", return "dirty".        echo $1 @@ -77,7 +77,7 @@ function svn_dirty() {  function svn_dirty_choose_pwd () {    if in_svn; then -    root=$PWD +    local root=$PWD      if $(svn status $root 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'); then        # Grep exits with 0 when "One or more lines were selected", return "dirty".        echo $1 diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh index 6e47ee188..7c0c278b9 100644 --- a/plugins/terminalapp/terminalapp.plugin.zsh +++ b/plugins/terminalapp/terminalapp.plugin.zsh @@ -1,39 +1,6 @@ -# Set Apple Terminal.app resume directory -# based on this answer: http://superuser.com/a/315029 -# 2012-10-26: (javageek) Changed code using the updated answer - -# Tell the terminal about the working directory whenever it changes. -if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then -  update_terminal_cwd() { -        # Identify the directory using a "file:" scheme URL, including -        # the host name to disambiguate local vs. remote paths. - -        # Percent-encode the pathname. -        local URL_PATH='' -        { -            # Use LANG=C to process text byte-by-byte. -            local i ch hexch LANG=C -            for ((i = 1; i <= ${#PWD}; ++i)); do -                ch="$PWD[i]" -                if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then -                    URL_PATH+="$ch" -                else -                    hexch=$(printf "%02X" "'$ch") -                    URL_PATH+="%$hexch" -                fi -            done -        } - -        local PWD_URL="file://$HOST$URL_PATH" -        #echo "$PWD_URL"        # testing -        printf '\e]7;%s\a' "$PWD_URL" -    } - -    # Register the function so it is called whenever the working -    # directory changes. -    autoload add-zsh-hook -    add-zsh-hook precmd update_terminal_cwd - -    # Tell the terminal about the initial directory. -    update_terminal_cwd -fi +# This file is intentionally empty. +# +# The terminalapp plugin is deprecated and may be removed in a future release. +# Its functionality has been folded in to the core lib/termsupport.zsh, which +# is loaded for all users. You can remove terminalapp from your $plugins list +# once all your systems are updated to the current version of Oh My Zsh. | 
