From 916d13f93e2c74ae9a41ee95333f6571d6ebd264 Mon Sep 17 00:00:00 2001 From: Andrey Anurin Date: Mon, 16 May 2016 23:46:33 -0700 Subject: [PATCH] init --- .zcompdump | 1725 +++++++++++++++++ .zcompdump.zwc | Bin 0 -> 93888 bytes .zlogin | 1 + .zlogout | 1 + .zprezto/.gitignore | 3 + .zprezto/.gitmodules | 21 + .zprezto/CONTRIBUTING.md | 41 + .zprezto/README.md | 117 ++ .zprezto/init.zsh | 113 ++ .zprezto/modules/README.md | 204 ++ .zprezto/modules/archive/README.md | 40 + .zprezto/modules/archive/functions/_lsarchive | 13 + .zprezto/modules/archive/functions/_unarchive | 13 + .zprezto/modules/archive/functions/lsarchive | 55 + .zprezto/modules/archive/functions/unarchive | 80 + .zprezto/modules/autosuggestions/README.md | 53 + .zprezto/modules/autosuggestions/init.zsh | 35 + .zprezto/modules/command-not-found/README.md | 15 + .zprezto/modules/command-not-found/init.zsh | 17 + .zprezto/modules/completion/README.md | 23 + .../modules/completion/external/.editorconfig | 10 + .../modules/completion/external/.gitignore | 3 + .../modules/completion/external/README.md | 77 + .zprezto/modules/completion/external/src/_ack | 237 +++ .zprezto/modules/completion/external/src/_adb | 422 ++++ .zprezto/modules/completion/external/src/_ag | 217 +++ .../modules/completion/external/src/_android | 331 ++++ .../modules/completion/external/src/_ansible | 439 +++++ .../completion/external/src/_ansible-galaxy | 111 ++ .../completion/external/src/_ansible-playbook | 177 ++ .../modules/completion/external/src/_artisan | 53 + .../modules/completion/external/src/_atach | 50 + .../completion/external/src/_boot2docker | 87 + .../modules/completion/external/src/_bower | 147 ++ .../modules/completion/external/src/_bpython | 52 + .../modules/completion/external/src/_brew | 215 ++ .../modules/completion/external/src/_bundle | 92 + .../modules/completion/external/src/_cabal | 648 +++++++ .zprezto/modules/completion/external/src/_cap | 56 + .../modules/completion/external/src/_cask | 89 + .../modules/completion/external/src/_celery | 139 ++ .../modules/completion/external/src/_choc | 60 + .../modules/completion/external/src/_cmake | 274 +++ .../modules/completion/external/src/_coffee | 81 + .../modules/completion/external/src/_composer | 76 + .../modules/completion/external/src/_console | 53 + .../modules/completion/external/src/_cpanm | 105 + .../modules/completion/external/src/_debuild | 65 + .../modules/completion/external/src/_dget | 35 + .../modules/completion/external/src/_dhcpcd | 78 + .../modules/completion/external/src/_ditz | 53 + .../modules/completion/external/src/_docker | 483 +++++ .../completion/external/src/_docker-compose | 197 ++ .../completion/external/src/_docker-machine | 294 +++ .../modules/completion/external/src/_docpad | 58 + .../modules/completion/external/src/_drush | 166 ++ .../modules/completion/external/src/_dzen2 | 44 + .../modules/completion/external/src/_emulator | 139 ++ .../modules/completion/external/src/_exportfs | 51 + .zprezto/modules/completion/external/src/_fab | 83 + .zprezto/modules/completion/external/src/_gas | 48 + .../modules/completion/external/src/_geany | 73 + .zprezto/modules/completion/external/src/_gem | 499 +++++ .zprezto/modules/completion/external/src/_ghc | 618 ++++++ .../modules/completion/external/src/_gist | 66 + .../modules/completion/external/src/_git-flow | 424 ++++ .../completion/external/src/_git-pulls | 108 ++ .../modules/completion/external/src/_git-wtf | 58 + .../modules/completion/external/src/_github | 272 +++ .../modules/completion/external/src/_glances | 63 + .../modules/completion/external/src/_google | 69 + .../modules/completion/external/src/_gradle | 135 ++ .../modules/completion/external/src/_heroku | 209 ++ .../modules/completion/external/src/_hledger | 177 ++ .../modules/completion/external/src/_httpie | 177 ++ .zprezto/modules/completion/external/src/_id3 | 70 + .../modules/completion/external/src/_id3v2 | 116 ++ .zprezto/modules/completion/external/src/_iw | 247 +++ .../modules/completion/external/src/_jekyll | 145 ++ .../modules/completion/external/src/_jmeter | 74 + .../completion/external/src/_jmeter-plugins | 67 + .../modules/completion/external/src/_jonas | 125 ++ .zprezto/modules/completion/external/src/_jq | 84 + .../modules/completion/external/src/_kitchen | 85 + .../modules/completion/external/src/_knife | 214 ++ .../completion/external/src/_language_codes | 275 +++ .../modules/completion/external/src/_lein | 62 + .../modules/completion/external/src/_logger | 61 + .../modules/completion/external/src/_lunar | 314 +++ .../modules/completion/external/src/_lunchy | 49 + .../completion/external/src/_manage.py | 270 +++ .../completion/external/src/_middleman | 136 ++ .../modules/completion/external/src/_mina | 43 + .../modules/completion/external/src/_mosh | 35 + .../modules/completion/external/src/_mussh | 86 + .zprezto/modules/completion/external/src/_mvn | 628 ++++++ .zprezto/modules/completion/external/src/_nl | 56 + .../modules/completion/external/src/_node | 66 + .zprezto/modules/completion/external/src/_nvm | 85 + .../modules/completion/external/src/_optirun | 75 + .../modules/completion/external/src/_pactree | 26 + .../modules/completion/external/src/_pear | 89 + .../modules/completion/external/src/_perf | 279 +++ .../completion/external/src/_periscope | 61 + .../completion/external/src/_pgsql_utils | 444 +++++ .../modules/completion/external/src/_phing | 94 + .../modules/completion/external/src/_pkcon | 137 ++ .../modules/completion/external/src/_play | 215 ++ .../modules/completion/external/src/_port | 239 +++ .../modules/completion/external/src/_primus | 43 + .zprezto/modules/completion/external/src/_ps | 102 + .../completion/external/src/_pygmentize | 147 ++ .../modules/completion/external/src/_rails | 580 ++++++ .../modules/completion/external/src/_ralio | 115 ++ .../completion/external/src/_redis-cli | 163 ++ .../modules/completion/external/src/_rfkill | 102 + .../modules/completion/external/src/_rspec | 78 + .../modules/completion/external/src/_rubocop | 83 + .zprezto/modules/completion/external/src/_rvm | 127 ++ .zprezto/modules/completion/external/src/_sbt | 93 + .../modules/completion/external/src/_scala | 249 +++ .zprezto/modules/completion/external/src/_sdd | 66 + .../modules/completion/external/src/_setup.py | 695 +++++++ .../modules/completion/external/src/_showoff | 84 + .../modules/completion/external/src/_shutdown | 71 + .../completion/external/src/_smartmontools | 115 ++ .../modules/completion/external/src/_socat | 233 +++ .zprezto/modules/completion/external/src/_srm | 63 + .../completion/external/src/_ssh-copy-id | 59 + .../modules/completion/external/src/_stack | 93 + .../completion/external/src/_subliminal | 63 + .zprezto/modules/completion/external/src/_svm | 169 ++ .../modules/completion/external/src/_symfony | 456 +++++ .../modules/completion/external/src/_teamocil | 47 + .../modules/completion/external/src/_thor | 28 + .../completion/external/src/_tmuxinator | 43 + .../modules/completion/external/src/_vagrant | 239 +++ .../modules/completion/external/src/_veewee | 164 ++ .../modules/completion/external/src/_virsh | 278 +++ .../completion/external/src/_virtualbox | 327 ++++ .../modules/completion/external/src/_vnstat | 114 ++ .../modules/completion/external/src/_vpnc | 207 ++ .../modules/completion/external/src/_watch | 55 + .../modules/completion/external/src/_wemux | 82 + .../modules/completion/external/src/_xinput | 196 ++ .../modules/completion/external/src/_yaourt | 359 ++++ .zprezto/modules/completion/external/src/_zfs | 597 ++++++ .../external/zsh-completions-howto.org | 440 +++++ .../external/zsh-completions.plugin.zsh | 1 + .zprezto/modules/completion/init.zsh | 148 ++ .zprezto/modules/directory/README.md | 35 + .zprezto/modules/directory/init.zsh | 30 + .zprezto/modules/dnf/README.md | 29 + .zprezto/modules/dnf/init.zsh | 28 + .zprezto/modules/dpkg/README.md | 41 + .zprezto/modules/dpkg/functions/deb-clone | 25 + .zprezto/modules/dpkg/functions/deb-history | 36 + .zprezto/modules/dpkg/functions/deb-kbuild | 14 + .zprezto/modules/dpkg/init.zsh | 57 + .zprezto/modules/editor/README.md | 61 + .zprezto/modules/editor/init.zsh | 329 ++++ .zprezto/modules/emacs/README.md | 33 + .zprezto/modules/emacs/init.zsh | 25 + .zprezto/modules/environment/README.md | 25 + .zprezto/modules/environment/init.zsh | 48 + .zprezto/modules/fasd/README.md | 38 + .zprezto/modules/fasd/init.zsh | 53 + .zprezto/modules/git/README.md | 334 ++++ .zprezto/modules/git/alias.zsh | 181 ++ .../modules/git/functions/_git-hub-browse | 47 + .../git/functions/_git-hub-shorten-url | 11 + .zprezto/modules/git/functions/_git-info | 18 + .../modules/git/functions/_git-submodule-move | 40 + .../git/functions/_git-submodule-remove | 26 + .../modules/git/functions/git-branch-current | 20 + .../modules/git/functions/git-commit-lost | 20 + .zprezto/modules/git/functions/git-dir | 16 + .zprezto/modules/git/functions/git-hub-browse | 58 + .../modules/git/functions/git-hub-shorten-url | 22 + .zprezto/modules/git/functions/git-info | 423 ++++ .zprezto/modules/git/functions/git-root | 16 + .../git/functions/git-stash-clear-interactive | 22 + .../modules/git/functions/git-stash-dropped | 22 + .../modules/git/functions/git-stash-recover | 18 + .../modules/git/functions/git-submodule-move | 32 + .../git/functions/git-submodule-remove | 27 + .zprezto/modules/git/init.zsh | 17 + .zprezto/modules/gnu-utility/README.md | 32 + .zprezto/modules/gnu-utility/init.zsh | 60 + .zprezto/modules/gpg/README.md | 26 + .zprezto/modules/gpg/init.zsh | 55 + .zprezto/modules/haskell/README.md | 28 + .zprezto/modules/haskell/init.zsh | 18 + .zprezto/modules/helper/README.md | 24 + .../modules/helper/functions/add-zsh-trap | 41 + .zprezto/modules/helper/init.zsh | 31 + .../history-substring-search/README.md | 61 + .../external/README.md | 127 ++ .../zsh-history-substring-search.plugin.zsh | 12 + .../external/zsh-history-substring-search.zsh | 585 ++++++ .../modules/history-substring-search/init.zsh | 57 + .zprezto/modules/history/README.md | 43 + .zprezto/modules/history/init.zsh | 39 + .zprezto/modules/homebrew/README.md | 37 + .zprezto/modules/homebrew/init.zsh | 33 + .zprezto/modules/macports/README.md | 25 + .zprezto/modules/macports/init.zsh | 34 + .zprezto/modules/node/README.md | 45 + .zprezto/modules/node/functions/node-doc | 14 + .zprezto/modules/node/functions/node-info | 24 + .zprezto/modules/node/init.zsh | 34 + .zprezto/modules/ocaml/README.md | 27 + .zprezto/modules/ocaml/init.zsh | 14 + .zprezto/modules/osx/README.md | 37 + .../modules/osx/functions/_manb_mand_manp | 11 + .zprezto/modules/osx/functions/mand | 20 + .zprezto/modules/osx/functions/manp | 19 + .../osx/functions/osx-ls-download-history | 13 + .../modules/osx/functions/osx-rm-dir-metadata | 11 + .../osx/functions/osx-rm-download-history | 13 + .zprezto/modules/osx/functions/pfd | 12 + .zprezto/modules/osx/functions/pfs | 15 + .zprezto/modules/osx/functions/ql | 10 + .zprezto/modules/osx/functions/tab | 41 + .zprezto/modules/osx/init.zsh | 21 + .zprezto/modules/pacman/README.md | 65 + .../pacman/functions/pacman-list-disowned | 22 + .../pacman/functions/pacman-list-explicit | 20 + .zprezto/modules/pacman/init.zsh | 84 + .zprezto/modules/pacman/yaourt.zsh | 18 + .zprezto/modules/perl/README.md | 63 + .zprezto/modules/perl/init.zsh | 52 + .zprezto/modules/prompt/README.md | 111 ++ .../prompt/external/agnoster/README.md | 40 + .../external/agnoster/agnoster.zsh-theme | 153 ++ .../prompt/external/agnoster/characters.png | Bin 0 -> 15285 bytes .../prompt/external/agnoster/screenshot.png | Bin 0 -> 82148 bytes .../prompt/external/powerline/README.md | 60 + .../prompt/external/powerline/prompt.png | Bin 0 -> 142230 bytes .../external/powerline/prompt_powerline_setup | 185 ++ .../prompt/external/pure/.editorconfig | 15 + .../prompt/external/pure/.gitattributes | 1 + .../prompt/external/pure/arch/PKGBUILD | 26 + .../modules/prompt/external/pure/async.zsh | 276 +++ .zprezto/modules/prompt/external/pure/license | 21 + .../modules/prompt/external/pure/package.json | 43 + .../prompt/external/pure/pure.plugin.zsh | 1 + .../modules/prompt/external/pure/pure.zsh | 348 ++++ .../modules/prompt/external/pure/readme.md | 192 ++ .../external/pure/screenshot-title-cmd.png | Bin 0 -> 24844 bytes .../prompt/external/pure/screenshot.png | Bin 0 -> 43921 bytes .zprezto/modules/prompt/functions/async | 1 + .../prompt/functions/prompt_abra_setup | 53 + .../prompt/functions/prompt_agnoster_setup | 1 + .../prompt/functions/prompt_cloud_setup | 121 ++ .../prompt/functions/prompt_damoekri_setup | 76 + .../prompt/functions/prompt_giddie_setup | 76 + .../prompt/functions/prompt_kylewest_setup | 65 + .../prompt/functions/prompt_minimal_setup | 50 + .../prompt/functions/prompt_nicoulaj_setup | 60 + .../prompt/functions/prompt_paradox_setup | 154 ++ .../prompt/functions/prompt_peepcode_setup | 85 + .../prompt/functions/prompt_powerline_setup | 1 + .../prompt/functions/prompt_pure_setup | 1 + .../prompt/functions/prompt_skwp_setup | 75 + .../prompt/functions/prompt_smiley_setup | 65 + .../prompt/functions/prompt_sorin_setup | 148 ++ .../prompt/functions/prompt_steeef_setup | 94 + .zprezto/modules/prompt/init.zsh | 18 + .zprezto/modules/python/README.md | 99 + .zprezto/modules/python/functions/python-info | 21 + .zprezto/modules/python/init.zsh | 52 + .zprezto/modules/rails/README.md | 34 + .zprezto/modules/rails/init.zsh | 35 + .zprezto/modules/rsync/README.md | 27 + .zprezto/modules/rsync/init.zsh | 34 + .zprezto/modules/ruby/README.md | 108 ++ .zprezto/modules/ruby/functions/ruby-app-root | 18 + .zprezto/modules/ruby/functions/ruby-info | 30 + .zprezto/modules/ruby/init.zsh | 68 + .zprezto/modules/screen/README.md | 40 + .zprezto/modules/screen/init.zsh | 42 + .zprezto/modules/spectrum/README.md | 91 + .zprezto/modules/spectrum/init.zsh | 69 + .zprezto/modules/ssh/README.md | 28 + .zprezto/modules/ssh/init.zsh | 52 + .../modules/syntax-highlighting/README.md | 62 + .../external/.gitattributes | 1 + .../syntax-highlighting/external/.gitignore | 2 + .../external/.revision-hash | 1 + .../syntax-highlighting/external/.version | 1 + .../syntax-highlighting/external/COPYING.md | 23 + .../syntax-highlighting/external/Makefile | 43 + .../syntax-highlighting/external/README.md | 89 + .../syntax-highlighting/external/changelog.md | 212 ++ .../external/highlighters/README.md | 50 + .../external/highlighters/brackets/README.md | 30 + .../brackets/brackets-highlighter.zsh | 110 ++ .../test-data/mismatch-patentheses.zsh | 37 + .../brackets/test-data/nested-parentheses.zsh | 39 + .../brackets/test-data/quoted-patentheses.zsh | 34 + .../brackets/test-data/simple-parentheses.zsh | 37 + .../test-data/unclosed-patentheses.zsh | 36 + .../test-data/unclosed-patentheses2.zsh | 36 + .../external/highlighters/cursor/README.md | 24 + .../cursor/cursor-highlighter.zsh | 44 + .../external/highlighters/line/README.md | 24 + .../highlighters/line/line-highlighter.zsh | 44 + .../external/highlighters/main/README.md | 68 + .../highlighters/main/main-highlighter.zsh | 494 +++++ .../highlighters/main/test-data/alias.zsh | 51 + .../main/test-data/anonymous-function.zsh | 40 + .../main/test-data/arithmetic-evaluation.zsh | 40 + .../main/test-data/assign-append.zsh | 35 + .../main/test-data/assign-semicolon.zsh | 36 + .../highlighters/main/test-data/assign.zsh | 36 + .../main/test-data/back-quoted-argument.zsh | 35 + .../main/test-data/backslash-continuation.zsh | 35 + .../main/test-data/commandseparator.zsh | 37 + .../main/test-data/comment-leading.zsh | 38 + .../main/test-data/comment-off.zsh | 39 + .../highlighters/main/test-data/comments.zsh | 39 + .../main/test-data/control-flow.zsh | 51 + .../main/test-data/dollar-quoted.zsh | 36 + .../main/test-data/dollar-quoted2.zsh | 41 + .../main/test-data/dollar-quoted3.zsh | 38 + .../main/test-data/double-hyphen-option.zsh | 35 + .../main/test-data/double-quoted.zsh | 45 + .../main/test-data/double-quoted2.zsh | 37 + .../main/test-data/double-quoted3.zsh | 39 + .../main/test-data/empty-command.zsh | 35 + .../highlighters/main/test-data/function.zsh | 47 + .../highlighters/main/test-data/glob.zsh | 38 + .../main/test-data/hashed-command.zsh | 36 + .../main/test-data/history-expansion.zsh | 36 + .../main/test-data/history-expansion2.zsh | 34 + .../main/test-data/multiline-string.zsh | 36 + .../main/test-data/multiline-string2.zsh | 35 + .../main/test-data/multiple-redirections.zsh | 46 + .../main/test-data/noglob-alias.zsh | 35 + .../highlighters/main/test-data/noglob1.zsh | 34 + .../highlighters/main/test-data/noglob2.zsh | 35 + .../main/test-data/path-space- .zsh | 35 + .../main/test-data/path-tilde-home.zsh | 36 + .../main/test-data/path-tilde-home2.zsh | 37 + .../main/test-data/path-tilde-named.zsh | 37 + .../highlighters/main/test-data/path.zsh | 35 + .../main/test-data/path_prefix.zsh | 38 + .../main/test-data/path_prefix2.zsh | 39 + .../main/test-data/precommand.zsh | 37 + .../main/test-data/prefix-redirection.zsh | 39 + .../main/test-data/redirection.zsh | 37 + .../main/test-data/reserved-word.zsh | 38 + .../main/test-data/simple-command.zsh | 34 + .../main/test-data/simple-redirection.zsh | 38 + .../highlighters/main/test-data/subshell.zsh | 41 + .../main/test-data/sudo-command.zsh | 47 + .../main/test-data/sudo-comment.zsh | 38 + .../main/test-data/sudo-redirection.zsh | 46 + .../main/test-data/sudo-redirection2.zsh | 39 + .../main/test-data/tilde-command-word.zsh | 37 + .../main/test-data/unbackslash.zsh | 35 + .../main/test-data/unknown-command.zsh | 34 + .../main/test-data/vanilla-newline.zsh | 39 + .../external/highlighters/pattern/README.md | 21 + .../pattern/pattern-highlighter.zsh | 60 + .../external/highlighters/root/README.md | 24 + .../highlighters/root/root-highlighter.zsh | 44 + .../external/images/preview-smaller.png | Bin 0 -> 5982 bytes .../external/images/preview.png | Bin 0 -> 14650 bytes .../syntax-highlighting/external/release.md | 15 + .../external/tests/README.md | 38 + .../external/tests/tap-colorizer.zsh | 67 + .../external/tests/test-highlighting.zsh | 118 ++ .../external/tests/test-perfs.zsh | 75 + .../zsh-syntax-highlighting.plugin.zsh | 1 + .../external/zsh-syntax-highlighting.zsh | 281 +++ .zprezto/modules/syntax-highlighting/init.zsh | 28 + .zprezto/modules/terminal/README.md | 44 + .zprezto/modules/terminal/init.zsh | 121 ++ .zprezto/modules/tmux/README.md | 77 + .zprezto/modules/tmux/init.zsh | 49 + .zprezto/modules/utility/README.md | 158 ++ .../utility/functions/_cdls_popdls_pushdls | 11 + .zprezto/modules/utility/functions/_dut | 11 + .zprezto/modules/utility/functions/_mkdcd | 13 + .zprezto/modules/utility/functions/_prep | 18 + .zprezto/modules/utility/functions/_psub | 19 + .zprezto/modules/utility/functions/diff | 22 + .zprezto/modules/utility/functions/dut | 27 + .zprezto/modules/utility/functions/make | 20 + .zprezto/modules/utility/functions/prep | 52 + .zprezto/modules/utility/functions/psub | 53 + .zprezto/modules/utility/functions/wdiff | 29 + .zprezto/modules/utility/init.zsh | 196 ++ .zprezto/modules/wakeonlan/README.md | 36 + .zprezto/modules/wakeonlan/functions/_wake | 12 + .zprezto/modules/wakeonlan/functions/wake | 20 + .zprezto/modules/yum/README.md | 28 + .zprezto/modules/yum/init.zsh | 27 + .zprezto/runcoms/README.md | 79 + .zprezto/runcoms/zlogin | 15 + .zprezto/runcoms/zlogout | 13 + .zprezto/runcoms/zpreztorc | 174 ++ .zprezto/runcoms/zprofile | 79 + .zprezto/runcoms/zshenv | 11 + .zprezto/runcoms/zshrc | 122 ++ .zpreztorc | 1 + .zprofile | 1 + .zprofile.pysave | 74 + .zshenv | 1 + .zshrc | 1 + 412 files changed, 37846 insertions(+) create mode 100644 .zcompdump create mode 100644 .zcompdump.zwc create mode 120000 .zlogin create mode 120000 .zlogout create mode 100644 .zprezto/.gitignore create mode 100644 .zprezto/.gitmodules create mode 100644 .zprezto/CONTRIBUTING.md create mode 100644 .zprezto/README.md create mode 100644 .zprezto/init.zsh create mode 100644 .zprezto/modules/README.md create mode 100644 .zprezto/modules/archive/README.md create mode 100644 .zprezto/modules/archive/functions/_lsarchive create mode 100644 .zprezto/modules/archive/functions/_unarchive create mode 100644 .zprezto/modules/archive/functions/lsarchive create mode 100644 .zprezto/modules/archive/functions/unarchive create mode 100644 .zprezto/modules/autosuggestions/README.md create mode 100644 .zprezto/modules/autosuggestions/init.zsh create mode 100644 .zprezto/modules/command-not-found/README.md create mode 100644 .zprezto/modules/command-not-found/init.zsh create mode 100644 .zprezto/modules/completion/README.md create mode 100644 .zprezto/modules/completion/external/.editorconfig create mode 100644 .zprezto/modules/completion/external/.gitignore create mode 100644 .zprezto/modules/completion/external/README.md create mode 100644 .zprezto/modules/completion/external/src/_ack create mode 100644 .zprezto/modules/completion/external/src/_adb create mode 100644 .zprezto/modules/completion/external/src/_ag create mode 100644 .zprezto/modules/completion/external/src/_android create mode 100644 .zprezto/modules/completion/external/src/_ansible create mode 100644 .zprezto/modules/completion/external/src/_ansible-galaxy create mode 100644 .zprezto/modules/completion/external/src/_ansible-playbook create mode 100644 .zprezto/modules/completion/external/src/_artisan create mode 100644 .zprezto/modules/completion/external/src/_atach create mode 100644 .zprezto/modules/completion/external/src/_boot2docker create mode 100644 .zprezto/modules/completion/external/src/_bower create mode 100644 .zprezto/modules/completion/external/src/_bpython create mode 100644 .zprezto/modules/completion/external/src/_brew create mode 100644 .zprezto/modules/completion/external/src/_bundle create mode 100644 .zprezto/modules/completion/external/src/_cabal create mode 100644 .zprezto/modules/completion/external/src/_cap create mode 100644 .zprezto/modules/completion/external/src/_cask create mode 100644 .zprezto/modules/completion/external/src/_celery create mode 100644 .zprezto/modules/completion/external/src/_choc create mode 100644 .zprezto/modules/completion/external/src/_cmake create mode 100644 .zprezto/modules/completion/external/src/_coffee create mode 100644 .zprezto/modules/completion/external/src/_composer create mode 100644 .zprezto/modules/completion/external/src/_console create mode 100644 .zprezto/modules/completion/external/src/_cpanm create mode 100644 .zprezto/modules/completion/external/src/_debuild create mode 100644 .zprezto/modules/completion/external/src/_dget create mode 100644 .zprezto/modules/completion/external/src/_dhcpcd create mode 100644 .zprezto/modules/completion/external/src/_ditz create mode 100644 .zprezto/modules/completion/external/src/_docker create mode 100644 .zprezto/modules/completion/external/src/_docker-compose create mode 100644 .zprezto/modules/completion/external/src/_docker-machine create mode 100644 .zprezto/modules/completion/external/src/_docpad create mode 100644 .zprezto/modules/completion/external/src/_drush create mode 100644 .zprezto/modules/completion/external/src/_dzen2 create mode 100644 .zprezto/modules/completion/external/src/_emulator create mode 100644 .zprezto/modules/completion/external/src/_exportfs create mode 100644 .zprezto/modules/completion/external/src/_fab create mode 100644 .zprezto/modules/completion/external/src/_gas create mode 100644 .zprezto/modules/completion/external/src/_geany create mode 100644 .zprezto/modules/completion/external/src/_gem create mode 100644 .zprezto/modules/completion/external/src/_ghc create mode 100644 .zprezto/modules/completion/external/src/_gist create mode 100644 .zprezto/modules/completion/external/src/_git-flow create mode 100644 .zprezto/modules/completion/external/src/_git-pulls create mode 100644 .zprezto/modules/completion/external/src/_git-wtf create mode 100644 .zprezto/modules/completion/external/src/_github create mode 100644 .zprezto/modules/completion/external/src/_glances create mode 100644 .zprezto/modules/completion/external/src/_google create mode 100644 .zprezto/modules/completion/external/src/_gradle create mode 100644 .zprezto/modules/completion/external/src/_heroku create mode 100644 .zprezto/modules/completion/external/src/_hledger create mode 100644 .zprezto/modules/completion/external/src/_httpie create mode 100644 .zprezto/modules/completion/external/src/_id3 create mode 100644 .zprezto/modules/completion/external/src/_id3v2 create mode 100644 .zprezto/modules/completion/external/src/_iw create mode 100644 .zprezto/modules/completion/external/src/_jekyll create mode 100644 .zprezto/modules/completion/external/src/_jmeter create mode 100644 .zprezto/modules/completion/external/src/_jmeter-plugins create mode 100644 .zprezto/modules/completion/external/src/_jonas create mode 100644 .zprezto/modules/completion/external/src/_jq create mode 100644 .zprezto/modules/completion/external/src/_kitchen create mode 100644 .zprezto/modules/completion/external/src/_knife create mode 100644 .zprezto/modules/completion/external/src/_language_codes create mode 100644 .zprezto/modules/completion/external/src/_lein create mode 100644 .zprezto/modules/completion/external/src/_logger create mode 100644 .zprezto/modules/completion/external/src/_lunar create mode 100644 .zprezto/modules/completion/external/src/_lunchy create mode 100644 .zprezto/modules/completion/external/src/_manage.py create mode 100644 .zprezto/modules/completion/external/src/_middleman create mode 100644 .zprezto/modules/completion/external/src/_mina create mode 100644 .zprezto/modules/completion/external/src/_mosh create mode 100644 .zprezto/modules/completion/external/src/_mussh create mode 100644 .zprezto/modules/completion/external/src/_mvn create mode 100644 .zprezto/modules/completion/external/src/_nl create mode 100644 .zprezto/modules/completion/external/src/_node create mode 100644 .zprezto/modules/completion/external/src/_nvm create mode 100644 .zprezto/modules/completion/external/src/_optirun create mode 100644 .zprezto/modules/completion/external/src/_pactree create mode 100644 .zprezto/modules/completion/external/src/_pear create mode 100644 .zprezto/modules/completion/external/src/_perf create mode 100644 .zprezto/modules/completion/external/src/_periscope create mode 100644 .zprezto/modules/completion/external/src/_pgsql_utils create mode 100644 .zprezto/modules/completion/external/src/_phing create mode 100644 .zprezto/modules/completion/external/src/_pkcon create mode 100644 .zprezto/modules/completion/external/src/_play create mode 100644 .zprezto/modules/completion/external/src/_port create mode 100644 .zprezto/modules/completion/external/src/_primus create mode 100644 .zprezto/modules/completion/external/src/_ps create mode 100644 .zprezto/modules/completion/external/src/_pygmentize create mode 100644 .zprezto/modules/completion/external/src/_rails create mode 100644 .zprezto/modules/completion/external/src/_ralio create mode 100644 .zprezto/modules/completion/external/src/_redis-cli create mode 100644 .zprezto/modules/completion/external/src/_rfkill create mode 100644 .zprezto/modules/completion/external/src/_rspec create mode 100644 .zprezto/modules/completion/external/src/_rubocop create mode 100644 .zprezto/modules/completion/external/src/_rvm create mode 100644 .zprezto/modules/completion/external/src/_sbt create mode 100644 .zprezto/modules/completion/external/src/_scala create mode 100644 .zprezto/modules/completion/external/src/_sdd create mode 100644 .zprezto/modules/completion/external/src/_setup.py create mode 100644 .zprezto/modules/completion/external/src/_showoff create mode 100644 .zprezto/modules/completion/external/src/_shutdown create mode 100644 .zprezto/modules/completion/external/src/_smartmontools create mode 100644 .zprezto/modules/completion/external/src/_socat create mode 100644 .zprezto/modules/completion/external/src/_srm create mode 100644 .zprezto/modules/completion/external/src/_ssh-copy-id create mode 100644 .zprezto/modules/completion/external/src/_stack create mode 100644 .zprezto/modules/completion/external/src/_subliminal create mode 100644 .zprezto/modules/completion/external/src/_svm create mode 100644 .zprezto/modules/completion/external/src/_symfony create mode 100644 .zprezto/modules/completion/external/src/_teamocil create mode 100644 .zprezto/modules/completion/external/src/_thor create mode 100644 .zprezto/modules/completion/external/src/_tmuxinator create mode 100644 .zprezto/modules/completion/external/src/_vagrant create mode 100644 .zprezto/modules/completion/external/src/_veewee create mode 100644 .zprezto/modules/completion/external/src/_virsh create mode 100644 .zprezto/modules/completion/external/src/_virtualbox create mode 100644 .zprezto/modules/completion/external/src/_vnstat create mode 100644 .zprezto/modules/completion/external/src/_vpnc create mode 100644 .zprezto/modules/completion/external/src/_watch create mode 100644 .zprezto/modules/completion/external/src/_wemux create mode 100644 .zprezto/modules/completion/external/src/_xinput create mode 100644 .zprezto/modules/completion/external/src/_yaourt create mode 100644 .zprezto/modules/completion/external/src/_zfs create mode 100644 .zprezto/modules/completion/external/zsh-completions-howto.org create mode 100644 .zprezto/modules/completion/external/zsh-completions.plugin.zsh create mode 100644 .zprezto/modules/completion/init.zsh create mode 100644 .zprezto/modules/directory/README.md create mode 100644 .zprezto/modules/directory/init.zsh create mode 100644 .zprezto/modules/dnf/README.md create mode 100644 .zprezto/modules/dnf/init.zsh create mode 100644 .zprezto/modules/dpkg/README.md create mode 100644 .zprezto/modules/dpkg/functions/deb-clone create mode 100644 .zprezto/modules/dpkg/functions/deb-history create mode 100644 .zprezto/modules/dpkg/functions/deb-kbuild create mode 100644 .zprezto/modules/dpkg/init.zsh create mode 100644 .zprezto/modules/editor/README.md create mode 100644 .zprezto/modules/editor/init.zsh create mode 100644 .zprezto/modules/emacs/README.md create mode 100644 .zprezto/modules/emacs/init.zsh create mode 100644 .zprezto/modules/environment/README.md create mode 100644 .zprezto/modules/environment/init.zsh create mode 100644 .zprezto/modules/fasd/README.md create mode 100644 .zprezto/modules/fasd/init.zsh create mode 100644 .zprezto/modules/git/README.md create mode 100644 .zprezto/modules/git/alias.zsh create mode 100644 .zprezto/modules/git/functions/_git-hub-browse create mode 100644 .zprezto/modules/git/functions/_git-hub-shorten-url create mode 100644 .zprezto/modules/git/functions/_git-info create mode 100644 .zprezto/modules/git/functions/_git-submodule-move create mode 100644 .zprezto/modules/git/functions/_git-submodule-remove create mode 100644 .zprezto/modules/git/functions/git-branch-current create mode 100644 .zprezto/modules/git/functions/git-commit-lost create mode 100644 .zprezto/modules/git/functions/git-dir create mode 100644 .zprezto/modules/git/functions/git-hub-browse create mode 100644 .zprezto/modules/git/functions/git-hub-shorten-url create mode 100644 .zprezto/modules/git/functions/git-info create mode 100644 .zprezto/modules/git/functions/git-root create mode 100644 .zprezto/modules/git/functions/git-stash-clear-interactive create mode 100644 .zprezto/modules/git/functions/git-stash-dropped create mode 100644 .zprezto/modules/git/functions/git-stash-recover create mode 100644 .zprezto/modules/git/functions/git-submodule-move create mode 100644 .zprezto/modules/git/functions/git-submodule-remove create mode 100644 .zprezto/modules/git/init.zsh create mode 100644 .zprezto/modules/gnu-utility/README.md create mode 100644 .zprezto/modules/gnu-utility/init.zsh create mode 100644 .zprezto/modules/gpg/README.md create mode 100644 .zprezto/modules/gpg/init.zsh create mode 100644 .zprezto/modules/haskell/README.md create mode 100644 .zprezto/modules/haskell/init.zsh create mode 100644 .zprezto/modules/helper/README.md create mode 100644 .zprezto/modules/helper/functions/add-zsh-trap create mode 100644 .zprezto/modules/helper/init.zsh create mode 100644 .zprezto/modules/history-substring-search/README.md create mode 100644 .zprezto/modules/history-substring-search/external/README.md create mode 100644 .zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh create mode 100644 .zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh create mode 100644 .zprezto/modules/history-substring-search/init.zsh create mode 100644 .zprezto/modules/history/README.md create mode 100644 .zprezto/modules/history/init.zsh create mode 100644 .zprezto/modules/homebrew/README.md create mode 100644 .zprezto/modules/homebrew/init.zsh create mode 100644 .zprezto/modules/macports/README.md create mode 100644 .zprezto/modules/macports/init.zsh create mode 100644 .zprezto/modules/node/README.md create mode 100644 .zprezto/modules/node/functions/node-doc create mode 100644 .zprezto/modules/node/functions/node-info create mode 100644 .zprezto/modules/node/init.zsh create mode 100644 .zprezto/modules/ocaml/README.md create mode 100644 .zprezto/modules/ocaml/init.zsh create mode 100644 .zprezto/modules/osx/README.md create mode 100644 .zprezto/modules/osx/functions/_manb_mand_manp create mode 100644 .zprezto/modules/osx/functions/mand create mode 100644 .zprezto/modules/osx/functions/manp create mode 100644 .zprezto/modules/osx/functions/osx-ls-download-history create mode 100644 .zprezto/modules/osx/functions/osx-rm-dir-metadata create mode 100644 .zprezto/modules/osx/functions/osx-rm-download-history create mode 100644 .zprezto/modules/osx/functions/pfd create mode 100644 .zprezto/modules/osx/functions/pfs create mode 100644 .zprezto/modules/osx/functions/ql create mode 100644 .zprezto/modules/osx/functions/tab create mode 100644 .zprezto/modules/osx/init.zsh create mode 100644 .zprezto/modules/pacman/README.md create mode 100644 .zprezto/modules/pacman/functions/pacman-list-disowned create mode 100644 .zprezto/modules/pacman/functions/pacman-list-explicit create mode 100644 .zprezto/modules/pacman/init.zsh create mode 100644 .zprezto/modules/pacman/yaourt.zsh create mode 100644 .zprezto/modules/perl/README.md create mode 100644 .zprezto/modules/perl/init.zsh create mode 100644 .zprezto/modules/prompt/README.md create mode 100644 .zprezto/modules/prompt/external/agnoster/README.md create mode 100644 .zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme create mode 100644 .zprezto/modules/prompt/external/agnoster/characters.png create mode 100644 .zprezto/modules/prompt/external/agnoster/screenshot.png create mode 100644 .zprezto/modules/prompt/external/powerline/README.md create mode 100644 .zprezto/modules/prompt/external/powerline/prompt.png create mode 100644 .zprezto/modules/prompt/external/powerline/prompt_powerline_setup create mode 100644 .zprezto/modules/prompt/external/pure/.editorconfig create mode 100644 .zprezto/modules/prompt/external/pure/.gitattributes create mode 100644 .zprezto/modules/prompt/external/pure/arch/PKGBUILD create mode 100644 .zprezto/modules/prompt/external/pure/async.zsh create mode 100644 .zprezto/modules/prompt/external/pure/license create mode 100644 .zprezto/modules/prompt/external/pure/package.json create mode 120000 .zprezto/modules/prompt/external/pure/pure.plugin.zsh create mode 100644 .zprezto/modules/prompt/external/pure/pure.zsh create mode 100644 .zprezto/modules/prompt/external/pure/readme.md create mode 100644 .zprezto/modules/prompt/external/pure/screenshot-title-cmd.png create mode 100644 .zprezto/modules/prompt/external/pure/screenshot.png create mode 120000 .zprezto/modules/prompt/functions/async create mode 100644 .zprezto/modules/prompt/functions/prompt_abra_setup create mode 120000 .zprezto/modules/prompt/functions/prompt_agnoster_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_cloud_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_damoekri_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_giddie_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_kylewest_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_minimal_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_nicoulaj_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_paradox_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_peepcode_setup create mode 120000 .zprezto/modules/prompt/functions/prompt_powerline_setup create mode 120000 .zprezto/modules/prompt/functions/prompt_pure_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_skwp_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_smiley_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_sorin_setup create mode 100644 .zprezto/modules/prompt/functions/prompt_steeef_setup create mode 100644 .zprezto/modules/prompt/init.zsh create mode 100644 .zprezto/modules/python/README.md create mode 100644 .zprezto/modules/python/functions/python-info create mode 100644 .zprezto/modules/python/init.zsh create mode 100644 .zprezto/modules/rails/README.md create mode 100644 .zprezto/modules/rails/init.zsh create mode 100644 .zprezto/modules/rsync/README.md create mode 100644 .zprezto/modules/rsync/init.zsh create mode 100644 .zprezto/modules/ruby/README.md create mode 100644 .zprezto/modules/ruby/functions/ruby-app-root create mode 100644 .zprezto/modules/ruby/functions/ruby-info create mode 100644 .zprezto/modules/ruby/init.zsh create mode 100644 .zprezto/modules/screen/README.md create mode 100644 .zprezto/modules/screen/init.zsh create mode 100644 .zprezto/modules/spectrum/README.md create mode 100644 .zprezto/modules/spectrum/init.zsh create mode 100644 .zprezto/modules/ssh/README.md create mode 100644 .zprezto/modules/ssh/init.zsh create mode 100644 .zprezto/modules/syntax-highlighting/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/.gitattributes create mode 100644 .zprezto/modules/syntax-highlighting/external/.gitignore create mode 100644 .zprezto/modules/syntax-highlighting/external/.revision-hash create mode 100644 .zprezto/modules/syntax-highlighting/external/.version create mode 100644 .zprezto/modules/syntax-highlighting/external/COPYING.md create mode 100644 .zprezto/modules/syntax-highlighting/external/Makefile create mode 100644 .zprezto/modules/syntax-highlighting/external/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/changelog.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/brackets-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/mismatch-patentheses.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/nested-parentheses.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/quoted-patentheses.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/simple-parentheses.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/cursor/cursor-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/line/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/line/line-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/anonymous-function.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/arithmetic-evaluation.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-append.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-semicolon.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-argument.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-continuation.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commandseparator.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-leading.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-off.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comments.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/control-flow.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted3.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-hyphen-option.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted3.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-command.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/glob.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/hashed-command.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiple-redirections.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-alias.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob1.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-space- .zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-named.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/prefix-redirection.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/redirection.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/reserved-word.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-command.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-redirection.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/subshell.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-command.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-comment.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/tilde-command-word.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unbackslash.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unknown-command.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/vanilla-newline.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/pattern/pattern-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/root/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/root/root-highlighter.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/images/preview-smaller.png create mode 100644 .zprezto/modules/syntax-highlighting/external/images/preview.png create mode 100644 .zprezto/modules/syntax-highlighting/external/release.md create mode 100644 .zprezto/modules/syntax-highlighting/external/tests/README.md create mode 100755 .zprezto/modules/syntax-highlighting/external/tests/tap-colorizer.zsh create mode 100755 .zprezto/modules/syntax-highlighting/external/tests/test-highlighting.zsh create mode 100755 .zprezto/modules/syntax-highlighting/external/tests/test-perfs.zsh create mode 120000 .zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.plugin.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh create mode 100644 .zprezto/modules/syntax-highlighting/init.zsh create mode 100644 .zprezto/modules/terminal/README.md create mode 100644 .zprezto/modules/terminal/init.zsh create mode 100644 .zprezto/modules/tmux/README.md create mode 100644 .zprezto/modules/tmux/init.zsh create mode 100644 .zprezto/modules/utility/README.md create mode 100644 .zprezto/modules/utility/functions/_cdls_popdls_pushdls create mode 100644 .zprezto/modules/utility/functions/_dut create mode 100644 .zprezto/modules/utility/functions/_mkdcd create mode 100644 .zprezto/modules/utility/functions/_prep create mode 100644 .zprezto/modules/utility/functions/_psub create mode 100644 .zprezto/modules/utility/functions/diff create mode 100644 .zprezto/modules/utility/functions/dut create mode 100644 .zprezto/modules/utility/functions/make create mode 100644 .zprezto/modules/utility/functions/prep create mode 100644 .zprezto/modules/utility/functions/psub create mode 100644 .zprezto/modules/utility/functions/wdiff create mode 100644 .zprezto/modules/utility/init.zsh create mode 100644 .zprezto/modules/wakeonlan/README.md create mode 100644 .zprezto/modules/wakeonlan/functions/_wake create mode 100644 .zprezto/modules/wakeonlan/functions/wake create mode 100644 .zprezto/modules/yum/README.md create mode 100644 .zprezto/modules/yum/init.zsh create mode 100644 .zprezto/runcoms/README.md create mode 100644 .zprezto/runcoms/zlogin create mode 100644 .zprezto/runcoms/zlogout create mode 100644 .zprezto/runcoms/zpreztorc create mode 100644 .zprezto/runcoms/zprofile create mode 100644 .zprezto/runcoms/zshenv create mode 100644 .zprezto/runcoms/zshrc create mode 120000 .zpreztorc create mode 120000 .zprofile create mode 100644 .zprofile.pysave create mode 120000 .zshenv create mode 120000 .zshrc diff --git a/.zcompdump b/.zcompdump new file mode 100644 index 0000000..e6346c4 --- /dev/null +++ b/.zcompdump @@ -0,0 +1,1725 @@ +#files: 869 version: 5.0.8 + +_comps=( +'-' '_precommand' +'-array-value-' '_value' +'-assign-parameter-' '_assign' +'-brace-parameter-' '_brace_parameter' +'-command-' '_autocd' +'-command-line-' '_normal' +'-condition-' '_condition' +'-default-' '_default' +'-equal-' '_equal' +'-first-' '_first' +'-math-' '_math' +'-parameter-' '_parameter' +'-redirect-' '_redirect' +'-redirect-,-default-,-default-' '_files' +'-redirect-,<,bunzip2' '_bzip2' +'-redirect-,<,bzip2' '_bzip2' +'-redirect-,<,compress' '_compress' +'-redirect-,<,gunzip' '_gzip' +'-redirect-,<,gzip' '_gzip' +'-redirect-,<,uncompress' '_compress' +'-redirect-,<,unxz' '_xz' +'-redirect-,<,xz' '_xz' +'-redirect-,>,bzip2' '_bzip2' +'-redirect-,>,compress' '_compress' +'-redirect-,>,gzip' '_gzip' +'-redirect-,>,xz' '_xz' +'-subscript-' '_subscript' +'-tilde-' '_tilde' +'-value-' '_value' +'-value-,-default-,-command-' '_zargs' +'-value-,-default-,-default-' '_value' +'-value-,ANT_ARGS,-default-' '_ant' +'-value-,CFLAGS,-default-' '_gcc' +'-value-,CPPFLAGS,-default-' '_gcc' +'-value-,CXXFLAGS,-default-' '_gcc' +'-value-,DISPLAY,-default-' '_x_display' +'-value-,GREP_OPTIONS,-default-' '_grep' +'-value-,GZIP,-default-' '_gzip' +'-value-,LANG,-default-' '_locales' +'-value-,LANGUAGE,-default-' '_locales' +'-value-,LDFLAGS,-default-' '_gcc' +'-value-,LESS,-default-' '_less' +'-value-,LESSCHARSET,-default-' '_less' +'-value-,LPDEST,-default-' '_printers' +'-value-,P4CLIENT,-default-' '_perforce' +'-value-,P4MERGE,-default-' '_perforce' +'-value-,P4PORT,-default-' '_perforce' +'-value-,P4USER,-default-' '_perforce' +'-value-,PERLDOC,-default-' '_perldoc' +'-value-,PRINTER,-default-' '_printers' +'-value-,PROMPT,-default-' '_ps1234' +'-value-,PROMPT2,-default-' '_ps1234' +'-value-,PROMPT3,-default-' '_ps1234' +'-value-,PROMPT4,-default-' '_ps1234' +'-value-,PS1,-default-' '_ps1234' +'-value-,PS2,-default-' '_ps1234' +'-value-,PS3,-default-' '_ps1234' +'-value-,PS4,-default-' '_ps1234' +'-value-,RPROMPT,-default-' '_ps1234' +'-value-,RPROMPT2,-default-' '_ps1234' +'-value-,RPS1,-default-' '_ps1234' +'-value-,RPS2,-default-' '_ps1234' +'-value-,SPROMPT,-default-' '_ps1234' +'-value-,TERM,-default-' '_terminals' +'-value-,TERMINFO_DIRS,-default-' '_dir_list' +'-value-,TZ,-default-' '_time_zone' +'-value-,VALGRIND_OPTS,-default-' '_valgrind' +'-value-,WWW_HOME,-default-' '_urls' +'-value-,XML_CATALOG_FILES,-default-' '_xmlsoft' +'-value-,XZ_DEFAULTS,-default-' '_xz' +'-value-,XZ_OPT,-default-' '_xz' +'-vared-' '_in_vared' +'-zcalc-line-' '_zcalc_line' +'.' '_source' +'5g' '_go' +'5l' '_go' +'6g' '_go' +'6l' '_go' +'8g' '_go' +'8l' '_go' +'Mail' '_mail' +'Mosaic' '_webbrowser' +'SuSEconfig' '_SUSEconfig' +'VBoxHeadless' '_virtualbox' +'VBoxManage' '_virtualbox' +'a2dismod' '_a2utils' +'a2dissite' '_a2utils' +'a2enmod' '_a2utils' +'a2ensite' '_a2utils' +'a2ps' '_a2ps' +'aaaa' '_hosts' +'aap' '_aap' +'ack' '_ack' +'ack-grep' '_ack' +'ack-standalone' '_ack' +'ack2' '_ack' +'acpi' '_acpi' +'acpitool' '_acpitool' +'acroread' '_acroread' +'adb' '_adb' +'add-zsh-hook' '_add-zsh-hook' +'admin' '_sccs' +'ag' '_ag' +'ali' '_mh' +'alias' '_alias' +'amaya' '_webbrowser' +'analyseplugin' '_analyseplugin' +'android' '_android' +'animate' '_imagemagick' +'anno' '_mh' +'ansible' '_ansible' +'ansible-galaxy' '_ansible-galaxy' +'ansible-playbook' '_ansible-playbook' +'ant' '_ant' +'antiword' '_antiword' +'aoss' '_precommand' +'apache2ctl' '_apachectl' +'apachectl' '_apachectl' +'apm' '_apm' +'appletviewer' '_java' +'apropos' '_man' +'apt' '_apt' +'apt-cache' '_apt' +'apt-cdrom' '_apt' +'apt-config' '_apt' +'apt-file' '_apt-file' +'apt-get' '_apt' +'apt-mark' '_apt' +'apt-move' '_apt-move' +'apt-show-versions' '_apt-show-versions' +'aptitude' '_aptitude' +'apvlv' '_pdf' +'arena' '_webbrowser' +'arp' '_arp' +'arping' '_arping' +'artisan' '_artisan' +'at' '_at' +'atach' '_atach' +'atq' '_at' +'atrm' '_at' +'attr' '_attr' +'augtool' '_augeas' +'auto-apt' '_auto-apt' +'autoload' '_typeset' +'awk' '_awk' +'axi-cache' '_axi-cache' +'bash' '_sh' +'batch' '_at' +'baz' '_baz' +'beadm' '_beadm' +'bg' '_jobs_bg' +'bindkey' '_bindkey' +'bison' '_bison' +'bmake' '_make' +'bogofilter' '_bogofilter' +'bogotune' '_bogofilter' +'bogoutil' '_bogofilter' +'boot2docker' '_boot2docker' +'bower' '_bower' +'bpython' '_bpython' +'bpython2' '_bpython' +'brctl' '_brctl' +'brew' '_brew' +'bsdconfig' '_bsdconfig' +'bsdgrep' '_grep' +'bsdinstall' '_bsdinstall' +'btdownloadcurses' '_bittorrent' +'btdownloadgui' '_bittorrent' +'btdownloadheadless' '_bittorrent' +'btlaunchmany' '_bittorrent' +'btlaunchmanycurses' '_bittorrent' +'btmakemetafile' '_bittorrent' +'btreannounce' '_bittorrent' +'btrename' '_bittorrent' +'btrfs' '_btrfs' +'bts' '_bts' +'btshowmetainfo' '_bittorrent' +'bttrack' '_bittorrent' +'bug' '_bug' +'buildhash' '_ispell' +'builtin' '_builtin' +'bundle' '_bundle' +'bunzip2' '_bzip2' +'burst' '_mh' +'bzcat' '_bzip2' +'bzip2' '_bzip2' +'bzip2recover' '_bzip2' +'bzr' '_bzr' +'c++' '_gcc' +'cabal' '_cabal' +'cal' '_cal' +'calendar' '_calendar' +'cap' '_cap' +'cask' '_cask' +'cat' '_cat' +'catchsegv' '_precommand' +'cc' '_gcc' +'ccal' '_ccal' +'cd' '_cd' +'cdbs-edit-patch' '_cdbs-edit-patch' +'cdc' '_sccs' +'cdcd' '_cdcd' +'cdls' '_cdls_popdls_pushdls' +'cdr' '_cdr' +'cdrdao' '_cdrdao' +'cdrecord' '_cdrecord' +'celery' '_celery' +'certtool' '_gnutls' +'cftp' '_twisted' +'chage' '_users' +'chdir' '_cd' +'chflags' '_chflags' +'chfn' '_users' +'chgrp' '_chown' +'chimera' '_webbrowser' +'chkconfig' '_chkconfig' +'chmod' '_chmod' +'choc' '_choc' +'chown' '_chown' +'chpass' '_chsh' +'chrt' '_chrt' +'chsh' '_chsh' +'ci' '_rcs' +'ckeygen' '_twisted' +'clang' '_gcc' +'clang++' '_gcc' +'clay' '_clay' +'clear' '_nothing' +'cmake' '_cmake' +'cmp' '_cmp' +'co' '_rcs' +'coffee' '_coffee' +'comb' '_sccs' +'combine' '_imagemagick' +'comm' '_comm' +'command' '_command' +'comp' '_mh' +'compdef' '_compdef' +'composer' '_composer' +'composite' '_imagemagick' +'compress' '_compress' +'conch' '_twisted' +'config.status' '_configure' +'configure' '_configure' +'console' '_console' +'convert' '_imagemagick' +'coreadm' '_coreadm' +'cowsay' '_cowsay' +'cowthink' '_cowsay' +'cp' '_cp' +'cpanm' '_cpanm' +'cpio' '_cpio' +'cplay' '_cplay' +'createdb' '_pgsql_utils' +'createuser' '_pgsql_utils' +'crsh' '_cssh' +'cryptsetup' '_cryptsetup' +'csh' '_sh' +'cssh' '_cssh' +'csup' '_csup' +'curl' '_urls' +'cut' '_cut' +'cvs' '_cvs' +'cvsup' '_cvsup' +'cygcheck' '_cygcheck' +'cygcheck.exe' '_cygcheck' +'cygpath' '_cygpath' +'cygpath.exe' '_cygpath' +'cygrunsrv' '_cygrunsrv' +'cygrunsrv.exe' '_cygrunsrv' +'cygserver' '_cygserver' +'cygserver.exe' '_cygserver' +'cygstart' '_cygstart' +'cygstart.exe' '_cygstart' +'dak' '_dak' +'darcs' '_darcs' +'date' '_date' +'dbus-monitor' '_dbus' +'dbus-send' '_dbus' +'dch' '_debchange' +'dchroot' '_dchroot' +'dchroot-dsa' '_dchroot-dsa' +'dcop' '_dcop' +'dcopclient' '_dcop' +'dcopfind' '_dcop' +'dcopobject' '_dcop' +'dcopref' '_dcop' +'dcopstart' '_dcop' +'dcut' '_dcut' +'dd' '_dd' +'debchange' '_debchange' +'debdiff' '_debdiff' +'debfoster' '_debfoster' +'debsign' '_debsign' +'debuild' '_debuild' +'declare' '_typeset' +'defaults' '_defaults' +'delta' '_sccs' +'devtodo' '_devtodo' +'df' '_df' +'dget' '_dget' +'dhclient' '_dhclient' +'dhclient3' '_dhclient' +'dhcpcd' '_dhcpcd' +'dhcpinfo' '_dhcpinfo' +'dict' '_dict' +'diff' '_diff' +'diffstat' '_diffstat' +'dillo' '_webbrowser' +'dircmp' '_directories' +'dirs' '_dirs' +'disable' '_disable' +'disown' '_jobs_fg' +'display' '_imagemagick' +'dist' '_mh' +'ditz' '_ditz' +'django-admin' '_django' +'django-admin.py' '_manage.py' +'dladm' '_dladm' +'dlocate' '_dlocate' +'dmake' '_make' +'dmidecode' '_dmidecode' +'docker' '_docker' +'docker-compose' '_docker-compose' +'docker-machine' '_docker-machine' +'docpad' '_docpad' +'domainname' '_yp' +'dosdel' '_floppy' +'dosread' '_floppy' +'dpatch-edit-patch' '_dpatch-edit-patch' +'dpkg' '_dpkg' +'dpkg-buildpackage' '_dpkg-buildpackage' +'dpkg-cross' '_dpkg-cross' +'dpkg-deb' '_dpkg' +'dpkg-query' '_dpkg' +'dpkg-reconfigure' '_dpkg' +'dpkg-repack' '_dpkg-repack' +'dpkg-source' '_dpkg_source' +'dput' '_dput' +'dropdb' '_pgsql_utils' +'dropuser' '_pgsql_utils' +'drush' '_drush' +'dsh' '_dsh' +'dtrace' '_dtrace' +'du' '_du' +'dumpadm' '_dumpadm' +'dumper' '_dumper' +'dumper.exe' '_dumper' +'dupload' '_dupload' +'dut' '_dut' +'dvibook' '_dvi' +'dviconcat' '_dvi' +'dvicopy' '_dvi' +'dvidvi' '_dvi' +'dvipdf' '_dvi' +'dvips' '_dvi' +'dviselect' '_dvi' +'dvitodvi' '_dvi' +'dvitype' '_dvi' +'dwb' '_webbrowser' +'dzen2' '_dzen2' +'ecasound' '_ecasound' +'echotc' '_echotc' +'echoti' '_echoti' +'egrep' '_grep' +'elfdump' '_elfdump' +'elinks' '_elinks' +'elm' '_elm' +'emulate' '_emulate' +'emulator' '_emulator' +'enable' '_enable' +'enscript' '_enscript' +'env' '_env' +'epdfview' '_pdf' +'epsffit' '_psutils' +'erb' '_ruby' +'espeak' '_espeak' +'etags' '_etags' +'ethtool' '_ethtool' +'eu-nm' '_nm' +'eu-readelf' '_readelf' +'eval' '_precommand' +'eview' '_vim' +'evim' '_vim' +'evince' '_pspdf' +'exec' '_precommand' +'exim' '_vim' +'explodepkg' '_pkgtool' +'export' '_typeset' +'exportfs' '_exportfs' +'express' '_webbrowser' +'extcheck' '_java' +'extractres' '_psutils' +'fab' '_fab' +'fakeroot' '_fakeroot' +'false' '_nothing' +'fc' '_fc' +'fc-list' '_xft_fonts' +'fc-match' '_xft_fonts' +'feh' '_feh' +'fetch' '_fetch' +'fetchmail' '_fetchmail' +'ffmpeg' '_ffmpeg' +'fg' '_jobs_fg' +'fgrep' '_grep' +'figlet' '_figlet' +'find' '_find' +'findaffix' '_ispell' +'finger' '_finger' +'fink' '_fink' +'firefox' '_mozilla' +'fixdlsrps' '_psutils' +'fixfmps' '_psutils' +'fixmacps' '_psutils' +'fixpsditps' '_psutils' +'fixpspps' '_psutils' +'fixscribeps' '_psutils' +'fixtpps' '_psutils' +'fixwfwps' '_psutils' +'fixwpps' '_psutils' +'fixwwps' '_psutils' +'flasher' '_flasher' +'flex' '_flex' +'flist' '_mh' +'flists' '_mh' +'float' '_typeset' +'flowadm' '_flowadm' +'fmadm' '_fmadm' +'fned' '_zed' +'folder' '_mh' +'folders' '_mh' +'fortune' '_fortune' +'forw' '_mh' +'freebsd-make' '_make' +'freebsd-update' '_freebsd-update' +'fsh' '_fsh' +'fstat' '_fstat' +'ftp' '_hosts' +'functions' '_typeset' +'fuser' '_fuser' +'fusermount' '_fusermount' +'fwhois' '_whois' +'g++' '_gcc' +'galeon' '_webbrowser' +'gas' '_gas' +'gcc' '_gcc' +'gccgo' '_go' +'gchmod' '_chmod' +'gcmp' '_cmp' +'gcomm' '_comm' +'gcore' '_gcore' +'gcp' '_cp' +'gdate' '_date' +'gdb' '_gdb' +'gdiff' '_diff' +'gdu' '_du' +'geany' '_geany' +'gem' '_gem' +'gem1.9' '_gem' +'genisoimage' '_genisoimage' +'get' '_sccs' +'getafm' '_psutils' +'getclip' '_getclip' +'getclip.exe' '_getclip' +'getconf' '_getconf' +'getent' '_getent' +'getfacl' '_getfacl' +'getfacl.exe' '_getfacl' +'getfattr' '_attr' +'getmail' '_getmail' +'getopts' '_vars' +'gex' '_vim' +'gfind' '_find' +'ggv' '_gnome-gv' +'gh' '_github' +'ghc' '_ghc' +'ghc-pkg' '_ghc' +'ghci' '_ghc' +'ghostscript' '_gs' +'ghostview' '_pspdf' +'gid' '_id' +'gist' '_gist' +'git' '_git' +'git-buildpackage' '_git-buildpackage' +'git-cvsserver' '_git' +'git-flow' '_git-flow' +'git-hub-browse' '_git-hub-browse' +'git-hub-shorten-url' '_git-hub-shorten-url' +'git-info' '_git-info' +'git-pulls' '_git-pulls' +'git-receive-pack' '_git' +'git-shell' '_git' +'git-submodule-move' '_git-submodule-move' +'git-submodule-remove' '_git-submodule-remove' +'git-upload-archive' '_git' +'git-upload-pack' '_git' +'git-wtf' '_git-wtf' +'github' '_github' +'gitk' '_git' +'gjoin' '_join' +'glances' '_glances' +'gln' '_ln' +'global' '_global' +'gls' '_ls' +'gm' '_graphicsmagick' +'gmake' '_make' +'gmd5sum' '_md5sum' +'gmkdir' '_mkdir' +'gmplayer' '_mplayer' +'gnome-gv' '_gnome-gv' +'gnupod_INIT' '_gnupod' +'gnupod_INIT.pl' '_gnupod' +'gnupod_addsong' '_gnupod' +'gnupod_addsong.pl' '_gnupod' +'gnupod_check' '_gnupod' +'gnupod_check.pl' '_gnupod' +'gnupod_search' '_gnupod' +'gnupod_search.pl' '_gnupod' +'gnutls-cli' '_gnutls' +'gnutls-cli-debug' '_gnutls' +'god' '_od' +'gofmt' '_go' +'google' '_google' +'gpatch' '_patch' +'gpg' '_gpg' +'gpg-zip' '_gpg' +'gpg2' '_gpg' +'gpgv' '_gpg' +'gphoto2' '_gphoto2' +'gprof' '_gprof' +'gqview' '_gqview' +'gradle' '_gradle' +'gradlew' '_gradle' +'grail' '_webbrowser' +'grep' '_grep' +'grep-excuses' '_grep-excuses' +'grm' '_rm' +'groff' '_groff' +'groupadd' '_user_admin' +'groupdel' '_groups' +'groupmod' '_user_admin' +'groups' '_users' +'growisofs' '_growisofs' +'gs' '_gs' +'gsbj' '_pspdf' +'gsdj' '_pspdf' +'gsdj500' '_pspdf' +'gsed' '_sed' +'gslj' '_pspdf' +'gslp' '_pspdf' +'gsnd' '_pspdf' +'gsort' '_sort' +'gtar' '_tar' +'guilt' '_guilt' +'guilt-add' '_guilt' +'guilt-applied' '_guilt' +'guilt-delete' '_guilt' +'guilt-files' '_guilt' +'guilt-fold' '_guilt' +'guilt-fork' '_guilt' +'guilt-header' '_guilt' +'guilt-help' '_guilt' +'guilt-import' '_guilt' +'guilt-import-commit' '_guilt' +'guilt-init' '_guilt' +'guilt-new' '_guilt' +'guilt-next' '_guilt' +'guilt-patchbomb' '_guilt' +'guilt-pop' '_guilt' +'guilt-prev' '_guilt' +'guilt-push' '_guilt' +'guilt-rebase' '_guilt' +'guilt-refresh' '_guilt' +'guilt-rm' '_guilt' +'guilt-series' '_guilt' +'guilt-status' '_guilt' +'guilt-top' '_guilt' +'guilt-unapplied' '_guilt' +'guniq' '_uniq' +'gunzip' '_gzip' +'gv' '_gv' +'gview' '_vim' +'gvim' '_vim' +'gvimdiff' '_vim' +'gwc' '_wc' +'gxargs' '_xargs' +'gzcat' '_gzip' +'gzilla' '_webbrowser' +'gzip' '_gzip' +'hash' '_hash' +'hdiutil' '_hdiutil' +'help' '_sccs' +'heroku' '_heroku' +'hg' '_hg' +'hilite' '_precommand' +'history' '_fc' +'hledger' '_hledger' +'host' '_hosts' +'hotjava' '_webbrowser' +'http' '_httpie' +'hwinfo' '_hwinfo' +'iceweasel' '_mozilla' +'icombine' '_ispell' +'iconv' '_iconv' +'id' '_id' +'id3' '_id3' +'id3v2' '_id3v2' +'identify' '_imagemagick' +'ifconfig' '_ifconfig' +'ifdown' '_net_interfaces' +'iftop' '_iftop' +'ifup' '_net_interfaces' +'ijoin' '_ispell' +'import' '_imagemagick' +'inc' '_mh' +'includeres' '_psutils' +'inetadm' '_inetadm' +'info' '_texinfo' +'infocmp' '_terminals' +'initctl' '_initctl' +'initdb' '_pgsql_utils' +'insmod' '_modutils' +'install-info' '_texinfo' +'installpkg' '_pkgtool' +'integer' '_typeset' +'invoke-rc.d' '_invoke-rc.d' +'ionice' '_ionice' +'ip' '_ip' +'ipadm' '_ipadm' +'ipset' '_ipset' +'iptables' '_iptables' +'iptables-restore' '_iptables' +'iptables-save' '_iptables' +'irb' '_ruby' +'irssi' '_irssi' +'ispell' '_ispell' +'iw' '_iw' +'iwconfig' '_iwconfig' +'jadetex' '_tex' +'jar' '_java' +'jarsigner' '_java' +'java' '_java' +'javac' '_java' +'javadoc' '_java' +'javah' '_java' +'javap' '_java' +'jdb' '_java' +'jekyll' '_jekyll' +'jexec' '_jexec' +'jls' '_jls' +'jmeter' '_jmeter' +'jmeter-plugins' '_jmeter-plugins' +'jobs' '_jobs_builtin' +'joe' '_joe' +'join' '_join' +'jonas' '_jonas' +'jq' '_jq' +'keytool' '_java' +'kfmclient' '_kfmclient' +'kill' '_kill' +'killall' '_killall' +'killall5' '_killall' +'kioclient' '_kfmclient' +'kitchen' '_kitchen' +'kldload' '_kld' +'kldunload' '_kld' +'knife' '_knife' +'knock' '_knock' +'konqueror' '_webbrowser' +'kpdf' '_pdf' +'ksh' '_sh' +'kvno' '_kvno' +'last' '_last' +'lastb' '_last' +'latex' '_tex' +'latexmk' '_tex' +'ldd' '_ldd' +'lein' '_lein' +'less' '_less' +'let' '_math' +'lftp' '_ncftp' +'lha' '_lha' +'light' '_webbrowser' +'lighty-disable-mod' '_lighttpd' +'lighty-enable-mod' '_lighttpd' +'limit' '_limit' +'lin' '_lunar' +'links' '_links' +'lintian' '_lintian' +'lintian-info' '_lintian' +'linux' '_uml' +'llvm-g++' '_gcc' +'llvm-gcc' '_gcc' +'ln' '_ln' +'loadkeys' '_loadkeys' +'local' '_typeset' +'locate' '_locate' +'log' '_nothing' +'logger' '_logger' +'logname' '_nothing' +'look' '_look' +'lore' '_twisted' +'losetup' '_losetup' +'lp' '_lp' +'lpadmin' '_lp' +'lpinfo' '_lp' +'lpoptions' '_lp' +'lpq' '_lp' +'lpr' '_lp' +'lprm' '_lp' +'lpstat' '_lp' +'lrm' '_lunar' +'ls' '_ls' +'lscfg' '_lscfg' +'lsdev' '_lsdev' +'lslv' '_lslv' +'lsmod' '_modutils' +'lsof' '_lsof' +'lspv' '_lspv' +'lsusb' '_lsusb' +'lsvg' '_lsvg' +'lunar' '_lunar' +'lunchy' '_lunchy' +'lvu' '_lunar' +'lynx' '_lynx' +'lzcat' '_xz' +'lzma' '_xz' +'lzop' '_lzop' +'m-a' '_module-assistant' +'macgem' '_gem' +'madison' '_madison' +'mail' '_mail' +'mailx' '_mail' +'make' '_make' +'make-kpkg' '_make-kpkg' +'makeinfo' '_texinfo' +'makepkg' '_pkgtool' +'man' '_man' +'manage.py' '_manage.py' +'mand' '_manb_mand_manp' +'manhole' '_twisted' +'manp' '_manb_mand_manp' +'mark' '_mh' +'matlab' '_matlab' +'mattrib' '_mtools' +'mcd' '_mtools' +'mcopy' '_mtools' +'md5sum' '_md5sum' +'mdadm' '_mdadm' +'mdel' '_mtools' +'mdeltree' '_mtools' +'mdir' '_mtools' +'mdu' '_mtools' +'members' '_members' +'mencal' '_mencal' +'mere' '_mere' +'merge' '_rcs' +'mergechanges' '_mergechanges' +'metaflac' '_metaflac' +'mformat' '_mtools' +'mgv' '_pspdf' +'mhlist' '_mh' +'mhmail' '_mh' +'mhn' '_mh' +'mhparam' '_mh' +'mhpath' '_mh' +'mhshow' '_mh' +'mhstore' '_mh' +'middleman' '_middleman' +'mii-tool' '_mii-tool' +'mina' '_mina' +'mixerctl' '_mixerctl' +'mkdcd' '_mkdcd' +'mkdir' '_mkdir' +'mkisofs' '_growisofs' +'mkshortcut' '_mkshortcut' +'mkshortcut.exe' '_mkshortcut' +'mktunes' '_gnupod' +'mktunes.pl' '_gnupod' +'mkzsh' '_mkzsh' +'mkzsh.exe' '_mkzsh' +'mlabel' '_mtools' +'mlocate' '_locate' +'mmd' '_mtools' +'mmm' '_webbrowser' +'mmount' '_mtools' +'mmove' '_mtools' +'modinfo' '_modutils' +'modprobe' '_modutils' +'module' '_module' +'module-assistant' '_module-assistant' +'mogrify' '_imagemagick' +'mondoarchive' '_mondo' +'montage' '_imagemagick' +'moosic' '_moosic' +'mosh' '_mosh' +'mount' '_mount' +'mozilla' '_mozilla' +'mozilla-firefox' '_mozilla' +'mozilla-xremote-client' '_mozilla' +'mpc' '_mpc' +'mplayer' '_mplayer' +'mrd' '_mtools' +'mread' '_mtools' +'mren' '_mtools' +'msgchk' '_mh' +'mt' '_mt' +'mtn' '_monotone' +'mtoolstest' '_mtools' +'mtr' '_mtr' +'mtype' '_mtools' +'munchlist' '_ispell' +'mush' '_mail' +'mussh' '_mussh' +'mutt' '_mutt' +'mux' '_tmuxinator' +'mvn' '_mvn' +'mvnDebug' '_mvn' +'mx' '_hosts' +'mysql' '_mysql_utils' +'mysqladmin' '_mysql_utils' +'mysqldiff' '_mysqldiff' +'mysqldump' '_mysql_utils' +'mysqlimport' '_mysql_utils' +'mysqlshow' '_mysql_utils' +'nail' '_mail' +'native2ascii' '_java' +'nautilus' '_nautilus' +'nc' '_netcat' +'ncal' '_cal' +'ncftp' '_ncftp' +'ncl' '_nedit' +'nedit' '_nedit' +'nedit-nc' '_nedit' +'netcat' '_netcat' +'netrik' '_webbrowser' +'netscape' '_netscape' +'netstat' '_netstat' +'newgrp' '_groups' +'next' '_mh' +'nice' '_nice' +'nkf' '_nkf' +'nl' '_nl' +'nm' '_nm' +'nmap' '_nmap' +'nmblookup' '_samba' +'nmcli' '_nmcli' +'nocorrect' '_precommand' +'node' '_node' +'noglob' '_precommand' +'nohup' '_precommand' +'notmuch' '_notmuch' +'npm' '_npm' +'ns' '_hosts' +'nslookup' '_nslookup' +'ntalk' '_other_accounts' +'nvim' '_vim' +'nvm' '_nvm' +'od' '_od' +'odme' '_object_classes' +'odmget' '_object_classes' +'odmshow' '_object_classes' +'ogg123' '_vorbis' +'oggdec' '_vorbis' +'oggenc' '_vorbis' +'ogginfo' '_vorbis' +'okular' '_okular' +'open' '_open' +'opera' '_webbrowser' +'opera-next' '_webbrowser' +'optirun' '_optirun' +'osc' '_osc' +'p4' '_perforce' +'p4d' '_perforce' +'pack' '_pack' +'packf' '_mh' +'pactree' '_pactree' +'parsehdlist' '_urpmi' +'passwd' '_users' +'patch' '_patch' +'pax' '_pax' +'pbuilder' '_pbuilder' +'pcat' '_pack' +'pcred' '_pids' +'pdf2dsc' '_pdf' +'pdf2ps' '_pdf' +'pdffonts' '_pdf' +'pdfimages' '_pdf' +'pdfinfo' '_pdf' +'pdfjadetex' '_tex' +'pdflatex' '_tex' +'pdfopt' '_pdf' +'pdftex' '_tex' +'pdftk' '_pdftk' +'pdftopbm' '_pdf' +'pdftops' '_pdf' +'pdftotext' '_pdf' +'pear' '_pear' +'perf' '_perf' +'periscope' '_periscope' +'perl' '_perl' +'perldoc' '_perldoc' +'pfctl' '_pfctl' +'pfexec' '_pfexec' +'pfiles' '_pids' +'pflags' '_pids' +'pg_dump' '_pgsql_utils' +'pg_dumpall' '_pgsql_utils' +'pg_restore' '_pgsql_utils' +'pgrep' '_pgrep' +'phing' '_phing' +'php' '_php' +'pick' '_mh' +'pine' '_pine' +'pinef' '_pine' +'ping' '_ping' +'piuparts' '_piuparts' +'pkcon' '_pkcon' +'pkg' '_pkg5' +'pkg-config' '_pkg-config' +'pkg_add' '_bsd_pkg' +'pkg_create' '_bsd_pkg' +'pkg_delete' '_bsd_pkg' +'pkg_info' '_bsd_pkg' +'pkgadd' '_pkgadd' +'pkginfo' '_pkginfo' +'pkgrm' '_pkgrm' +'pkgtool' '_pkgtool' +'pkill' '_pgrep' +'play' '_play' +'pldd' '_pids' +'pmake' '_make' +'pman' '_perl_modules' +'pmap' '_pids' +'pmcat' '_perl_modules' +'pmdesc' '_perl_modules' +'pmeth' '_perl_modules' +'pmexp' '_perl_modules' +'pmfunc' '_perl_modules' +'pmload' '_perl_modules' +'pmls' '_perl_modules' +'pmpath' '_perl_modules' +'pmvers' '_perl_modules' +'podgrep' '_perl_modules' +'podpath' '_perl_modules' +'podtoc' '_perl_modules' +'poff' '_pon' +'policytool' '_java' +'pon' '_pon' +'popd' '_directory_stack' +'popdls' '_cdls_popdls_pushdls' +'port' '_port' +'portaudit' '_portaudit' +'portlint' '_portlint' +'portmaster' '_portmaster' +'portsnap' '_portsnap' +'postsuper' '_postfix' +'powerd' '_powerd' +'prcs' '_prcs' +'prep' '_prep' +'prev' '_mh' +'print' '_print' +'printenv' '_printenv' +'printf' '_print' +'procstat' '_procstat' +'prompt' '_prompt' +'prove' '_prove' +'prs' '_sccs' +'prstat' '_prstat' +'prt' '_sccs' +'prun' '_pids' +'ps' '_ps' +'ps2ascii' '_pspdf' +'ps2epsi' '_postscript' +'ps2pdf' '_postscript' +'ps2pdf12' '_postscript' +'ps2pdf13' '_postscript' +'ps2pdf14' '_postscript' +'ps2pdfwr' '_postscript' +'ps2ps' '_postscript' +'psbook' '_psutils' +'pscp' '_pscp' +'pscp.exe' '_pscp' +'psed' '_sed' +'psig' '_pids' +'psmerge' '_psutils' +'psmulti' '_postscript' +'psnup' '_psutils' +'psql' '_pgsql_utils' +'psresize' '_psutils' +'psselect' '_psutils' +'pstack' '_pids' +'pstoedit' '_pspdf' +'pstop' '_pids' +'pstops' '_psutils' +'pstotgif' '_pspdf' +'psub' '_psub' +'pswrap' '_postscript' +'ptree' '_ptree' +'pump' '_pump' +'pushd' '_cd' +'pushdls' '_cdls_popdls_pushdls' +'putclip' '_putclip' +'putclip.exe' '_putclip' +'pwait' '_pids' +'pwdx' '_pids' +'pygmentize' '_pygmentize' +'pyhtmlizer' '_twisted' +'qdbus' '_qdbus' +'qiv' '_qiv' +'qtplay' '_qtplay' +'querybts' '_bug' +'quilt' '_quilt' +'r' '_fc' +'raggle' '_raggle' +'rails' '_rails' +'rake' '_rake' +'ralio' '_ralio' +'ranlib' '_ranlib' +'rar' '_rar' +'rc' '_sh' +'rcp' '_rlogin' +'rcs' '_rcs' +'rcsdiff' '_rcs' +'rdesktop' '_rdesktop' +'read' '_read' +'readelf' '_readelf' +'readonly' '_typeset' +'readshortcut' '_readshortcut' +'readshortcut.exe' '_readshortcut' +'rebootin' '_rebootin' +'rec' '_redis-cli' +'redis-cli' '_redis-cli' +'refile' '_mh' +'rehash' '_hash' +'reload' '_initctl' +'removepkg' '_pkgtool' +'remsh' '_rlogin' +'renice' '_renice' +'repl' '_mh' +'reportbug' '_bug' +'reprepro' '_reprepro' +'restart' '_initctl' +'retawq' '_webbrowser' +'rfkill' '_rfkill' +'rgview' '_vim' +'rgvim' '_vim' +'ri' '_ri' +'rlogin' '_rlogin' +'rm' '_rm' +'rmadison' '_madison' +'rmdel' '_sccs' +'rmdir' '_directories' +'rmf' '_mh' +'rmic' '_java' +'rmid' '_java' +'rmiregistry' '_java' +'rmm' '_mh' +'rmmod' '_modutils' +'rpm' '_rpm' +'rpmbuild' '_rpmbuild' +'rrdtool' '_rrdtool' +'rsh' '_rlogin' +'rspec' '_rspec' +'rsync' '_rsync' +'rtin' '_tin' +'rubber' '_rubber' +'rubber-info' '_rubber' +'rubber-pipe' '_rubber' +'rubocop' '_rubocop' +'ruby' '_ruby' +'run-help' '_run-help' +'rup' '_hosts' +'rusage' '_precommand' +'rview' '_vim' +'rvim' '_vim' +'rvm' '_rvm' +'rwho' '_hosts' +'rxvt' '_urxvt' +'s2p' '_sed' +'sabcmd' '_sablotron' +'sact' '_sccs' +'savecore' '_savecore' +'sbt' '_sbt' +'scala' '_scala' +'scalac' '_scala' +'scan' '_mh' +'sccs' '_sccs' +'sccsdiff' '_sccs' +'sched' '_sched' +'schedtool' '_schedtool' +'schroot' '_schroot' +'scp' '_ssh' +'screen' '_screen' +'sdd' '_sdd' +'sed' '_sed' +'serialver' '_java' +'service' '_service' +'set' '_set' +'setfacl' '_setfacl' +'setfacl.exe' '_setfacl' +'setfattr' '_attr' +'setopt' '_setopt' +'setup.py' '_setup.py' +'sftp' '_ssh' +'sh' '_sh' +'shift' '_arrays' +'show' '_mh' +'showchar' '_psutils' +'showmount' '_showmount' +'showoff' '_showoff' +'shutdown' '_shutdown' +'sisu' '_sisu' +'skipstone' '_webbrowser' +'slitex' '_tex' +'slocate' '_locate' +'slogin' '_ssh' +'slrn' '_slrn' +'smartctl' '_smartmontools' +'smartd' '_smartmontools' +'smbclient' '_samba' +'smbcontrol' '_samba' +'smbstatus' '_samba' +'smit' '_smit' +'smitty' '_smit' +'snoop' '_snoop' +'soa' '_hosts' +'socat' '_socat' +'socket' '_socket' +'sockstat' '_sockstat' +'softwareupdate' '_softwareupdate' +'sort' '_sort' +'sortm' '_mh' +'source' '_source' +'spamassassin' '_spamassassin' +'sqlite' '_sqlite' +'sqlite3' '_sqlite' +'sqsh' '_sqsh' +'sr' '_surfraw' +'srm' '_srm' +'srptool' '_gnutls' +'ss' '_ss' +'ssh' '_ssh' +'ssh-add' '_ssh' +'ssh-agent' '_ssh' +'ssh-copy-id' '_ssh-copy-id' +'ssh-keygen' '_ssh' +'sshfs' '_sshfs' +'stack' '_stack' +'star' '_tar' +'start' '_initctl' +'stat' '_stat' +'status' '_initctl' +'stg' '_stgit' +'stop' '_initctl' +'strace' '_strace' +'strip' '_strip' +'stty' '_stty' +'su' '_su' +'subliminal' '_subliminal' +'sudo' '_sudo' +'sudoedit' '_sudo' +'surfraw' '_surfraw' +'sv' '_runit' +'svcadm' '_svcadm' +'svccfg' '_svccfg' +'svcprop' '_svcprop' +'svcs' '_svcs' +'svm' '_svm' +'svn' '_subversion' +'svn-buildpackage' '_svn-buildpackage' +'svnadmin' '_subversion' +'svnadmin-static' '_subversion' +'symfony' '_symfony' +'sync' '_nothing' +'sysctl' '_sysctl' +'system_profiler' '_system_profiler' +'systemctl' '_systemd' +'systemd-loginctl' '_systemd' +'talk' '_other_accounts' +'tap2deb' '_twisted' +'tap2rpm' '_twisted' +'tapconvert' '_twisted' +'tar' '_tar' +'tardy' '_tardy' +'tcp_open' '_tcpsys' +'tcpdump' '_tcpdump' +'tcptraceroute' '_tcptraceroute' +'tcsh' '_sh' +'tda' '_devtodo' +'tdd' '_devtodo' +'tde' '_devtodo' +'tdr' '_devtodo' +'teamocil' '_teamocil' +'telnet' '_telnet' +'tex' '_tex' +'texi2dvi' '_texinfo' +'texindex' '_texinfo' +'tg' '_topgit' +'thor' '_thor' +'tidy' '_tidy' +'tig' '_git' +'time' '_precommand' +'times' '_nothing' +'tin' '_tin' +'tkconch' '_twisted' +'tkinfo' '_texinfo' +'tla' '_tla' +'tmux' '_tmux' +'tmuxinator' '_tmuxinator' +'todo' '_devtodo' +'todo.sh' '_todo.sh' +'toilet' '_toilet' +'totdconfig' '_totd' +'tpb' '_tpb' +'tpconfig' '_tpconfig' +'tpkg-debarch' '_toolchain-source' +'tpkg-install' '_toolchain-source' +'tpkg-install-libc' '_toolchain-source' +'tpkg-make' '_toolchain-source' +'tpkg-update' '_toolchain-source' +'tracepath' '_tracepath' +'tracepath6' '_tracepath' +'traceroute' '_hosts' +'trap' '_trap' +'tree' '_tree' +'trial' '_twisted' +'true' '_nothing' +'tryaffix' '_ispell' +'ttyctl' '_ttyctl' +'tunctl' '_uml' +'tune2fs' '_tune2fs' +'tunes2pod' '_gnupod' +'tunes2pod.pl' '_gnupod' +'twidge' '_twidge' +'twistd' '_twisted' +'txt' '_hosts' +'type' '_which' +'typeset' '_typeset' +'ulimit' '_ulimit' +'uml_mconsole' '_uml' +'uml_moo' '_uml' +'uml_switch' '_uml' +'umount' '_mount' +'unace' '_unace' +'unalias' '_aliases' +'uname' '_uname' +'uncompress' '_compress' +'unexpand' '_unexpand' +'unfunction' '_functions' +'unget' '_sccs' +'unhash' '_unhash' +'uniq' '_uniq' +'unison' '_unison' +'units' '_units' +'unlimit' '_limits' +'unlzma' '_xz' +'unpack' '_pack' +'unrar' '_rar' +'unset' '_vars' +'unsetopt' '_setopt' +'unxz' '_xz' +'unzip' '_zip' +'update-alternatives' '_update-alternatives' +'update-rc.d' '_update-rc.d' +'upgradepkg' '_pkgtool' +'urpme' '_urpmi' +'urpmf' '_urpmi' +'urpmi' '_urpmi' +'urpmi.addmedia' '_urpmi' +'urpmi.removemedia' '_urpmi' +'urpmi.update' '_urpmi' +'urpmq' '_urpmi' +'urxvt' '_urxvt' +'urxvt256c' '_urxvt' +'urxvt256c-ml' '_urxvt' +'urxvt256c-mlc' '_urxvt' +'urxvt256cc' '_urxvt' +'urxvtc' '_urxvt' +'uscan' '_uscan' +'useradd' '_user_admin' +'userdel' '_users' +'usermod' '_user_admin' +'uzbl' '_uzbl' +'uzbl-browser' '_uzbl' +'uzbl-tabbed' '_uzbl' +'vacuumdb' '_pgsql_utils' +'vagrant' '_vagrant' +'val' '_sccs' +'valgrind' '_valgrind' +'vared' '_vared' +'vcsh' '_vcsh' +'veewee' '_veewee' +'vim' '_vim' +'vim-addons' '_vim-addons' +'vimdiff' '_vim' +'virsh' '_virsh' +'vncserver' '_vnc' +'vncviewer' '_vnc' +'vnstat' '_vnstat' +'vorbiscomment' '_vorbiscomment' +'vpnc' '_vpnc' +'vpnc-connect' '_vpnc' +'vpnc-disconnect' '_vpnc' +'vserver' '_vserver' +'vux' '_vux' +'vuxctl' '_vux' +'w3m' '_w3m' +'wait' '_wait' +'wajig' '_wajig' +'wanna-build' '_wanna-build' +'watch' '_watch' +'wc' '_wc' +'wemux' '_wemux' +'wget' '_wget' +'what' '_sccs' +'whatis' '_man' +'whence' '_which' +'where' '_which' +'whereis' '_whereis' +'which' '_which' +'whoami' '_nothing' +'whois' '_whois' +'whom' '_mh' +'wiggle' '_wiggle' +'wodim' '_cdrecord' +'wpa_cli' '_wpa_cli' +'write' '_users_on' +'www' '_webbrowser' +'xargs' '_xargs' +'xauth' '_xauth' +'xautolock' '_xautolock' +'xclip' '_xclip' +'xdpyinfo' '_x_utils' +'xdvi' '_xdvi' +'xelatex' '_tex' +'xetex' '_tex' +'xev' '_x_utils' +'xfd' '_x_utils' +'xfig' '_xfig' +'xfontsel' '_x_utils' +'xhost' '_x_utils' +'xinput' '_xinput' +'xkill' '_x_utils' +'xli' '_xloadimage' +'xloadimage' '_xloadimage' +'xlsatoms' '_x_utils' +'xmllint' '_xmlsoft' +'xmms2' '_xmms2' +'xmodmap' '_xmodmap' +'xmosaic' '_webbrowser' +'xon' '_x_utils' +'xournal' '_xournal' +'xpdf' '_xpdf' +'xping' '_hosts' +'xprop' '_x_utils' +'xrandr' '_xrandr' +'xrdb' '_x_utils' +'xscreensaver-command' '_xscreensaver' +'xset' '_xset' +'xsetbg' '_xloadimage' +'xsetroot' '_x_utils' +'xsltproc' '_xmlsoft' +'xterm' '_xterm' +'xtightvncviewer' '_vnc' +'xtp' '_imagemagick' +'xv' '_xv' +'xview' '_xloadimage' +'xvnc4viewer' '_vnc' +'xvncviewer' '_vnc' +'xwd' '_x_utils' +'xwininfo' '_x_utils' +'xwit' '_xwit' +'xwud' '_x_utils' +'xxd' '_xxd' +'xz' '_xz' +'xzcat' '_xz' +'yaourt' '_yaourt' +'yaourt.static' '_yaourt' +'yast' '_yast' +'yast2' '_yast' +'ypbind' '_yp' +'ypcat' '_yp' +'ypmatch' '_yp' +'yppasswd' '_yp' +'yppoll' '_yp' +'yppush' '_yp' +'ypserv' '_yp' +'ypset' '_yp' +'ypwhich' '_yp' +'ypxfr' '_yp' +'ytalk' '_other_accounts' +'yum' '_yum' +'zargs' '_zargs' +'zathura' '_pspdf' +'zcalc' '_zcalc' +'zcat' '_zcat' +'zcompile' '_zcompile' +'zcp' '_zmv' +'zdelattr' '_zattr' +'zdump' '_zdump' +'zed' '_zed' +'zegrep,' '_grep' +'zen' '_webbrowser' +'zf_chgrp' '_chown' +'zf_chown' '_chown' +'zf_ln' '_ln' +'zf_mkdir' '_mkdir' +'zf_rm' '_rm' +'zf_rmdir' '_directories' +'zfgrep' '_grep' +'zfs' '_zfs' +'zgetattr' '_zattr' +'zgrep,' '_grep' +'zip' '_zip' +'zipinfo' '_zip' +'zle' '_zle' +'zlistattr' '_zattr' +'zln' '_zmv' +'zlogin' '_zlogin' +'zmail' '_mail' +'zmodload' '_zmodload' +'zmv' '_zmv' +'zone' '_hosts' +'zoneadm' '_zoneadm' +'zpool' '_zpool' +'zpty' '_zpty' +'zsetattr' '_zattr' +'zsh' '_sh' +'zsh-mime-handler' '_zsh-mime-handler' +'zstat' '_stat' +'zstyle' '_zstyle' +'ztodo' '_ztodo' +'zxpdf' '_xpdf' +'zypper' '_zypper' +) + +_services=( +'-redirect-,<,bunzip2' 'bunzip2' +'-redirect-,<,bzip2' 'bzip2' +'-redirect-,<,compress' 'compress' +'-redirect-,<,gunzip' 'gunzip' +'-redirect-,<,gzip' 'gzip' +'-redirect-,<,uncompress' 'uncompress' +'-redirect-,<,unxz' 'unxz' +'-redirect-,<,xz' 'xz' +'-redirect-,>,bzip2' 'bunzip2' +'-redirect-,>,compress' 'uncompress' +'-redirect-,>,gzip' 'gunzip' +'-redirect-,>,xz' 'unxz' +'Mail' 'mail' +'VBoxHeadless' 'vboxheadless' +'VBoxManage' 'vboxmanage' +'bzcat' 'bunzip2' +'dch' 'debchange' +'gnupod_INIT.pl' 'gnupod_INIT' +'gnupod_addsong.pl' 'gnupod_addsong' +'gnupod_check.pl' 'gnupod_check' +'gnupod_search.pl' 'gnupod_search' +'gpg2' 'gpg' +'gzcat' 'gunzip' +'iceweasel' 'firefox' +'lzcat' 'unxz' +'lzma' 'xz' +'mailx' 'mail' +'mktunes.pl' 'mktunes' +'nail' 'mail' +'ncl' 'nc' +'nedit-nc' 'nc' +'pcat' 'unpack' +'remsh' 'rsh' +'slogin' 'ssh' +'svnadmin-static' 'svnadmin' +'tunes2pod.pl' 'tunes2pod' +'unlzma' 'unxz' +'xelatex' 'latex' +'xetex' 'tex' +'xzcat' 'unxz' +'yaourt.static' 'yaourt' +'zf_chgrp' 'chgrp' +'zf_chown' 'chown' +) + +_patcomps=( +'*/(init|rc[0-9S]#).d/*' '_init_d' +'zf*' '_zftp' +) + +_postpatcomps=( +'(p[bgpn]m*|*top[bgpn]m)' '_pbm' +'(ruby|[ei]rb)[0-9.]#' '_ruby' +'(texi(2*|ndex))' '_texi' +'(tiff*|*2tiff|pal2rgb)' '_tiff' +'(|cifs)iostat' '_sysstat' +'*/X11(|R<4->)/*' '_x_arguments' +'-value-,(ftp|http(|s))_proxy,-default-' '_urls' +'-value-,*PATH,-default-' '_dir_list' +'-value-,*path,-default-' '_directories' +'-value-,LC_*,-default-' '_locales' +'-value-,RUBY(LIB|OPT|PATH),-default-' '_ruby' +'isag' '_sysstat' +'mpstat' '_sysstat' +'pidstat' '_sysstat' +'pydoc[0-9.]#' '_pydoc' +'python[0-9.]#' '_python' +'qemu(|-system-*)' '_qemu' +'sadf' '_sysstat' +'sar' '_sysstat' +'yodl(|2*)' '_yodl' +) + +_compautos=( +'_call_program' '+X' +) + +zle -C _bash_complete-word .complete-word _bash_completions +zle -C _bash_list-choices .list-choices _bash_completions +zle -C _complete_debug .complete-word _complete_debug +zle -C _complete_help .complete-word _complete_help +zle -C _complete_tag .complete-word _complete_tag +zle -C _correct_filename .complete-word _correct_filename +zle -C _correct_word .complete-word _correct_word +zle -C _expand_alias .complete-word _expand_alias +zle -C _expand_word .complete-word _expand_word +zle -C _history-complete-newer .complete-word _history_complete_word +zle -C _history-complete-older .complete-word _history_complete_word +zle -C _list_expansions .list-choices _expand_word +zle -C _most_recent_file .complete-word _most_recent_file +zle -C _next_tags .list-choices _next_tags +zle -C _read_comp .complete-word _read_comp +bindkey '^X^R' _read_comp +bindkey '^X?' _complete_debug +bindkey '^XC' _correct_filename +bindkey '^Xa' _expand_alias +bindkey '^Xc' _correct_word +bindkey '^Xd' _list_expansions +bindkey '^Xe' _expand_word +bindkey '^Xh' _complete_help +bindkey '^Xm' _most_recent_file +bindkey '^Xn' _next_tags +bindkey '^Xt' _complete_tag +bindkey '^X~' _bash_list-choices +bindkey '^[,' _history-complete-newer +bindkey '^[/' _history-complete-older +bindkey '^[~' _bash_complete-word + +autoload -Uz _SUSEconfig _a2ps _a2utils _aap _ack \ + _acpi _acpitool _acroread _adb _add-zsh-hook \ + _ag _alias _aliases _all_labels _all_matches \ + _alternative _analyseplugin _android _ansible _ansible-galaxy \ + _ansible-playbook _ant _antiword _apachectl _apm \ + _approximate _apt _apt-file _apt-move _apt-show-versions \ + _aptitude _arch_archives _arch_namespace _arg_compile _arguments \ + _arp _arping _arrays _artisan _assign \ + _at _atach _attr _augeas _auto-apt \ + _autocd _awk _axi-cache _bash_completions _baz \ + _be_name _beadm _bind_addresses _bindkey _bison \ + _bittorrent _bogofilter _boot2docker _bower _bpython \ + _brace_parameter _brctl _brew _bsd_pkg _bsdconfig \ + _bsdinstall _btrfs _bts _bug _builtin \ + _bundle _bzip2 _bzr _cabal _cache_invalid \ + _cal _calendar _call_function _canonical_paths _cap \ + _cask _cat _ccal _cd _cdbs-edit-patch \ + _cdcd _cdls_popdls_pushdls _cdr _cdrdao _cdrecord \ + _celery _chflags _chkconfig _chmod _choc \ + _chown _chrt _chsh _clay _cmake \ + _cmdstring _cmp _coffee _combination _comm \ + _command _command_names _comp_locale _compdef _complete \ + _complete_debug _complete_help _complete_help_generic _complete_tag _composer \ + _compress _condition _configure _console _coreadm \ + _correct _correct_filename _correct_word _cowsay _cp \ + _cpanm _cpio _cplay _cryptsetup _cssh \ + _csup _ctags_tags _cut _cvs _cvsup \ + _cygcheck _cygpath _cygrunsrv _cygserver _cygstart \ + _dak _darcs _date _dbus _dchroot \ + _dchroot-dsa _dcop _dcut _dd _deb_architectures \ + _deb_packages _debchange _debdiff _debfoster _debsign \ + _debuild _default _defaults _delimiters _describe \ + _description _devtodo _df _dget _dhclient \ + _dhcpcd _dhcpinfo _dict _dict_words _diff \ + _diff_options _diffstat _dir_list _directories _directory_stack \ + _dirs _disable _dispatch _ditz _django \ + _dladm _dlocate _dmidecode _docker _docker-compose \ + _docker-machine _docpad _domains _dpatch-edit-patch _dpkg \ + _dpkg-buildpackage _dpkg-cross _dpkg-repack _dpkg_source _dput \ + _drush _dsh _dtrace _du _dumpadm \ + _dumper _dupload _dut _dvi _dynamic_directory_name \ + _dzen2 _ecasound _echotc _echoti _elfdump \ + _elinks _elm _email_addresses _emulate _emulator \ + _enable _enscript _env _equal _espeak \ + _etags _ethtool _expand _expand_alias _expand_word \ + _exportfs _extensions _external_pwds _fab _fakeroot \ + _fc _feh _fetch _fetchmail _ffmpeg \ + _figlet _file_descriptors _file_systems _files _find \ + _find_net_interfaces _finger _fink _first _flasher \ + _flex _floppy _flowadm _fmadm _fortune \ + _freebsd-update _fsh _fstat _functions _fuse_arguments \ + _fuse_values _fuser _fusermount _gas _gcc \ + _gcore _gdb _geany _gem _generic \ + _genisoimage _getclip _getconf _getent _getfacl \ + _getmail _ghc _gist _git _git-buildpackage \ + _git-flow _git-hub-browse _git-hub-shorten-url _git-info _git-pulls \ + _git-submodule-move _git-submodule-remove _git-wtf _github _glances \ + _global _global_tags _globflags _globqual_delims _globquals \ + _gnome-gv _gnu_generic _gnupod _gnutls _go \ + _google _gpg _gphoto2 _gprof _gqview \ + _gradle _graphicsmagick _grep _grep-excuses _groff \ + _groups _growisofs _gs _guard _guilt \ + _gv _gzip _hash _have_glob_qual _hdiutil \ + _heroku _hg _history _history_complete_word _history_modifiers \ + _hledger _hosts _httpie _hwinfo _iconv \ + _id _id3 _id3v2 _ifconfig _iftop \ + _ignored _imagemagick _in_vared _inetadm _init_d \ + _initctl _invoke-rc.d _ionice _ip _ipadm \ + _ipset _iptables _irssi _ispell _iw \ + _iwconfig _jails _java _java_class _jekyll \ + _jexec _jls _jmeter _jmeter-plugins _jobs \ + _jobs_bg _jobs_builtin _jobs_fg _joe _join \ + _jonas _jq _kfmclient _kill _killall \ + _kitchen _kld _knife _knock _kvno \ + _language_codes _last _ldd _lein _less \ + _lha _lighttpd _limit _limits _links \ + _lintian _list _list_files _ln _loadkeys \ + _locales _locate _logger _logical_volumes _look \ + _losetup _lp _ls _lscfg _lsdev \ + _lslv _lsof _lspv _lsusb _lsvg \ + _lunar _lunchy _lynx _lzop _mac_applications \ + _mac_files_for_application _madison _mail _mailboxes _main_complete \ + _make _make-kpkg _man _manage.py _manb_mand_manp \ + _match _math _math_params _matlab _md5sum \ + _mdadm _members _mencal _menu _mere \ + _mergechanges _message _metaflac _mh _middleman \ + _mii-tool _mime_types _mina _mixerctl _mkdcd \ + _mkdir _mkshortcut _mkzsh _module _module-assistant \ + _module_math_func _modutils _mondo _monotone _moosic \ + _mosh _most_recent_file _mount _mozilla _mpc \ + _mplayer _mt _mtools _mtr _multi_parts \ + _mussh _mutt _mvn _my_accounts _mysql_utils \ + _mysqldiff _nautilus _ncftp _nedit _net_interfaces \ + _netcat _netscape _netstat _newsgroups _next_label \ + _next_tags _nice _nkf _nl _nm \ + _nmap _nmcli _node _normal _nothing \ + _notmuch _npm _nslookup _nvm _object_classes \ + _od _okular _oldlist _open _options \ + _options_set _options_unset _optirun _osc _other_accounts \ + _pack _pactree _parameter _parameters _patch \ + _path_commands _path_files _pax _pbm _pbuilder \ + _pdf _pdftk _pear _perf _perforce \ + _periscope _perl _perl_basepods _perl_modules _perldoc \ + _pfctl _pfexec _pgrep _pgsql_utils _phing \ + _php _physical_volumes _pick_variant _pids _pine \ + _ping _piuparts _pkcon _pkg-config _pkg5 \ + _pkg_instance _pkgadd _pkginfo _pkgrm _pkgtool \ + _play _pon _port _portaudit _portlint \ + _portmaster _ports _portsnap _postfix _postscript \ + _powerd _prcs _precommand _prefix _prep \ + _print _printenv _printers _procstat _prompt \ + _prove _prstat _ps _ps1234 _pscp \ + _pspdf _psub _psutils _ptree _pump \ + _putclip _pydoc _pygmentize _python _python_modules \ + _qdbus _qemu _qiv _qtplay _quilt \ + _raggle _rails _rake _ralio _ranlib \ + _rar _rcs _rdesktop _read _read_comp \ + _readelf _readshortcut _rebootin _redirect _redis-cli \ + _regex_arguments _regex_words _remote_files _renice _reprepro \ + _requested _retrieve_cache _retrieve_mac_apps _rfkill _ri \ + _rlogin _rm _rpm _rpmbuild _rrdtool \ + _rspec _rsync _rubber _rubocop _ruby \ + _run-help _runit _rvm _sablotron _samba \ + _savecore _sbt _scala _sccs _sched \ + _schedtool _schroot _screen _sdd _sed \ + _sep_parts _sequence _service _services _set \ + _set_command _setfacl _setopt _setup _setup.py \ + _sh _showmount _showoff _shutdown _signals \ + _sisu _slrn _smartmontools _smit _snoop \ + _socat _socket _sockstat _softwareupdate _sort \ + _source _spamassassin _sqlite _sqsh _srm \ + _ss _ssh _ssh-copy-id _sshfs _stack \ + _stat _stgit _store_cache _strace _strip \ + _stty _su _sub_commands _subliminal _subscript \ + _subversion _sudo _suffix_alias_files _surfraw _svcadm \ + _svccfg _svcprop _svcs _svcs_fmri _svm \ + _svn-buildpackage _symfony _sysctl _sysstat _system_profiler \ + _systemd _tags _tar _tar_archive _tardy \ + _tcpdump _tcpsys _tcptraceroute _teamocil _telnet \ + _terminal-set-titles-with-command _terminal-set-titles-with-path _terminals _tex _texi \ + _texinfo _thor _tidy _tiff _tilde \ + _tilde_files _time_zone _tin _tla _tmux \ + _tmuxinator _todo.sh _toilet _toolchain-source _topgit \ + _totd _tpb _tpconfig _tracepath _trap \ + _tree _ttyctl _tune2fs _twidge _twisted \ + _typeset _ulimit _uml _unace _uname \ + _unexpand _unhash _uniq _unison _units \ + _update-alternatives _update-rc.d _urls _urpmi _urxvt \ + _uscan _user_admin _user_at_host _user_expand _user_math_func \ + _users _users_on _uzbl _vagrant _valgrind \ + _value _values _vared _vars _vcsh \ + _veewee _vim _vim-addons _virsh _virtualbox \ + _vnc _vnstat _volume_groups _vorbis _vorbiscomment \ + _vpnc _vserver _vux _w3m _wait \ + _wajig _wakeup_capable_devices _wanna-build _wanted _watch \ + _wc _webbrowser _wemux _wget _whereis \ + _which _whois _wiggle _wpa_cli _x_arguments \ + _x_borderwidth _x_color _x_colormapid _x_cursor _x_display \ + _x_extension _x_font _x_geometry _x_keysym _x_locale \ + _x_modifier _x_name _x_resource _x_selection_timeout _x_title \ + _x_utils _x_visual _x_window _xargs _xauth \ + _xautolock _xclip _xdvi _xfig _xft_fonts \ + _xinput _xloadimage _xmlsoft _xmms2 _xmodmap \ + _xournal _xpdf _xrandr _xscreensaver _xset \ + _xt_arguments _xt_session_id _xterm _xv _xwit \ + _xxd _xz _yaourt _yast _yodl \ + _yp _yum _zargs _zattr _zcalc \ + _zcalc_line _zcat _zcompile _zdump _zed \ + _zfs _zfs_dataset _zfs_keysource_props _zfs_pool _zftp \ + _zip _zle _zlogin _zmodload _zmv \ + _zoneadm _zones _zpool _zpty _zsh-mime-handler \ + _zstyle _ztodo _zypper +autoload -Uz +X _call_program + +typeset -gUa _comp_assocs +_comp_assocs=( '' ) diff --git a/.zcompdump.zwc b/.zcompdump.zwc new file mode 100644 index 0000000000000000000000000000000000000000..69373e924f97f6f85ca1cb81c6903a703d129ace GIT binary patch literal 93888 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 vB8bokVPH5y)Iv6rrhuyDgP6bsn+*-y+DX +# + +# +# Version Check +# + +# Check for the minimum supported version. +min_zsh_version='4.3.17' +if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then + print "prezto: old shell detected, minimum required: $min_zsh_version" >&2 + return 1 +fi +unset min_zsh_version + +# +# Module Loader +# + +# Loads Prezto modules. +function pmodload { + local -a pmodules + local pmodule + local pfunction_glob='^([_.]*|prompt_*_setup|README*)(-.N:t)' + + # $argv is overridden in the anonymous function. + pmodules=("$argv[@]") + + # Add functions to $fpath. + fpath=(${pmodules:+${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions(/FN)} $fpath) + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Load Prezto functions. + for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions/$~pfunction_glob; do + autoload -Uz "$pfunction" + done + } + + # Load Prezto modules. + for pmodule in "$pmodules[@]"; do + if zstyle -t ":prezto:module:$pmodule" loaded 'yes' 'no'; then + continue + elif [[ ! -d "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule" ]]; then + print "$0: no such module: $pmodule" >&2 + continue + else + if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" + fi + + if (( $? == 0 )); then + zstyle ":prezto:module:$pmodule" loaded 'yes' + else + # Remove the $fpath entry. + fpath[(r)${ZDOTDIR:-$HOME}/.zprezto/modules/${pmodule}/functions]=() + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function + # directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Unload Prezto functions. + for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/functions/$~pfunction_glob; do + unfunction "$pfunction" + done + } + + zstyle ":prezto:module:$pmodule" loaded 'no' + fi + fi + done +} + +# +# Prezto Initialization +# + +# Source the Prezto configuration file. +if [[ -s "${ZDOTDIR:-$HOME}/.zpreztorc" ]]; then + source "${ZDOTDIR:-$HOME}/.zpreztorc" +fi + +# Disable color and theme in dumb terminals. +if [[ "$TERM" == 'dumb' ]]; then + zstyle ':prezto:*:*' color 'no' + zstyle ':prezto:module:prompt' theme 'off' +fi + +# Load Zsh modules. +zstyle -a ':prezto:load' zmodule 'zmodules' +for zmodule ("$zmodules[@]") zmodload "zsh/${(z)zmodule}" +unset zmodule{s,} + +# Autoload Zsh functions. +zstyle -a ':prezto:load' zfunction 'zfunctions' +for zfunction ("$zfunctions[@]") autoload -Uz "$zfunction" +unset zfunction{s,} + +# Load Prezto modules. +zstyle -a ':prezto:load' pmodule 'pmodules' +pmodload "$pmodules[@]" +unset pmodules diff --git a/.zprezto/modules/README.md b/.zprezto/modules/README.md new file mode 100644 index 0000000..db851f3 --- /dev/null +++ b/.zprezto/modules/README.md @@ -0,0 +1,204 @@ +Modules +======= + +Load modules in *zpreztorc*. The order matters. + + zstyle ':prezto:load' pmodule 'environment' 'terminal' + +Archive +------- + +Provides functions to list and extract archives. + +Autosuggestions +--------------- + +Integrates zsh-autosuggestions into Prezto. + +Command-Not-Found +----------------- + +Loads the command-not-found tool on Debian-based distributions. + +Completion +---------- + +Loads and configures tab completion and provides additional completions from +the zsh-completions project. + +Directory +--------- + +Sets directory options and defines directory aliases. + +DNF +--- + +Defines dnf aliases. + +Dpkg +---- + +Defines dpkg aliases and functions. + +Editor +------ + +Sets key bindings. + +Emacs +----- + +Enables Emacs dependency management. + +Environment +----------- + +Sets general shell options and defines environment variables. + +Fasd +---- + +Maintains a frequently used file and directory list for fast access. + +Git +--- + +Enhances the Git distributed version control system by providing aliases, +functions and by exposing repository status information to prompts. + +GNU Utility +----------- + +Provides for the interactive use of GNU utilities on non-GNU systems. + +GPG +--- + +Provides for an easier use of GPG by setting up gpg-agent. + +Haskell +------- + +Enables local Haskell package installation. + +Helper +------ + +Provides helper functions for developing modules. + +History +------- + +Sets history options and defines history aliases. + +History Substring Search +------------------------ + +Integrates zsh-history-substring-search into Prezto. + +Homebrew +-------- + +Defines Homebrew aliases. + +MacPorts +-------- + +Defines MacPorts aliases and adds MacPorts directories to path variables. + +Node.js +------- + +Provides utility functions for Node.js and loads npm completion. + +OCaml +----- + +Initializes OCaml package management. + +OSX +--- + +Defines Mac OS X aliases and functions. + +Pacman +------ + +Provides aliases and functions for the Pacman package manager and frontends. + +Perl +---- + +Enables local Perl module installation on Mac OS X and defines alises. + +Prompt +------ + +Loads prompt themes. + +Python +------ + +Enables local Python and local Python package installation. + +Ruby on Rails +------------- + +Defines Ruby on Rails aliases. + +Rsync +----- + +Defines rsync aliases. + +Ruby +---- + +Configures Ruby local gem installation, loads version managers, and defines +aliases. + +GNU Screen +---------- + +Defines GNU Screen aliases and provides for auto launching it at start-up. + +Spectrum +-------- + +Provides for easier use of 256 colors and effects. + +SSH +--- + +Provides for an easier use of SSH by setting up ssh-agent. + +Syntax Highlighting +------------------- + +Integrates zsh-syntax-highlighting into Prezto. + +Terminal +-------- + +Sets terminal window and tab titles. + +Tmux +---- + +Defines tmux aliases and provides for auto launching it at start-up. + +Utility +------- + +Defines general aliases and functions. + +Wake-on-LAN +----------- + +This module provides a wrapper around the wakeonlan tool. + +Yum +--- + +Defines yum aliases. diff --git a/.zprezto/modules/archive/README.md b/.zprezto/modules/archive/README.md new file mode 100644 index 0000000..a1d4901 --- /dev/null +++ b/.zprezto/modules/archive/README.md @@ -0,0 +1,40 @@ +Archive +======= + +Provides functions to list and extract archives. + +Functions +--------- + + - `lsarchive` lists the contents of one or more archives. + - `unarchive` extracts the contents of one or more archives. + +Supported Formats +----------------- + +The following archive formats are supported when the required utilities are +installed: + + - *.tar.gz*, *.tgz* require `tar`. + - *.tar.bz2*, *.tbz* require `tar`. + - *.tar.xz*, *.txz* require `tar` with *xz* support. + - *.tar.zma*, *.tlz* require `tar` with *lzma* support. + - *.tar* requires `tar`. + - *.gz* requires `gunzip`. + - *.bz2* requires `bunzip2`. + - *.xz* requires `unxz`. + - *.lzma* requires `unlzma`. + - *.Z* requires `uncompress`. + - *.zip* requires `unzip`. + - *.rar* requires `unrar` or `rar`. + - *.7z* requires `7za`. + - *.deb* requires `ar`, `tar`. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/archive/functions/_lsarchive b/.zprezto/modules/archive/functions/_lsarchive new file mode 100644 index 0000000..00f83e0 --- /dev/null +++ b/.zprezto/modules/archive/functions/_lsarchive @@ -0,0 +1,13 @@ +#compdef lsarchive +#autoload + +# +# Completes lsarchive. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '(-v --verbose)'{-v,--remove}'[verbose archive listing]' \ + "*::archive file:_files -g '(#i)*.(tar|tgz|tbz|tbz2|txz|tlz|gz|bz2|xz|lzma|Z|zip|rar|7z)(-.)'" && return 0 diff --git a/.zprezto/modules/archive/functions/_unarchive b/.zprezto/modules/archive/functions/_unarchive new file mode 100644 index 0000000..aceb27b --- /dev/null +++ b/.zprezto/modules/archive/functions/_unarchive @@ -0,0 +1,13 @@ +#compdef unarchive +#autoload + +# +# Completes unarchive. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '(-r --remove)'{-r,--remove}'[remove archive]' \ + "*::archive file:_files -g '(#i)*.(tar|tgz|tbz|tbz2|txz|tlz|gz|bz2|xz|lzma|Z|zip|rar|7z|deb)(-.)'" && return 0 diff --git a/.zprezto/modules/archive/functions/lsarchive b/.zprezto/modules/archive/functions/lsarchive new file mode 100644 index 0000000..7ac6145 --- /dev/null +++ b/.zprezto/modules/archive/functions/lsarchive @@ -0,0 +1,55 @@ +# +# Lists the contents of archives. +# +# Authors: +# Sorin Ionescu +# + +local verbose + +if (( $# == 0 )); then + cat >&2 <. +EOF +fi + +if [[ "$1" == "-v" || "$1" == "--verbose" ]]; then + verbose=0 + shift +fi + +while (( $# > 0 )); do + if [[ ! -s "$1" ]]; then + print "$0: file not valid: $1" >&2 + shift + continue + fi + + case "$1:l" in + (*.tar.gz|*.tgz) tar t${verbose:+v}vzf "$1" ;; + (*.tar.bz2|*.tbz|*.tbz2) tar t${verbose:+v}jf "$1" ;; + (*.tar.xz|*.txz) tar --xz --help &> /dev/null \ + && tar --xz -t${verbose:+v}f "$1" \ + || xzcat "$1" | tar t${verbose:+v}f - ;; + (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ + && tar --lzma -t${verbose:+v}f "$1" \ + || lzcat "$1" | tar x${verbose:+v}f - ;; + (*.tar) tar t${verbose:+v}f "$1" ;; + (*.zip) unzip -l${verbose:+v} "$1" ;; + (*.rar) unrar &> /dev/null \ + && unrar ${${verbose:+v}:-l} "$1" \ + || rar ${${verbose:+v}:-l} "$1" ;; + (*.7z) 7za l "$1" ;; + (*) + print "$0: cannot list: $1" >&2 + success=1 + ;; + esac + + shift +done diff --git a/.zprezto/modules/archive/functions/unarchive b/.zprezto/modules/archive/functions/unarchive new file mode 100644 index 0000000..72dfbd1 --- /dev/null +++ b/.zprezto/modules/archive/functions/unarchive @@ -0,0 +1,80 @@ +# +# Extracts the contents of archives. +# +# Authors: +# Sorin Ionescu +# + +local remove_archive +local success +local file_name +local file_path +local extract_dir + +if (( $# == 0 )); then + cat >&2 <. +EOF +fi + +remove_archive=1 +if [[ "$1" == "-r" || "$1" == "--remove" ]]; then + remove_archive=0 + shift +fi + +while (( $# > 0 )); do + if [[ ! -s "$1" ]]; then + print "$0: file not valid: $1" >&2 + shift + continue + fi + + success=0 + file_name="${1:t}" + file_path="${1:A}" + extract_dir="${file_name:r}" + case "$1:l" in + (*.tar.gz|*.tgz) tar xvzf "$1" ;; + (*.tar.bz2|*.tbz|*.tbz2) tar xvjf "$1" ;; + (*.tar.xz|*.txz) tar --xz --help &> /dev/null \ + && tar --xz -xvf "$1" \ + || xzcat "$1" | tar xvf - ;; + (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ + && tar --lzma -xvf "$1" \ + || lzcat "$1" | tar xvf - ;; + (*.tar) tar xvf "$1" ;; + (*.gz) gunzip "$1" ;; + (*.bz2) bunzip2 "$1" ;; + (*.xz) unxz "$1" ;; + (*.lzma) unlzma "$1" ;; + (*.Z) uncompress "$1" ;; + (*.zip) unzip "$1" -d $extract_dir ;; + (*.rar) unrar &> /dev/null \ + && unrar x -ad "$1" \ + || rar x -ad "$1" ;; + (*.7z) 7za x "$1" ;; + (*.deb) + mkdir -p "$extract_dir/control" + mkdir -p "$extract_dir/data" + cd "$extract_dir"; ar vx "${file_path}" > /dev/null + cd control; tar xvf ../control.tar.* + cd ../data; tar xvf ../data.tar.* + cd ..; rm control.tar.* data.tar.* debian-binary + cd .. + ;; + (*) + print "$0: cannot extract: $1" >&2 + success=1 + ;; + esac + + (( success = $success > 0 ? $success : $? )) + (( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1" + shift +done diff --git a/.zprezto/modules/autosuggestions/README.md b/.zprezto/modules/autosuggestions/README.md new file mode 100644 index 0000000..7024379 --- /dev/null +++ b/.zprezto/modules/autosuggestions/README.md @@ -0,0 +1,53 @@ +Autosuggestions +--------------- + +Integrates zsh-autosuggestions into Prezto. + +Autosuggestions +=============== + +Integrates [zsh-autosuggestions][1] into Prezto, which implements the +[Fish shell][2]'s autosuggestions feature, where the user can type in any part +of a previously entered command and Zsh suggests commands as you type based on +history and completions. + +If this module is used in conjuncture with the *syntax-highlighting* module, it +must be loaded **after** it. + +If this module is used in conjuncture with the *history-substring-search* +module, it must be loaded **after** it. + +Contributors +------------ + +New features and bug fixes should be submitted to the [zsh-autosuggestions][1] +project according to its rules and regulations. This module will be synchronized +against it. + +Settings +-------- + +### Highlighting + +If colors are enabled, *autosuggestions* will automatically highlight +positive results. + +To enable highlighting for this module only, add the following line to +*zpreztorc*: + + zstyle ':prezto:module:autosuggestions' color 'yes' + +To set the query found color, add the following line to *zpreztorc*: + + zstyle ':prezto:module:autosuggestions:color' found '' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/tarruda/zsh-autosuggestions +[2]: http://fishshell.com +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/autosuggestions/init.zsh b/.zprezto/modules/autosuggestions/init.zsh new file mode 100644 index 0000000..a3a772e --- /dev/null +++ b/.zprezto/modules/autosuggestions/init.zsh @@ -0,0 +1,35 @@ +# +# Integrates zsh-autosuggestions into Prezto. +# +# Authors: +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# Source module files. +source "${0:h}/external/zsh-autosuggestions.zsh" || return 1 + +# +# Highlighting +# + +# Set highlight color, default 'fg=8'. +zstyle -s ':prezto:module:autosuggestions:color' found \ + 'ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE' || ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' + +# Disable highlighting. +if ! zstyle -t ':prezto:module:autosuggestions' color; then + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='' +fi + +# +# Key Bindings +# + +if [[ -n "$key_info" ]]; then + # vi + bindkey -M viins "$key_info[Control]F" vi-forward-word + bindkey -M viins "$key_info[Control]E" vi-add-eol +fi diff --git a/.zprezto/modules/command-not-found/README.md b/.zprezto/modules/command-not-found/README.md new file mode 100644 index 0000000..e969b71 --- /dev/null +++ b/.zprezto/modules/command-not-found/README.md @@ -0,0 +1,15 @@ +Command-Not-Found +================= + +Displays installation information for not found commands by loading the +[command-not-found][1] tool on Debian-based and Arch Linux-based distributions. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Joseph Booker](https://github.com/sargas) + +[1]: https://code.launchpad.net/command-not-found +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/command-not-found/init.zsh b/.zprezto/modules/command-not-found/init.zsh new file mode 100644 index 0000000..2d9236a --- /dev/null +++ b/.zprezto/modules/command-not-found/init.zsh @@ -0,0 +1,17 @@ +# +# Displays installation information for not found commands. +# +# Authors: +# Joseph Jon Booker +# + +# Load command-not-found on Debian-based distributions. +if [[ -s '/etc/zsh_command_not_found' ]]; then + source '/etc/zsh_command_not_found' +# Load command-not-found on Arch Linux-based distributions. +elif [[ -s '/usr/share/doc/pkgfile/command-not-found.zsh' ]]; then + source '/usr/share/doc/pkgfile/command-not-found.zsh' +# Return if requirements are not found. +else + return 1 +fi diff --git a/.zprezto/modules/completion/README.md b/.zprezto/modules/completion/README.md new file mode 100644 index 0000000..aaa86fd --- /dev/null +++ b/.zprezto/modules/completion/README.md @@ -0,0 +1,23 @@ +Completion +========== + +Loads and configures tab completion and provides additional completions from +the [zsh-completions][1] project. + +This module must be loaded **after** the *utility* module. + +Contributors +------------ + +Completions should be submitted to the [zsh-completions][1] project according +to its rules and regulations. This module will be synchronized against it. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-completions +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/completion/external/.editorconfig b/.zprezto/modules/completion/external/.editorconfig new file mode 100644 index 0000000..e762a90 --- /dev/null +++ b/.zprezto/modules/completion/external/.editorconfig @@ -0,0 +1,10 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://EditorConfig.org + +root = true + +[_*] +indent_style = space +indent_size = 2 +tab_width = 2 +end_of_line = LF diff --git a/.zprezto/modules/completion/external/.gitignore b/.zprezto/modules/completion/external/.gitignore new file mode 100644 index 0000000..ed16522 --- /dev/null +++ b/.zprezto/modules/completion/external/.gitignore @@ -0,0 +1,3 @@ +# zsh word code files +*.zwc + diff --git a/.zprezto/modules/completion/external/README.md b/.zprezto/modules/completion/external/README.md new file mode 100644 index 0000000..741fbc3 --- /dev/null +++ b/.zprezto/modules/completion/external/README.md @@ -0,0 +1,77 @@ +zsh-completions +=============== + +**Additional completion definitions for [Zsh](http://www.zsh.org).** + +*This projects aims at gathering/developing new completion scripts that are not available in Zsh yet. The scripts are meant to be contributed to the Zsh project when stable enough.* + + +Status +------ +See [issues](https://github.com/zsh-users/zsh-completions/issues) for details on each completion definition. + +Gentoo's completions have been removed, as they are maintained upstream. See: [Gentoo zsh-completions](https://github.com/radhermit/gentoo-zsh-completions) + +Usage +----- + +#### Using packages + +* Arch Linux: [community/zsh-completions](https://www.archlinux.org/packages/zsh-completions) / [AUR/zsh-completions-git](https://aur.archlinux.org/packages/zsh-completions-git/) +* [Gentoo](http://packages.gentoo.org/package/app-shells/zsh-completions) +* Mac OS: [Homebrew](https://github.com/mxcl/homebrew/blob/master/Library/Formula/zsh-completions.rb) +* Debian based distributions (Debian/Ubuntu/Linux Mint...): Packager needed, please get in touch ! +* RPM based distributions (Fedora/RHEL/CentOS...): Packager needed, please get in touch ! + +#### Using frameworks + +* If you're using [antigen](https://github.com/zsh-users/antigen), just add `antigen bundle zsh-users/zsh-completions src` to your .zshrc where you're loading your other zsh plugins. + + +#### Manual installation + +* Clone the repository: + + git clone git://github.com/zsh-users/zsh-completions.git + +* Include the directory in your `$fpath`, for example by adding in `~/.zshrc`: + + fpath=(path/to/zsh-completions/src $fpath) + +* You may have to force rebuild `zcompdump`: + + rm -f ~/.zcompdump; compinit + +#### oh-my-zsh + +If you use [oh-my-zsh][] then just clone the repository inside your oh-my-zsh repo: + +```Shell +git clone https://github.com/zsh-users/zsh-completions ~/.oh-my-zsh/custom/plugins/zsh-completions +``` + +and enable it in your `.zshrc`: + +```zsh +plugins+=(zsh-completions) +autoload -U compinit && compinit +``` + +[oh-my-zsh]: http://github.com/robbyrussell/oh-my-zsh + +Contributing +------------ + +Contributions are welcome, just make sure you follow the guidelines: + + * Completions are not accepted when already available in their original project. + * Please do not just copy/paste someone else completion, ask before. + * Completions only partially implemented are not accepted. + * Please add a header containing authors, license info, status and origin of the script (example [here](src/_ack)). + * Please try to follow [Zsh completion style guide](https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide). + * Send a pull request or ask for committer access. + + +License +------- +See each file for license details. diff --git a/.zprezto/modules/completion/external/src/_ack b/.zprezto/modules/completion/external/src/_ack new file mode 100644 index 0000000..55a38b8 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ack @@ -0,0 +1,237 @@ +#compdef ack ack2 ack-grep ack-standalone +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ack 1.96 and 2.14 (http://betterthangrep.com). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud (version 1.94) +# * Zhao Cai (version 2.04) +# +# ------------------------------------------------------------------------------ + +_ack_version() { + local version + version=(${(f)"$(_call_program version $words[1] --version)"}) + version=${${(z)${version[1]}}[2]} + echo $version +} + +_ack() { + local context curcontext="$curcontext" state line cmds update_policy ret=1 + integer NORMARG + typeset -A opt_args + + # Don't complete if command doesn't exist + [[ ${+commands[${words[1]}]} -eq 0 ]] && return 0 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _ack_types_caching_policy + + unset _ack_raw_types + if ( [[ ${+_ack_raw_types} -eq 0 ]] || _cache_invalid "ack-grep" ) && ! _retrieve_cache "ack-grep"; then + _ack_raw_types=(${(S)${(S)${(f)${${"$(_call_program types $words[1] --help=types)"}#*--\[no\]}}%; first line matches \/*\/}#*no\]}) + [[ $#_ack_raw_types -gt 0 ]] && _store_cache "ack-grep" _ack_raw_types + fi + + ack_20_options=( + '--ackrc[specify an ackrc file to use]:files:_files' + '(- 1 *)--bar[consult Admiral Ackbar]' + '(--nobreak --break)'{--nobreak,--break}'[print a break between results from different files, default on]' + '(- 1 *)--cathy[chocolate chocolate chocolate]' + '(- 1 *)--create-ackrc[create custom ackrc files based on the default settings loaded by ackrc]' + '(- 1 *)--dump[writes the list of options loaded and where they came from to standard output]' + '(--files-from -x)--files-from=[read the list of files to search from FILE]:files:_files' + '(--filter --nofilter)--filter[force ack to treat input as pipe]' + '(--filter --nofilter)--nofilter[force ack to treat input as tty]' + '(--noheading --heading)'{--noheading,--heading}'[print a filename heading above results, default on]' + '(- 1 *)--help-types[display all known types]' + '--ignore-ack-defaults[ignore default definitions included with ack]' + '*--ignore-file=[ignore file]:ignore file filter: _describe "ignore file filter" ignore_filter_opts' + '(-k --known-types)'{-k,--known-types}'[include only files of types that ack recognizes]' + '--lines=[only print line(s) NUM of each file]:number' + '--nopager[do not send output through a pager, overrides ackrc, ACK_PAGER & ACK_PAGER_COLOR]' + '-s[suppress error messages about nonexistent or unreadable files]' + '(- 1 *)--thpppt[bill the cat]' + '*--type-del[remove all filters associated with TYPE]' \ + '(-x --files-from)-x[read the list of files to search from STDIN]' + ) + + ack_19_options=( + '(-a --all -u --unrestricted)'{-a,--all}'[operate on all files, regardless of type (but still skip directories like blib, CVS, etc.)]' + '-G+[only paths matching the given regex are included in the search]:regex' + '--invert-file-match[print/search handle files that do not match -g/-G]' + '--line=[only print given line of each file]:number' \ + '(-u --unrestricted -a --all)'{-u,--unrestricted}'[all files and directories (including blib/, core.*, ...) are searched, nothing is skipped]' + ) + + if (( $(_ack_version) > 2.0 )); then + ack_version_options=(${ack_20_options}) + else + ack_version_options=(${ack_19_options}) + fi + + _arguments -C -s -S -n \ + '(- 1 *)--version[display version and copyright information]' \ + '(- 1 *)--help[print a short help statement]' \ + '(- 1 *)--man[print the manual page]' \ + $ack_version_options \ + '(-A --after-context -C --context)'{-A+,--after-context=}'[print N lines of trailing context after matching lines]:number' \ + '(-B --before-context -C --context)'{-B+,--before-context=}'[print N lines of leading context before matching lines]:number' \ + '(-C --context -A --after-context -B --before-context)'{-C-,--context=}'[print N lines (default 2) of context around matching lines]:number' \ + '(-c --count)'{-c,--count}'[suppress normal output; instead print a count of matching lines for each input file]' \ + '(--nocolor)--color[highlight the matching text]' \ + '(--color --color-filename --color-match --color-lineno)--nocolor[suppress the color]' \ + '(--nocolor --color)--color-filename[sets the color to be used for filenames]:color:->colors' \ + '(--nocolor --color)--color-match[sets the color to be used for matches]:color:->colors' \ + '(--nocolor --color)--color-lineno[sets the color to be used for line numbers]:color:->colors' \ + '--column[show the column number of the first match]' \ + '(--noenv)--env[enable environment processing]' \ + '(--env)--noenv[disable all environment processing, no .ackrc is read and all environment variables are ignored]' \ + '--flush[flush output immediately]' \ + '-f[only print the files that would be searched, without actually doing any searching]' \ + '(--nofollow)--follow[follow symlinks]' \ + '(--follow)--nofollow[don'\''t follow symlinks]' \ + '-g+[print files where the relative path + filename matches the given regex]:regex' \ + '(--nogroup)--group[group matches by file name]' \ + '(--group)--nogroup[do not group matches by file name]' \ + '(-H --with-filename -h --no-filename)'{-H,--with-filename}'[print the filename for each match]' \ + '(-h --no-filename -H --with-filename)'{-h,--no-filename}'[suppress the prefixing of filenames on output when multiple files are searched]' \ + '(-i --ignore-case)'{-i,--ignore-case}'[ignore case in the search strings]' \ + '*--ignore-dir=[ignore directory]:directory:_files' \ + '*--noignore-dir=[ignore directory]:directory:_files' \ + '(-l --files-with-matches -L --files-without-matches)'{-l,--files-with-matches}'[only print the filenames of matching files, instead of the matching text]' \ + '(-L --files-without-matches -l --files-with-matches)'{-L,--files-without-matches}'[only print the filenames of files that do NOT match]' \ + '--match=[specify the regular expression explicitly]:regex' \ + '(-m --max-count)'{-m+,--max-count=}'[stop reading a file after N matches]:number' \ + '(-r -R --recurse -n --no-recurse)'{-r,-R,--recurse}'[recurse into sub-directories]' \ + '(-n --no-recurse -r -R --recurse)'{-n,--no-recurse}'[no descending into subdirectories]' \ + '-o[show only the part of each line matching PATTERN (turns off text highlighting)]:pattern' \ + '--output=[output the evaluation of expr for each line (turns off text highlighting)]:expression' \ + '--pager=[direct ack'\''s output through program]:pager program:_command_names' \ + '--passthru[prints all lines, whether or not they match the expression]' \ + '--print0[the filenames are output separated with a null byte instead of the usual newline]' \ + '(-Q --literal)'{-Q,--literal}'[quote all metacharacters in the pattern, it is treated as a literal]' \ + '(--no-smart-case)--smart-case[ignore case in the search strings if pattern contains no uppercase characters]' \ + '(--smart-case)--no-smart-case[disable --smart-case option]' \ + '--sort-files[sorts the found files lexically]' \ + '--show-types[outputs the filetypes that ack associates with each file]' \ + '--thpppt[display the all-important Bill The Cat logo]' \ + '*--type=[specify the types of files to include or exclude from a search]:type:->types' \ + '*--type-add[files with the given extensions are recognized as being of the given type]:type-def:->type-defs' \ + '*--type-set[files with the given extensions are recognized as being of the given type]:type-def:->type-defs' \ + '(-v --invert-match)'{-v,--invert-match}'[invert match: select non-matching lines]' \ + '(-w --word-regexp)'{-w,--word-regexp}'[force the given pattern to match only whole words]' \ + '-1[stops after reporting first match of any kind]' \ + {'--','--no'}${_ack_raw_types/ ##/\[}']' \ + '*: :->args' \ + && ret=0 + + case $state in + args) + if [[ CURRENT -eq NORMARG && ${+opt_args[--match]} -eq 0 ]]; then + # If the current argument is the first non-option argument + # and --match isn't present then a pattern is expected + _message -e patterns 'pattern' && ret=0 + else + _files + fi + ;; + colors) + local colors; colors=( + 'black' 'on_black' + 'red' 'on_red' + 'green' 'on_green' + 'yellow' 'on_yellow' + 'blue' 'on_blue' + 'magenta' 'on_magenta' + 'cyan' 'on_cyan' + 'white' 'on_white' + 'clear' + 'reset' + 'dark' + 'bold' + 'underline' + 'underscore' + 'blink' + 'reverse' + 'concealed' + ) + _describe -t 'colors' 'color' colors && ret=0 + ;; + type-defs) + if compset -P '*='; then + local extensions; extensions=(*.*(:e)) + _values -s ',' 'file extension' '.'$extensions && ret=0 + else + _message -e type-name 'type name' && ret=0 + fi + ;; + types) + local types; types=({'','no'}${_ack_raw_types/ ##/:}) + _describe -t 'types' 'type' types + ;; + esac + + return ret +} + +ignore_filter_opts=( + 'is\::FILENAME' + 'ext\::[EXTENSION,EXTENSION2,...]' + 'match\::PATTERN' + 'firstlinematch\::PATTERN' +) + +_ack_types_caching_policy() { + + # Rebuild if ackrc more recent than cache. + [[ -f ${ACKRC:-$HOME/.ackrc} && ${ACKRC:-$HOME/.ackrc} -nt "$1" ]] && return 0 + + # Rebuild if cache is older than one week. + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) && return 0 + + return 1 +} + +_ack "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/.zprezto/modules/completion/external/src/_adb b/.zprezto/modules/completion/external/src/_adb new file mode 100644 index 0000000..6e252e7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_adb @@ -0,0 +1,422 @@ +#compdef adb +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for adb (Android Debug Bridge) 1.0.26 +# (http://developer.android.com/guide/developing/tools/adb.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_adb() { + typeset -A opt_args + local context state line curcontext="$curcontext" adb_args + + local ret=1 + + _arguments -C \ + '(-e -s)-d[directs command to the only connected USB device, returns an error if more than one USB device is present]' \ + '(-d -s)-e[directs command to the only running emulator, returns an error if more than one emulator is running]' \ + '(-d -e)-s[directs command to the USB device or emulator with the given serial number]: :_adb_serial_numbers' \ + '-p[simple product name or a relative/absolute path to a product out directory]: :_adb_products' \ + '1: :_adb_cmds' \ + '*::arg:->args' \ + && ret=0 + + adb_args="${(fkv)opt_args[(I)-d|-e|-s|-p]}" + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:adb-cmd-$words[1]:" + case $words[1] in + (help|version|devices|jdwp|bugreport|wait-for-device|start-server|kill-server|get-state|get-serialno|status-window|remount|reboot-bootloader|root|usb) + _message 'no more arguments' && ret=0 + ;; + (connect|disconnect) + _arguments \ + '1: :_adb_host_colon_ports' \ + && ret=0 + ;; + (push) + _arguments \ + '1:local directory:_files -/' \ + '2: :_adb_remote_files -/' \ + && ret=0 + ;; + (pull) + _arguments \ + '1: :_adb_remote_files -/' \ + '2:local directory:_files -/' \ + && ret=0 + ;; + (sideload) + _arguments \ + '1:local directory:_files -/' \ + && ret=0 + ;; + (sync) + _arguments \ + '-l[list but do not copy]' \ + '1: :_adb_sync_directories' \ + && ret=0 + ;; + (shell|emu) + _arguments -C \ + '1: :_adb_remote_commands' \ + '*::remote-command-arg:->remote-command-args' \ + && ret=0 + case "$state" in + (remote-command-args) + curcontext="${curcontext%:*:*}:adb-remote-cmd-$words[1]:" + if (( $+functions[_adb_remote_command_$words[1]_args] )); then + _adb_remote_command_$words[1] && ret=0 + # TODO Write handlers for following commands: + # * am (Activity Manager) + # * pm (Package Manager) + # TODO Reuse existing compdefs for standard commands (ls, id, ifconfig, kill, etc) ? + # How do we tell them to use _remote_ files/pids/users/etc ? + else + _adb_remote_command_default && ret=0 + fi + ;; + esac + ;; + (logcat) + local -a rotation_opts + [[ -n ${(M)words:#"-f"} ]] && rotation_opts+=('-r[rotates the log file every kbytes of output. The default value is 16]:value (in kb)') + [[ -n ${(M)words:#"-r"} ]] && rotation_opts+=('-n[sets the maximum number of rotated logs. The default value is 4]:count') + _arguments \ + '-b[loads an alternate log buffer for viewing, such as event or radio. The main buffer is used by default]: :_adb_logcat_buffers' \ + '-c[clears (flushes) the entire log and exits]' \ + '-d[dumps the log to the screen and exits]' \ + '-f[writes log message output to file. The default is stdout]: :_files' \ + '-g[prints the size of the specified log buffer and exits]' \ + '-s[sets the default filter spec to silent]' \ + '-v[sets the output format for log messages]: :_adb_logcat_output_formats' \ + "${rotation_opts[@]}" \ + '*: :_adb_logcat_filter_specs' \ + && ret=0 + ;; + (forward) + _arguments \ + '1: :_adb_local_forward_specs' \ + '2: :_adb_remote_forward_specs' \ + && ret=0 + ;; + (install) + _arguments \ + '-l[forward-lock the app]' \ + '-r[reinstall the app, keeping its data]' \ + '-s[install on SD card instead of internal storage]' \ + '1: :_files' \ + && ret=0 + ;; + (uninstall) + _arguments \ + '-k[keep the data and cache directories]' \ + '1: :_adb_packages' \ + && ret=0 + ;; + (reboot) + _arguments \ + '1:program:((bootloader:reboot\ into\ the\ bootloader\ program recovery:reboot\ into\ the\ recovery\ program))' \ + && ret=0 + ;; + (tcpip) + _arguments \ + '1::port' \ + && ret=0 + ;; + (ppp) + # TODO Complete tty (See http://developer.android.com/guide/developing/tools/adb.html#commandsummary) + # TODO Complete PPP parameters (See http://ppp.samba.org/pppd.html) + _arguments \ + '1::tty' \ + '*::parameters' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_adb_cmds] )) || +_adb_cmds() { + _alternative \ + 'general-commands:general command:_adb_general_cmds' \ + 'device-commands:device command:_adb_device_cmds' \ + 'scripting-commands:scripting command:_adb_scripting_cmds' +} + +(( $+functions[_adb_general_cmds] )) || +_adb_general_cmds() { + local commands; commands=( + 'help:show help message' + 'version:show version number' + 'devices:list all connected devices' + 'connect:connect to a device via TCP/IP' + 'disconnect:disconnect from a TCP/IP device' + ) + _describe -t general-commands 'general command' commands "$@" +} + +(( $+functions[_adb_device_cmds] )) || +_adb_device_cmds() { + local commands; commands=( + 'push:copy file/dir to device' + 'pull:copy file/dir from device' + 'sync:copy host->device only if changed' + 'shell:run remote shell interactively or command' + 'emu:run emulator console command' + 'logcat:view device log' + 'forward:forward socket connections' + 'jdwp:list PIDs of processes hosting a JDWP transport' + 'install:push this padbage file to the device and install it' + 'uninstall:remove this app padbage from the device' + 'bugreport:return all information from the device' + ) + _describe -t device-commands 'device command' commands "$@" +} + +(( $+functions[_adb_scripting_cmds] )) || +_adb_scripting_cmds() { + local commands; commands=( + 'wait-for-device:block until device is online' + 'start-server:ensure that there is a server running' + 'kill-server:kill the server if it is running' + 'get-state:prints\: offline | bootloader | device' + 'get-serialno:prints\: ' + 'status-window:continuously print device status for a specified device' + 'remount:remounts the /system partition on the device read-write' + 'reboot:reboots the device, optionally into the bootloader or recovery program' + 'reboot-bootloader:reboots the device into the bootloader' + 'root:restarts the adbd daemon with root permissions' + 'usb:restarts the adbd daemon listening on USB' + 'tcpip:restarts the adbd daemon listening on TCP on the specified port' + 'ppp:run PPP over USB' + ) + _describe -t scripting-commands 'scripting command' commands "$@" +} + +(( $+functions[_adb_products] )) || +_adb_products() { + _alternative \ + 'product-names:product name:_adb_product_names' \ + 'directories:directory:_files -/' +} + +(( $+functions[_adb_product_names] )) || +_adb_product_names() { + local ret=1 + if [[ -n "$ANDROID_PRODUCT_OUT" ]]; then + local product_names; product_names=("$ANDROID_PRODUCT_OUT:default value set in ANDROID_PRODUCT_OUT environment variable") + _describe -t product-names 'product name' product_names && ret=0 + else + _message -e product-names 'product name' && ret=0 + fi + return ret +} + +(( $+functions[_adb_serial_numbers] )) || +_adb_serial_numbers() { + local serial_numbers; serial_numbers=(${${(M)${(f)"$(_call_program devices $service devices)"//:/\\:}:#*device}%%[[:space:]]*}":connected device") + [[ -n "$ANDROID_SERIAL" ]] && serial_numbers+=("$ANDROID_SERIAL:default value set in ANDROID_SERIAL environment variable") + _describe -t serial-numbers 'serial number' serial_numbers "$@" && ret=0 +} + +(( $+functions[_adb_packages] )) || +_adb_packages() { + local packages; packages=(${${(ps:\r\n:)"$(_call_program packages $service $adb_args shell 'ls /data/data 2>/dev/null')"}:#\**\*}) + _multi_parts . packages +} + +(( $+functions[_adb_host_colon_ports] )) || +_adb_host_colon_ports() { + local ret=1 + if compset -P '*:'; then + _message -e ports 'port' && ret=0 + else + _wanted hosts expl 'host' _hosts -qS: && ret=0 + fi + return ret +} + +(( $+functions[_adb_remote_files] )) || +_adb_remote_files() { + local dirsonly command="ls -d ${(S)words[CURRENT]/\/*//}*/ 2>/dev/null" + zparseopts -D -E '/=dirsonly' + (( ! $#dirsonly )) && command+="; ls -d ${words[CURRENT]}* 2>/dev/null" + local files; files=(${${(ps:\r\n:)"$(_call_program files $service $adb_args shell "'$command'" 2>/dev/null)"}:#\**\*}) + _multi_parts "$@" / files +} + +(( $+functions[_adb_remote_commands] )) || +_adb_remote_commands() { + local commands; commands=(${${(ps:\r\n:)"$(_call_program commands $service $adb_args shell "'IFS=:;for path_dir in \$PATH; do ls \$path_dir 2>/dev/null; done'" 2>/dev/null)"}:#\**\*}) + _describe -t remote-commands 'remote command' commands && ret=0 +} + +(( $+functions[_adb_local_forward_specs] )) || +_adb_local_forward_specs() { + local ret=1 + if compset -P '*:'; then + case ${IPREFIX%:} in + (tcp) + _message -e ports 'port' && ret=0 + ;; + (localabstract|localreserved) + _wanted sockets expl 'socket' _socket && ret=0 + ;; + (localfilesystem) + _wanted socket-files expl 'socket file' _files && ret=0 + ;; + (dev) + _wanted devices expl 'device' _files -g "/dev/**" && ret=0 + ;; + esac + else + local modes; modes=( + 'tcp:TCP socket' + 'localabstract:local abstract socket' + 'localreserved:local reserved socket' + 'localfilesystem:local filesystem socket' + 'dev:device' + ) + _describe -t forward-modes 'forward mode' modes -qS: && ret=0 + fi + return ret +} + +(( $+functions[_adb_remote_forward_specs] )) || +_adb_remote_forward_specs() { + local ret=1 + if compset -P '*:'; then + case ${IPREFIX%:} in + (tcp) + _message -e ports 'remote port' && ret=0 + ;; + (localabstract|localreserved|localfilesystem) + _message -e sockets 'remote socket' && ret=0 + ;; + (dev) + _message -e devices 'remote device' && ret=0 + ;; + (jdwp) + local pids; pids=(${${(f)"$(_call_program pids $service $adb_args jdwp 2>/dev/null)"}:#\**\*}) + _describe -t remote-pids 'remote pid' pids && ret=0 + ;; + esac + else + local modes; modes=( + 'tcp:TCP socket' + 'localabstract:local abstract socket' + 'localreserved:local reserved socket' + 'localfilesystem:local filesystem socket' + 'dev:device' + 'jdwp:Java Debug Wire Protocol' + ) + _describe -t forward-modes 'forward mode' modes -qS: && ret=0 + fi + return ret +} + +(( $+functions[_adb_sync_directories] )) || +_adb_sync_directories() { + _alternative \ + 'partitions:partition:((system:the\ /system\ partition data:the\ /data\ partition))' \ + 'directories:directory:_adb_remote_files -/' +} + +(( $+functions[_adb_logcat_filter_specs] )) || +_adb_logcat_filter_specs() { + local ret=1 + if compset -P '*:'; then + local priorities; priorities=( + 'V:verbose (lowest priority)' + 'D:debug' + 'I:info' + 'W:warning' + 'E:error' + 'F:fatal' + 'S:silent (highest priority, on which nothing is ever printed)' + ) + _describe -t log-priorities 'log priority' priorities "$@" && ret=0 + else + local tags; tags=(${(u)${${${(f)"$(_call_program tags $service $adb_args logcat -d 2>/dev/null)"}%%[[:space:]]#\(*}##*\/}:#\**\*}) + _describe -t log-tags 'log tag' tags -qS: "$@" && ret=0 + fi + return ret +} + +(( $+functions[_adb_logcat_output_formats] )) || +_adb_logcat_output_formats() { + local formats; formats=( + 'brief:display priority/tag and PID of originating process (the default format)' + 'process:display PID only' + 'tag:display the priority/tag only' + 'thread:display process:thread and priority/tag only' + 'raw:display the raw log message, with no other metadata fields' + 'time:display the date, invocation time, priority/tag, and PID of the originating process' + 'long:display all metadata fields and separate messages with a blank lines' + ) + _describe -t log-formats 'log format' formats "$@" && ret=0 +} + +(( $+functions[_adb_logcat_buffers] )) || +_adb_logcat_buffers() { + local buffers; buffers=( + 'main:view the main log buffer (default)' + 'radio:view the buffer that contains radio/telephony related messages' + 'events:view the buffer containing events-related messages' + ) + _describe -t log-buffers 'log buffer' buffers "$@" && ret=0 +} + +(( $+functions[_adb_remote_command_default] )) || +_adb_remote_command_default() { + _wanted remote-files expl 'remote file' _adb_remote_files +} + +_adb "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ag b/.zprezto/modules/completion/external/src/_ag new file mode 100644 index 0000000..6a41710 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ag @@ -0,0 +1,217 @@ +#compdef ag +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ag (https://github.com/ggreer/the_silver_searcher) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ +_ag_version() { + local version + version=( $($words[1] --version) ) + version=${version[@]:2:1} + version=( "${(@s/./)version}" ) + echo "${version[2]}" +} + +# Dynamically build the file type completion +# Modifies the global $AG_OPTS array +_ag_add_file_types() { + local typ exts + for i in $($words[1] --list-file-types); do + if [[ "${i:0:2}" = '--' ]]; then + if [[ "${typ}x" != "x" ]]; then + AG_OPTS+="${typ}[${exts}]" + fi + typ=$i + exts= + else + exts+=$i + fi + done + AG_OPTS+="${typ}[${exts}]" +} + +# Add version appropriate options above base +# Modifies the global $AG_OPTS array +_ag_add_version_opts() { + local minor=$(_ag_version) + + if [[ $minor -gt 21 ]];then + _ag_add_file_types + AG_OPTS+=( + '(- 1 *)--list-file-types[list supported filetypes to search]' + '--silent[suppress all log messages, including errors]' + ) + fi + + if [[ $minor -gt 22 ]];then + AG_OPTS+=( + '(-z --search-zip)'{-z,--search-zip}'[search contents of compressed files]' + ) + fi + + if [[ $minor -le 24 ]];then + AG_OPTS+=( + '(-s --case-sensitive)'{-s,--case-sensitive}'[match case sensitively]' + '(--noheading --heading)'{--noheading,--heading}'[print file names above matching contents]' + ) + fi + if [[ $minor -gt 24 ]];then + AG_OPTS+=( + '(-s --case-sensitive)'{-s,--case-sensitive}'[Match case sensitively. Default on.]' + '(-H --noheading --heading)'{-H,--noheading,--heading}'[print file names above matching contents]' + '--vimgrep[output results like vim''s, :vimgrep /pattern/g would (report every match on the line)]' + ) + fi + + if [[ $minor -gt 26 ]];then + AG_OPTS+=( + '(-0 --null --print0)'{-0,--null,--print0}'[separate the filenames with \\0, rather than \\n]' + ) + fi + + if [[ $minor -le 27 ]];then + AG_OPTS+=( + '--depth[Search up to NUM directories deep. Default is 25.]:number' + ) + fi + if [[ $minor -gt 27 ]];then + AG_OPTS+=( + '(-c --count)'{-c,--count}'[only print the number of matches in each file]' + '--depth[Search up to NUM directories deep, -1 for unlimited. Default is 25.]:number' + '(-F --fixed-strings)'{-F,--fixed-strings}'[alias for --literal for compatibility with grep]' + ) + fi + + if [[ $minor -le 28 ]];then + AG_OPTS+=( + '(--no-numbers)--no-numbers[don´t show line numbers]' + ) + fi + if [[ $minor -gt 28 ]];then + AG_OPTS+=( + '(--nofilename --filename)'{--nofilename,--filename}'[Print file names. Default on, except when searching a single file.]' + '(--nonumbers --numbers)'{--nonumbers,--numbers}'[Print line numbers. Default is to omit line numbers when searching streams]' + '(-o --only-matching)'{-o,--only-matching}'[print only the matching part of the lines]' + ) + fi +} + +_ag() { + local curcontext="$curcontext" state line cmds update_policy ret=1 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _ag_types_caching_policy + + # Don't complete if command doesn't exist + [[ ${+commands[${words[1]}]} -eq 0 ]] && return 0 + + if ( [[ ${+AG_OPTS} -eq 0 ]] || _cache_invalid "_AG_OPTS" ) && ! _retrieve_cache "_AG_OPTS"; then + # Base opts starts at ag version 0.20 + AG_OPTS=( + '(- 1 *)--help[print a short help statement]' + '(- 1 *)--man[print the manual page]' + '(- 1 *)--version[display version and copyright information]' + '--ackmate[output results in a format parseable by AckMate]' + '(-A --after)'{-A,--after}'[Print NUM lines before match. Default is 2]:number' + '(-t --all-text -a --all-types -u --unrestricted)'{-t,--all-text}"[search all text files, excluding hidden ones]" + '(-a --all-types -t --all-text -u --unrestricted)'{-a,--all-types}"[search all text files, excluding hidden ones and not obeying ignore files (.agignore, .gitignore...)]" + '(-B --before)'{-B,--before}'[Print NUM lines after match. Defaults is 2]:number' + '(--nobreak --break)'{--nobreak,--break}'[Print a newline between matches in different files. Default on.]' + '(--color --nocolor)--color[Print color codes in results. Default on.]' + '(--nocolor --color --color-line-number --color-match --color-path)--nocolor[Do not print color codes in results. Default on.]' + '(--nocolor)--color-line-number[Color codes for line numbers. Default is 1;33.]' + '(--nocolor)--color-match[Color codes for result match numbers. Default is 30;43.]' + '(--nocolor)--color-path[Color codes for path names. Default is 1;32.]' + '--column[print column numbers in results]' + '(-C --context)'{-C,--context}'[Print NUM lines before and after matches. Default is 2.]:number' + '(-D --debug)'{-D,--debug}'[enable debug logging]' + '(-G --file-search-regex)'{-G,--file-search-regex}'[only search file names matching PATTERN]:pattern' + '(-l --files-with-matches)'{-l,--files-with-matches}'[only print filenames containing matches, not matching lines]' + '(-L --files-without-matches)'{-L,--files-without-matches}"[only print filenames that don't contain matches]" + '(-f --follow)'{-f,--follow}'[follow symlinks]' + '(-g)-g[print filenames that match PATTERN]:pattern' + '(--nogroup --group)'{--nogroup,--group}'[same as --\[no\]break --\[no\]heading]' + '--hidden[search hidden files, still obeys ignore files.]' + '*--ignore[Ignore files/directories matching this pattern. Literal file and directory names are also allowed.]:files:_files' + '(-i --ignore-case)'{-i,--ignore-case}'[match case insensitively]:pattern' + '*--ignore-dir[alias for --ignore for compatibility with ack]:files:_files' + '(-v --invert-match)'{-v,--invert-match}'[invert match]' + '(-Q --literal)'{-Q,--literal}'[match PATTERN literally, no regular expression]' + '(-m --max-count)'{-m,--max-count}'[Skip the rest of a file after NUM matches. Default is 10,000.]:number' + '(--pager --nopager)'{--pager,--nopager}'[Display results with PAGER. Disabled by default.]:pager program:_command_names' + '(--passthrough)--passthrough[when searching a stream, print all lines even if they don''t match]' + '(-p --path-to-agignore)'{-p,--path-to-agignore}'[provide a path to a specific .agignore file]:files:_files' + '--print-long-lines[print matches on very long lines, > 2k characters by default]' + '--search-binary[search binary files]' + '(-U --skip-vcs-ignores)'{-U,--skip-vcs-ignores}'[ignore VCS ignore files (.gitigore, .hgignore, svn:ignore), but still use .agignore]' + '(-S --smart-case)'{-S,--smart-case}'[match case sensitively if PATTERN contains any uppercase letters, else match case insensitively]' + '--stats[print stats (files scanned, time taken, etc)]' + '(-u --unrestricted -t --all-text -a --all-types)'{-u,--unrestricted}'[search ALL files, includes: hidden, binary & ignored files (.agignore, .gitignore...)]' + '(-w --word-regexp)'{-w,--word-regexp}'[only match whole words]' + ) + _ag_add_version_opts + AG_OPTS+=( + '*: :_files' + ) + [[ $#AG_OPTS -gt 0 ]] && _store_cache '_AG_OPTS' AG_OPTS + fi + + _arguments -C -s -S ${AG_OPTS} && ret=0 + unset AG_OPTS + + case $state in + # placeholder + esac + + return ret +} + +_ag_types_caching_policy() { + # Rebuild if .agignore more recent than cache. + [[ -f $HOME/.agignore && $$HOME/.agignore -nt "$1" ]] && return 0 + + # Rebuild if cache is older than one week. + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) && return 0 + + return 1 +} + +_ag "$@" diff --git a/.zprezto/modules/completion/external/src/_android b/.zprezto/modules/completion/external/src/_android new file mode 100644 index 0000000..fcad746 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_android @@ -0,0 +1,331 @@ +#compdef android +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the android command (Revision 12) +# (http://developer.android.com/guide/developing/tools/android.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_android() { + typeset -A opt_args + local context state line curcontext="$curcontext" + + local ret=1 + + _arguments -C -A "-*" \ + '(- : *)'{-h,--help}'[get help on a specific command]:command:_android_cmds' \ + '(-s --silent -v --verbose)'{-v,--verbose}'[verbose mode: errors, warnings and informational messages are printed]' \ + '(-v --verbose -s --silent)'{-s,--silent}'[silent mode: only errors are printed out]' \ + '1: :_android_cmds' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:android-cmd-$words[1]:" + case $words[1] in + (list) + _arguments -C \ + '1: :_android_list_entities' \ + '*::list-arg:->list-args' \ + && ret=0 + case "$state" in + (list-args) + case $words[1] in + (avd|target) + _arguments \ + '(-0 --null)'{-0,--null}'[terminate lines with \0 instead of \n (e.g. for xargs -0)]' \ + '(-c --compact)'{-c,--compact}'[compact output (suitable for scripts)]' \ + && ret=0 + ;; + (sdk) + _arguments \ + '(-o --obsolete)'{-o,--obsolete}'[install obsolete packages]' \ + '--proxy-host[HTTP/HTTPS proxy host (overrides settings if defined)]:proxy host:_hosts' \ + '--proxy-port[HTTP/HTTPS proxy port (overrides settings if defined)]:proxy port number' \ + '(-s --no-https)'{-s,--no-https}'[use HTTP instead of HTTPS (the default) for downloads]' \ + '(-u --no-ui)'{-u,--no-ui}'[display list result on console (no GUI)]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (create) + _arguments -C \ + '1: :_android_create_entities' \ + '*::create-arg:->create-args' \ + && ret=0 + case "$state" in + (create-args) + case $words[1] in + (avd) + _arguments \ + '(-c --sdcard)'{-c,--sdcard}'[path to a shared SD card image, or size of a new sdcard for the new AVD]:SD card image or size:_files -g "*.img"' \ + '(-n --name)'{-n,--name}'[name of the new AVD]:name' \ + '(-a --snapshot)'{-a,--snapshot}'[place a snapshots file in the AVD, to enable persistence]' \ + '(-p --path)'{-p,--path}'[directory where the new AVD will be created]: :_files -/' \ + '(-f --force)'{-f,--force}'[forces creation (overwrites an existing AVD)]' \ + '(-s --skin)'{-s,--skin}'[skin for the new AVD]:skin' \ + '(-t --target)'{-t,--target}'[target ID of the new AVD]: :_android_targets' \ + && ret=0 + ;; + (project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-k --package)'{-k,--package}'[Android package name for the application]:package name' \ + '(-a --activity)'{-a,--activity}'[name of the default Activity that is created]:activity name' \ + '(-t --target)'{-t,--target}'[target ID of the new project]: :_android_targets' \ + && ret=0 + ;; + (test-project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-m --main)'{-m,--main}'[path to directory of the app under test, relative to the test project directory]:path' \ + && ret=0 + ;; + (lib-project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-k --package)'{-k,--package}'[Android package name for the application]:package name' \ + '(-t --target)'{-t,--target}'[target ID of the new project]: :_android_targets' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (update) + _arguments -C \ + '1: :_android_update_entities' \ + '*::update-arg:->update-args' \ + && ret=0 + case "$state" in + (update-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to update]: :_android_avd_names' \ + && ret=0 + ;; + (project) + _arguments \ + '(-l --library)'{-l,--library}'[directory of an Android library to add, relative to this project'\''s directory]: :_files -/' \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-n --name)'{-n,--name}'[project name]:name' \ + '(-t --target)'{-t,--target}'[target ID to set for the project]: :_android_targets' \ + '(-s --subprojects)'{-s,--subprojects}'[also updates any projects in sub-folders, such as test projects]' \ + && ret=0 + ;; + (test-project) + _arguments \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-m --main)'{-m,--main}'[directory of the app under test, relative to the test project directory]:path' \ + && ret=0 + ;; + (lib-project) + _arguments \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-t --target)'{-t,--target}'[target ID to set for the project]: :_android_targets' \ + && ret=0 + ;; + (sdk) + _arguments \ + '(-o --obsolete)'{-o,--obsolete}'[install obsolete packages]' \ + '--proxy-host[HTTP/HTTPS proxy host (overrides settings if defined)]:proxy host:_hosts' \ + '--proxy-port[HTTP/HTTPS proxy port (overrides settings if defined)]:proxy port number' \ + '(-s --no-https)'{-s,--no-https}'[use HTTP instead of HTTPS (the default) for downloads]' \ + '(-u --no-ui)'{-u,--no-ui}'[update from command-line (no GUI)]' \ + '(-f --force)'{-f,--force}'[force replacement of a package or its parts, even if something has been modified]' \ + '(-t --filter)'{-t,--filter}'[a filter that limits the update to the specified types of packages]: :_android_sdk_update_filters -s ,' \ + '(-n --dry-mode)'{-n,--dry-mode}'[simulate the update but does not download or install anything]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (move) + _arguments -C \ + '1: :_android_move_entities' \ + '*::move-arg:->move-args' \ + && ret=0 + case "$state" in + (move-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to move or rename]: :_android_avd_names' \ + '(-p --path)'{-p,--path}'[path to the AVD'\''s new directory]: :_files -/' \ + '(-r --rename)'{-r,--rename}'[new name of the AVD]:name' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (delete) + _arguments -C \ + '1: :_android_delete_entities' \ + '*::delete-arg:->delete-args' \ + && ret=0 + case "$state" in + (delete-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to delete]: :_android_avd_names' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (display) + _arguments \ + '1: :_android_display_entities' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_android_cmds] )) || +_android_cmds() { + local commands; commands=( + 'list:list existing targets or virtual devices' + 'create:create new virtual devices or projects' + 'update:update a virtual device, project, SDK or adb' + 'move:move a virtual device' + 'delete:delete a virtual device' + 'display:display manager windows' + ) + _describe -t commands 'command' commands "$@" +} + +(( $+functions[_android_list_entities] )) || +_android_list_entities() { + local entities; entities=( + 'avd:list existing Android Virtual Devices' + 'target:list existing targets' + 'sdk:list remote SDK repository' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_create_entities] )) || +_android_create_entities() { + local entities; entities=( + 'avd:create a new Android Virtual Device' + 'project:create a new Android project' + 'test-project:create a new Android project for a test package' + 'lib-project:create a new Android library project' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_update_entities] )) || +_android_update_entities() { + local entities; entities=( + 'avd:update an Android Virtual Device to match the folders of a new SDK' + 'project:update an Android project' + 'test-project:update the Android project for a test package' + 'lib-project:update an Android library project' + 'adb:update adb to support the USB devices declared in the SDK add-ons' + 'sdk:update the SDK by suggesting new platforms to install if available' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_move_entities] )) || +_android_move_entities() { + local entities; entities=( + 'avd:move or rename an Android Virtual Device' + ) + _describe -t entities 'entity' commands "$@" +} + +(( $+functions[_android_delete_entities] )) || +_android_delete_entities() { + local entities; entities=( + 'avd:delete an Android Virtual Device' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_display_entities] )) || +_android_display_entities() { + local entities; entities=( + 'sdk:display the SDK Manager window' + 'avd:display the AVD Manager window' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_targets] )) || +_android_targets() { + local targets; targets=(${(f)"$(_call_program targets $service list target --compact)"//:/\\:}) + _describe -t targets 'target' targets "$@" +} + +(( $+functions[_android_avd_names] )) || +_android_avd_names() { + local avd_names; avd_names=(${(f)"$(_call_program targets $service list avd --compact)"//:/\\:}) + _describe -t avd-names 'AVD name' avd_names "$@" +} + +(( $+functions[_android_sdk_update_filters] )) || +_android_sdk_update_filters() { + local filters; filters=(platform tool platform-tool doc sample extra) + _values $@ 'filter' "${filters[@]}" +} + +_android "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ansible b/.zprezto/modules/completion/external/src/_ansible new file mode 100644 index 0000000..faabf04 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ansible @@ -0,0 +1,439 @@ +#compdef ansible +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ansible v1.8.4 (http://ansible.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Romain Bossart (https://github.com/bosr) +# +# ------------------------------------------------------------------------------ +# +# Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux +# (or /usr/local/etc/ansible/hosts on OSX) +# +# Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git) +# has some files to help improve the hostfile shell parsing +# +# Note 2: I tried to use `_arguments --`, but the output of `ansible --help` +# is not parsed entirely correctly, and anyway no modules or host would available. +# + + +# ansible zsh completion +# + +__host_file_location () { + # find the location of the host file: + # 1. check $ANSIBLE_HOSTS + # 2. else check /etc/ansible/hosts or /usr/local/etc/... + # (depending on platform) + # + [[ "$OSTYPE" == darwin* ]] && FALLBACK="/usr/local/etc/ansible/hosts" + [[ "$OSTYPE" == linux* ]] && FALLBACK="/etc/ansible/hosts" + HOST_FILE=${ANSIBLE_HOSTS:=${FALLBACK}} + [[ -f ${HOST_FILE} ]] || HOST_FILE=/dev/null + + echo ${HOST_FILE} +} + +__ll_group_list () { + # parses the ini hostfile for groups only: [...] + HOST_FILE=$(__host_file_location) + + local -a group_list + group_list=$(command \ + cat ${HOST_FILE} \ + | awk '$1 ~ /^\[.*\]$/ && !/=/ && !/:vars/ \ + { gsub(/[\[\]]/, "", $1); gsub(/:children/, "", $1) ; print $1 }' \ + | uniq ) + + echo ${group_list} +} + + +__host_list () +{ + # parses the ini hostfile for hosts only + # but then has to remove all group occurrences + HOST_FILE=$(__host_file_location) + + # this will also contain groups if they are referenced in other groups + local -a mixed_host_list + mixed_host_list=$(command \ + cat ${HOST_FILE} \ + | awk 'NF && $1 !~ /[\[:=]/ { print $1 }' \ + | sort | uniq) + + # compute set difference h1 - h2 + local -a h1 h2 host_list + h1=${mixed_host_list} + h2=$(__ll_group_list) + host_list=($(command \ + sort <(echo $h1) <(echo $h2) <(echo $h2) \ + | uniq -u \ + | paste -s -d ' ' - ) + ) + + _wanted application expl 'hosts' compadd ${host_list} + + # method that delegates to ansible (slow) + # _wanted application expl 'hosts' compadd $(command ansible \ + # all --list-hosts\ + # 2>/dev/null) +} + +__group_list () +{ + gl=($(command echo $(__ll_group_list) | paste -s -d ' ' - )) # 'a\nb\nc' -> (a b c) + _wanted application2 expl 'groups' compadd $gl +} + + +_modules=( +'a10_server:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices' +'a10_service_group:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices' +'a10_virtual_server:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices' +'accelerate:Enable accelerated mode on remote node' +'acl:Sets and retrieves file ACL information.' +'add_host:add a host (and alternatively a group) to the ansible-playbook in-memory inventory' +'airbrake_deployment:(E) Notify airbrake about app deployments' +'alternatives:(E) Manages alternative programs for common commands' +'apache2_module:enables/disables a module of the Apache2 webserver' +'apt:Manages apt-packages' +'apt_key:Add or remove an apt key' +'apt_repository:Add and remove APT repositories' +'apt_rpm:apt_rpm package manager' +'assemble:Assembles a configuration file from fragments' +'assert:Fail with custom message' +'async_status:Obtain status of asynchronous task' +'at:(E) Schedule the execution of a command or script file via the at command.' +'authorized_key:Adds or removes an SSH authorized key' +'azure:create or terminate a virtual machine in azure' +'bigip_facts:(E) Collect facts from F5 BIG-IP devices' +'bigip_monitor_http:(E) Manages F5 BIG-IP LTM http monitors' +'bigip_monitor_tcp:(E) Manages F5 BIG-IP LTM tcp monitors' +'bigip_node:(E) Manages F5 BIG-IP LTM nodes' +'bigip_pool:(E) Manages F5 BIG-IP LTM pools' +'bigip_pool_member:(E) Manages F5 BIG-IP LTM pool members' +'bigpanda:(E) Notify BigPanda about deployments' +'boundary_meter:(E) Manage boundary meters' +'bower:(E) Manage bower packages with bower' +'bzr:(E) Deploy software (or files) from bzr branches' +'campfire:(E) Send a message to Campfire' +'capabilities:(E) Manage Linux capabilities' +'cloudformation:create a AWS CloudFormation stack' +'command:Executes a command on a remote node' +'composer:(E) Dependency Manager for PHP' +'copy:Copies files to remote locations.' +'cpanm:(E) Manages Perl library dependencies.' +'cron:Manage cron.d and crontab entries.' +'crypttab:(E) Encrypted Linux block devices' +'datadog_event:(E) Posts events to DataDog service' +'debconf:(E) Configure a .deb package' +'debug:Print statements during execution' +'digital_ocean:Create/delete a droplet/SSH_key in DigitalOcean' +'digital_ocean_domain:Create/delete a DNS record in DigitalOcean' +'digital_ocean_sshkey:Create/delete an SSH key in DigitalOcean' +'django_manage:Manages a Django application.' +'dnf:(E) Manages packages with the I(dnf) package manager' +'dnsimple:(E) Interface with dnsimple.com (a DNS hosting service).' +'dnsmadeeasy:(E) Interface with dnsmadeeasy.com (a DNS hosting service).' +'docker:manage docker containers' +'docker_image (D):manage docker images' +'easy_install:Installs Python libraries' +'ec2:create, terminate, start or stop an instance in ec2' +'ec2_ami:create or destroy an image in ec2' +'ec2_ami_search:Retrieve AWS AMI information for a given operating system.' +'ec2_asg:Create or delete AWS Autoscaling Groups' +'ec2_eip:associate an EC2 elastic IP with an instance.' +'ec2_elb:De-registers or registers instances from EC2 ELBs' +'ec2_elb_lb:Creates or destroys Amazon ELB.' +'ec2_facts:Gathers facts about remote hosts within ec2 (aws)' +'ec2_group:maintain an ec2 VPC security group.' +'ec2_key:maintain an ec2 key pair.' +'ec2_lc:Create or delete AWS Autoscaling Launch Configurations' +'ec2_metric_alarm:Create/update or delete AWS Cloudwatch ‘metric alarms’' +'ec2_scaling_policy:Create or delete AWS scaling policies for Autoscaling groups' +'ec2_snapshot:creates a snapshot from an existing volume' +'ec2_tag:create and remove tag(s) to ec2 resources.' +'ec2_vol:create and attach a volume, return volume id and device map' +'ec2_vpc:configure AWS virtual private clouds' +'ejabberd_user:(E) Manages users for ejabberd servers' +'elasticache:Manage cache clusters in Amazon Elasticache.' +'facter:(E) Runs the discovery program I(facter) on the remote system' +'fail:Fail with custom message' +'fetch:Fetches a file from remote nodes' +'file:Sets attributes of files' +'filesystem:(E) Makes file system on block device' +'fireball:Enable fireball mode on remote node' +'firewalld:(E) Manage arbitrary ports/services with firewalld' +'flowdock:(E) Send a message to a flowdock' +'gc_storage:This module manages objects/buckets in Google Cloud Storage.' +'gce:create or terminate GCE instances' +'gce_img:(E) utilize GCE image resources' +'gce_lb:create/destroy GCE load-balancer resources' +'gce_net:create/destroy GCE networks and firewall rules' +'gce_pd:utilize GCE persistent disk resources' +'gem:Manage Ruby gems' +'get_url:Downloads files from HTTP, HTTPS, or FTP to node' +'getent:(E) a wrapper to the unix getent utility' +'git:Deploy software (or files) from git checkouts' +'github_hooks:(E) Manages github service hooks.' +'glance_image:Add/Delete images from glance' +'gluster_volume:(E) Manage GlusterFS volumes' +'group:Add or remove groups' +'group_by:Create Ansible groups based on facts' +'grove:(E) Sends a notification to a grove.io channel' +'haproxy:(E) An Ansible module to handle states enable/disable server and set weight to backend host in haproxy using socket commands.' +'hg:Manages Mercurial (hg) repositories.' +'hipchat:(E) Send a message to hipchat' +'homebrew:(E) Package manager for Homebrew' +'homebrew_cask:(E) Install/uninstall homebrew casks.' +'homebrew_tap:(E) Tap a Homebrew repository.' +'hostname:Manage hostname' +'htpasswd:manage user files for basic authentication' +'include_vars:Load variables from files, dynamically within a task.' +'ini_file:Tweak settings in INI files' +'irc:(E) Send a message to an IRC channel' +'jabber:(E) Send a message to jabber user or chat room' +'jboss:(E) deploy applications to JBoss' +'jira:(E) create and modify issues in a JIRA instance' +'kernel_blacklist:(E) Blacklist kernel modules' +'keystone_user:Manage OpenStack Identity (keystone) users, tenants and roles' +'layman:(E) Manage Gentoo overlays' +'librato_annotation:(E) create an annotation in librato' +'lineinfile:Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression.' +'linode:create / delete / stop / restart an instance in Linode Public Cloud' +'lldp:(E) get details reported by lldp' +'locale_gen:(E) Creates or removes locales.' +'logentries:(E) Module for tracking logs via logentries.com' +'lvg:(E) Configure LVM volume groups' +'lvol:(E) Configure LVM logical volumes' +'macports:(E) Package manager for MacPorts' +'mail:(E) Send an email' +'modprobe:(E) Add or remove kernel modules' +'mongodb_user:(E) Adds or removes a user from a MongoDB database.' +'monit:(E) Manage the state of a program monitored via Monit' +'mount:Control active and configured mount points' +'mqtt:(E) Publish a message on an MQTT topic for the IoT' +'mysql_db:Add or remove MySQL databases from a remote host.' +'mysql_replication:(E) Manage MySQL replication' +'mysql_user:Adds or removes a user from a MySQL database.' +'mysql_variables:Manage MySQL global variables' +'nagios:(E) Perform common tasks in Nagios related to downtime and notifications.' +'netscaler:(E) Manages Citrix NetScaler entities' +'newrelic_deployment:(E) Notify newrelic about app deployments' +'nexmo:(E) Send a SMS via nexmo' +'nova_compute:Create/Delete VMs from OpenStack' +'nova_keypair:Add/Delete key pair from nova' +'npm:(E) Manage node.js packages with npm' +'ohai:(E) Returns inventory data from I(Ohai)' +'open_iscsi:(E) Manage iscsi targets with open-iscsi' +'openbsd_pkg:(E) Manage packages on OpenBSD.' +'openvswitch_bridge:(E) Manage Open vSwitch bridges' +'openvswitch_port:(E) Manage Open vSwitch ports' +'opkg:(E) Package manager for OpenWrt' +'osx_say:(E) Makes an OSX computer to speak.' +'ovirt:(E) oVirt/RHEV platform management' +'pacman:(E) Manage packages with I(pacman)' +'pagerduty:(E) Create PagerDuty maintenance windows' +'patch:(E) Apply patch files using the GNU patch tool.' +'pause:Pause playbook execution' +'ping:Try to connect to host and return C(pong) on success.' +'pingdom:(E) Pause/unpause Pingdom alerts' +'pip:Manages Python library dependencies.' +'pkg5:(E) Manages packages with the Solaris 11 Image Packaging System' +'pkg5_publisher:(E) Manages Solaris 11 Image Packaging System publishers' +'pkgin:(E) Package manager for SmartOS' +'pkgng:(E) Package manager for FreeBSD >= 9.0' +'pkgutil:(E) Manage CSW-Packages on Solaris' +'portage:(E) Package manager for Gentoo' +'portinstall:(E) Installing packages from FreeBSD’s ports system' +'postgresql_db:Add or remove PostgreSQL databases from a remote host.' +'postgresql_lang:(E) Adds, removes or changes procedural languages with a PostgreSQL database.' +'postgresql_privs:Grant or revoke privileges on PostgreSQL database objects.' +'postgresql_user:Adds or removes a users (roles) from a PostgreSQL database.' +'quantum_floating_ip:Add/Remove floating IP from an instance' +'quantum_floating_ip_associate:Associate or disassociate a particular floating IP with an instance' +'quantum_network:Creates/Removes networks from OpenStack' +'quantum_router:Create or Remove router from openstack' +'quantum_router_gateway:set/unset a gateway interface for the router with the specified external network' +'quantum_router_interface:Attach/Dettach a subnet’s interface to a router' +'quantum_subnet:Add/remove subnet from a network' +'rabbitmq_parameter:(E) Adds or removes parameters to RabbitMQ' +'rabbitmq_plugin:(E) Adds or removes plugins to RabbitMQ' +'rabbitmq_policy:(E) Manage the state of policies in RabbitMQ.' +'rabbitmq_user:(E) Adds or removes users to RabbitMQ' +'rabbitmq_vhost:(E) Manage the state of a virtual host in RabbitMQ' +'raw:Executes a low-down and dirty SSH command' +'rax:create / delete an instance in Rackspace Public Cloud' +'rax_cbs:Manipulate Rackspace Cloud Block Storage Volumes' +'rax_cbs_attachments:Manipulate Rackspace Cloud Block Storage Volume Attachments' +'rax_cdb:create/delete or resize a Rackspace Cloud Databases instance' +'rax_cdb_database:create / delete a database in the Cloud Databases' +'rax_cdb_user:create / delete a Rackspace Cloud Database' +'rax_clb:create / delete a load balancer in Rackspace Public Cloud' +'rax_clb_nodes:add, modify and remove nodes from a Rackspace Cloud Load Balancer' +'rax_dns:Manage domains on Rackspace Cloud DNS' +'rax_dns_record:Manage DNS records on Rackspace Cloud DNS' +'rax_facts:Gather facts for Rackspace Cloud Servers' +'rax_files:Manipulate Rackspace Cloud Files Containers' +'rax_files_objects:Upload, download, and delete objects in Rackspace Cloud Files' +'rax_identity:Load Rackspace Cloud Identity' +'rax_keypair:Create a keypair for use with Rackspace Cloud Servers' +'rax_meta:Manipulate metadata for Rackspace Cloud Servers' +'rax_network:create / delete an isolated network in Rackspace Public Cloud' +'rax_queue:create / delete a queue in Rackspace Public Cloud' +'rax_scaling_group:Manipulate Rackspace Cloud Autoscale Groups' +'rax_scaling_policy:Manipulate Rackspace Cloud Autoscale Scaling Policy' +'rds:create, delete, or modify an Amazon rds instance' +'rds_param_group:manage RDS parameter groups' +'rds_subnet_group:manage RDS database subnet groups' +'redhat_subscription:Manage Red Hat Network registration and subscriptions using the C(subscription-manager) command' +'redis:(E) Various redis commands, slave and flush' +'replace:Replace all instances of a particular string in a file using a back-referenced regular expression.' +'rhn_channel:Adds or removes Red Hat software channels' +'rhn_register:Manage Red Hat Network registration using the C(rhnreg_ks) command' +'riak:(E) This module handles some common Riak operations' +'rollbar_deployment:(E) Notify Rollbar about app deployments' +'route53:add or delete entries in Amazons Route53 DNS service' +'rpm_key:Adds or removes a gpg key from the rpm db' +'s3:S3 module putting a file into S3.' +'script:Runs a local script on a remote node after transferring it' +'seboolean:Toggles SELinux booleans.' +'selinux:Change policy and state of SELinux' +'service:Manage services.' +'set_fact:Set host facts from a task' +'setup:Gathers facts about remote hosts' +'shell:Execute commands in nodes.' +'slack:(E) Send Slack notifications' +'slurp:Slurps a file from remote nodes' +'snmp_facts:(E) Retrieve facts for a device using SNMP.' +'sns:(E) Send Amazon Simple Notification Service (SNS) messages' +'stackdriver:(E) Send code deploy and annotation events to stackdriver' +'stat:retrieve file or file system status' +'subversion:Deploys a subversion repository.' +'supervisorctl:Manage the state of a program or group of programs running via supervisord' +'svc:(E) Manage daemontools services.' +'svr4pkg:(E) Manage Solaris SVR4 packages' +'swdepot:(E) Manage packages with swdepot package manager (HP-UX)' +'synchronize:Uses rsync to make synchronizing file paths in your playbooks quick and easy.' +'sysctl:Manage entries in sysctl.conf.' +'template:Templates a file out to a remote server.' +'twilio:(E) Sends a text message to a mobile phone through Twilio.' +'typetalk:(E) Send a message to typetalk' +'ufw:(E) Manage firewall with UFW' +'unarchive:Copies an archive to a remote location and unpack it' +'uptimerobot:(E) Pause and start Uptime Robot monitoring' +'uri:Interacts with webservices' +'urpmi:(E) Urpmi manager' +'user:Manage user accounts' +'virt:(E) Manages virtual machines supported by libvirt' +'vsphere_guest:Create/delete/manage a guest VM through VMware vSphere.' +'wait_for:Waits for a condition before continuing.' +'win_chocolatey:(E) Installs packages using chocolatey' +'win_feature:Installs and uninstalls Windows Features' +'win_get_url:Fetches a file from a given URL' +'win_group:Add and remove local groups' +'win_msi:Installs and uninstalls Windows MSI files' +'win_ping:A windows version of the classic ping module.' +'win_service:Manages Windows services' +'win_stat:returns information about a Windows file' +'win_updates:(E) Lists / Installs windows updates' +'win_user:Manages local Windows user accounts' +'xattr:set/retrieve extended attributes' +'yum:Manages packages with the I(yum) package manager' +'zabbix_group:(E) Add or remove a host group to Zabbix.' +'zabbix_maintenance:(E) Create Zabbix maintenance windows' +'zfs:(E) Manage zfs' +'zypper:(E) Manage packages on SUSE and openSUSE' +'zypper_repository:(E) Add and remove Zypper repositories' +) + + +_ansible () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C -W \ + '1:pattern:->pattern'\ + "(-a --args)"{-a,--args}"[ARGS module arguments]:arguments:(ARG)"\ + "(-k --ask-pass)"{-k,--ask-pass}"[ask for SSH password]"\ + '--ask-su-pass[ask for su password]'\ + "(-K --ask-sudo-pass)"{-K,--ask-sudo-pass}"[ask for sudo password]"\ + '--ask-vault-pass[ask for vault password]'\ + "(-B --background)"{-B,--background}"[DURATION run asynchronously for DURATION (s)]:duration:(DURATION)"\ + "(-C --check)"{-C,--check}"[don't make any changes]"\ + "(-c --connection)"{-c,--connection}"[CONNECTION connection type to use (default=smart)]:connection type:(smart ssh local chroot)"\ + "(-f --forks)"{-f,--forks}"[FORKS number of parallel processes to use (default=5)]:forks:(5)"\ + "(-h --help)"{-h,--help}"[help message]"\ + "(-i --inventory-file)"{-i,--inventory-file}"[INVENTORY specify inventory host file]:inventory file:_files"\ + "(-l --limit)"{-l,--limit}"[SUBSET further limit selected hosts to an additional pattern]:subset pattern:->pattern"\ + '--list-hosts[outputs a list of matching hosts. Does not execute anything else]'\ + "(-m --module-name)"{-m,--module-name}"[MODULE_NAME module name (default=command)]:module name:->module"\ + "(-M --module-path)"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\ + "(-o --one-line)"{-o,--one-line}"[condense output]"\ + "(-P --poll)"{-P,--poll}"[POLL_INTERVAL set the poll interval (s) if using -B (default=15)]:poll interval:(15)"\ + "--private-key[PRIVATE_KEY_FILE use this file to authenticate the connection]:private key file:_files"\ + "(-S --su)"{-S,--su}"[run operations with su]"\ + "(-R --su-user)"{-R,--su-user}"[SU_USER run operations with su as this user (default=root)]:su user:(root)"\ + "(-s --sudo)"{-s,--sudo}"[run operations with sudo (nopasswd)]"\ + "(-U --sudo-user)"{-U,--sudo-user}"[SUDO_USER desired sudo user (default=root)]:su user:(root)"\ + "(-T --timeout)"{-T,--timeout}"[TIMEOUT override the SSH timeout (s) (default=10)]:ssh timeout:(10)"\ + "(-t --tree)"{-t,--tree}"[OUTPUT_DIRECTORY log output to this directory]:output directory:_files -/"\ + "(-u --user)"{-u,--user}"[REMOTE_USER connect as this user (default=${USER})]:connect as user:(${USER})"\ + "--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\ + "(-v --verbose)"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\ + "--version[show program's version number and exit]"\ + + case $state in + pattern) + _arguments '*:feature:__host_list' + _arguments '*:feature:__group_list' + ;; + module) + _describe -t commands "modules" _modules + ;; + esac +} + +_ansible "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ansible-galaxy b/.zprezto/modules/completion/external/src/_ansible-galaxy new file mode 100644 index 0000000..792909d --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ansible-galaxy @@ -0,0 +1,111 @@ +#compdef ansible-galaxy +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ansible-galaxy v1.8.4 (http://ansible.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Romain Bossart (https://github.com/bosr) +# +# ------------------------------------------------------------------------------ +# +# Note: I tried to use `_arguments --`, but the output of `ansible --help` +# is not parsed entirely correctly, and anyway no modules or host would available. +# + +# ansible-galaxy zsh completion +# +_ansible-galaxy () +{ + local context curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + "1:command:(init info install list remove)" \ + "*::option:->option" + + case $state in + option) + case $line[1] in + init) + _arguments \ + "(-h --help)"{-h,--help}"[help message]" \ + "(-p --init-path)"{-p,--init-path}"[INIT_PATH path in which the skeleton role will be created (default=./)]:init path:(./)" \ + "(--offline)--offline[Don't query the galaxy API when creating roles]" \ + "(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \ + "(-f --force)"{-f,--force}"[Force overwriting an existing role]" \ + ":role name:(ROLE)" + ;; + info) + _arguments \ + "(-h --help)"{-h,--help}"[help message]" \ + "(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \ + "(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \ + ":role name:(ROLE,version)" + ;; + install) + _arguments \ + "(-h --help)"{-h,--help}"[help message]" \ + "(-i --ignore-errors)"{-i,--ignore-errors}"[Ignore errors and continue with the next specified role]" \ + "(-n --no-deps)"{-n,--no-deps}"[Don't download roles listed as dependencies]" \ + "(-r --role-file)"{-r,--role-file}"[ROLE_FILE A file containing a list of roles to be imported]:role file:_files" \ + "(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \ + "(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \ + "(-f --force)"{-f,--force}"[Force overwriting an existing role]" \ + ":role name:(ROLE)" + ;; + list) + _arguments \ + "(-h --help)"{-h,--help}"[help message]" \ + "(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \ + ":role name:(ROLE)" + ;; + remove) + _arguments \ + "(-h --help)"{-h,--help}"[help message]" \ + "(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \ + "*:role name:(ROLE)" + ;; + esac + ;; + esac +} + +_ansible-galaxy "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ansible-playbook b/.zprezto/modules/completion/external/src/_ansible-playbook new file mode 100644 index 0000000..690d925 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ansible-playbook @@ -0,0 +1,177 @@ +#compdef ansible-playbook +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ansible-playbook v1.8.4 (http://ansible.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Romain Bossart (https://github.com/bosr) +# +# ------------------------------------------------------------------------------ +# +# Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux +# (or /usr/local/etc/ansible/hosts on OSX) +# +# Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git) +# has some files to help improve the hostfile shell parsing +# +# Note 2: I tried to use `_arguments --`, but the output of `ansible --help` +# is not parsed entirely correctly, and anyway no modules or host would available. +# + +# ansible-playbook zsh completion +# +__host_file_location () { + # find the location of the host file: + # 1. check $ANSIBLE_HOSTS + # 2. else check /etc/ansible/hosts or /usr/local/etc/... + # (depending on platform) + # + + [[ "$OSTYPE" == darwin* ]] && FALLBACK="/usr/local/etc/ansible/hosts" + [[ "$OSTYPE" == linux* ]] && FALLBACK="/etc/ansible/hosts" + HOST_FILE=${ANSIBLE_HOSTS:=${FALLBACK}} + [[ -f ${HOST_FILE} ]] || HOST_FILE=/dev/null + + echo ${HOST_FILE} +} + +__ll_group_list () { + # parses the ini hostfile for groups only: [...] + HOST_FILE=$(__host_file_location) + + local -a group_list + group_list=$(command \ + cat ${HOST_FILE} \ + | awk '$1 ~ /^\[.*\]$/ && !/=/ && !/:vars/ \ + { gsub(/[\[\]]/, "", $1); gsub(/:children/, "", $1) ; print $1 }' \ + | uniq ) + + echo ${group_list} +} + + +__host_list () +{ + # parses the ini hostfile for hosts only + # but then has to remove all group occurrences + HOST_FILE=$(__host_file_location) + + # this will also contain groups if they are referenced in other groups + local -a mixed_host_list + mixed_host_list=$(command \ + cat ${HOST_FILE} \ + | awk 'NF && $1 !~ /[\[:=]/ { print $1 }' \ + | sort | uniq) + + # compute set difference h1 - h2 + local -a h1 h2 host_list + h1=${mixed_host_list} + h2=$(__ll_group_list) + host_list=($(command \ + sort <(echo $h1) <(echo $h2) <(echo $h2) \ + | uniq -u \ + | paste -s -d ' ' - ) + ) + + _wanted application expl 'hosts' compadd ${host_list} + + # method that delegates to ansible (slow) + # _wanted application expl 'hosts' compadd $(command ansible \ + # all --list-hosts\ + # 2>/dev/null) +} + +__group_list () +{ + gl=($(command echo $(__ll_group_list) | paste -s -d ' ' - )) # 'a\nb\nc' -> (a b c) + _wanted application2 expl 'groups' compadd $gl +} + + + +_ansible-playbook () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C -W \ + "1:playbook yml file:_files -g '*.yml'"\ + "(-k --ask-pass)"{-k,--ask-pass}"[ask for SSH password]"\ + '--ask-su-pass[ask for su password]'\ + "(-K --ask-sudo-pass)"{-K,--ask-sudo-pass}"[ask for sudo password]"\ + '--ask-vault-pass[ask for vault password]'\ + "(-C --check)"{-C,--check}"[don't make any changes]"\ + "(-c --connection)"{-c,--connection}"[CONNECTION connection type to use (default=smart)]:connection type:(smart ssh local chroot)"\ + "(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\ + "(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:(EXTRA_VARS)"\ + '--flush-cache[clear the fact cache]'\ + '--force-handlers[run handlers even if a task fails]'\ + "(-f --forks)"{-f,--forks}"[FORKS number of parallel processes to use (default=5)]:forks:(5)"\ + "(-h --help)"{-h,--help}"[help message]"\ + "(-i --inventory-file)"{-i,--inventory-file}"[INVENTORY specify inventory host file]:inventory file:_files"\ + "(-l --limit)"{-l,--limit}"[SUBSET further limit selected hosts to an additional pattern]:subset pattern:->pattern"\ + '--list-hosts[outputs a list of matching hosts. Does not execute anything else]'\ + "(-M --module-path)"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\ + "--private-key[PRIVATE_KEY_FILE use this file to authenticate the connection]:private key file:_files"\ + "--skip-tags[SKIP_TAGS only run plays and tasks whose tags do not match these values]:skip tags:(SKIP_TAGS)"\ + "--start-at-task[START_AT start the playbook at the task matching this name]:name:(TASK_NAME)"\ + '--step[one-step-at-a-time: confirm each task before running]'\ + "(-S --su)"{-S,--su}"[run operations with su]"\ + "(-R --su-user)"{-R,--su-user}"[SU_USER run operations with su as this user (default=root)]:su user:(root)"\ + "(-s --sudo)"{-s,--sudo}"[run operations with sudo (nopasswd)]"\ + "(-U --sudo-user)"{-U,--sudo-user}"[SUDO_USER desired sudo user (default=root)]:su user:(root)"\ + '--syntax-check[perform a syntax check on the playbook, but do not execute it]'\ + "(-t --tags)"{-t,--tags}"[TAGS only run plays and tasks gagged with these values]:task tags:(TAGS)"\ + "(-T --timeout)"{-T,--timeout}"[TIMEOUT override the SSH timeout (s) (default=10)]:ssh timeout:(10)"\ + "(-u --user)"{-u,--user}"[REMOTE_USER connect as this user (default=${USER})]:connect as user:(${USER})"\ + "--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\ + "(-v --verbose)"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\ + "--version[show program's version number and exit]"\ + + case $state in + pattern) + _arguments '*:feature:__host_list' + _arguments '*:feature:__group_list' + ;; + esac +} + +_ansible-playbook "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_artisan b/.zprezto/modules/completion/external/src/_artisan new file mode 100644 index 0000000..bbb72f8 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_artisan @@ -0,0 +1,53 @@ +#compdef artisan +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for artisan (http://laravel.com/docs/artisan). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + + +_artisan_get_command_list () { + php artisan --no-ansi | sed "1,/Available commands/d" | awk '/ [a-z]+/ { print $1 }' +} + +_artisan () { + if [ -f artisan ]; then + compadd `_artisan_get_command_list` + fi +} + +compdef _artisan php artisan +compdef _artisan artisan diff --git a/.zprezto/modules/completion/external/src/_atach b/.zprezto/modules/completion/external/src/_atach new file mode 100644 index 0000000..3e6afde --- /dev/null +++ b/.zprezto/modules/completion/external/src/_atach @@ -0,0 +1,50 @@ +#compdef atach +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for atach (https://github.com/sorin-ionescu/atach). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sorin Ionescu +# +# ------------------------------------------------------------------------------ + +local state mode_values existing_sessions ret=1 + +mode_values=( + "none:disable redrawing" + "ctrl_l:use ctrl + l to redraw" + "winch:use sigwinch to redraw" +) + +existing_sessions=($(_call_program session atach)) + +_arguments -C -s -S \ + '(--list -l)'{--list,-l}'[list sessions]' \ + '(--sockets -L)'{--sockets,-L}'[list sockets]' \ + '(--session -s)'{--session=,-s+}'[set the session name]:session' \ + '(--char -c)'{--char=,-c+}'[set the detach character (default: ^\\)]:char' \ + '(--redraw -r)'{--redraw=,-r+}'[set the redraw method (none, ctrl_l, or winch)]:mode:->mode' \ + '(--detached -d)'{--detached,-d}'[start the session detached]' \ + '(--no-detach -D)'{--no-detach,-D}'[disable detaching]' \ + '(--no-suspend -Z)'{--no-suspend,-Z}'[disable suspending]' \ + '(--version -v)'{--version,-v}'[display version and copyright]' \ + '(--help -h)'{--help,-h}'[display help]' \ + '(-)::args:->session-or-command' && ret=0 + +case "$state" in + (mode) + _describe -t mode 'redraw mode' mode_values && ret=0 + ;; + (session-or-command) + _describe -t 'session' 'sessions' existing_sessions && ret=0 + _path_commands && ret=0 + ;; +esac + +return $ret + diff --git a/.zprezto/modules/completion/external/src/_boot2docker b/.zprezto/modules/completion/external/src/_boot2docker new file mode 100644 index 0000000..8f1a9c5 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_boot2docker @@ -0,0 +1,87 @@ +#compdef boot2docker +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for boot2docker (https://github.com/boot2docker/boot2docker-cli). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * hhatto (https://github.com/hhatto) +# +# ------------------------------------------------------------------------------ + + +_boot2docker() { + local context state line + + _arguments -C \ + --basevmdk'[Path to VMDK to use as base for persistent partition]:vmdk:' \ + --dhcp'[enable VirtualBox host-only network DHCP. default=true]' \ + --dhcpip'[VirtualBox host-only network DHCP server address. default=192.168.59.99]' \ + '(-s --disksize)'{-s,--disksize}'[boot2docker disk image size (in MB). default=20000.]:disksize:' \ + --dockerport'[host Docker port (forward to port 2375 in VM).]:PORT:' \ + --hostip'[VirtualBox host-only network IP address.]:IP:' \ + --iso'[path to boot2docker ISO image.]:FILE:_files' \ + --lowerip'[VirtualBox host-only network DHCP lower bound.]:IP:' \ + '(-m --memory)'{-m,--memory}'[virtual machine memory size (in MB). default=2048]' \ + --netmask'[VirtualBox host-only network mask.]' \ + --serial'[try serial console to get IP address (experimental) default=false]' \ + --serialfile'[path to the serial socket/pipe.]:FILE:_files' \ + --ssh'[path to SSH client utility. default="ssh"]:SSH:' \ + --ssh-keygen'[path to ssh-keygen utility. default="ssh-keygen"]:KEYGEN:' \ + --sshkey'[path to SSH key to use.]:FILE:_files' \ + --sshport'[host SSH port (forward to port 22 in VM). default=2022]:PORT:' \ + --upperip'[VirtualBox host-only network DHCP upper bound. default=192.168.59.254]:IP:' \ + --vbm'[path to VirtualBox management utility. default="VBoxManage"]' \ + '(-v --verbose)'{-v,--verbose}'[display verbose command invocations. default=false]' \ + --vm'[virtual machine name. default="boot2docker-vm"]' \ + '*::boot2docker commands:_boot2docker_command' +} + +(( $+functions[_boot2docker_command] )) || +_boot2docker_command() { + local _boot2docker_cmds + + _boot2docker_cmds=( + 'init:Create a new boot2docker VM.' \ + 'up:Start VM from any states.' \ + 'start:Start VM from any states.' \ + 'boot:Start VM from any states.' \ + 'ssh:Login to VM via SSH.' \ + 'save:Suspend VM and save state to disk.' \ + 'suspend:Suspend VM and save state to disk.' \ + "down:Gracefully shutdown the VM." \ + "stop:Gracefully shutdown the VM." \ + "halt:Gracefully shutdown the VM." \ + "restart:Gracefully reboot the VM." \ + "poweroff:Forcefully power off the VM (might corrupt disk image)." \ + "reset:Forcefully power cycle the VM (might corrupt disk image)." \ + "delete:Delete boot2docker VM and its disk image." \ + "destroy:Delete boot2docker VM and its disk image." \ + "config:Show selected profile file settings." \ + "cfg:Show selected profile file settings." \ + "info:Display detailed information of VM." \ + "ip:Display the IP address of the VM's Host-only network." \ + "status:Display current state of VM." \ + "download:Download boot2docker ISO image." \ + "upgrade:Upgrade the boot2docker ISO image (if vm is running it will be stopped and started)." \ + "version:Display version information." + ) + + if (( CURRENT == 1 )); then + _describe -t commands 'boot2docker subcommand' _boot2docker_cmds + fi +} + +_boot2docker "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_bower b/.zprezto/modules/completion/external/src/_bower new file mode 100644 index 0000000..303b976 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_bower @@ -0,0 +1,147 @@ +#compdef bower +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Bower (http://bower.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Joe Lencioni (https://github.com/lencioni) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line _packages _opts ret=1 + +_arguments -C -A "-v" -A "--version" \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +case $state in + cmds) + _values "bower command" \ + "cache[Manage bower cache]" \ + "help[Display help information about Bower]" \ + "home[Opens a package homepage into your favorite browser]" \ + "info[Info of a particular package]" \ + "init[Interactively create a bower.json file]" \ + "install[Install a package locally]" \ + "link[Symlink a package folder]" \ + "list[List local packages - and possible updates]" \ + "login[Authenticate with GitHub and store credentials]" \ + "lookup[Look up a package URL by name]" \ + "prune[Removes local extraneous packages]" \ + "register[Register a package]" \ + "search[Search for a package by name]" \ + "update[Update a local package]" \ + "uninstall[Remove a local package]" \ + "unregister[Remove a package from the registry]" \ + "version[Bump a package version]" + _arguments \ + '(--force)--force[Makes various commands more forceful]' \ + '(--json)--json[Output consumable JSON]' \ + '(--log-level)--log-level[What level of logs to report]' \ + '(--offline)--offline[Do not hit the network]' \ + '(--quiet)--quiet[Only output important information]' \ + '(--silent)--silent[Do not output anything, besides errors]' \ + '(--verbose)--verbose[Makes output more verbose]' \ + '(--allow-root)--allow-root[Allows running commands as root]' \ + '(--version)--version[Output Bower version]' \ + '(--no-color)--no-color[Disable colors]' + ret=0 + ;; + args) + case $line[1] in + help) + _values 'commands' \ + 'cache' \ + 'home' \ + 'info' \ + 'init' \ + 'install' \ + 'link' \ + 'list' \ + 'login' \ + 'lookup' \ + 'prune' \ + 'register' \ + 'search' \ + 'update' \ + 'uninstall' \ + 'unregister' \ + 'version' + ret=0 + ;; + (home|info|init|link|lookup|prune|register|search|unregister) + _arguments \ + '(--help)--help[Show help message]' + ret=0 + ;; + install) + _arguments \ + '(--force-latest)--force-latest[Force latest version on conflict]' \ + '(--help)--help[Show help message]' \ + '(--production)--production[Do not install project devDependencies]' \ + '(--save)--save[Save installed packages into the project''s bower.json dependencies]' \ + '(--save-dev)--save-dev[Save installed packages into the project''s bower.json devDependencies]' + ret=0 + ;; + list) + _arguments \ + '(--help)--help[Show help message]' \ + '(--paths)--paths[Generate a simple JSON source mapping]' \ + '(--relative)--relative[Make paths relative to the directory config property, which defaults to bower_components]' + ret=0 + ;; + login) + _arguments \ + '(--help)--help[Show help message]' \ + '(-t --token)'{-t,--token}'[Pass GitHub auth token (will not prompt for username/password)]' + ret=0 + ;; + uninstall) + _arguments \ + '(--help)--help[Show help message]' \ + '(--save)--save[Save installed packages into th projects''s bower.json dependencies]' \ + '(--save-dev)--save-dev[Save installed packages into th projects''s bower.json devDependencies]' + ret=0 + ;; + update) + _arguments \ + '(--force-latest)--force-latest[Force latest version on conflict]' \ + '(--help)--help[Show help message]' \ + '(--production)--production[Do not install project devDependencies]' + ret=0 + ;; + version) + _arguments \ + '(--message)--message[Custom git commit and tag message]' + ret=0 + ;; + exec) + _normal && ret=0 + ;; + *) + _opts=( $(bower help $line[1] | sed -e '/^ \[-/!d; s/^ \[\(-[^=]*\)=.*/\1/') ) + _opts+=( $(bower help $line[1] | sed -e '/^ -/!d; s/^ \(-.\), \[\(-[^=]*\)=.*/\1 \2/') ) + if [[ $_opts != "" ]]; then + _values 'options' $_opts && ret=0 + fi + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_bpython b/.zprezto/modules/completion/external/src/_bpython new file mode 100644 index 0000000..ed16ecd --- /dev/null +++ b/.zprezto/modules/completion/external/src/_bpython @@ -0,0 +1,52 @@ +#compdef bpython bpython2 +# ------------------------------------------------------------------------------ +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for bpython (http://bpython-interpreter.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + +_arguments -A "-*" \ + '(-h --help)'{-h,--help}'[Show help message]' \ + '(-i --interactive)'{-i,--interactive}'[Drop to bpython shell after running file instead of exiting]' \ + '(-q --quiet)'{-q,--quiet}"[Don't flush the output to stdout]" \ + '(-V --version)'{-V,--version}'[Print version and exit]' \ + '--config[Use CONFIG instead of default config file]:Config file:_files' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_brew b/.zprezto/modules/completion/external/src/_brew new file mode 100644 index 0000000..e51e99b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_brew @@ -0,0 +1,215 @@ +#compdef brew +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for brew (https://github.com/mxcl/homebrew). +# +# Source: https://github.com/mxcl/homebrew/blob/master/Library/Contributions/brew_zsh_completion.zsh +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * kulakowski (https://github.com/kulakowski) +# * Gabe Berke-Williams (https://github.com/gabebw) +# * James Conroy-Finn (https://github.com/jcf) +# * Daniel Schauenberg (https://github.com/mrtazz) +# * Adam Vandenberg (https://github.com/adamv) +# * Erik Kastner (https://github.com/kastner) +# * Katsunori Kanda (https://github.com/potix2) +# +# ------------------------------------------------------------------------------ + + +_brew_all_formulae() { + formulae=(${(f)"$(_call_program formulae brew search 2>/dev/null)"}) +} + +_brew_installed_formulae() { + installed_formulae=(${(f)"$(_call_program formulae brew list 2>/dev/null)"}) +} + +_brew_installed_taps() { + installed_taps=(${(f)"$(_call_program formulae brew tap 2>/dev/null)"}) +} + +_brew_outdated_formulae() { + outdated_formulae=(${(f)"$(_call_program formulae brew outdated 2>/dev/null)"}) +} + +_brew_cask() { + local -a _1st_arguments + _1st_arguments=( + "alfred:displays note about new built-in alfred support" + "audit:verifies installability of Casks" + "cat:dump raw source of the given Cask to the standard output" + "cleanup:cleans up cached downloads and tracker symlinks" + "create:creates the given Cask and opens it in an editor" + "doctor:checks for configuration issues" + "edit:edits the given Cask" + "fetch:downloads Cask resources to local cache" + "home:opens the homepage of the given Cask" + "info:displays information about the given Cask" + "install:installs the given Cask" + "list:with no args, lists installed Casks; given installed Casks, lists staged files" + "search:searches all known Casks" + "uninstall:uninstalls the given Cask" + "update:a synonym for 'brew update'" + "zap:zaps all files associated with the given Cask" + ) + + if (( CURRENT == 2 )); then + _describe -t commands "brew cask subcommand" _1st_arguments + return + fi + + local expl + local -a all_cask_formulae installed_cask_formulae + case "$words[2]" in + audit|cat|edit|info|install|search) + all_cask_formulae=( $(brew cask search 2>/dev/null) ) + _wanted all_cask_formulae expl 'all cask formulae' compadd -a all_cask_formulae ;; + uninstall|zap) + installed_cask_formulae=( $(brew cask list 2>/dev/null) ) + _wanted installed_cask_formulae expl 'installed cask formulae' compadd -a installed_cask_formulae ;; + *) ;; + esac +} + +local -a _1st_arguments +_1st_arguments=( + 'audit:check formulae for Homebrew coding style' + 'cat:display formula file for a formula' + 'cleanup:uninstall unused and old versions of packages' + 'create:create a new formula' + 'deps:list dependencies and dependants of a formula' + 'doctor:audits your installation for common issues' + 'diy:automatically determine the installation prefix for non-Homebrew software' + 'edit:edit a formula' + 'fetch:download the source packages for the given formulae' + 'home:visit the homepage of a formula or the brew project' + 'info:information about a formula' + 'install:install a formula' + 'link:link a formula' + 'list:list files in a formula or not-installed formulae' + 'log:git commit log for a formula' + 'missing:check all installed formulae for missing dependencies.' + 'options:display install options specific to formula' + 'outdated:list formulae for which a newer version is available' + 'prune:remove dead links' + 'reinstall:install a formula anew; re-using its current options' + 'remove:remove a formula' + 'search:search for a formula (/regex/ or string)' + 'server:start a local web app that lets you browse formulae (requires Sinatra)' + 'services:manage background services via launchctl' + 'tap:tap a new formula repository from GitHub, or list existing taps' + 'test:a few formulae provide a test method' + 'unlink:unlink a formula' + 'untap:remove a tapped repository' + 'unpin:unpin specified formulae' + 'update:freshen up links' + 'upgrade:upgrade outdated formulae' + 'uses:show formulae which depend on a formula' + 'versions:list previous versions of formulae' +) + +local expl +local -a formulae installed_formulae installed_taps outdated_formulae + +_arguments \ + '(-v)-v[verbose]' \ + '(--cellar)--cellar[brew cellar]' \ + '(--config)--config[brew configuration]' \ + '(--env)--env[brew environment]' \ + '(--repository)--repository[brew repository]' \ + '(--version)--version[version information]' \ + '(--prefix)--prefix[where brew lives on this system]' \ + '(--cache)--cache[brew cache]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands "brew subcommand" _1st_arguments + return +fi + +case "$words[1]" in + search|-S) + _arguments \ + '(--debian)--debian[search the Debian repository]' \ + '(--fedora)--fedora[search the Fedora repository]' \ + '(--fink)--fink[search the Fink repository]' \ + '(--macports)--macports[search the Macports repository]' \ + '(--opensuse)--opensuse[search the OpenSuse repository]' \ + '(--ubuntu)--ubuntu[search the Ubuntu repository]' \ + '1: :->forms' && return 0 + + if [[ "$state" == forms ]]; then + _brew_all_formulae + _wanted formulae expl 'all formulae' compadd -a formulae + fi ;; + link|ln) + _arguments \ + '(-n --dry-run)'{-n,--dry-run}'[All files would be linked or be deleted will be listed, but no real linking or deletion will be done]' \ + '(--force)--force[Allow keg-only formulae to be linked]' \ + '(--overwrite)--overwrite[Also delete files which already exist in the prefix while linking]' \ + '1: :->forms' && return 0 + + if [[ "$state" == forms ]]; then + _brew_installed_formulae + _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae + fi ;; + list|ls) + _arguments \ + '(--unbrewed)--unbrewed[files in brew --prefix not controlled by brew]' \ + '(--pinned)--pinned[list all versions of pinned formulae]' \ + '(--versions)--versions[list all installed versions of a formula]' \ + '1: :->forms' && return 0 + + if [[ "$state" == forms ]]; then + _brew_installed_formulae + _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae + fi ;; + install|reinstall) + _arguments \ + '(--devel)--devel[install the development version]' \ + '(--env=std)--env=std[use the standard build environment instead of superenv]' \ + '(--env=super)--env=super[use superenv even if the formula specifies the standard build environment]' \ + '(--fresh)--fresh[the installation process will not re-use any options from previous installs]' \ + '(--ignore-dependencies)--ignore-dependencies[skip any dependencies installation]' \ + '(--use-clang)--use-clang[attempt to compile using clang]' \ + '(--use-gcc)--use-gcc[attempt to compile using GCC]' \ + '(--use-llvm)--use-llvm[attempt to compile using the LLVM front-end to GCC]' \ + '1: :->forms' && return 0 + + if [[ "$state" == forms ]]; then + _brew_all_formulae + _wanted formulae expl 'all formulae' compadd -a formulae + fi ;; + audit|home|homepage|log|info|abv|uses|cat|deps|edit|options) + _brew_all_formulae + _wanted formulae expl 'all formulae' compadd -a formulae ;; + remove|rm|uninstall|unlink|cleanup|pin|unpin|test) + _brew_installed_formulae + _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae ;; + tap) + _arguments \ + '(--repair)--repair[repair all tap formula, i.e. symlinks and dead formula]' && return 0 ;; + upgrade) + _brew_outdated_formulae + _wanted outdated_formulae expl 'outdated formulae' compadd -a outdated_formulae ;; + untap) + _brew_installed_taps + _wanted installed_taps expl 'installed taps' compadd -a installed_taps ;; + cask) + _brew_cask ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/.zprezto/modules/completion/external/src/_bundle b/.zprezto/modules/completion/external/src/_bundle new file mode 100644 index 0000000..89d9dcf --- /dev/null +++ b/.zprezto/modules/completion/external/src/_bundle @@ -0,0 +1,92 @@ +#compdef bundle +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Bundler (http://gembundler.com). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line _gems _opts ret=1 + +_arguments -C -A "-v" -A "--version" \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +case $state in + cmds) + _values "bundle command" \ + "install[Install the gems specified by the Gemfile or Gemfile.lock]" \ + "update[Update dependencies to their latest versions]" \ + "package[Package the .gem files required by your application]" \ + "exec[Execute a script in the context of the current bundle]" \ + "config[Specify and read configuration options for bundler]" \ + "check[Determine whether the requirements for your application are installed]" \ + "list[Show all of the gems in the current bundle]" \ + "show[Show the source location of a particular gem in the bundle]" \ + "console[Start an IRB session in the context of the current bundle]" \ + "open[Open an installed gem in the editor]" \ + "viz[Generate a visual representation of your dependencies]" \ + "init[Generate a simple Gemfile, placed in the current directory]" \ + "gem[Create a simple gem, suitable for development with bundler]" \ + "help[Describe available tasks or one specific task]" \ + "platform[Displays platform compatibility information]" \ + "outdated[Show all of the outdated gems in the current bundle]" + ret=0 + ;; + args) + case $line[1] in + help) + _values 'commands' 'install' 'update' 'package' 'exec' 'config' 'check' 'list' 'show' 'console' 'open' 'viz' 'init' 'gem' 'help' 'platform' 'outdated' && ret=0 + ;; + install) + _arguments \ + '(--no-color)--no-color[disable colorization in output]' \ + '(--local)--local[do not attempt to connect to rubygems.org]' \ + '(--quiet)--quiet[only output warnings and errors]' \ + '(--gemfile)--gemfile=-[use the specified gemfile instead of Gemfile]:gemfile' \ + '(--system)--system[install to the system location]' \ + '(--deployment)--deployment[install using defaults tuned for deployment environments]' \ + '(--frozen)--frozen[do not allow the Gemfile.lock to be updated after this install]' \ + '(--path)--path=-[specify a different path than the system default]:path:_files' \ + '(--binstubs)--binstubs=-[generate bin stubs for bundled gems to ./bin]:directory:_files' \ + '(--without)--without=-[exclude gems that are part of the specified named group]:groups' + ret=0 + ;; + exec) + _normal && ret=0 + ;; + (open|show) + _gems=( $(bundle show 2> /dev/null | sed -e '/^ \*/!d; s/^ \* \([^ ]*\) .*/\1/') ) + if [[ $_gems != "" ]]; then + _values 'gems' $_gems && ret=0 + fi + ;; + *) + _opts=( $(bundle help $line[1] | sed -e '/^ \[-/!d; s/^ \[\(-[^=]*\)=.*/\1/') ) + _opts+=( $(bundle help $line[1] | sed -e '/^ -/!d; s/^ \(-.\), \[\(-[^=]*\)=.*/\1 \2/') ) + if [[ $_opts != "" ]]; then + _values 'options' $_opts && ret=0 + fi + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_cabal b/.zprezto/modules/completion/external/src/_cabal new file mode 100644 index 0000000..a598f00 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_cabal @@ -0,0 +1,648 @@ +#compdef cabal +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for cabal-install (http://hackage.haskell.org/trac/hackage/wiki/CabalInstall) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Gérard Milmeister +# * Matvey Aksenov +# +# ------------------------------------------------------------------------------ + +local WORDS + +_cabal () +{ + WORDS=() + for w in $words[1,(($CURRENT - 1))]; do + if [[ $w != -* ]]; then WORDS+=$w; fi + done + + if (( $#WORDS == 1 )); then + _arguments \ + {-h,--help}'[show help]' \ + {-V,--version}'[print version information]' \ + '--numeric-version[print just the version number]' \ + '--config-file=[set an alternate location for the config file]:config file:_files' \ + '--sandbox-config-file=[set an alternate location for the sandbox config file]:config file:_files' \ + '--require-sandbox[enable requiring the presence of a sandbox for sandbox-aware commands]' \ + '--no-require-sandbox[disable requiring the presence of a sandbox for sandbox-aware commands]' \ + '--ignore-sandbox[ignore any existing sandbox]' \ + '*::command:_cabal_command' + else + _arguments '*::command:_cabal_command' + fi +} + +_cabal_command () +{ + local -a _cabal_cmds + _cabal_cmds=( + 'install:installs a list of packages' + 'update:updates list of known packages' + 'list:list packages matching a search string' + 'info:display detailed information about a particular package' + 'fetch:downloads packages for later installation' + 'freeze:freeze dependencies' + "get:get a package's source code" + 'check:check the package for common mistakes' + 'sdist:generate a source distribution file (.tar.gz)' + 'upload:uploads source packages to Hackage' + 'report:upload build reports to a remote server' + 'run:runs the compiled executable' + 'init:interactively create a .cabal file' + 'configure:prepare to build the package' + 'build:compile all targets or specific targets' + 'repl:open an interpreter session for the given target' + 'sandbox:create/modify/delete a sandbox' + 'haddock:generate Haddock HTML documentation' + 'exec:run a command with the cabal environment' + 'copy:copy the files into the install locations' + 'clean:clean up after a build' + 'hscolour:generate HsColour colourised code, in HTML format' + 'register:register this package with the compiler' + 'test:run the test suite, if any (configure with UserHooks)' + 'bench:run the benchmark, if any (configure with UserHooks)' + 'help:help about commands' + ) + + local -a _cabal_programs + _cabal_programs=() + + programs=(alex ar c2hs cpphs ffihugs gcc ghc ghc-pkg greencard haddock + happy hmake hpc hsc2hs hscolour hugs jhc ld lhc lhc-pkg nhc98 pkg-config + ranlib strip tar uhc) + + for program in $programs; do + _cabal_programs+=( + "--with-${program}=[give the path to ${program}]:file:_files" + "--${program}-options=[give extra options to ${program}]" + "--${program}-option=[give an extra option to ${program}]" + ) + done + + if (( CURRENT == 1 )) then + _describe -t commands 'command' _cabal_cmds || compadd "$@" + else + local curcontext="$curcontext" + cmd="${${_cabal_cmds[(r)$WORDS[2]:*]%%:*}}" + if (( $#cmd )); then + _call_function ret _cabal_$cmd + else + _message "unknown cabal command: $WORDS[2]" + fi + fi +} + +_cabal_bench () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + '--benchmark-options=[give extra options to benchmark executables]' \ + '--benchmark-option=[give an extra option to benchmark executables (no need to quote options containing spaces)]' \ + {-j,--jobs=}'[run NUM jobs simultaneously]' \ + $_cabal_programs \ + "--only[don't reinstall add-source dependencies (sandbox-only)]" +} + +_cabal_build () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + $_cabal_programs \ + {-j,--jobs=}'[run NUM jobs simultaneously]' \ + "--only[don't reinstall add-source dependencies (sandbox-only)]" +} + +_cabal_check () +{ + _arguments {-h,--help}'[show help]' +} + +_cabal_clean () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + {-s,--save-configure}'[do not remove the configuration file]' +} + +_cabal_configure () +{ + local context state state_descr line + typeset -A opt_args + + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + {-g,--ghc}'[compile with GHC]' \ + '--nhc98[compile with NHC]' \ + '--jhc[compile with JHC]' \ + '--lhc[compile with LHC]' \ + '--hugs[compile with Hugs]' \ + '--uhc[compile with UHC]' \ + '--haskell-suite[compile with a haskell-suite compiler]' \ + {-w,--with-compiler=}'[give the path to a particular compiler]:file:_files' \ + '--with-hc-pkg=[give the path to the package tool]:file:_files' \ + '--prefix=[take this prefix in preparation of installation]:directory:_files -/' \ + '--bindir=[installation directory for executables]:directory:_files -/' \ + '--libdir=[installation directory for libraries]:directory:_files -/' \ + '--libsubdir=[subdirectory of libdir in which libs are installed]:directory:_files -/' \ + '--libexecdir=[installation directory for program executables]:directory:_files -/' \ + '--datadir=[installation directory for read-only data]:directory:_files -/' \ + '--datasubdir=[subdirectory of datadir in which data files are installed]:directory:_files -/' \ + '--docdir=[installation directory for documentation]:directory:_files -/' \ + '--htmldir=[installation directory for HTML]:directory:_files -/' \ + '--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \ + '--sysconfdir=[installation directory for configuration files]:directory:_files -/' \ + {-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \ + '--program-prefix=[prefix to be applied to installed executables]' \ + '--program-suffix=[suffix to be applied to installed executables]' \ + '--enable-library-vanilla[enable Vanilla libraries]' \ + '--disable-library-vanilla[disable Vanilla libraries]' \ + {-p,--enable-library-profiling}'[enable Library profiling]' \ + '--disable-library-profiling[disable Library profiling]' \ + '--enable-shared[enable Shared library]' \ + '--disable-shared[disable Shared library]' \ + '--enable-executable-dynamic[enable Executable dynamic linking]' \ + '--disable-executable-dynamic[disable Executable dynamic linking]' \ + '--enable-executable-profiling[enable Executable profiling]' \ + '--disable-executable-profiling[disable Executable profiling]' \ + {-O-,--enable-optimization=}'[build with optimization]:level:(0 1 2)' \ + '--disable-optimization[build without optimization]' \ + '--enable-library-for-ghci[enable compile library for use with GHCi]' \ + '--disable-library-for-ghci[disable compile library for use with GHCi]' \ + '--enable-split-objs[enable split library into smaller objects]' \ + '--disable-split-objs[disable split library into smaller objects]' \ + '--enable-executable-stripping[enable strip executables upon installation]' \ + '--disable-executable-stripping[disable strip executables upon installation]' \ + '--configure-option=[extra option for configure]' \ + '--user[enable doing a per-user installation]' \ + '--global[disable doing a per-user installation]' \ + '--package-db=[use a given package database]:: :->default-db-or-filepath' \ + {-f,--flags=}'[force values for the given flags]:flags:' \ + '--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \ + '--extra-lib-dirs=[a list of directories to search for externallibraries]:directory:_files -/' \ + '--extra-prog-path=[A list of directories to search for required programs]:directory:_files -/' \ + '--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \ + '--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \ + '--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ + '--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ + '--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \ + '--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \ + $_cabal_programs \ + '--cabal-lib-version=[select which version of the Cabal lib to use]' \ + '--constraint=[a list of additional constraints on the dependencies]' \ + '--preference=[specify preferences on the version of a package]' \ + '--solver=[select dependency solver to use]:solver:(topdown modular choose)' \ + '--allow-newer=[ignore upper bounds in dependencies on some or all packages]' + + case $state in + (default-db-or-filepath) + _alternative \ + ':default db:(global user clear)' \ + ':filepath:_files' + ;; + esac +} + +_cabal_copy () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build]:directory:_files -/' \ + '--destdir=[directory to copy files to]:directory:_files -/' +} + +_cabal_exec () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' +} + +_cabal_fetch () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--dependencies[resolve and fetch dependencies]' \ + '--no-dependencies[ignore dependencies]' \ + '--dry-run[do not install anything, only print what would be installed]' \ + '--solver=[select dependency solver to use]:solver:(topdown modular choose)]' \ + '--max-backjumps=[maximum number of backjumps allowed while solving dependencies]' \ + '--reorder-goals[try to reorder goals according to certain heuristics]' \ + '--shadow-installed-packages[if multiple package instances of the same version are installed, treat all but one as shadowed]' \ + '*:package:_cabal_list_packages' +} + +_cabal_freeze () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--dry-run[do not freeze anything, only print what would be frozen]' \ + '--solver=[select dependency solver to use]:solver:(topdown modular choose)]' \ + '--max-backjumps=[maximum number of backjumps allowed while solving dependencies]' \ + '--reorder-goals[try to reorder goals according to certain heuristics]' \ + '--shadow-installed-packages[if multiple package instances of the same version are installed, treat all but one as shadowed]' +} + +_cabal_get () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + {-d-,--destdir=}'[where to unpack the packages]:directory:_files -/' \ + {-s,--source-repository=}"[copy the package's source repository]" \ + '--pristine[unpack the original pristine tarball, rather than updating the .cabal file with the latest revision from the package archive.]' \ + '*:package:_cabal_list_packages' +} + +_cabal_haddock () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ + '--keep-temp-files[keep temporary files]' \ + '--hoogle[generate a hoogle database]' \ + '--html[generate HTML documentation]' \ + '--html-location=[location of HTML documentation]:url:' \ + '--executables[run haddock for Executables targets]' \ + '--tests[run haddock for Test Suite targets]' \ + '--benchmarks[run haddock for Benchmark targets]' \ + '--all[run haddock for all targets]' \ + '--internal[run haddock for internal modules]' \ + '--css=[path to the haddock stylesheet]:file:_files' \ + '--hyperlink-source[hyperlink the documentation to the source code]' \ + '--hscolour-css=[path to the HsColour stylesheet]:file:_files' \ + '--contents-location=[bake URL in as the location for the contents page]:url:' \ + '--with-ghc=[path to ghc]:file:_files' \ + '--with-haddock=[path to haddock]:file:_files' \ + '--PROG-option=[give an extra option to PROG (no need to quote options containing spaces)]:option:' \ + '--ghc-options=[give extra options to ghc]:option:' \ + '--haddock-options=[give extra options to haddock]:option:' \ +} + +_cabal_help () +{ + local -a cmds + cmds=(install update list info fetch freeze get check sdist upload report run init + configure build repl sandbox haddock exec copy clean hscolour register test bench help) + _arguments \ + {-h,--help}'[Show help]' \ + '*::command:( $cmds )' +} + +_cabal_hscolour () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ + '--executables[run hscolour for Executables targets]' \ + '--tests[run hscolour for Test Suite targets]' \ + '--benchmarks[run hscolour for Benchmarks targets]' \ + '--all[run hscolour for all targets]' \ + '--css=[path to stylesheet]:file:_files' +} + +_cabal_info () +{ + local context state state_descr line + typeset -A opt_args + + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--package-db=[use a given package database]:: :->default-db-or-filepath' \ + '*:package:_cabal_list_packages' + + case $state in + (default-db-or-filepath) + _alternative \ + ':default db:(global user clear)' \ + ':filepath:_files' + ;; + esac +} + +_cabal_install () +{ + local context state state_descr line + typeset -A opt_args + + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + {-g,--ghc}'[compile with GHC]' \ + '--nhc98[compile with NHC]' \ + '--jhc[compile with JHC]' \ + '--lhc[compile with LHC]' \ + '--hugs[compile with Hugs]' \ + '--uhc[compile with UHC]' \ + '--haskell-suite[compile with a haskell-suite compiler]' \ + {-w,--with-compiler=}'[give the path to a particular compiler]:file:_files' \ + '--with-hc-pkg=[give the path to the package tool]:file:_files' \ + '--prefix=[take this prefix in preparation of installation]:directory:_files -/' \ + '--bindir=[installation directory for executables]:directory:_files -/' \ + '--libdir=[installation directory for libraries]:directory:_files -/' \ + '--libsubdir=[subdirectory of libdir in which libs are installed]:directory:_files -/' \ + '--libexecdir=[installation directory for program executables]:directory:_files -/' \ + '--datadir=[installation directory for read-only data]:directory:_files -/' \ + '--datasubdir=[subdirectory of datadir in which data files are installed]:directory:_files -/' \ + '--docdir=[installation directory for documentation]:directory:_files -/' \ + '--htmldir=[installation directory for HTML]:directory:_files -/' \ + '--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \ + '--sysconfdir=[installation directory for configuration files]:directory:_files -/' \ + {-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \ + '--program-prefix=[prefix to be applied to installed executables]' \ + '--program-suffix=[suffix to be applied to installed executables]' \ + '--enable-library-vanilla[enable Vanilla libraries]' \ + '--disable-library-vanilla[disable Vanilla libraries]' \ + {-p,--enable-library-profiling}'[enable Library profiling]' \ + '--disable-library-profiling[disable Library profiling]' \ + '--enable-shared[enable Shared library]' \ + '--disable-shared[disable Shared library]' \ + '--enable-executable-dynamic[enable Executable dynamic linking]' \ + '--disable-executable-dynamic[disable Executable dynamic linking]' \ + '--enable-executable-profiling[enable Executable profiling]' \ + '--disable-executable-profiling[disable Executable profiling]' \ + {-O-,--enable-optimization=}'[build with optimization]:level:(0 1 2)' \ + '--disable-optimization[build without optimization]' \ + '--enable-library-for-ghci[enable compile library for use with GHCi]' \ + '--disable-library-for-ghci[disable compile library for use with GHCi]' \ + '--enable-split-objs[enable split library into smaller objects]' \ + '--disable-split-objs[disable split library into smaller objects]' \ + '--enable-executable-stripping[enable strip executables upon installation]' \ + '--disable-executable-stripping[disable strip executables upon installation]' \ + '--configure-option=[extra option for configure]' \ + '--user[enable doing a per-user installation]' \ + '--global[disable doing a per-user installation]' \ + '--package-db=[use a given package database]:: :->default-db-or-filepath' \ + {-f,--flags=}'[force values for the given flags]:flags:' \ + '--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \ + '--extra-lib-dirs=[a list of directories to search for external libraries]:directory:_files -/' \ + '--extra-prog-path=[a list of directories to search for required programs]:directory:_files -/' \ + '--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \ + '--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \ + '--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ + '--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ + '--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \ + '--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \ + $_cabal_programs \ + '--cabal-lib-version=[select which version of the Cabal lib to use]' \ + '--constraint=[a list of additional constraints on the dependencies]' \ + '--preference=[specify preferences on the version of a package]' \ + '--solver=[select dependency solver to use]:solver:(topdown modular choose)' \ + '--allow-newer=[ignore upper bounds in dependencies on some or all packages]' \ + '--enable-documentation[enable building of documentation]' \ + '--disable-documentation[disable building of documentation]' \ + '--doc-index-file=[a central index of haddock API documentation]:file:_files' \ + '--dry-run[do not install anything]' \ + '--max-backjumps=[maximum number of backjumps allowed while solving dependencies]' \ + '--reorder-goals[try to reorder goals according to certain heuristics]' \ + '--shadow-installed-packages[if multiple package instances of the same version are installed, treat all but one as shadowed]' \ + '--reinstall[always install]' \ + '--avoid-reinstalls[do not select versions that would destructively overwrite installed packages]' \ + '--force-reinstalls[reinstall packages even if they will most likely break other installed packages]' \ + '--upgrade-dependencies[pick the latest version for all dependencies, rather than trying to pick an installed version]' \ + {--only-dependencies,--dependencies-only}'[install only the dependencies necessary to build the given packages]' \ + '--root-cmd=[command used to gain root privileges]::' \ + '--symlink-bindir=[add symlinks into this directory]:directory:_files -/' \ + '--build-summary=[save build summaries to file]:file:_files' \ + '--build-log=[log all builds to file]:file:_files' \ + '--remote-build-reporting=[generate build reports to send to a remote]:level:(none anonymous detailed)' \ + '--one-shot[do not record the packages in the world file]' \ + '--run-tests[run package test suites during installation]' \ + {-j,--jobs=}'[run NUM jobs simultaneously]' \ + '--haddock-hoogle[generate a hoogle database]' \ + '--haddock-html[generate HTML documentation]' \ + '--haddock-html-location=[location of HTML documentation]:url:' \ + '--haddock-executables[run haddock for Executables targets]' \ + '--haddock-tests[run haddock for Test Suite targets]' \ + '--haddock-benchmarks[run haddock for Benchmarks targets]' \ + '--haddock-all[run haddock for all targets]' \ + '--haddock-internal[run haddock for internal modules]' \ + '--haddock-css=[path to the haddock stylesheet]:file:_files' \ + '--haddock-hyperlink-source[hyperlink the documentation to the source code]' \ + '--haddock-hscolour-css=[path to the HsColour stylesheet]:file:_files' \ + '--haddock-contents-location=[bake URL in as the location for the contents page]:url:' \ + '*:: :->package-or-cabal-file' + + case $state in + (default-db-or-filepath) + _alternative \ + ':default db:(global user clear)' \ + ':filepath:_files' + ;; + (package-or-cabal-file) + _alternative \ + ':package:_cabal_list_packages' \ + ':files:_files -g "*.cabal"' + ;; + esac +} + +_cabal_list () +{ + local context state state_descr line + typeset -A opt_args + + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--installed[only print installed packages]' \ + '--simple-output[print in a easy-to-parse format]' \ + '--package-db=[use a given package database]:: :->default-db-or-filepath' \ + '*:package:_cabal_list_packages' + + case $state in + (default-db-or-filepath) + _alternative \ + ':default db:(global user clear)' \ + ':filepath:_files' + ;; + esac +} + +_cabal_register () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ + "--user[register in user's local package database]" \ + "--global[register in the system-wide package database]" \ + '--inplace[register in build location]' \ + '--gen-script[generate a script to register later]' \ + '--gen-pkg-config=[generate package registration file]' +} + +_cabal_repl () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + $_cabal_programs +} + +_cabal_report () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + {-u,--username=}'[hackage username]' \ + {-p,--password=}'[hackage password]' +} + +_cabal_run () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ + {-j,--jobs=}'[run NUM jobs simultaneously]' \ + $_cabal_programs \ + "--only[don't reinstall add-source dependencies (sandbox-only)]" +} + +_cabal_sandbox () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--sandbox=[Sandbox location]:sandbox:_files -/' + + if (( CURRENT == 2 )); then + local -a _cabal_sandbox_cmds + _cabal_sandbox_cmds=( + 'init:initialize the sandbox' + 'delete:delete the sandbox' + 'add-source:add sources path to sandbox' + 'hc-pkg:call sandbox related haskell compiler package database' + 'list-sources:list added sources paths' + ) + _describe -t sandbox-commands 'sandbox-command' _cabal_sandbox_cmds || compadd "$@" + else + case $WORDS[3] in + add-source) + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--snapshot[take a snapshot instead of creating a link]' \ + '--sandbox=[Sandbox location]:sandbox:_files -/' \ + '*:sources:_files -/' + ;; + *) + _message "unknown cabal sandbox command: $WORDS[3]" + ;; + esac + fi +} + +_cabal_sdist () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ + "--list-sources=[just write a list of the package's sources to a file]:directory:_files -/" \ + '--snapshot[produce a snapshot source distribution]' \ + '--output-directory=[generate a source distribution in the given directory]:directory:_files -/' \ + '--targz[produce a .tar.gz format archive]' \ + '--zip[produce a .zip format archive]' +} + +_cabal_test () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ + '--log=[log all test suite results to file]:file:_files' \ + '--machine-log=[produce a machine-readable log file]:file:_files' \ + '--show-details=[when to show results of individual test cases?]:filter:(always never failures)' \ + '--keep-tix-files[keep .tix files for HPC between test runs]' \ + '--test-options=[give extra options to test executables]' \ + '--test-option=[give an extra option to test executables]' \ + {-j,--jobs=}'[run NUM jobs simultaneously]' \ + $_cabal_programs \ + "--only[don't reinstall add-source dependencies (sandbox-only)]" +} + +_cabal_update () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' +} + +_cabal_upload () +{ + _arguments \ + {-h,--help}'[show help]' \ + {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ + {-c,--check}'[do not upload, just do QA checks]' \ + {-u-,--username=}'[hackage username]' \ + {-p-,--password=}'[hackage password]' \ + '*:file:_files -g "*.tar.gz"' +} + +_cabal_list_packages () { + _cabal_get_available_packages + _cabal_get_available_files=(*.cabal) + compadd "$@" -a -- _cabal_available_packages _cabal_get_available_files +} + +_cabal_get_available_packages () +{ + if ( [[ ${+_cabal_available_packages} -eq 0 ]] || _cache_invalid CABAL_AVAILABLE_PACKAGES ) && + ! _retrieve_cache CABAL_AVAILABLE_PACKAGES; + then + _cabal_available_packages=( $(cabal list --simple-output | cut -d' ' -f1 | uniq) ) + _store_cache CABAL_AVAILABLE_PACKAGES _cabal_available_packages + fi +} + +_cabal "$@" diff --git a/.zprezto/modules/completion/external/src/_cap b/.zprezto/modules/completion/external/src/_cap new file mode 100644 index 0000000..b6def37 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_cap @@ -0,0 +1,56 @@ +#compdef cap +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Capistrano (http://capify.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + {-d,--debug}'[Prompts before each remote command execution]' \ + {-e,--explain}'[Displays help (if available) for the task]:task' \ + {-F,--default-config}'[Always use default config, even with -f]' \ + {-f,--file}'[A recipe file to load. May be given more than once]:file:_files' \ + {-H,--long-help}'[Explain these options and environment variables]' \ + {-h,--help}'[Display this help message]' \ + {-l,--logger}'[Choose logger method. STDERR used by default]:file:_files' \ + {-n,--dry-run}'[Prints out commands without running them]' \ + {-p,--password}'[Immediately prompt for the password]' \ + {-q,--quiet}'[Make the output as quiet as possible]' \ + {-r,--preserve-roles}'[Preserve task roles]' \ + {-S,--set-before}'[Set a variable before the recipes are loaded]:variable' \ + {-s,--set}'[Set a variable after the recipes are loaded]:variable' \ + {-T,--tasks}'[List all tasks (matching optional PATTERN) in the loaded recipe files]:pattern' \ + {-t,--tool}'[Abbreviates the output of -T for tool integration]' \ + {-V,--version}'[Display the Capistrano version, and exit]' \ + {-v,--verbose}'[Be more verbose. May be given more than once]' \ + {-X,--skip-system-config}'[Do not load the system config file (capistrano.conf)]' \ + {-x,--skip-user-config}'[Do not load the user config file (.caprc)]' \ + '*: :->cmds' && ret=0 + +case $state in + cmds) + cmds=( ${(f)"$(_call_program commands cap -T 2> /dev/null | sed -e '/ # /!d; s/:/\\:/g; s/cap \([A-Za-z0-9\\:_-]*\) .*# /\1:/')"} ) + _describe -t commands 'cap command' cmds && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_cask b/.zprezto/modules/completion/external/src/_cask new file mode 100644 index 0000000..b2ba82a --- /dev/null +++ b/.zprezto/modules/completion/external/src/_cask @@ -0,0 +1,89 @@ +#compdef cask +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for cask (http://cask.readthedocs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * ptrv +# * Johan Andersson +# * Sebastien Duthil +# +# ------------------------------------------------------------------------------ + +function _cask() { + local ret=1 state + _arguments \ + ':subcommand:->subcommand' \ + '*:: :->subcmds' && ret=0 + + case $state in + subcommand) + subcommands=( + "build:build all Elisp files in the files directive" + "clean-elc:remove all byte compiled Elisp files in the files directive" + "exec:execute command with correct 'exec-path' and 'load-path'" + "exec-path:print 'exec-path' for all packages and dependencies" + "files:print list of files specified in the files directive" + "help:display usage information or documentation for specified command" + "info:show info about the current package" + "init:initialize the current directory with a Cask-file" + "install:install all packages specified in the Cask-file" + "link:manage links" + "list:list dependencies" + "load-path:print 'load-path' for all packages and dependencies" + "outdated:print list of outdated packages" + "package:build package and put in specified directory (default: dist)" + "package-directory:print current package installation directory" + "path:print 'exec-path' for all packages and dependencies" + "pkg-file:write a 'define-package' file" + "update:update package version" + "upgrade-cask:upgrade Cask itself and its dependencies" + "upgrade:upgrade Cask itself and its dependencies" + "version:print program version" + ) + _describe -t subcommands 'cask subcommands' subcommands && ret=0 + esac + + case "$words[1]" in + init) + _arguments \ + '(--dev)--dev[Run in dev mode]' && ret=0 ;; + exec) + _generic + ;; + esac + + return ret +} + +_cask "$@" diff --git a/.zprezto/modules/completion/external/src/_celery b/.zprezto/modules/completion/external/src/_celery new file mode 100644 index 0000000..6c2c541 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_celery @@ -0,0 +1,139 @@ +#compdef celery +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for celery (https://github.com/celery/celery). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Dong weiming (https://github.com/dongweiming) +# +# ------------------------------------------------------------------------------ + +_celery () { +local -a _1st_arguments ifargs dopts controlargs + +typeset -A opt_args + +_1st_arguments=('worker' 'events' 'beat' 'shell' 'multi' 'amqp' 'status' 'inspect' \ + 'control' 'purge' 'list' 'migrate' 'call' 'result' 'report') +ifargs=('--app=' '--broker=' '--loader=' '--config=' '--version') +dopts=('--detach' '--umask=' '--gid=' '--uid=' '--pidfile=' '--logfile=' '--loglevel=') +controlargs=('--timeout' '--destination') +_arguments \ + '(-A --app=)'{-A,--app}'[app instance to use (e.g. module.attr_name):APP]' \ + '(-b --broker=)'{-b,--broker}'[url to broker. default is "amqp://guest@localhost//":BROKER]' \ + '(--loader)--loader[name of custom loader class to use.:LOADER]' \ + '(--config)--config[Name of the configuration module:CONFIG]' \ + '(--workdir)--workdir[Optional directory to change to after detaching.:WORKING_DIRECTORY]' \ + '(-q --quiet)'{-q,--quiet}'[Don"t show as much output.]' \ + '(-C --no-color)'{-C,--no-color}'[Don"t display colors.]' \ + '(--version)--version[show program"s version number and exit]' \ + '(- : *)'{-h,--help}'[show this help message and exit]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands "celery subcommand" _1st_arguments + return +fi + +case "$words[1]" in + worker) + _arguments \ + '(-C --concurrency=)'{-C,--concurrency=}'[Number of child processes processing the queue. The default is the number of CPUs.]' \ + '(--pool)--pool=:::(processes eventlet gevent threads solo)' \ + '(--purge --discard)'{--discard,--purge}'[Purges all waiting tasks before the daemon is started.]' \ + '(-f --logfile=)'{-f,--logfile=}'[Path to log file. If no logfile is specified, stderr is used.]' \ + '(--loglevel=)--loglevel=:::(critical error warning info debug)' \ + '(-N --hostname=)'{-N,--hostname=}'[Set custom hostname, e.g. "foo.example.com".]' \ + '(-B --beat)'{-B,--beat}'[Also run the celerybeat periodic task scheduler.]' \ + '(-s --schedule=)'{-s,--schedule=}'[Path to the schedule database if running with the -B option. Defaults to celerybeat-schedule.]' \ + '(-S --statedb=)'{-S,--statedb=}'[Path to the state database.Default: None]' \ + '(-E --events)'{-E,--events}'[Send events that can be captured by monitors like celeryev, celerymon, and others.]' \ + '(--time-limit=)--time-limit=[nables a hard time limit (in seconds int/float) for tasks]' \ + '(--soft-time-limit=)--soft-time-limit=[Enables a soft time limit (in seconds int/float) for tasks]' \ + '(--maxtasksperchild=)--maxtasksperchild=[Maximum number of tasks a pool worker can execute before it"s terminated and replaced by a new worker.]' \ + '(-Q --queues=)'{-Q,--queues=}'[List of queues to enable for this worker, separated by comma. By default all configured queues are enabled.]' \ + '(-I --include=)'{-I,--include=}'[Comma separated list of additional modules to import.]' \ + '(--pidfile=)--pidfile=[Optional file used to store the process pid.]' \ + '(--autoscale=)--autoscale=[Enable autoscaling by providing max_concurrency, min_concurrency.]' \ + '(--autoreload)--autoreload[Enable autoreloading.]' \ + '(--no-execv)--no-execv[Don"t do execv after multiprocessing child fork.]' + compadd -a ifargs + ;; + inspect) + _values -s \ + 'active[dump active tasks (being processed)]' \ + 'active_queues[dump queues being consumed from]' \ + 'ping[ping worker(s)]' \ + 'registered[dump of registered tasks]' \ + 'report[get bugreport info]' \ + 'reserved[dump reserved tasks (waiting to be processed)]' \ + 'revoked[dump of revoked task ids]' \ + 'scheduled[dump scheduled tasks (eta/countdown/retry)]' \ + 'stats[dump worker statistics]' + compadd -a controlargs ifargs + ;; + control) + _values -s \ + 'add_consumer[tell worker(s) to start consuming a queue]' \ + 'autoscale[change autoscale settings]' \ + 'cancel_consumer[tell worker(s) to stop consuming a queue]' \ + 'disable_events[tell worker(s) to disable events]' \ + 'enable_events[tell worker(s) to enable events]' \ + 'pool_grow[start more pool processes]' \ + 'pool_shrink[use less pool processes]' \ + 'rate_limit[tell worker(s) to modify the rate limit for a task type]' \ + 'time_limit[tell worker(s) to modify the time limit for a task type.]' + compadd -a controlargs ifargs + ;; + multi) + _values -s \ + '--nosplash[Don"t display program info.]' \ + '--verbose[Show more output.]' \ + '--no-color[Don"t display colors.]' \ + '--quiet[Don"t show as much output.]' \ + 'start' 'restart' 'stopwait' 'stop' 'show' \ + 'names' 'expand' 'get' 'kill' + compadd -a ifargs + ;; + amqp) + _values -s \ + 'queue.declare' 'queue.purge' 'exchange.delete' 'basic.publish' \ + 'exchange.declare' 'queue.delete' 'queue.bind' 'basic.get' + ;; + list) + _values -s, 'bindings' + ;; + shell) + _values -s \ + '--ipython[force iPython.]' \ + '--bpython[force bpython.]' \ + '--python[force default Python shell.]' \ + '--without-tasks[don"t add tasks to locals.]' \ + '--eventlet[use eventlet.]' \ + '--gevent[use gevent.]' + compadd -a ifargs + ;; + beat) + _arguments \ + '(-s --schedule=)'{-s,--schedule=}'[Path to the schedule database. Defaults to celerybeat-schedule.]' \ + '(-S --scheduler=)'{-S,--scheduler=}'[Scheduler class to use. Default is celery.beat.PersistentScheduler.]' \ + '(--max-interval)--max-interval[]' + compadd -a dopts fargs + ;; + events) + _arguments \ + '(-d --dump)'{-d,--dump}'[Dump events to stdout.]' \ + '(-c --camera=)'{-c,--camera=}'[Take snapshots of events using this camera.]' \ + '(-F --frequency=)'{-F,--frequency=}'[Camera: Shutter frequency. Default is every 1.0 seconds.]' \ + '(-r --maxrate=)'{-r,--maxrate=}'[Camera: Optional shutter rate limit (e.g. 10/m).]' + compadd -a dopts fargs + ;; + *) + ;; + esac +} diff --git a/.zprezto/modules/completion/external/src/_choc b/.zprezto/modules/completion/external/src/_choc new file mode 100644 index 0000000..3ac8c59 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_choc @@ -0,0 +1,60 @@ +#compdef choc +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for choc (http://chocolatapp.com) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nicholas Penree (https://github.com/drudge) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '(-a --async)'{-a,--async}'[do not wait for the user to close the file in Chocolat]' \ + '(-w --wait)'{-w,--wait}'[wait for file to be closed by Chocolat]' \ + '(-n --no-reactivation)'{-n,--no-reactivation}'[after editing with -w, do not reactivate the calling app]' \ + '(-h --help)'{-h,--help}'[show help information]' \ + '(-v --version)'{-v,--version}'[print version information]' \ + '*:script or directory:_files' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_cmake b/.zprezto/modules/completion/external/src/_cmake new file mode 100644 index 0000000..544137b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_cmake @@ -0,0 +1,274 @@ +#compdef cmake + +# Description +# ----------- +# +# Completion script for CMake (http://www.cmake.org). +# +# ------------------------------------------------------------------------- +# Authors +# ------- +# +# * Scott M. Kroll +# +# ------------------------------------------------------------------------- +# Notes +# ----- +# +# * By default only C and C++ languages are supported for compiler flag +# variables. To define your own list of languages: +# +# cmake_langs=('C' 'C' +# 'CXX' 'C++') +# zstyle ':completion:*:cmake:*' languages $cmake_langs +# +# ------------------------------------------------------------------------- + +_cmake() { + local context state line curcontext="$curcontext" cmake_args + + local cmake_help_actions;cmake_help_actions=( + '(- 1)--help-command[Print help for a single command and exit]:command-name:_cmake_command_names' + '(- 1)--help-command-list[List available listfile commands and exit]' + '(- 1)--help-commands[Print help for all commands and exit]' + '(- 1)--help-compatcommands[Print help for compatibility commands]' + '(- 1)--help-module[Print help for compatibility commands]:module-name:_cmake_module_names' + '(- 1)--help-module-list[Print help for a single module and exit]' + '(- 1)--help-modules[Print help for all modules and exit]' + '(- 1)--help-property[List available properties and exit]:property-name:_cmake_property_names' + '(- 1)--help-property-list[List available properties and exit]' + '(- 1)--help-properties[Print help for all properties and exit]' + '(- 1)--help-variable[Print help for a single variable and exit]:variable-name:_cmake_variable_names' + '(- 1)--help-variable-list[List documented variables and exit]' + '(- 1)--help-variables[Print help for all variables and exit]' + '(- 1)--copyright[Print the CMake copyright and exit]' + '(- 1)'{--help,-help,-usage,-h,-H}'[Print usage information and exit]' + '(- 1)--help-full[Print full help and exit]' + '(- 1)--help-html[Print full help in HTML format]' + '(- 1)--help-man[Print full help as a UNIX man page and exit]' + '(- 1)'{--version,-version}'[Print full help as a UNIX man page and exit]' + ) + + local cmake_build_options;cmake_build_options=( + '-C[Pre-load a script to populate the cache]:script:_files' + '*-D-[Create a cmake cache entry]:property:_cmake_define_property' + '-U[Remove matching entries from CMake cache]:globbing expression' + '-G[Specify a makefile generator]:generator:_cmake_generators' + '-T[Specify toolset name if supported by generator]:toolset name' + '(-Wno-dev -Wdev)-Wno-dev[Suppress developer warnings]' + '(-Wno-dev -Wdev)-Wdev[Enable developer warnings]' + '-i[Run in wizard mode]' + '-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"' + '--trace[Put cmake in trace mode]' + ':cmake project:_files -/' + ) + + local cmake_command_actions;cmake_command_actions=( + '-E[CMake command mode]:*:command' + ) + + _arguments -C -s \ + - help \ + "$cmake_help_actions[@]" \ + - command \ + "$cmake_command_actions[@]" \ + - build_opts \ + "$cmake_build_options[@]" && return 0 +} + +# ------------------- +# _cmake_command_names +# ------------------- +(( $+functions[_cmake_command_names] )) || +_cmake_command_names() { + local command_names; command_names=(${(f)"$($service --help-command-list 2> /dev/null)"}) + _values 'command name' ${command_names[@]:1} && return 0 +} + +# ----------------- +# _cmake_list_names +# ----------------- +(( $+functions[_cmake_list_names] )) || +_cmake_list_names() { + local command; command="$@[1]" + local desc; desc="$@[2]" + local list_names; list_names=(${(f)"$($service $command 2> /dev/null | sed -e 's/\[/\\\[/' -e 's/\]/\\\]/')"}) + + _values ${desc} ${list_names[@]:1} && return 0 +} + +# ------------------ +# _cmake_module_names +# ------------------ +(( $+functions[_cmake_module_names] )) || +_cmake_module_names() { + _cmake_list_names '--help-module-list' 'module name' && return 0 +} + +# -------------------- +# _cmake_property_names +# -------------------- +(( $+functions[_cmake_property_names] )) || +_cmake_property_names() { + _cmake_list_names '--help-property-list' 'property name' && return 0 +} + +# --------------------- +# _cmake_variable_names +# --------------------- +(( $+functions[_cmake_variable_names] )) || +_cmake_variable_names() { + _cmake_list_names '--help-variable-list' 'variable name' && return 0 +} + +# ---------------------- +# _cmake_define_property +# ---------------------- +(( $+functions[_cmake_define_property] )) || +_cmake_define_property() { + if compset -P '*='; then + _wanted property-values expl 'property value' _cmake_define_property_values ${${IPREFIX%=}#-D} && return 0 + else + _wanted property-names expl 'property name' _cmake_define_property_names -qS= && return 0 + fi +} + +# ---------------------------- +# _cmake_define_property_names +# ---------------------------- +(( $+functions[_cmake_define_property_names] )) || +_cmake_define_property_names() { + local alternatives; alternatives=( + 'common-property-names:common property name:_cmake_define_common_property_names -qS=' + ) + local -A cmake_langs + zstyle -a ":completion:${curcontext}:" languages cmake_langs + [[ $#cmake_langs -eq 0 ]] && cmake_langs=('C' 'C' 'CXX' 'C++') + + for cmake_lang in ${(k)cmake_langs}; do + cmake_lang_desc="${cmake_langs[$cmake_lang]}" + alternatives+=("${cmake_lang//:/-}-property-names:${cmake_lang_desc} language property name:_cmake_define_lang_property_names -qS= ${cmake_lang} ${cmake_lang_desc}") + done + + _alternative "${alternatives[@]}" +} + +# --------------------------------- +# _cmake_define_lang_property_names +# --------------------------------- +(( $+functions[_cmake_define_lang_property_names] )) || +_cmake_define_lang_property_names() { + local cmake_lang="$@[-2]" cmake_lang_desc="$@[-1]" + local properties; properties=( + "CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler" + "CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds" + "CMAKE_${cmake_lang}_FLAGS_DEBUG:${cmake_lang_desc} compiler flags for all Debug build" + "CMAKE_${cmake_lang}_FLAGS_RLEASE:${cmake_lang_desc} compiler flags for all Relase build" + "CMAKE_${cmake_lang}_FLAGS_MINSIZREL:${cmake_lang_desc} compiler flags for all MinSizRel build" + "CMAKE_${cmake_lang}_FLAGS_RELWITHDEBINFO:${cmake_lang_desc} compiler flags for all RelWithDebInfo build" + ) + + _describe -t "${cmake_lang//:/-}-property-names" "${cmake_lang_desc} property name" properties $@[0,-3] && return 0 +} + +# ----------------------------------- +# _cmake_define_common_property_names +# ----------------------------------- +(( $+functions[_cmake_define_common_property_names] )) || +_cmake_define_common_property_names() { + local properties; properties=( + 'CMAKE_BUILD_TYPE:Specifies the build type for make based generators' + 'CMAKE_TOOLCHAIN_FILE:Absolute or relative path to a cmake script which sets up toolchain related variables' + 'CMAKE_COLOR_MAKEFILE:Enables/disables color output when using the Makefile generator' + 'CMAKE_INSTALL_PREFIX:Install directory used by install' + ) + + _describe -t 'common-property-names' 'common property name' properties $@ +} + +# ---------------------------- +# _cmake_define_property_values +# ---------------------------- +(( $+functions[_cmake_define_property_values] )) || +_cmake_define_property_values() { + local ret=1 + setopt localoptions extendedglob + case $@[-1] in + (CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _cmake_build_types && ret=0;; + (CMAKE_TOOLCHAIN_FILE) _wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0;; + (CMAKE_COLOR_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; + (CMAKE_INSTALL_PREFIX) _files -/ && ret=0;; + (CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;; + (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && ret=0;; + (*) _files && ret=0;; + esac + + return ret +} + +# ------------------ +# _cmake_build_types +# ------------------ +(( $+functions[_cmake_build_types] )) || +_cmake_build_types() { + local build_types; build_types=( + 'Debug' + 'Release' + 'RelWithDebInfo' + 'MinSizeRel' + ) + _values 'build type' ${build_types[@]} +} + +# ----------------- +# _cmake_generators +# ----------------- +(( $+functions[_cmake_generators] )) || +_cmake_generators() { + local generators; generators=( + 'Unix Makefiles' + 'Ninja' + 'CodeBlocks - Ninja' + 'CodeBlocks - Unix Makefiles' + 'Eclipse CDT4 - Ninja' + 'Eclipse CDT4 - Unix Makefiles' + 'KDevelop3' + 'KDevelop3 - Unix Makefiles' + 'Sublime Text 2 - Ninja' + 'Sublime Text 2 - Unix Makefiles' + ) + + _describe -t generators 'generator' generators +} + +# ---------------------- +# _cmake_toolchain_files +# ---------------------- +(( $+functions[_cmake_toolchain_files] )) || +_cmake_toolchain_files() { + _files -g '*\.cmake*' +} + +# --------------- +# _cmake_booleans +# --------------- +(( $+functions[_cmake_booleans] )) || +_cmake_booleans() { + local booleans; booleans=( + 'YES' + 'NO' + ) + _describe -t booleans 'boolean' booleans +} + +# --------------- +# _cmake_compilers +# --------------- +(( $+functions[_cmake_compilers] )) || +_cmake_compilers() { + _command_names -e +} + + +_cmake "$@" + diff --git a/.zprezto/modules/completion/external/src/_coffee b/.zprezto/modules/completion/external/src/_coffee new file mode 100644 index 0000000..10b6b81 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_coffee @@ -0,0 +1,81 @@ +#compdef coffee +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Coffee.js v0.6.11 (http://coffeejs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# * Dong Weiming (https://github.com/dongweiming) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 version opts first second third +typeset -A opt_args +version=(${(f)"$(_call_program version $words[1] --version)"}) +version=${${(z)${version[1]}}[3]} +first=$(echo $version|cut -d '.' -f 1) +second=$(echo $version|cut -d '.' -f 2) +third=$(echo $version|cut -d '.' -f 3) +if (( $first < 2 )) && (( $second < 7 )) && (( $third < 3 ));then + opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]' + '(-r --require)'{-r,--require}'[require a library before executing your script]:library') +fi + + +_arguments -C \ + '(- *)'{-h,--help}'[display this help message]' \ + '(- *)'{-v,--version}'[display the version number]' \ + $opts \ + '(-b --bare)'{-b,--bare}'[compile without a top-level function wrapper]' \ + '(-e --eval)'{-e,--eval}'[pass a string from the command line as input]:Inline Script' \ + '(-i --interactive)'{-i,--interactive}'[run an interactive CoffeeScript REPL]' \ + '(-j --join)'{-j,--join}'[concatenate the source CoffeeScript before compiling]:Destination JS file:_files -g "*.js"' \ + '(--nodejs)--nodejs[pass options directly to the "node" binary]' \ + '(-c --compile)'{-c,--compile}'[compile to JavaScript and save as .js files]' \ + '(-o --output)'{-o,--output}'[set the output directory for compiled JavaScript]:Output Directory:_files -/' \ + '(-n -t -p)'{-n,--nodes}'[print out the parse tree that the parser produces]' \ + '(-n -t -p)'{-p,--print}'[print out the compiled JavaScript]' \ + '(-n -t -p)'{-t,--tokens}'[print out the tokens that the lexer/rewriter produce]' \ + '(-s --stdio)'{-s,--stdio}'[listen for and compile scripts over stdio]' \ + '(-w --watch)'{-w,--watch}'[watch scripts for changes and rerun commands]' \ + '*:script or directory:_files' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_composer b/.zprezto/modules/completion/external/src/_composer new file mode 100644 index 0000000..76e1260 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_composer @@ -0,0 +1,76 @@ +#compdef composer +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for composer (https://getcomposer.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Daniel Gomes (me@danielcsgomes.com) +# * Valerii Hiora (https://github.com/vhbit) +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + +local curcontext=$curcontext state line +declare -A opt_args + +_composer_get_command_list () { + composer --no-ansi | sed "1,/Available commands/d" | awk '/ [a-z]+/ { print $1 }' +} + +_composer_get_required_list () { + composer show -s --no-ansi | sed '1,/requires/d' | awk 'NF > 0 && !/^requires \(dev\)/{ print $1 }' +} + + +_composer () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments \ + '1: :->command'\ + '*: :->args' + if [ -f composer.json ]; then + case $state in + command) + compadd `_composer_get_command_list` + ;; + *) + compadd `_composer_get_required_list` + ;; + esac + else + compadd create-project init search selfupdate show + fi +} + +compdef _composer composer \ No newline at end of file diff --git a/.zprezto/modules/completion/external/src/_console b/.zprezto/modules/completion/external/src/_console new file mode 100644 index 0000000..fc2a6f0 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_console @@ -0,0 +1,53 @@ +#compdef console +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for symfony console (https://github.com/symfony/Console). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + + +_console_get_command_list () { + php console --no-ansi | sed "1,/Available commands/d" | awk '/ [a-z]+/ { print $1 }' +} + +_console () { + if [ -f console ]; then + compadd `_console_get_command_list` + fi +} + +compdef _console php console +compdef _console console diff --git a/.zprezto/modules/completion/external/src/_cpanm b/.zprezto/modules/completion/external/src/_cpanm new file mode 100644 index 0000000..8597b1f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_cpanm @@ -0,0 +1,105 @@ +#compdef cpanm +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for cpanm (http://search.cpan.org/dist/App-cpanminus/lib/App/cpanminus.pm). +# +# Source: https://github.com/rshhh/cpanminus/blob/master/etc/_cpanm +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Ryushi (https://github.com/rshhh) +# +# ------------------------------------------------------------------------------ + + +local arguments curcontext="$curcontext" +typeset -A opt_args + + +arguments=( + +# Commands +# '(--install -i)'{--install,-i}'[Installs the modules]' + '(- :)--self-upgrade[Upgrades itself]' + '(- :)--info[Displays distribution info on CPAN]' + '(--installdeps)--installdeps[Only install dependencies]' + '(--look)--look[Download/unpack the distribution and then open the directory with your shell]' + '(--uninstall -U)'{--uninstall,-U}'[Uninstalls the modules]' + '(- :)'{--help,-h}'[Displays help information]' + '(- :)'{--version,-V}'[Displays software version]' + +# Options + {--force,-f}'[Force install]' + {--notest,-n}'[Do not run unit tests]' + '(--test-only)--test-only[Run the test only and do not install the module]' + {--sudo,-S}'[sudo to run install commands]' + '(-v --verbose --quiet -q)'{--verbose,-v}'[Turns on chatty output]' + '(-q --quiet --verbose -v)'{--quiet,-q}'[Turns off all output]' + {--local-lib,-l}'[Specify the install base to install modules]' + {--local-lib-contained,-L}'[Specify the install base to install all non-core modules]' + '(--self-contained)--self-contained[Assume no non-core modules are installed on the system]' + '--mirror[Specify the base URL for the mirror (e.g. http://cpan.cpantesters.org/)]:URLs:_urls' + '--mirror-only[Use the mirror\''s index file instead of the CPAN Meta DB]' + '--mirror-index[Specifies the file path for module search index]:FILES:_files' + '--prompt[Prompt when configure/build/test fails]' + '(--dev)--dev[Search for a newer developer release as well]' + '--reinstall[Reinstall the distribution even if you already have the latest version installed]' + '--interactive[Turn on interactive configure]' + '(--pp --pureperl)'{--pp,--pureperl}'[Prefer Pure perl build of modules]' + '(--with-recommends)--with-recommends[Installs dependencies declared as "recommends"]' + '(--with-suggests)--with-suggests[Installs dependencies declared as "suggests"]' + '(--with-feature)--with-feature[Specifies the feature to enable]' + '(--without-feature)--without-feature[Specifies the feature to disable]' + '(--with-all-features)--with-all-features[Enables all the optional features]' + '(--configure-timeout)--configure-timeout[Specify the timeout length to wait for configure]' + '(--build-timeout)--build-timeout[Specify the timeout length to wait for build]' + '(--test-timeout)--test-timeout[Specify the timeout length to wait for test]' + '(--configure-args)--configure-args[Pass arguments for configure commands]' + '(--build-args)--build-args[Pass arguments for build commands]' + '(--test-args)--test-args[Pass arguments for test commands]' + '(--install-args)--install-args[Pass arguments for install commands]' + + '--scandeps[Scan the dependencies of given modules and output the tree in a text format]' + '--format[Specify what format to display the scanned dependency tree]:scandeps format:(tree json yaml dists)' + + '--save-dists[Specify the optional directory path to copy downloaded tarballs]' + '(--uninst-shadows)--uninst-shadows[Uninstalls the shadow files of the distribution that you\''re installing]' + + '(--cascade-search)--cascade-search[Specifies whether to cascade search]' + '(--skip-installed)--skip-installed[Specifies modules which latest version are already installed]' + '(--skip-satisfied)--skip-satisfied[Specifies module and version for skipping installation]' + '(--verify)--verify[Verify the integrity of distribution files]' + '(--no-report-perl-version)--report-perl-version[Report locally installed perl version as part of User-Agent]' + '(--report-perl-version)--no-report-perl-version[Disable --report-perl-version]' + '--auto-cleanup[Number of days that cpanm\''s work directories expire in. Defaults to 7]' + '(--no-man-pages)--man-pages[Generates man pages for executables (man1) and libraries (man3)]' + '(--man-pages)--no-man-pages[Do not generate man pages]' + + + # Note: Normally with "--lwp", "--wget" and "--curl" options set to true (which is the default) cpanm tries LWP, + # Wget, cURL and HTTP::Tiny (in that order) and uses the first one available. + # (So that the exclusions are not enabled here for the completion) + '(--lwp)--lwp[Use LWP module to download stuff]' + '(--wget)--wget[Use GNU Wget (if available) to download stuff]' + '(--curl)--curl[Use cURL (if available) to download stuff]' + +# Other completions + '*:Local directory or archive:_files -/ -g "*.(tar.gz|tgz|tar.bz2|zip)(-.)"' + # '*::args: _normal' # this looks for default files (any files) +) +_arguments -s $arguments \ + && return 0 + +return 1 + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_debuild b/.zprezto/modules/completion/external/src/_debuild new file mode 100644 index 0000000..e2c5b62 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_debuild @@ -0,0 +1,65 @@ +#compdef debuild +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for debuild 2.10. +# +# Status: incomplete. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +# FIXME --noconf is only allowed in first position +_arguments \ + '(- 1 *)'{-h,--help}'[show help]' \ + '(- 1 *)--version[show version and copyright information]' \ + {--no-conf,--noconf}'[don'\''t read devscripts config files]' \ + {-r-,--rootcmd=}'[command used to become root if debuild not setuid root (default: fakeroot)]: :_command_names' \ + '*'{-e-,--preserve-envvar=}'[preserve environment variable]: :_vars' \ + '(-e --preserve-envvar)--preserve-env[preserve all environment vars (except PATH)]' \ + '*'{-e-,--set-envvar=}'[preserve environment variable]: :_vars -qS=' \ + '--prepend-path=[prepend to the sanitised PATH]: :_files -/' \ + '(-D)-d[skip checking of build dependencies]' \ + '(-d)-D[force checking of build dependencies]' \ + '--check-dirname-level[how much to check directory names]:level:((0\:never 1\:only\ if\ program\ changes\ directory\ \(default\) 2\:always))' \ + '--check-dirname-regex[Perl regex defining matching directory names, the string PACKAGE will be replaced by the package name (default: '\''PACKAGE(-.+)?'\'')]:regex' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_dget b/.zprezto/modules/completion/external/src/_dget new file mode 100644 index 0000000..4c196c0 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_dget @@ -0,0 +1,35 @@ +#compdef dget +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dget +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kris Shannon +# +# ------------------------------------------------------------------------------ + +_dget() { + local context state line expl + local -A opt_args + + _arguments -A "-*" \ + '(-h --help)'{-h,--help}'[Show help message]' \ + '(-V --version)'{-v,--version}'[Print license, copyright, and version information and exit]' \ + '(-q --quiet)'{-q,--quiet}'[Suppress wget/curl output]' \ + '(-d --download-only --build)'{-d,--download-only}'[Do not extract downloaded source]' \ + '(-x --extract)'{-x,--extract}'[Unpack downloaded source]' \ + '(-u --allow-unauthenticated)'{-u,--allow-unauthenticated}'[Make no attempt to verify source package signature]' \ + '(-d --download-only --build)--build[Build package with dpkg-buildpackage after download]' \ + '--path[Check this directory in addition to the apt archive]:DIR:_files -/' \ + '(--insecure)--insecure[Do not check SSL certificates when downloading]' \ + '(--no-cache)--no-cache[Disable server-side HTTP cache]' \ + "(--no-conf)--no-conf[Don't read devscripts config files]" \ + '1:dsc url:_urls' +} + +_dget "$@" diff --git a/.zprezto/modules/completion/external/src/_dhcpcd b/.zprezto/modules/completion/external/src/_dhcpcd new file mode 100644 index 0000000..5683424 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_dhcpcd @@ -0,0 +1,78 @@ +#compdef dhcpcd +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dhcpcd 2.3.2. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '1:network interface:_net_interfaces' \ + - release \ + '(-k --release)'{-k,--release}'[causes an existing dhcpcd process running on the interface to release it'\''s lease, deconfigure the interface and then exit]' \ + - exit \ + '(-x --exit)'{-x,--exit}'[causes an existing dhcpcd process running on the interface to exit]' \ + - main \ + '(-d --debug)'{-d,--debug}'[echo debug and informational messages to the console]' \ + '(-h --hostname)'{-h,--hostname}'[specify the hostname sent, or an empty string to stop any hostname from being sent]:hostname:_hosts' \ + '(-i --classid)'{-i,--classid}'[override the DHCP vendor classid field we send]:classid' \ + '(-l --leasetime)'{-l,--leasetime}'[request a specific lease time in seconds]:lease time \(seconds\)' \ + '(-m --metric)'{-m,--metric}'[added routes will use the metric on systems where this is supported]:metric' \ + '(-n --renew)'{-n,--renew}'[notifies an existing dhcpcd process running on the interface to renew it'\''s lease]' \ + '(-p --persistent)'{-p,--persistent}'[don'\''t deconfigure the interface and configuration at exit]' \ + '(-r --request)'{-r,--request}'[skip the broadcast request step and just request an address]:address' \ + '(-s --inform)'{-s,--inform}'[behaves exactly like -r, but sends a DHCP inform instead of a request]:address' \ + '(-t --timeout)'{-t,--timeout}'[timeout after seconds, instead of the default 20]:timeout \(seconds\)' \ + '(-u --userclass)'{-u,--userclass}'[tags the DHCP message with the userclass class]:class' \ + '*'{-H,--sethostname}'[forces dhcpcd to set the hostname as supplied by the DHCP server]' \ + '({-I --clientid)'{-I,--clientid}'[send clientid as a client identifier string]:clientid' \ + '*'{-S,--mscsr}'[request Microsoft specific Classless Static Routes (RFC 3442) code as well]' \ + '(-A --noarp)'{-A,--noarp}'[don'\''t request or claim the address by ARP]' \ + '(-G --nogateway)'{-G,--nogateway}'[don'\''t set any default routes]' \ + '(-L --noipv4ll)'{-L,--noipv4ll}'[don'\''t use IPv4LL at all]' \ + '(-M --nomtu)'{-M,--nomtu}'[don'\''t set the MTU of the interface]' \ + '(-N --nontp)'{-N,--nontp}'[don'\''t touch /etc/ntpd.conf or restart the ntp service]' \ + '(-R --nodns)'{-R,--nodns}'[don'\''t send DNS information to resolvconf or touch /etc/resolv.conf]' \ + '(-T --test)'{-T,--test}'[on receipt of discover messages, simply print the contents of the DHCP message to the console]' \ + '(-Y --nonis)'{-Y,--nonis}'[don'\''t touch /etc/yp.conf or restart the ypbind service]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ditz b/.zprezto/modules/completion/external/src/_ditz new file mode 100644 index 0000000..70cf552 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ditz @@ -0,0 +1,53 @@ +#compdef ditz +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Ditz (http://ditz.rubyforge.org). +# +# Source: https://github.com/technolize/zsh-completion-funcs +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * technolize (https://github.com/technolize) +# +# ------------------------------------------------------------------------------ + + +local ME=ditz +local COMMANDS=--commands +local OPTIONS='' + +if (($CURRENT == 2)); then + # We're completing the first word after the tool: the command. + _wanted command expl "$ME command" \ + compadd -- $( "$ME" "$COMMANDS" ) +else + # Find the options/files/URL/etc. for the current command by using the tool itself. + case "${words[$CURRENT]}"; in + -*) + _wanted args expl "Arguments for $ME ${words[2]}" \ + compadd -- $( "$ME" "${words[2]}" "$OPTIONS" ; _files ) + ;; + ht*|ft*) + _arguments '*:URL:_urls' + ;; + /*|./*|\~*|../*) + _arguments '*:file:_files' + ;; + *) + _wanted args expl "Arguments for $ME ${words[2]}" \ + compadd -- $( "$ME" "${words[2]}" "$OPTIONS" ) + ;; + esac +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_docker b/.zprezto/modules/completion/external/src/_docker new file mode 100644 index 0000000..9104f38 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_docker @@ -0,0 +1,483 @@ +#compdef docker +# +# zsh completion for docker (http://docker.com) +# +# version: 0.3.0 +# github: https://github.com/felixr/docker-zsh-completion +# +# contributors: +# - Felix Riedel +# - Vincent Bernat +# +# license: +# +# Copyright (c) 2013, Felix Riedel +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +__docker_get_containers() { + local kind expl + declare -a running stopped lines args + + kind=$1 + shift + [[ $kind = (stopped|all) ]] && args=($args -a) + + lines=(${(f)"$(_call_program commands docker ps ${args})"}) + + # Parse header line to find columns + local i=1 j=1 k header=${lines[1]} + declare -A begin end + while (( $j < ${#header} - 1 )) { + i=$(( $j + ${${header[$j,-1]}[(i)[^ ]]} - 1)) + j=$(( $i + ${${header[$i,-1]}[(i) ]} - 1)) + k=$(( $j + ${${header[$j,-1]}[(i)[^ ]]} - 2)) + begin[${header[$i,$(($j-1))]}]=$i + end[${header[$i,$(($j-1))]}]=$k + } + lines=(${lines[2,-1]}) + + # Container ID + local line + local s + for line in $lines; do + s="${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}" + s="$s:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" + s="$s, ${${${line[$begin[IMAGE],$end[IMAGE]]}/:/\\:}%% ##}" + if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then + stopped=($stopped $s) + else + running=($running $s) + fi + done + + # Names + local name + local -a names + for line in $lines; do + names=(${(ps:,:)${${line[${begin[NAMES]},-1]}%% *}}) + for name in $names; do + s="${name}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" + s="$s, ${${${line[$begin[IMAGE],$end[IMAGE]]}/:/\\:}%% ##}" + if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then + stopped=($stopped $s) + else + running=($running $s) + fi + done + done + + [[ $kind = (running|all) ]] && _describe -t containers-running "running containers" running + [[ $kind = (stopped|all) ]] && _describe -t containers-stopped "stopped containers" stopped +} + +__docker_stoppedcontainers() { + __docker_get_containers stopped "$@" +} + +__docker_runningcontainers() { + __docker_get_containers running "$@" +} + +__docker_containers () { + __docker_get_containers all "$@" +} + +__docker_images () { + local expl + declare -a images + images=(${${${${(f)"$(_call_program commands docker images)"}[2,-1]}/ ##/\\:}%% *}) + images=(${${images%\\:}#} ${${${(f)"$(_call_program commands docker images)"}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}}) + _describe -t docker-images "images" images +} + +__docker_tags() { + local expl + declare -a tags + tags=(${${${${${(f)"$(_call_program commands docker images)"}#* }## #}%% *}[2,-1]}) + _describe -t docker-tags "tags" tags +} + +__docker_repositories_with_tags() { + if compset -P '*:'; then + __docker_tags + else + __docker_repositories -qS ":" + fi +} + +__docker_search() { + # declare -a dockersearch + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy + fi + + local searchterm cachename + searchterm="${words[$CURRENT]%/}" + cachename=_docker-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 docker search ${searchterm})"}%% *}[2,-1]}) + _store_cache ${cachename#_} result + fi + _wanted dockersearch expl 'available images' compadd -a result +} + +__docker_caching_policy() +{ + oldp=( "$1"(Nmh+1) ) # 1 hour + (( $#oldp )) +} + + +__docker_repositories () { + local expl + declare -a repos + repos=(${${${(f)"$(_call_program commands docker images)"}%% *}[2,-1]}) + _describe -t docker-repos "repositories" repos "$@" +} + +__docker_commands () { + # local -a _docker_subcommands + local cache_policy + + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy + fi + + if ( [[ ${+_docker_subcommands} -eq 0 ]] || _cache_invalid docker_subcommands) \ + && ! _retrieve_cache docker_subcommands; + then + local -a lines + lines=(${(f)"$(_call_program commands docker 2>&1)"}) + _docker_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:}) + _docker_subcommands=($_docker_subcommands 'help:Show help for a command') + _store_cache docker_subcommands _docker_subcommands + fi + _describe -t docker-commands "docker command" _docker_subcommands +} + +__docker_subcommand () { + local -a _command_args + case "$words[1]" in + (attach) + _arguments \ + '--no-stdin[Do not attach stdin]' \ + '--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]' \ + ':containers:__docker_runningcontainers' + ;; + (build) + _arguments \ + '--force-rm[Always remove intermediate containers]' \ + '--no-cache[Do not use cache when building the image]' \ + {-q,--quiet}'[Suppress verbose build output]' \ + '--rm[Remove intermediate containers after a successful build]' \ + {-t,--tag=-}'[Repository, name and tag to be applied]:repository:__docker_repositories_with_tags' \ + ':path or URL:_directories' + ;; + (commit) + _arguments \ + {-a,--author=-}'[Author]:author: ' \ + {-m,--message=-}'[Commit message]:message: ' \ + {-p,--pause}'[Pause container during commit]' \ + '--run=-[Configuration automatically applied when the image is run]:configuration: ' \ + ':container:__docker_containers' \ + ':repository:__docker_repositories_with_tags' + ;; + (cp) + _arguments \ + ':container:->container' \ + ':hostpath:_files' + case $state in + (container) + if compset -P '*:'; then + _files + else + __docker_containers -qS ":" + fi + ;; + esac + ;; + (diff|export) + _arguments '*:containers:__docker_containers' + ;; + (events) + _arguments \ + '--since=-[Events created since this timestamp]:timestamp: ' \ + '--until=-[Events created until this timestamp]:timestamp: ' + ;; + (exec) + _arguments \ + {-d,--detach}'[Detached mode: leave the container running in the background]' \ + {-i,--interactive}'[Keep stdin open even if not attached]' \ + {-t,--tty}'[Allocate a pseudo-tty]' \ + ':containers:__docker_runningcontainers' + ;; + (history) + _arguments \ + '--no-trunc[Do not truncate output]' \ + {-q,--quiet}'[Only show numeric IDs]' \ + '*:images:__docker_images' + ;; + (images) + _arguments \ + {-a,--all}'[Show all images]' \ + '*'{-f,--filter=-}'[Filter values]:filter: ' \ + '--no-trunc[Do not truncate output]' \ + {-q,--quiet}'[Only show numeric IDs]' \ + '--tree[Output graph in tree format]' \ + '--viz[Output graph in graphviz format]' \ + ':repository:__docker_repositories' + ;; + (inspect) + _arguments \ + {-f,--format=-}'[Format the output using the given go template]:template: ' \ + '*:containers:__docker_containers' + ;; + (import) + _arguments \ + ':URL:(- http:// file://)' \ + ':repository:__docker_repositories_with_tags' + ;; + (info) + ;; + (import) + _arguments \ + ':URL:(- http:// file://)' \ + ':repository:__docker_repositories_with_tags' + ;; + (insert) + _arguments '1:containers:__docker_containers' \ + '2:URL:(http:// file://)' \ + '3:file:_files' + ;; + (kill) + _arguments \ + {-s,--signal=-}'[Signal to send]:signal:_signals' \ + '*:containers:__docker_runningcontainers' + ;; + (load) + _arguments \ + {-i,--input=-}'[Read from tar archive file]:tar:_files' + ;; + (login) + _arguments \ + {-e,--email=-}'[Email]:email: ' \ + {-p,--password=-}'[Password]:password: ' \ + {-u,--user=-}'[Username]:username: ' \ + ':server: ' + ;; + (logout) + _arguments \ + ':server: ' + ;; + (logs) + _arguments \ + {-f,--follow}'[Follow log output]' \ + {-t,--timestamps}'[Show timestamps]' \ + '*:containers:__docker_containers' + ;; + (port) + _arguments \ + '1:containers:__docker_runningcontainers' \ + '2:port:_ports' + ;; + (pause|unpause) + _arguments \ + '1:containers:__docker_runningcontainers' + ;; + (start) + _arguments \ + {-a,--attach}'[Attach container'"'"'s stdout/stderr and forward all signals]' \ + {-i,--interactive}'[Attach container'"'"'s stding]' \ + '*:containers:__docker_stoppedcontainers' + ;; + (rm) + _arguments \ + {-f,--force}'[Force removal]' \ + {-l,--link}'[Remove the specified link and not the underlying container]' \ + {-v,--volumes}'[Remove the volumes associated to the container]' \ + '*:containers:__docker_stoppedcontainers' + ;; + (rmi) + _arguments \ + {-f,--force}'[Force removal]' \ + '--no-prune[Do not delete untagged parents]' \ + '*:images:__docker_images' + ;; + (restart|stop) + _arguments \ + {-t,--time=-}'[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)' \ + '*:containers:__docker_runningcontainers' + ;; + (top) + _arguments \ + '1:containers:__docker_runningcontainers' \ + '(-)*:: :->ps-arguments' + case $state in + (ps-arguments) + _ps + ;; + esac + + ;; + (ps) + _arguments \ + {-a,--all}'[Show all containers]' \ + '--before=-[Show only container created before...]:containers:__docker_containers' \ + '*'{-f,--filter=-}'[Filter values]:filter: ' \ + {-l,--latest}'[Show only the latest created container]' \ + '-n[Show n last created containers, include non-running one]:n:(1 5 10 25 50)' \ + '--no-trunc[Do not truncate output]' \ + {-q,--quiet}'[Only show numeric IDs]' \ + {-s,--size}'[Display total file sizes]' \ + '--since=-[Show only containers created since...]:containers:__docker_containers' + ;; + (tag) + _arguments \ + {-f,--force}'[force]'\ + ':image:__docker_images'\ + ':repository:__docker_repositories_with_tags' + ;; + (create|run) + _arguments \ + {-a,--attach}'[Attach to stdin, stdout or stderr]' \ + '*--add-host=-[Add a custom host-to-IP mapping]:host\:ip mapping: ' \ + {-c,--cpu-shares=-}'[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)' \ + '*--cap-add=-[Add Linux capabilities]:capability: ' \ + '*--cap-drop=-[Drop Linux capabilities]:capability: ' \ + '--cidfile=-[Write the container ID to the file]:CID file:_files' \ + '--cpuset=-[CPUs in which to allow execution]:CPU set: ' \ + {-d,--detach}'[Detached mode: leave the container running in the background]' \ + '*--device=-[Add a host device to the container]:device:_files' \ + '*--dns=-[Set custom dns servers]:dns server: ' \ + '*--dns-search=-[Set custom DNS search domains]:dns domains: ' \ + '*'{-e,--environment=-}'[Set environment variables]:environment variable: ' \ + '--entrypoint=-[Overwrite the default entrypoint of the image]:entry point: ' \ + '*--env-file=-[Read environment variables from a file]:environment file:_files' \ + '*--expose=-[Expose a port from the container without publishing it]: ' \ + {-h,--hostname=-}'[Container host name]:hostname:_hosts' \ + {-i,--interactive}'[Keep stdin open even if not attached]' \ + '*--link=-[Add link to another container]:link:->link' \ + '*--lxc-conf=-[Add custom lxc options]:lxc options: ' \ + '-m[Memory limit (in bytes)]:limit: ' \ + '--name=-[Container name]:name: ' \ + '--net=-[Network mode]:network mode:(bridge none container: host)' \ + {-P,--publish-all}'[Publish all exposed ports]' \ + '*'{-p,--publish=-}'[Expose a container'"'"'s port to the host]:port:_ports' \ + '--privileged[Give extended privileges to this container]' \ + '--restart=-[Restart policy]:restart policy:(no on-failure always)' \ + '--rm[Remove intermediate containers when it exits]' \ + '*--security-opt=-[Security options]:security option: ' \ + '--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]' \ + {-t,--tty}'[Allocate a pseudo-tty]' \ + {-u,--user=-}'[Username or UID]:user:_users' \ + '*-v[Bind mount a volume]:volume: '\ + '*--volumes-from=-[Mount volumes from the specified container]:volume: ' \ + {-w,--workdir=-}'[Working directory inside the container]:directory:_directories' \ + '(-):images:__docker_images' \ + '(-):command: _command_names -e' \ + '*::arguments: _normal' + + case $state in + (link) + if compset -P '*:'; then + _wanted alias expl 'Alias' compadd -E "" + else + __docker_runningcontainers -qS ":" + fi + ;; + esac + + ;; + (pull|search) + _arguments ':name:__docker_search' + ;; + (push) + _arguments ':images:__docker_images' + ;; + (save) + _arguments \ + {-o,--output=-}'[Write to file]:file:_files' \ + ':images:__docker_images' + ;; + (wait) + _arguments ':containers:__docker_runningcontainers' + ;; + (help) + _arguments ':subcommand:__docker_commands' + ;; + (*) + _message 'Unknown sub command' + esac + +} + +_docker () { + # Support for subservices, which allows for `compdef _docker docker-shell=_docker_containers`. + # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. + if [[ $service != docker ]]; 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) + __docker_commands + ;; + (option-or-argument) + curcontext=${curcontext%:*:*}:docker-$words[1]: + __docker_subcommand + ;; + esac +} + +_docker "$@" + +# 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/.zprezto/modules/completion/external/src/_docker-compose b/.zprezto/modules/completion/external/src/_docker-compose new file mode 100644 index 0000000..b333f4d --- /dev/null +++ b/.zprezto/modules/completion/external/src/_docker-compose @@ -0,0 +1,197 @@ +#compdef docker-compose +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Docker Compose (http://docs.docker.com/compose/). +# Adapted from boot2docker completion by hhatto (https://github.com/hhatto) +# and docker completion by @aeonazaan and @bobmaerten. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * ilkka (https://github.com/ilkka) +# +# ------------------------------------------------------------------------------ + +# helper function for getting *.yml (compose) files +__yml_files_in_current_dir() { + _values 'YAML files' *.yml +} + +# helper function for completing services in current project +__services() { + declare -a services_cmd + services_cmd=($(sed -n -E 's/^([^[:space:]][^:]*):/\1/p' docker-compose.yml | tr \\n ' ')) + _describe 'services' services_cmd +} + +# subcommands +local -a _docker_compose_cmds + +_docker_compose_cmds=( + 'build:Build or rebuild services' \ + 'help:Get help on a command' \ + 'kill:Kill containers' \ + 'logs:View output from containers' \ + 'port:Print the public port for a port binding' \ + 'ps:List containers' \ + 'pull:Pulls service images' \ + 'rm:Remove stopped containers' \ + 'run:Run a one-off command' \ + 'scale:Set number of containers for a service' \ + 'start:Start services' \ + 'stop:Stop services' \ + 'restart:Restart services' \ + 'up:Create and start containers' +) + +# subcommand completion functions +__build() { + _arguments \ + '--no-cache[Do not use cache when building image]' + __services +} + +__help() { + _values 'Get help for subcommand' \ + 'build' \ + 'help' \ + 'kill' \ + 'logs' \ + 'port' \ + 'ps' \ + 'pull' \ + 'rm' \ + 'run' \ + 'scale' \ + 'start' \ + 'stop' \ + 'restart' \ + 'up' +} + +__kill() { + _arguments \ + '-s[Signal to send instead of SIGKILL]' + __services +} + +__logs() { + _arguments \ + '--no-color[Monochrome output]' + __services +} + +__port() { + _arguments \ + '--protocol:protocol:(tcp udp)' \ + '--index[Index of container]:index' + __services +} + +__ps() { + _arguments \ + '-q[Only display IDs]' + __services +} + +__pull() { + _arguments \ + '--allow-insecure-ssl[Allow insecure connections to the docker registry]' + __services +} + +__rm() { + _arguments \ + "--force[Don't ask for confirmation]" \ + '-v[Remove volumes]' + __services +} + +__run() { + _arguments \ + '--allow-insecure-ssl[Allow insecure connections to the docker registry]' \ + '-d[Detached mode: Run container in the background, print new container name.]' \ + '--entrypoint[Override the entrypoint of the image.]:command:()' \ + '-e[Set an environment variable.]:key=val:()' \ + "--no-deps[Don't start linked services.]" \ + '--rm[Remove container after run. Ignored in detached mode.]' \ + "--service-ports[Run command with the service's ports enabled and mapped to the host.]" \ + '-T[Disable pseudo-tty allocation.]' + __services +} + +__scale() { + __services +} + +__start() { + __services +} + +__stop() { + __services +} + +__restart() { + __services +} + +__up() { + _arguments \ + '--allow-insecure-ssl[Allow insecure connections to the docker registry]' \ + '-d[Detached mode: Run containers in the background, print new container names.]' \ + '--no-color[Produce monochrome output.]' \ + "--no-deps[Don't start linked services.]" \ + "--no-recreate[If containers already exist, don't recreate them.]" \ + "--no-build[Don't build an image, even if it's missing]" + __services +} + +# common args +_arguments \ + '--verbose[Show more output]' \ + '--version[Print version and exit]' \ + '--file[Specify an alternate compose file]:__yml_files_in_current_dir' \ + '--project-name[Specify an alternate project name]:args' \ + '*:: :->command' + +# start machines! +if (( CURRENT == 1 )); then + _describe -t commands 'docker-compose command' _docker_compose_cmds +fi + +local -a _command_args +case "$words[1]" in + build) + __build ;; + help) + __help ;; + kill) + __kill ;; + logs) + __logs ;; + port) + __port ;; + ps) + __ps ;; + pull) + __pull ;; + rm) + __rm ;; + run) + __run ;; + scale) + __scale ;; + start) + __start ;; + stop) + __stop ;; + restart) + __restart ;; + up) + __up ;; +esac + diff --git a/.zprezto/modules/completion/external/src/_docker-machine b/.zprezto/modules/completion/external/src/_docker-machine new file mode 100644 index 0000000..cf1cfbe --- /dev/null +++ b/.zprezto/modules/completion/external/src/_docker-machine @@ -0,0 +1,294 @@ +#compdef docker-machine +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Docker Machine (http://docs.docker.com/machine/). +# Adapted from boot2docker completion by hhatto (https://github.com/hhatto) +# and docker completion by @aeonazaan and @bobmaerten. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * ilkka (https://github.com/ilkka) +# +# ------------------------------------------------------------------------------ + +# helper function for completing available machines +__machines() { + declare -a machines_cmd + machines_cmd=($(docker-machine ls|tail +2|awk '{print $1":"$3"("$4")"}')) + _describe 'machines' machines_cmd +} + +# subcommands +local -a _docker_machine_cmds + +_docker_machine_cmds=( + 'active:Get or set the active machine' \ + 'create:Create a machine' \ + 'config:Print the connection config for machine' \ + 'inspect:Inspect information about a machine' \ + 'ip:Get the IP address of a machine' \ + 'kill:Kill a machine' \ + 'ls:List machines' \ + 'restart:Restart a machine' \ + 'rm:Remove a machine' \ + 'env:Display the commands to set up the environment for the Docker client' \ + 'ssh:Log into or run a command on a machine with SSH' \ + 'start:Start a machine' \ + 'stop:Stop a machine' \ + 'upgrade:Upgrade a machine to the latest version of Docker' \ + 'url:Get the URL of a machine' \ + 'help:Shows a list of commands or help for one command' +) + +# subcommand completion functions +__active() { + __machines +} + +__help() { + _values 'Get help for subcommand' \ + 'active' \ + 'create' \ + 'config' \ + 'inspect' \ + 'ip' \ + 'kill' \ + 'ls' \ + 'restart' \ + 'rm' \ + 'env' \ + 'ssh' \ + 'start' \ + 'stop' \ + 'upgrade' \ + 'url' \ + 'help' +} + +__create() { + _arguments \ + '--amazonec2-access-key:AWS Access Key:()' \ + '--amazonec2-ami:AWS machine image:()' \ + '--amazonec2-instance-type:AWS instance type:()' \ + '--amazonec2-region:AWS region:()' \ + '--amazonec2-root-size:AWS root disk size (in GB):()' \ + '--amazonec2-secret-key:AWS Secret Key:()' \ + '--amazonec2-security-group:AWS VPC security group:()' \ + '--amazonec2-session-token:AWS Session Token:()' \ + '--amazonec2-subnet-id:AWS VPC subnet id:()' \ + '--amazonec2-vpc-id:AWS VPC id:()' \ + '--amazonec2-zone:AWS zone for instance (i.e. a,b,c,d,e):()' \ + '--azure-docker-port:Azure Docker port:()' \ + '--azure-image:Azure image name. Default is Ubuntu 14.04 LTS x64:()' \ + '--azure-location:Azure location:()' \ + '--azure-password:Azure user password:()' \ + '--azure-publish-settings-file:Azure publish settings file:()' \ + '--azure-size:Azure size:()' \ + '--azure-ssh-port:Azure SSH port:()' \ + '--azure-subscription-cert:Azure subscription cert:()' \ + '--azure-subscription-id:Azure subscription ID:()' \ + '--azure-username:Azure username:()' \ + '--digitalocean-access-token:Digital Ocean access token:()' \ + '--digitalocean-image:Digital Ocean Image:()' \ + '--digitalocean-region:Digital Ocean region:()' \ + '--digitalocean-size:Digital Ocean size:()' \ + '--google-disk-size:GCE Instance Disk Size (in GB):()' \ + '--google-machine-type:GCE Machine Type:()' \ + '--google-project:GCE Project:()' \ + '--google-scopes:GCE Scopes (comma-separated if multiple scopes):()' \ + '--google-username:GCE User Name:()' \ + '--google-zone:GCE Zone:()' \ + '--openstack-auth-url:OpenStack authentication URL:()' \ + '--openstack-endpoint-type:OpenStack endpoint type (adminURL, internalURL or publicURL):()' \ + '--openstack-flavor-id:OpenStack flavor id to use for the instance:()' \ + '--openstack-flavor-name:OpenStack flavor name to use for the instance:()' \ + '--openstack-floatingip-pool:OpenStack floating IP pool to get an IP from to assign to the instance:()' \ + '--openstack-image-id:OpenStack image id to use for the instance:()' \ + '--openstack-image-name:OpenStack image name to use for the instance:()' \ + '--openstack-net-id:OpenStack image name to use for the instance:()' \ + '--openstack-net-name:OpenStack network name the machine will be connected on:()' \ + '--openstack-password:OpenStack password:()' \ + '--openstack-region:OpenStack region name:()' \ + '--openstack-sec-groups:OpenStack comma separated security groups for the machine:()' \ + '--openstack-ssh-port:OpenStack SSH port:()' \ + '--openstack-ssh-user:OpenStack SSH user:()' \ + '--openstack-tenant-id:OpenStack tenant id:()' \ + '--openstack-tenant-name:OpenStack tenant name:()' \ + '--openstack-username:OpenStack username:()' \ + '--rackspace-api-key:Rackspace API key:()' \ + '--rackspace-docker-install:Set if docker have to be installed on the machine:()' \ + '--rackspace-endpoint-type:Rackspace endpoint type (adminURL, internalURL or the default publicURL):()' \ + '--rackspace-flavor-id:Rackspace flavor ID. Default: General Purpose 1GB:()' \ + '--rackspace-image-id:Rackspace image ID. Default: Ubuntu 14.04 LTS (Trusty Tahr) (PVHVM):()' \ + '--rackspace-region:Rackspace region name:()' \ + '--rackspace-ssh-port:SSH port for the newly booted machine. Set to 22 by default:()' \ + '--rackspace-ssh-user:SSH user for the newly booted machine. Set to root by default:()' \ + '--rackspace-username:Rackspace account username:()' \ + '--softlayer-api-endpoint:softlayer api endpoint to use:()' \ + '--softlayer-api-key:softlayer user API key:()' \ + "--softlayer-cpu:number of CPUs for the machine:()" \ + '--softlayer-disk-size:Disk size for machine, a value of 0 uses the default size on softlayer:()' \ + '--softlayer-domain:domain name for machine:()' \ + '--softlayer-hostname:hostname for the machine:()' \ + '--softlayer-hourly-billing:set hourly billing for machine - on by default:()' \ + '--softlayer-image:OS image for machine:()' \ + '--softlayer-local-disk:use machine local disk instead of softlayer SAN:()' \ + '--softlayer-memory:Memory in MB for machine:()' \ + '--softlayer-private-net-only:Use only private networking:()' \ + '--softlayer-region:softlayer region for machine:()' \ + '--softlayer-user:softlayer user account name:()' \ + '--url:URL of host when no driver is selected:()' \ + '--virtualbox-boot2docker-url:The URL of the boot2docker image. Defaults to the latest available version:()' \ + '--virtualbox-disk-size:Size of disk for host in MB:()' \ + '--virtualbox-memory:Size of memory for host in MB:()' \ + '--vmwarefusion-boot2docker-url:Fusion URL for boot2docker image:()' \ + '--vmwarefusion-disk-size:Fusion size of disk for host VM (in MB):()' \ + '--vmwarefusion-memory-size:Fusion size of memory for host VM (in MB):()' \ + '--vmwarevcloudair-catalog:vCloud Air Catalog (default is Public Catalog):()' \ + '--vmwarevcloudair-catalogitem:vCloud Air Catalog Item (default is Ubuntu Precise):()' \ + '--vmwarevcloudair-computeid:vCloud Air Compute ID (if using Dedicated Cloud):()' \ + '--vmwarevcloudair-cpu-count:vCloud Air VM Cpu Count (default 1):()' \ + '--vmwarevcloudair-docker-port:vCloud Air Docker port:()' \ + '--vmwarevcloudair-edgegateway:vCloud Air Org Edge Gateway (Default is ):()' \ + '--vmwarevcloudair-memory-size:vCloud Air VM Memory Size in MB (default 2048):()' \ + '--vmwarevcloudair-orgvdcnetwork:vCloud Air Org VDC Network (Default is -default-routed):()' \ + '--vmwarevcloudair-password:vCloud Air password:()' \ + '--vmwarevcloudair-provision:vCloud Air Install Docker binaries (default is true):()' \ + '--vmwarevcloudair-publicip:vCloud Air Org Public IP to use:()' \ + '--vmwarevcloudair-ssh-port:vCloud Air SSH port:()' \ + '--vmwarevcloudair-username:vCloud Air username:()' \ + '--vmwarevcloudair-vdcid:vCloud Air VDC ID:()' \ + '--vmwarevsphere-boot2docker-url:vSphere URL for boot2docker image:()' \ + '--vmwarevsphere-compute-ip:vSphere compute host IP where the docker VM will be instantiated:()' \ + '--vmwarevsphere-cpu-count:vSphere CPU number for docker VM:()' \ + '--vmwarevsphere-datacenter:vSphere datacenter for docker VM:()' \ + '--vmwarevsphere-datastore:vSphere datastore for docker VM:()' \ + '--vmwarevsphere-disk-size:vSphere size of disk for docker VM (in MB):()' \ + '--vmwarevsphere-memory-size:vSphere size of memory for docker VM (in MB):()' \ + '--vmwarevsphere-network:vSphere network where the docker VM will be attached:()' \ + '--vmwarevsphere-password:vSphere password:()' \ + '--vmwarevsphere-pool:vSphere resource pool for docker VM:()' \ + '--vmwarevsphere-username:vSphere username:()' \ + '--vmwarevsphere-vcenter:vSphere IP/hostname for vCenter:()' \ + '--driver:Driver to create machine with.:(amazonec2 azure digitalocean google none openstack rackspace softlayer virtualbox vmwarefusion vmwarevcloudair vmwarevsphere)' \ + '--swarm:Configure Machine with Swarm:()' \ + '--swarm-master:Configure Machine to be a Swarm master:()' \ + '--swarm-discovery:Discovery service to use with Swarm:()' \ + '--swarm-host:ip/socket to listen on for Swarm master:()' \ + '--swarm-addr:addr to advertise for Swarm (default: detect and use the machine IP):()' +} + +__config() { + _arguments \ + '--swarm[Display the Swarm config instead of the Docker daemon]' + __machines +} + +__inspect() { + __machines +} + +__ip() { + __machines +} + +__env() { + _arguments \ + '--unset[Unset variables instead of setting them]' \ + '--swarm[Display the Swarm config instead of the Docker daemon]' + __machines +} + +__kill() { + __machines +} + +__ls() { + _arguments \ + '--quiet[Enable quiet mode]' +} + +__restart() { + __machines +} + +__start() { + __machines +} + +__stop() { + __machines +} + +__rm() { + __machines +} + +__ssh() { + __machines +} + +__upgrade() { + __machines +} + +__url() { + __machines +} + +# common args +_arguments \ + '--debug[Enable debug mode]' \ + '--storage-path[Configures storage path]:_files' \ + '--tls-ca-cert[CA to verify remotes against]:_files' \ + '--tls-ca-key[Private key to generate certificates]:_files' \ + '--tls-client-cert[Client cert to use for TLS]:_files' \ + '--tls-client-key[Private key used in client TLS auth]:_files' \ + '--help[show help]' \ + '--version[print the version]' \ + '*:: :->command' + +# start machines! +if (( CURRENT == 1 )); then + _describe -t commands 'docker-machine command' _docker_machine_cmds +fi + +local -a _command_args +case "$words[1]" in + active) + __active ;; + create) + __create ;; + config) + __config ;; + inspect) + __inspect ;; + ip) + __ip ;; + kill) + __kill ;; + ls) + __ls ;; + restart) + __restart ;; + rm) + __rm ;; + env) + __env ;; + ssh) + __ssh ;; + start) + __start ;; + stop) + __stop ;; + upgrade) + __upgrade ;; + url) + __url ;; + help) + __help ;; +esac diff --git a/.zprezto/modules/completion/external/src/_docpad b/.zprezto/modules/completion/external/src/_docpad new file mode 100644 index 0000000..874db44 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_docpad @@ -0,0 +1,58 @@ +#compdef docpad +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for docpad (https://github.com/bevry/docpad). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Changwoo Park (https://github.com/pismute) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 + +local -a _1st_arguments +_1st_arguments=( + 'run: run [options], does everything - skeleton, generate, watch, server' + 'server: server [options], creates a server for your generated project' + 'skeleton: skeleton [options], will create a new project in your cwd based off an existing skeleton' + 'render: render [path], render the file at and output its results to stdout:path:_files' + 'generate: (re)generates your project' + 'watch: watches your project for changes, and (re)generates whenever a change is made' + 'install: ensure everything is installed correctly' + 'clean: ensure everything is cleaned correctly' + 'info: display the information about your docpad instance' + 'help: output the help' +) + +_arguments -C \ + '(-h,--help)'{-h,--help}'[output usage information]'\ + '(-V,--version)'{-V,--version}'[output the version number]'\ + '(-o,--out)'{-o,--out}'[where to output the rendered directory or files]:path:_files'\ + '(-c,--config)'{-c,--config}'[a custom configuration file to load in]:path:_files'\ + '(-e,--env)'{-e,--env}'[the environment name to use for this instance, multiple names can be separated with a comma]'\ + '(-d,--debug)'{-d,--debug}'+[the level of debug messages you would like to display, if specified defaults to 7, otherwise 6]:number'\ + '(-f,--force)'{-f,--force}'[force a re-install of all modules]'\ + '1: :->cmds'\ + '*: :_files'&& ret=0 + +case $state in + cmds) + _describe -t commands 'docpad command' _1st_arguments && ret=0 + ;; + +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_drush b/.zprezto/modules/completion/external/src/_drush new file mode 100644 index 0000000..6a05c6f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_drush @@ -0,0 +1,166 @@ +#compdef drush +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Drush (http://drush.ws). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Vasily Kraev (https://github.com/vasilykraev) +# +# ------------------------------------------------------------------------------ + +_drush() { + local curcontext='$curcontext' state line cmds ret=1 + integer NORMARG + typeset -A opt_args + + global_args=('--debug' '--verbose' '--yes' '--no' '--simulate' '--root=' '--uri=') + + _arguments -C \ + '(--*)'{--version,--version}'[Show drush version.]' \ + '(- *)'{-d,--debug}'[Display even more information, including internal messages.]' \ + '(- *)'{-v,--verbose}'[Display extra information about the command.]' \ + '(- *)'{-y,--yes}'[Assume "yes" as answer to all prompts.]' \ + '(- *)'{-n,--no}'[Assume "no" as answer to all prompts.]' \ + '(- *)'{-s,--simulate}'[Simulate all relevant actions (dont actually change the system).]' \ + '(- *)'{-r,--root=}'[Drupal root directory to use (default: current directory).]' \ + '(- *)'{-l,--uri=}'[URI of the drupal site to use (only needed in multisite environments or when running on an alternate port).]' \ + '1: :->cmds' \ + '*::arg:->args' \ + && ret=0 + +case $state in + cmds) + _values 'drush command' \ + '(archive-dump)'{archive-dump,ard,arb}'[Backup your code, files, and database into a single file.]' \ + '(archive-restore)'{archive-restore,arr}'[Expand a site archive into a Drupal web site.]' \ + '(cache-clear)'{cache-clear,cc}'[Clear a specific cache, or all drupal caches.]' \ + '(core-status)'{core-status,status,st}'[Provides a birds-eye view of the current Drupal installation, if any.]' \ + '(core-cron)'{core-cron,cron}'[Run all cron hooks in all active modules for specified site.]' \ + '(core-execute)'{core-execute,exec}'[Execute a shell command. Usually used with a site alias.]' \ + '(drupal-directory)'{drupal-directory,dd}'[Return the filesystem path for modules/themes and other key folders.]' \ + 'help[Print this help message.]' \ + 'image-flush[Flush all derived images for a given style.]' \ + '(site-alias)'{site-alias,sa}'[Print an alias record.]' \ + '(site-install)'{site-install,si}'[Install Drupal along with modules/themes/configuration using the specified install profile.]' \ + 'test-clean[Clean temporary tables and files.]' \ + 'test-run[Run tests. Note that you must use the --uri option.]' \ + '(updatedb)'{updatedb,updb}'[Apply any database updates required (as with running update.php).]' \ + '(variable-delete)'{variable-delete,vdel}'[Delete a variable.]' \ + '(variable-get)'{variable-get,vget}'[Get a list of some or all site variables and values.]' \ + '(variable-set)'{variable-set,vset}'[Set a variable.]' \ + '(pm-list)'{pm-list,pml}'[Show a list of available extensions (modules and themes).]' \ + '(pm-disable)'{pm-disable,dis}'[Disable one or more extensions (modules or themes). Disable dependant extensions as well.]' \ + '(pm-download)'{pm-download,dl}'[Download projects from drupal.org or other sources.]' \ + '(pm-enable)'{pm-enable,en}'[Enable one or more extensions (modules or themes). Enable dependant extensions as well.]' \ + 'pm-uninstall[Uninstall one or more modules.]' \ + 'pm-update[Update Drupal core and contrib projects and apply any pending database updates (Same as pm-updatecode + updatedb).]' \ + '(sql-cli)'{sql-cli,sqlc}'[Open a SQL command-line interface using Drupals credentials.]' \ + 'sql-drop[Drop all tables in a given database.]' \ + 'sql-dump[Exports the Drupal DB as SQL using mysqldump or equivalent.]' \ + '(sql-query)'{sql-query,sqlq}'[Execute a query against the site database.]' \ + 'sql-sync[Copy and import source database to target database. Transfers via rsync.]' \ + '(user-login)'{user-login,uli}'[Display a one time login link for the given user account (defaults to uid 1).]' \ + '(user-password)'{user-password,upwd}'[(Re)Set the password for the user account with the specified name.]' \ + '(devel-reinstall)'{devel-reinstall,dre}'[Disable, Uninstall, and Install a list of projects. (devel)]' \ + '(devel-token)'{devel-token,token}'[List available tokens (devel)]' \ + '(generate-content)'{generate-content,genc}'[Create content. (devel_generate)]' \ + '(generate-menus)'{generate-menus,genm}'[Create menus and menu items. (devel_generate)]' \ + '(generate-terms)'{generate-terms,gent}'[Create terms in specified vocabulary. (devel_generate)]' \ + '(generate-users)'{generate-users,genu}'[Create users. (devel_generate)]' \ + '(generate-vocabs)'{generate-vocabs,genv}'[Create vocabularies. (devel_generate)]' \ + '(features-diff)'{features-diff,fd}'[Show the difference between the default and overridden state of a feature.]' \ + '(features-export)'{features-export,fe}'[Export a feature from your site into a module.]' \ + '(features-list)'{features-list,fl}'[List all the available features for your site.]' \ + '(features-revert)'{features-revert,fr}'[Revert a feature module on your site.]' \ + '(features-revert-all)'{features-revert-all,fra}'[Revert all enabled feature module on your site.]' \ + '(features-update)'{features-update,fu}'[Update a feature module on your site.]' \ + '(features-update-all)'{features-update-all,fua}'[Update all feature modules on your site.]' \ + && ret=0 + ;; + args) + case $line[1] in + (archive-dump|ard) + _arguments \ + '(--description)--description=[Filter out extensions that are provided by drupal core.]' \ + '(--destination)--destination=[The full path and filename in which the archive should be stored. If omitted, it will be saved to the drush-backups directory.]' \ + '(--no-core)--no-core[Exclude Drupal core, so the backup only contains the site specific stuff.]' \ + '(--pipe)--pipe[Only print the destination of the archive. Useful for scripts that dont pass --destination.]' \ + '(--tar-options)--tar-options=[Options passed thru to the tar command.]' \ + && ret=0 + compadd -a global_args + ;; + (archive-restore|arr) + _arguments \ + '(--db-prefix)--db-prefix[An optional table prefix to use during restore.]' \ + '(--db-su)--db-su[Account to use when creating the new database. Optional.]' \ + '(--db-su-pw)--db-su-pw[Password for the "db-su" account. Optional.]' \ + '(--db-url)--db-url=[A Drupal 6 style database URL indicating the target for database restore. If not provided, the archived settings.php is used. ]' \ + '(--destination)--destination[Specify where the Drupal site should be expanded, including the docroot. Defaults to the current working directory.]' \ + '(--overwrite)--overwrite[Allow drush to overwrite any files in the destination.]' \ + && ret=0 + compadd -a global_args + ;; + (user-password|upwd) + _arguments \ + '--password=:Set the password for the username someuser.' \ + && ret=0 + ;; + (help) + _values 'commands' 'arb' 'archive-dump' 'archive-restore' 'ard' 'arr' 'cache-clear' 'cc' 'core-cron' 'core-execute' 'core-status' 'cron' 'dd' 'devel-reinstall' 'devel-token' 'dis' 'dl' 'dre' 'drupal-directory' 'en' 'exec' 'fd' 'fe' 'features-diff' 'features-export' 'features-list' 'features-revert' 'features-revert-all' 'features-update' 'features-update-all' 'fl' 'fr' 'fra' 'fu' 'fua' 'genc' 'generate-content' 'generate-menus' 'generate-terms' 'generate-users' 'generate-vocabs' 'genm' 'gent' 'genu' 'genv' 'help' 'image-flush' 'pm-disable' 'pm-download' 'pm-enable' 'pm-list' 'pm-uninstall' 'pm-update' 'pml' 'sa' 'si' 'site-alias' 'site-install' 'sql-cli' 'sql-drop' 'sql-dump' 'sql-query' 'sql-sync' 'sqlc' 'sqlq' 'st' 'status' 'test-clean' 'test-run' 'token' 'uli' 'updatedb' 'updb' 'upwd' 'user-login' 'user-password' 'variable-delete' 'variable-get' 'variable-set' 'vdel' 'vget' 'vset' + ;; + (cc) + _values 'options' 'all' 'drush' 'theme-registry' 'menu' 'css-js' 'block' + ;; + (pm-list|pml) + _arguments \ + '(--core)--core[Filter out extensions that are not in drupal core.]' \ + '(--no-core)--no-core[Filter out extensions that are provided by drupal core.]' \ + '(--pipe)--pipe[Returns a whitespace delimited list of the names of the resulting extensions.]' \ + '(--status)--status=-[Filter by extension status. Choices: enabled, disabled and/or "not installed".]:status:(enabled disabled)' \ + '(--type)--type=-[Filter by extensions ension type. Choices: module, theme.]:type:(module theme)' \ + && ret=0 + ;; + (pm-disable|dis) + _modules=( $(drush pml --status=enabled --pipe) ) + if [[ $_modules != "" ]]; then + _values 'enabled modules' $_modules + fi + ;; + (pm-enable|en) + _arguments -C \ + '--resolve-dependencies[Attempt to download any missing dependencies. At the moment, only works when the module name is the same as the project name.]' \ + '--skip[Skip automatic downloading of libraries (c.f. devel).]' && ret=0 + _modules=( $(drush pml --status="disabled,not installed" --pipe) ) + if [[ $_modules != "" ]]; then + _values -s 'not yet enabled modules' $_modules && ret=0 + fi + ;; + (*) + _values 'Global options' \ + {-d,--debug}'[Display even more information, including internal messages.]' \ + {-v,--verbose}'[Display extra information about the command.]' \ + {-y,--yes}'[Assume "yes" as answer to all prompts.]' \ + {-n,--no}'[Assume "no" as answer to all prompts.]' \ + {-s,--simulate}'[Simulate all relevant actions (dont actually change the system).]' \ + {-r,--root=}'[Drupal root directory to use (default: current directory).]' \ + {-l,--uri=}'[URI of the drupal site to use (only needed in multisite environments or when running on an alternate port).]' + ;; + esac + ;; +esac +} + +_drush '$@' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_dzen2 b/.zprezto/modules/completion/external/src/_dzen2 new file mode 100644 index 0000000..b0e49d2 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_dzen2 @@ -0,0 +1,44 @@ +#compdef dzen2 + +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dzen2 0.8.5 ( https://github.com/robm/dzen ) +# Last updated: 31.03.2013 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# the _x_color completer has rather outdated paths, a zstyle like this helps +# get the x colors right (the list is rather long, then) +# +# zstyle ":completion:*:colors" path '/etc/X11/rgb.txt' +# +# ------------------------------------------------------------------------------ + +_arguments \ + '-fg[Set foreground color]:foreground color:_x_color' \ + '-bg[Set background color]:background color:_x_color' \ + '-fn[Set font]:font:_x_font' \ + '-ta[Set alignment of title window content]:alignment:( l c r )' \ + '-tw[Set title window width]:width (pixels)' \ + '-sa[Set alignment of slave window]:alignment:( l c r )' \ + '-l[Number of lines to display in slave window]:lines' \ + '-e[Set up events and actions]:event string' \ + '-m[Start up in menu mode]' \ + '-u[Update contents of title and slave window simultaneously]' \ + '-p[Persist EOF]:timeout (seconds)' \ + '-x[Set x position on the screen]:x position (pixels)' \ + '-y[Set y position on the screen]:y position (pixels)' \ + '-h[Set line height]:line height (pixels)' \ + '-w[Set window width]:width (pixels)' \ + '-xs[Set the Xinerama screen number where dzen should appear]:screen number' \ + '-v[Display version information]' && return 0 diff --git a/.zprezto/modules/completion/external/src/_emulator b/.zprezto/modules/completion/external/src/_emulator new file mode 100644 index 0000000..ae86717 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_emulator @@ -0,0 +1,139 @@ +#compdef emulator +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for emulator (Android Emulator) 12.0 +# (http://developer.android.com/guide/developing/tools/emulator.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +typeset -A opt_args +local context state line curcontext="$curcontext" + +# TODO All image options are contextual to -sysdir value +# TODO All skin options are contextual to -skindir value +# TODO snapshot options are mutually exclusive +# TODO Use '-snapshot-list' output for snapshot names +# TODO Complete -avd with avd names ? +# TODO -logcat: use completer from _adb +# TODO Complete options with device values +# TODO Complete -prop +_arguments \ + '(- : *)-version[display emulator version number]' \ + '(- : *)-help[display help information]' \ + '(- : *)-help-disk-images[about disk images]' \ + '(- : *)-help-keys[supported key bindings]' \ + '(- : *)-help-debug-tags[debug tags for -debug ]' \ + '(- : *)-help-char-devices[character specification]' \ + '(- : *)-help-environment[environment variables]' \ + '(- : *)-help-keyset-file[key bindings configuration file]' \ + '(- : *)-help-virtual-device[virtual device management]' \ + '(- : *)-help-sdk-images[about disk images when using the SDK]' \ + '(- : *)-help-build-images[about disk images when building Android]' \ + '(- : *)-help-all[prints all help content]' \ + '(- : *)-help-'{version,sysdir,system,image,datadir,kernel,ramdisk,initdata,data,partition-size,cache,no-cache,nocache,sdcard,snapstorage,no-snapstorage,snapshot,no-snapshot,no-snapshot-save,no-snapshot-load,snapshot-list,no-snapshot-update-time,wipe-data,avd,skindir,skin,noskin,no-skin,memory,netspeed,netdelay,netfast,trace,show-kernel,shell,no-jni,nojni,logcat,noaudio,no-audio,audio,raw-keys,radio,port,ports,onion,onion-alpha,onion-rotation,scale,dpi-device,http-proxy,timezone,dns-server,cpu-delay,no-boot-anim,no-window,report-console,gps,keyset,shell-serial,tcpdump,bootchart,charmap,prop,shared-net-id,nand-limits,memcheck,qemu,verbose}'[print option-specific help]' \ + '-sysdir[search for system disk images in the directory]: :_files -/' \ + '(-system -image)'{-system,-image}'[read initial system image from the file]: :_files -g "*.img"' \ + '-datadir[write user data into the directory]: :_files -/' \ + '-kernel[use specific emulated kernel]: :_files' \ + '-ramdisk[ramdisk image (default /ramdisk.img]: :_files -g "*.img"' \ + '-initdata[same as '\''-init-data '\'']: :_files' \ + '-data[data image (default /userdata-qemu.img]: :_files -g "*.img"' \ + '-partition-size[system/data partition size]:size (in MBs)' \ + '(-no-cache -nocache)-cache[cache partition image (default is temporary file)]: :_files -g "*.img"' \ + '(-cache -no-cache -nocache)'{-no-cache,-nocache}'[disable the cache partition]' \ + '-sdcard[SD card image (default /sdcard.img]: :_files -g "*.img"' \ + '(-no-snapstorage)-snapstorage[file that contains all state snapshots (default /snapshots.img)]: :_files -g "*.img"' \ + '(-snapstorage)-no-snapstorage[do not mount a snapshot storage file (this disables all snapshot functionality)]' \ + '-snapshot[name of snapshot within storage file for auto-start and auto-save (default '\''default-boot'\'')]:snapshot name' \ + '-no-snapshot[perform a full boot and do not do not auto-save, but qemu vmload and vmsave operate on snapstorage]' \ + '-no-snapshot-save[do not auto-save to snapshot on exit: abandon changed state]' \ + '-no-snapshot-load[do not auto-start from snapshot: perform a full boot]' \ + '-snapshot-list[show a list of available snapshots]' \ + '-no-snapshot-update-time[do not do try to correct snapshot time on restore]' \ + '-wipe-data[reset the user data image (copy it from initdata)]' \ + '-avd[use a specific android virtual device]:android virtual device name' \ + '-skindir[search skins in (default /skins)]: :_files -/' \ + '-skin[select a given skin]' \ + '(-noskin -no-skin)'{-noskin,-no-skin}'[don'\''t use any emulator skin]' \ + '-memory[physical RAM size in MBs]:size (in MBs)' \ + '-netspeed[maximum network download/upload speeds]:speed' \ + '-netdelay[network latency emulation]:delay' \ + '-netfast[disable network shaping]' \ + '-trace[enable code profiling (F9 to start)]:trace name' \ + '-show-kernel[display kernel messages]' \ + '-shell[enable root shell on current terminal]' \ + {-no-jni,-nojni}'[disable JNI checks in the Dalvik runtime]' \ + '-logcat[enable logcat output with given tags]:logcat tags' \ + '(-audio -noaudio -no-audio)'{-noaudio,-no-audio}'[disable audio support]' \ + '(-noaudio -no-audio)-audio[use specific audio backend]:audio backend' \ + '-raw-keys[disable Unicode keyboard reverse-mapping]' \ + '-radio[redirect radio modem interface to character device]:device' \ + '-port[TCP port that will be used for the console]:port number' \ + '-ports[TCP ports used for the console and adb bridge]:console port,adb port' \ + '-onion[use overlay PNG image over screen]: :_files -g "*.(png|PNG)"' \ + '-onion-alpha[specify onion-skin translucency]:percentage' \ + '-onion-rotation[specify onion-skin rotation]:rotation:((1 2 3 4))' \ + '-scale[scale emulator window]:scale' \ + '-dpi-device[specify device'\''s resolution in dpi (default 165)]:dpi' \ + '-http-proxy[make TCP connections through a HTTP/HTTPS proxy]:proxy' \ + '-timezone[use this timezone instead of the host'\''s default]:timezone' \ + '-dns-server[use this DNS server(s) in the emulated system]:DNS servers' \ + '-cpu-delay[throttle CPU emulation]:CPU delay' \ + '-no-boot-anim[disable animation for faster boot]' \ + '-no-window[disable graphical window display]' \ + '-report-console[report console port to remote socket]: :_socket' \ + '-gps[redirect NMEA GPS to character device]:device' \ + '-keyset[specify keyset file name]: :_files' \ + '-shell-serial[specific character device for root shell]:device' \ + '-tcpdump[capture network packets to file]: :_files' \ + '-bootchart[enable bootcharting]:timeout' \ + '-charmap[use specific key character map]: :_files' \ + '*-prop[set system property on boot]:name=value' \ + '-shared-net-id[join the shared network, using IP address 10.1.2.]:number' \ + '-nand-limits[enforce NAND/Flash read/write thresholds]:limits' \ + '-memcheck[enable memory access checking]:flags' \ + '-qemu[pass arguments to qemu]:arguments' \ + '-verbose[same as '\''-debug-init'\'']' \ + '*'{-debug,-debug-,-debug-no-}'[enable/disable specific debug messages]:tag' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_exportfs b/.zprezto/modules/completion/external/src/_exportfs new file mode 100644 index 0000000..1925f07 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_exportfs @@ -0,0 +1,51 @@ +#compdef exportfs +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nfs's exportfs - maintain table of exported NFS file systems. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Timofey Titovets +# +# ------------------------------------------------------------------------------ +_exportfs() { + _values -w 'option' \ + '(-i)-a[Export or unexport all directories]' \ + '(-a -r -u)-i[Ignore the /etc/exports file and files under /etc/exports.d directory]' \ + '(-i)-r[Reexport all directories]' \ + '(-i)-u[Unexport one or more directories]' \ + '-f[flush everything out of export table]' \ + '-o[option1,option2.. Specify a list of export options]' \ + '-s[Display the current export list suitable for /etc/exports]' \ + '-v[Be verbose]' +} +_exportfs "$@" diff --git a/.zprezto/modules/completion/external/src/_fab b/.zprezto/modules/completion/external/src/_fab new file mode 100644 index 0000000..59b08f1 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_fab @@ -0,0 +1,83 @@ +#compdef fab +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Fabric (http://fabfile.org) +# +# Source: https://github.com/vhbit/fabric-zsh-autocomplete +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valerii Hiora (https://github.com/vhbit) +# +# ------------------------------------------------------------------------------ + + +local curcontext=$curcontext state line +declare -A opt_args + +declare target_list +target_list=(`fab --shortlist 2>/dev/null`) + +_targets() { + _describe -t commands "fabric targets" target_list +} + +output_levels=( + 'status: Status messages, i.e. noting when Fabric is done running, if the user used a keyboard interrupt, or when servers are disconnected from. These messages are almost always relevant and rarely verbose.' + 'aborts: Abort messages. Like status messages, these should really only be turned off when using Fabric as a library, and possibly not even then. Note that even if this output group is turned off, aborts will still occur – there just won’t be any output about why Fabric aborted!' + 'warnings: Warning messages. These are often turned off when one expects a given operation to fail, such as when using grep to test existence of text in a file. If paired with setting env.warn_only to True, this can result in fully silent warnings when remote programs fail. As with aborts, this setting does not control actual warning behavior, only whether warning messages are printed or hidden.' + 'running: Printouts of commands being executed or files transferred, e.g. [myserver] run: ls /var/www. Also controls printing of tasks being run, e.g. [myserver] Executing task ''foo''.' + 'stdout: Local, or remote, stdout, i.e. non-error output from commands.' + 'stderr: Local, or remote, stderr, i.e. error-related output from commands.' + 'user: User-generated output, i.e. local output printed by fabfile code via use of the fastprint or puts functions.' +) + +_arguments -w -S -C \ + '(-)'{-h,--help}'[show this help message and exit]: :->noargs' \ + '(-)'{-V,--version}'[show program''s version number and exit]: :->noargs' \ + '(-)--list[print list of possible commands and exit]: :->noargs' \ + '(-)--shortlist[print non-verbose list of possible commands and exit]: :->noargs' \ + '(--reject-unknown-hosts)--reject-unknown-hosts[reject unknown hosts]' \ + '(--no-pty)--no-pty[do not use pseudo-terminal in run/sudo]' \ + "(-d+ --display=-)"{-d+,--display=-}"[print detailed info about a given command]: :_targets" \ + '(-D --disable-known-hosts)'{-D,--disable-known-hosts}'[do not load user known_hosts file]' \ + '(-r --reject-unknown-hosts)'{-r,--reject-unknown-hosts}'[reject unknown hosts]' \ + '(-u+ --user=-)'{-u+,--user=-}'[username to use when connecting to remote hosts]: :' \ + '(-p+ --password=-)'{-p+,--password=-}'[password for use with authentication and/or sudo]: :' \ + '(-H+ --hosts=-)'{-H+,--hosts=-}'[comma separated list of hosts to operate on]: :' \ + '(-R+ --roles=-)'{-R+,--roles=-}'[comma separated list of roles to operate on]: :' \ + '(-a --no-agent)'{-a,--no-agent}'[don''t use the running SSH agent]' \ + '(-k --no-keys)'{-k,--no-keys}'[don''t load private key files from ~/.ssh/]' \ + '(-w --warn-only)'{-w,--warn-only}'[warn instead of abort, when commands fail]' \ + '-i+[path to SSH private key file. May be repeated]: :_files' \ + "(-f+ --fabfile=)"{-f+,--fabfile=}"[Python module file to import]: :_files -g *.py" \ + '(-c+ --config=-)'{-c+,--config=-}'[specify location of config file to use]: :_files' \ + '(-s+ --shell=-)'{-s+,--shell=-}'[specify a new shell, defaults to ''/bin/bash -l -c'']: :' \ + '(--hide=-)--hide=-[comma-separated list of output levels to hide]: :->levels' \ + '(--show=-)--show=-[comma-separated list of output levels to show]: :->levels' \ + '*::: :->subcmds' && return 0 + +if [[ CURRENT -ge 1 ]]; then + case $state in + noargs) + _message "nothing to complete";; + levels) + _describe -t commands "output levels" output_levels;; + *) + _targets;; + esac + + return +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_gas b/.zprezto/modules/completion/external/src/_gas new file mode 100644 index 0000000..18da7e4 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_gas @@ -0,0 +1,48 @@ +#compdef gas +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gas (https://github.com/walle/gas). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Fredrik Wallgren +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '(-h|--help)'{-h,--help}'[show help information]' \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +case "$state" in + (cmds) + cmds=( + "version:Prints Gas's version" + "use:Uses author" + "show:Shows your current user" + "list:Lists your authors" + "import:Imports current user to gasconfig" + "help:Describe available tasks or one specific task" + "delete:Deletes author" + "add:Adds author to gasconfig" + ) + _describe -t commands 'gas command' cmds && ret=0 + ;; + (args) + case "$line[1]" in + (use|delete) + _values -S , 'authors' $(cat ~/.gas | sed -n -e 's/^\[\(.*\)\]/\1/p') && ret=0 + ;; + esac + ;; +esac + +return ret + diff --git a/.zprezto/modules/completion/external/src/_geany b/.zprezto/modules/completion/external/src/_geany new file mode 100644 index 0000000..b55bd5c --- /dev/null +++ b/.zprezto/modules/completion/external/src/_geany @@ -0,0 +1,73 @@ +#compdef geany +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Geany (http://www.geany.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- 1 *)'{-h,--help}'[Show help options]' \ + '(- 1 *)--help-all[Show all help options]' \ + '(- 1 *)--help-gtk[Show GTK+ Options]' \ + '(- 1 *)'{-V,--version}'[Show version and exit]' \ + '(--column)--column[Set initial column number for the first opened file (useful in conjunction with --line)]:column number' \ + '(-c --config)'{-c,--config}'[Use an alternate configuration directory]:configuration file:_files' \ + '(--ft-names)--ft-names[Print internal filetype names]' \ + '(-g --generate-tags)'{-g,--generate-tags}'[Generate global tags file (see documentation)]' \ + '(-P --no-preprocessing)'{-P,--no-preprocessing}'[Don'\''t preprocess C/C++ files when generating tags]' \ + '(-i --new-instance)'{-i,--new-instance}'[Don'\''t open files in a running instance, force opening a new instance]' \ + '(--socket-file)--socket-file[Use this socket filename for communication with a running Geany instance]:socket file:_files' \ + '(--list-documents)--list-documents[Return a list of open documents in a running Geany instance]' \ + '(-l --line)'{-l,--line}'[Set initial line number for the first opened file]:line number' \ + '(-m --no-msgwin)'{-m,--no-msgwin}'[Don'\''t show message window at startup]' \ + '(-n --no-ctags)'{-n,--no-ctags}'[Don'\''t load auto completion data (see documentation)]' \ + '(-p --no-plugins)'{-p,--no-plugins}'[Don'\''t load plugins]' \ + '(--print-prefix)--print-prefix[Print Geany'\''s installation prefix]' \ + '(-s --no-session)'{-s,--no-session}'[Don'\''t load the previous session'\''s files]' \ + '(-t --no-terminal)'{-t,--no-terminal}'[Don'\''t load terminal support]' \ + '(--vte-lib)--vte-lib[Filename of libvte.so]:libvte.so filename:_files -g "*.so"' \ + '(-v --verbose)'{-v,--verbose}'[Be verbose]' \ + '(--display)--display[X display to use]:X display:_x_display' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_gem b/.zprezto/modules/completion/external/src/_gem new file mode 100644 index 0000000..9c816f1 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_gem @@ -0,0 +1,499 @@ +#compdef gem gem1.9 macgem +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gem (http://rubygems.org). +# +# Source: https://gist.github.com/164465 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Alex Vollmer (https://github.com/alexvollmer) +# * Tim Pope (https://github.com/tpope) +# +# ------------------------------------------------------------------------------ + + +gem_general_flags=("(-h --help)"{-h,--help}"[Get help on this command]" + "(-V --verbose)"{-V,--verbose}"[Set the verbose level of output]" + "(-q --quiet)"{-q,--quiet}"[Silence commands]" + "--config-file[Use this config file instead of default]:file:_files" + "--backtrace[Show stack backtrace on errors]" + "--debug[Turn on Ruby debugging]" + $nul_arg +) + +__all_gems() { + _gem_names=($(${service} list | awk '{print $1}')) + compadd "$@" -k _gem_names +} + +__all_gems_all() { + _gem_names=($(gem list | awk '{print $1}') "--all") + compadd "$@" -k _gem_names +} + +__gem_help_arguments() { + _args=("commands" + "examples" + "build" + "cert" + "check" + "cleanup" + "contents" + "dependency" + "environment" + "fetch" + "generate_index" + "help" + "install" + "list" + "lock" + "mirror" + "outdated" + "owner" + "pristine" + "push" + "query" + "rdoc" + "search" + "server" + "sources" + "specification" + "stale" + "tumble" + "uninstall" + "unpack" + "update" + "which") + compadd "$@" -k _args +} + +__gem_trust_policies() { + _args=("NoSecurity" + "LowSecurity" + "MediumSecurity" + "HighSecurity") + compadd "$@" -k _args +} + +_gem_build() { + _arguments \ + *:file:_files -f \ + $gem_general_flags && ret=0 +} + +_gem_cert() { + _arguments \ + "(-a --add)"{-a,--add}"[Add a trusted certificate.]":file:_files \ + "(-l --list)"{-l,--list}"[List trusted certificates.]" \ + "(-r --remove)"{-r,--remove}"[Remove trusted certificates containing STRING.]" \ + "(-b --build)"{-b,--build}"[Build private key and self-signed certificate for EMAIL_ADDR.]" \ + "(-C --certificate)"{-C,--certificate}"[Certificate for --sign command.]":file:_files \ + "(-K --private-key)"{-K,--private-key}"[Private key for --sign command.]":file:_files \ + "(-s --sign)"{-s,--sign}"[Sign a certificate with my key and certificate.]":file:_files \ + $gem_general_flags && ret=0 +} + +_gem_check() { + _arguments \ + "--verify[Verify gem file against its internal checksum]":file:_files \ + "(-a --alien)"{-a,--alien}"[Report 'unmanaged' or rogue files in the gem repository]" \ + "(-v --verbose)"{-v,--verbose}"[Spew more words]" \ + "(-t --test)"{-t,--test}"[Run unit tests for gem]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to run tests for]" \ + $gem_general_flags && ret=0 +} + +_gem_cleanup() { + _arguments \ + "*:gemname:__all_gems" \ + "(-d --dryrun)"{-d,--dryrun}"[]" \ + $gem_general_flags && ret=0 +} + +_gem_contents() { + _arguments \ + "*:gemname:__all_gems" \ + "(-v --version)"{-v,--version}"[Specify version of gem to contents]" \ + "--all[Contents for all gems]" \ + "(-s --spec-dir)"{-s,--spec-dir}"[Search for gems under specific paths]" \ + "(-l --no-lib-only)"{-l,--no-lib-only}"[Only return files in the Gem's lib_dirs]" \ + "--no-prefix[Don't include installed path prefix]" \ + $gem_general_flags && ret=0 +} + +_gem_dependency() { + _arguments \ + ":gemname:__all_gems" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to dependency]" \ + "--platform[Specify the platform of gem to dependency]" \ + "(-R --no-reverse-dependencies)"{-R,--no-reverse-dependencies}"[Include reverse dependencies in the output]" \ + "(-p --pipe)"{-p,--pipe}"[Pipe Format (name --version ver)]" \ + $gem_general_flags && ret=0 +} + +_gem_environment() { + typeset -g _environment_arg= + _environment_arg='::environment:((packageversion\:"display the package version" + gemdir\:"display the path where gems are installed" + gempath\:"display path used to search for gems" + version\:"display the gem format version" + remotesources\:"display the remote gem servers"))' + _arguments \ + $_environment_arg \ + $gem_general_flags && ret=0 +} + +_gem_fetch() { + _arguments \ + "*:gemname:__all_gems" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "--source[Use URL as the remote source for gems]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to fetch]" \ + "--platform[Specify the platform of gem to fetch]" \ + $gem_general_flags && ret=0 +} + +_gem_generate_index() { + _arguments \ + "(-d --directory=DIRNAME)"{-d,--directory=-}"[repository base dir containing gems subdir]":directory:_directories \ + "--no-legacy[Generate indexes for RubyGems older than 1.2.0]" \ + "--no-modern[Generate indexes for RubyGems newer than 1.2.0]" \ + "--update[Update modern indexes with gems added since the last update]" \ + "--rss-gems-host=-[Host name where gems are served from, used for GUID and enclosure values]" \ + "--rss-host=-[Host name for more gems information, used for RSS feed link]" \ + "--rss-title=-[Set title for RSS feed]" \ + $gem_general_flags && ret=0 +} + +_gem_help() { + _arguments \ + ":argument:__gem_help_arguments" \ + $gem_general_flags && ret=0 +} + +_gem_install() { + _arguments \ + "*:gemname:__all_gems" \ + "(-i --install-dir)"{-i,--install-dir}"[Gem repository directory to get installed gems]":directory:_directories \ + "(-n --bindir)"{-n,--bindir}"[Directory where binary files are located]":directory:_directories \ + "(-d --no-rdoc)"{-d,--no-rdoc}"[Generate RDoc documentation for the gem on install]" \ + "--no-ri[Generate RI documentation for the gem on install]" \ + "(-E --no-env-shebang)"{-E,--no-env-shebang}"[Rewrite the shebang line on installed scripts to use /usr/bin/env]" \ + "(-f --no-force)"{-f,--no-force}"[Force gem to install, bypassing dependency checks]" \ + "(-t --no-test)"{-t,--no-test}"[Run unit tests prior to installation]" \ + "(-w --no-wrappers)"{-w,--no-wrappers}"[Use bin wrappers for executables Not available on dosish platforms]" \ + "(-P --trust-policy)"{-P,--trust-policy}"[Specify gem trust policy]:trust policy:__gem_trust_policies" \ + "--ignore-dependencies[Do not install any required dependent gems]" \ + "(-y --include-dependencies)"{-y,--include-dependencies}"[Unconditionally install the required dependent gems]" \ + "--no-format-executable[Make installed executable names match ruby. If ruby is ruby18, foo_exec will be foo_exec18]" \ + "--no-user-install[Install in user's home directory instead of GEM_HOME. Defaults to using home only if GEM_HOME is not writable.]" \ + "--development[Install any additional development dependencies]" \ + "--prerelease[Install prerelease versions of a gem if available. Defaults to skipping prereleases.]" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + "--platform[Specify the platform of gem to install]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to install]" \ + $gem_general_flags && ret=0 +} + +_gem_list() { + _arguments \ + ":gem name: " \ + "(-i --no-installed)"{-i,--no-installed}"[Check for installed gem]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to list]" \ + "(-d --no-details)"{-d,--no-details}"[Display detailed information of gem(s)]" \ + "--no-versions[Display only gem names]" \ + "(-a --all)"{-a,--all}"[Display all gem versions]" \ + "--prerelease[Display prerelease versions]" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + $gem_general_flags && ret=0 +} + +_gem_lock() { + _arguments \ + ":gemname:__all_gems" \ + "(-s --no-strict)"{-s,--no-strict}"[fail if unable to satisfy a dependency]" \ + $gem_general_flags && ret=0 +} + +_gem_mirror() { + _arguments \ + $gem_general_flags && ret=0 +} + +_gem_open() { + _arguments \ + "*:gemname:__all_gems" \ + "(-v --version)"{-v,--version}"[Specify version of gem to open]" +} + +_gem_outdated() { + _arguments \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + "--platform[Specify the platform of gem to outdated]" \ + $gem_general_flags && ret=0 +} + +_gem_owner() { + _arguments \ + "(-a --add)"{-a,--add}"[Add an owner]" \ + "(-r --remove)"{-r,--remove}"[Remove an owner]" \ + $gem_general_flags && ret=0 +} + +_gem_pristine() { + _arguments \ + ":gem name:__all_gems_all" \ + "--all[Restore all installed gems to pristine condition]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to restore to pristine condition]" \ + $gem_general_flags && ret=0 +} + +_gem_push() { + _arguments \ + *:file:_files -f \ + "(-p --http-proxy)"{-p,--http-proxy}"[Use HTTP proxy for remote operations]" \ + $gem_general_flags && ret=0 +} + +_gem_query() { + _arguments \ + "(-i --no-installed)"{-i,--no-installed}"[Check for installed gem]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to query]" \ + "(-n --name-matches)"{-n,--name-matches}"[Name of gem(s) to query on matches the provided REGEXP]" \ + "(-d --no-details)"{-d,--no-details}"[Display detailed information of gem(s)]" \ + "--no-versions[Display only gem names]" \ + "(-a --all)"{-a,--all}"[Display all gem versions]" \ + "--prerelease[Display prerelease versions]" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + $gem_general_flags && ret=0 +} + +_gem_rdoc() { + _arguments \ + ":gem name:__all_gems_all" \ + "--all[Generate RDoc/RI documentation for all installed gems]" \ + "--no-rdoc[Include RDoc generated documents]" \ + "--no-ri[Include RI generated documents]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to rdoc]" \ + $gem_general_flags && ret=0 +} + +_gem_search() { + _arguments \ + ":gem name::" \ + "(-i --no-installed)"{-i,--no-installed}"[Check for installed gem]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to search]" \ + "(-d --no-details)"{-d,--no-details}"[Display detailed information of gem(s)]" \ + "--no-versions[Display only gem names]" \ + "(-a --all)"{-a,--all}"[Display all gem versions]" \ + "--prerelease[Display prerelease versions]" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + $gem_general_flags && ret=0 +} + +_gem_server() { + _arguments \ + "(-p --port=PORT)"{-p,--port=-}"[port to listen on]" \ + "(-d --dir=GEMDIR)"{-d,--dir=-}"[directory from which to serve gems]":directory:_directories \ + "--no-daemon[run as a daemon]" \ + $gem_general_flags && ret=0 +} + +_gem_sources() { + _arguments \ + "(-a --add)"{-a,--add}"[Add source]" \ + "(-l --list)"{-l,--list}"[List sources]" \ + "(-r --remove)"{-r,--remove}"[Remove source]" \ + "(-c --clear-all)"{-c,--clear-all}"[Remove all sources (clear the cache)]" \ + "(-u --update)"{-u,--update}"[Update source cache]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + $gem_general_flags && ret=0 +} + +_gem_specification() { + _arguments \ + ":gemname:__all_gems" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to examine]" \ + "--platform[Specify the platform of gem to specification]" \ + "--all[Output specifications for all versions of the gem]" \ + "--ruby[Output ruby format]" \ + "--yaml[Output RUBY format]" \ + "--marshal[Output Marshal format]" \ + $gem_general_flags && ret=0 +} + +_gem_stale() { + _arguments \ + $gem_general_flags && ret=0 +} + +_gem_tumble() { + _arguments \ + $gem_general_flags && ret=0 +} + +_gem_uninstall() { + _arguments \ + "*:gemname:__all_gems" \ + "(-a --no-all)"{-a,--no-all}"[Uninstall all matching versions]" \ + "(-I --no-ignore-dependencies)"{-I,--no-ignore-dependencies}"[Ignore dependency requirements while uninstalling]" \ + "(-x --no-executables)"{-x,--no-executables}"[Uninstall applicable executables without confirmation]" \ + "(-i --install-dir)"{-i,--install-dir}"[Directory to uninstall gem from]":directory:_directories \ + "(-n --bindir)"{-n,--bindir}"[Directory to remove binaries from]":directory:_directories \ + "--no-user-install[Uninstall from user's home directory in addition to GEM_HOME.]" \ + "(-v --version)"{-v,--version}"[Specify version of gem to uninstall]" \ + "--platform[Specify the platform of gem to uninstall]" \ + $gem_general_flags && ret=0 +} + +_gem_unpack() { + _arguments \ + ":gemname:__all_gems" \ + "--target=-[target directory for unpacking]":directory:_directories \ + "(-v --version)"{-v,--version}"[Specify version of gem to unpack]" \ + $gem_general_flags && ret=0 +} + +_gem_update() { + _arguments \ + "*:gemname:__all_gems" \ + "(-i --install-dir)"{-i,--install-dir}"[Gem repository directory to get installed gems]":directory:_directories \ + "(-n --bindir)"{-n,--bindir}"[Directory where binary files are located]":directory:_directories \ + "(-d --no-rdoc)"{-d,--no-rdoc}"[Generate RDoc documentation for the gem on install]" \ + "--no-ri[Generate RI documentation for the gem on install]" \ + "(-E --no-env-shebang)"{-E,--no-env-shebang}"[Rewrite the shebang line on installed scripts to use /usr/bin/env]" \ + "(-f --no-force)"{-f,--no-force}"[Force gem to install, bypassing dependency checks]" \ + "(-t --no-test)"{-t,--no-test}"[Run unit tests prior to installation]" \ + "(-w --no-wrappers)"{-w,--no-wrappers}"[Use bin wrappers for executables Not available on dosish platforms]" \ + "(-P --trust-policy)"{-P,--trust-policy}"[Specify gem trust policy]:trust policy:__gem_trust_policies" \ + "--ignore-dependencies[Do not install any required dependent gems]" \ + "(-y --include-dependencies)"{-y,--include-dependencies}"[Unconditionally install the required dependent gems]" \ + "--no-format-executable[Make installed executable names match ruby. If ruby is ruby18, foo_exec will be foo_exec18]" \ + "--no-user-install[Install in user's home directory instead of GEM_HOME. Defaults to using home only if GEM_HOME is not writable.]" \ + "--development[Install any additional development dependencies]" \ + "--prerelease[Install prerelease versions of a gem if available. Defaults to skipping prereleases.]" \ + "(-l --local)"{-l,--local}"[Restrict operations to the LOCAL domain]" \ + "(-r --remote)"{-r,--remote}"[Restrict operations to the REMOTE domain]" \ + "(-b --both)"{-b,--both}"[Allow LOCAL and REMOTE operations]" \ + "(-B --bulk-threshold)"{-B,--bulk-threshold}"[Threshold for switching to bulk synchronization (default 1000)]" \ + "--source[Use URL as the remote source for gems]" \ + "(-p --[no-]http-proxy)"{-p,--[no-]http-proxy}"[Use HTTP proxy for remote operations]" \ + "(-u --no-update-sources)"{-u,--no-update-sources}"[Update local source cache]" \ + "--system[Update the RubyGems system software]" \ + "--platform[Specify the platform of gem to update]" \ + $gem_general_flags && ret=0 +} + +_gem_which() { + _arguments \ + *:file:_files -f \ + "(-a --no-all)"{-a,--no-all}"[show all matching files]" \ + "(-g --no-gems-first)"{-g,--no-gems-first}"[search gems before non-gems]" \ + $gem_general_flags && ret=0 +} + +_gem_migrate() { + _arguments \ + "*:gemname:__all_gems" \ + $gem_general_flags && ret=0 +} + +if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function 1 _gem_${words[1]} +else + _values "gem command" \ + "build[Build a gem from a gemspec]" \ + "cert[Manage RubyGems certificates and signing settings]" \ + "check[Check installed gems]" \ + "cleanup[Clean up old versions of installed gems in the local repository]" \ + "contents[Display the contents of the installed gems]" \ + "dependency[Show the dependencies of an installed gem]" \ + "environment[Display information about the RubyGems environment]" \ + "fetch[Download a gem and place it in the current directory]" \ + "generate_index[Generates the index files for a gem server directory]" \ + "help[Provide help on the 'gem' command]" \ + "install[Install a gem into the local repository]" \ + "list[Display gems whose name starts with STRING]" \ + "lock[Generate a lockdown list of gems]" \ + "migrate[Migrate a gem you own from Rubyforge to Gemcutter]" \ + "mirror[Mirror a gem repository]" \ + "open[Open a gem in your editor]" \ + "outdated[Display all gems that need updates]" \ + "owner[Manage gem owners on Gemcutter]" \ + "pristine[Restores installed gems to pristine condition from files located in the gem cache]" \ + "push[Push a gem up to Gemcutter]" \ + "query[Query gem information in local or remote repositories]" \ + "rdoc[Generates RDoc for pre-installed gems]" \ + "search[Display all gems whose name contains STRING]" \ + "server[Documentation and gem repository HTTP server]" \ + "sources[Manage the sources and cache file RubyGems uses to search for gems]" \ + "specification[Display gem specification (in yaml)]" \ + "stale[List gems along with access times]" \ + "tumble[Enable or disable Gemcutter as your primary gem source]" \ + "uninstall[Uninstall gems from the local repository]" \ + "unpack[Unpack an installed gem to the current directory]" \ + "update[Update the named gems (or all installed gems) in the local repository]" \ + "which[Find the location of a library file you can require]" +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + + diff --git a/.zprezto/modules/completion/external/src/_ghc b/.zprezto/modules/completion/external/src/_ghc new file mode 100644 index 0000000..7d4e1ef --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ghc @@ -0,0 +1,618 @@ +#compdef ghc ghci ghc-pkg +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ghc (http://www.haskell.org/ghc/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Gérard Milmeister +# * Philip Dexter +# +# ------------------------------------------------------------------------------ + +local state +local WORDS + +# +# ghci +# + +_ghc_ghci () { _ghc_compiler } + +# +# ghc +# + +_ghc_compiler () +{ + _arguments \ + "-no-hs-main[Don't assume this program contains main]" \ + "-no-user-package-conf[Don't load the user's package config file]" \ + '(- *)'{--help,-\?}'[Show help information]' \ + '*-I-[Add directory to path for #include files]:directory:_files -/' \ + '*-X-[Language flags]:flag:_ghc_language_flags' \ + '*-d-[Debugging options]:flag:_ghc_debugging_options' \ + '*-f-[Compiler options]:flag:_ghc_compiler_flags' \ + '*-hide-package[Hide package]:Package:_ghc_pkg_list_packages' \ + '*-trust[Expose package and set it to be trusted]:Package:_ghc_pkg_list_packages' \ + '*-distrust[Expose package and set it to be distrusted]:Package:_ghc_pkg_list_packages' \ + '*-distrust-all[Distrust all packages by default]' \ + '*-i-[Add directory to import path]:directory:->ghc_include_directory' \ + '*-package[Expose package]:Package:_ghc_pkg_list_packages' \ + '*:file:_files -g \*.\{lhs,hs,hc,c,s\}' \ + '--info[Display information about the compiler]' \ + '--show-options[Display the supported command line options]' \ + '--interactive[Interactive mode]' \ + '--make[Compile and link a complete Haskell program]:file:_files -g "*.{lhs,hs,hc,c,s}"' \ + '--numeric-version[Display GHC version (numeric only)]' \ + '--print-libdir[Display GHC library directory]' \ + '--show-iface[Show interface]:file:_files -g "*.hi"' \ + {--supported-languages,--supported-extensions}'[Display the supported language extensions]' \ + '-C[Stop after generating C]' \ + '-E[Stop after generating preprocessed, de-litted Haskell]' \ + '-H[Minimum heap size]:size:' \ + '-M[Output Makefile rules]' \ + '-O-[Enable optimization]:level:(0 1 2)' \ + '-Rghc-timing[Summarise timing stats for GHC]' \ + '-S[Stop after generating assembler]' \ + '-V[Display GHC version]' \ + '-W[Enable normal warnings]' \ + '-Wall[Enable almost all warnings]' \ + '-Werror[Make warnings fatal]' \ + '-Wwarn[Make warnings non-fatal]' \ + '-c[Stop after generating object files]' \ + '-eventlog[Enable runtime event tracing]' \ + '-debug[Use the debugging runtime]' \ + "-dylib-install-name[On Darwin/OS X only, set the install name]" \ + '-dynamic[Use dynamic Haskell libraries]' \ + '-dynamic-too[Build dynamic object files as well as static object files during compilation]' \ + '-dynosuf[Set the output suffix for dynamic object files]' \ + '-dynload[Select one of a number of modes for finding shared libraries at runtime]' \ + '--mk-dll[DLL-creation mode (Windows only)]' \ + '-framework-path[On Darwin/OS X/iOS only, add dir to the list of directories searched for frameworks]' \ + '-shared[Generate a shared library (as opposed to an executable)]' \ + '-staticlib[On Darwin/OS X/iOS only, generate a standalone static library (as opposed to an executable)]' \ + '-e[Evaluate expression]' \ + '-hide-all-packages[Hide all packages by default]' \ + '-hpcdir[Directory to deposit .mix files during compilation (default is .hpc)]' \ + '-n[Do a dry run]' \ + '-o[Set output filename]:file:_files' \ + '-outputdir[Set output directory]:directory:_files -/' \ + '-package-name[Compile to be part of package]' \ + '-hide-all-packages[Hide all packages by default]' \ + '-package-db[Add file to the package db stack]:file:_files' \ + '-clear-package-db[Clear the package db stack]' \ + '-msse2[(x86 only) Use SSE2 for floating point]' \ + '-monly-\[432\]-regs[(x86 only) give some registers back to the C compiler]' \ + '-no-global-package-db[Remove the global package db from the stack]' \ + '-global-package-db[Add the global package db to the stack]' \ + "-no-user-package-db[Remove the user's package db from the stack]" \ + "-user-package-db[Add the user's package db to the stack]" \ + "-no-auto-link-packages[Don't automatically link in the base and rts packages]" \ + '-optL[pass option to the literate pre-processor]' \ + '-optP[pass option to cpp (with -cpp only)]' \ + '-optF[pass option to the custom pre-processor]' \ + '-optc[pass option to the C compiler]' \ + '-optlo[pass option to the LLVM optimiser]' \ + '-optlc[pass option to the LLVM compiler]' \ + '-optm[pass option to the mangler]' \ + '-opta[pass option to the assembler]' \ + '-optl[pass option to the linker]' \ + '-optdll[pass option to the DLL generator]' \ + '-optwindres[pass option to windres.]' \ + '-prof[Turn on profiling]' \ + '-pgmL[Use cmd as the literate pre-processor]' \ + '-pgmP[Use cmd as the C pre-processor (with -cpp only)]' \ + '-pgmc[Use cmd as the C compiler]' \ + '-pgms[Use cmd as the splitter]' \ + '-pgml[Use cmd as the linker]' \ + '-pgmdll[Use cmd as the DLL generator]' \ + '-pgmF[Use cmd as the pre-proecessor (with -F only)]' \ + '-pgmwindres[Use cmd as the program for embedding manifests on Windows]' \ + '-pgmlibtool[Use cmd as the command for libtool (with -staticlib only)]' \ + '-rtsopts[Only a minimum of safe options can be given to RTS]' \ + '-rtsopts=[Control whether the RTS behavior can be tweaked via command-line flags and the GHCRTS environment varaible (none, som, or all)]' \ + '-with-rtsopts=[Set the default RTS options]' \ + '-threaded[Use the threaded runtime]' \ + '-ticky[Turn on ticky-ticky profiling]' \ + '-tmpdir[Set the directory for temporary files]:directory:_files -/' \ + '-v-[Control verbosity]:level:(0 1 2 3 4 5)' \ + '-w[Disable all warnings]' \ + '-x[Override default behaviour for source files]:suffix:(hs lhs hc c s o hspp)' \ + '-hcsuf[Set the suffix to use for intermediate]:suffix:' \ + '-hidir[Set directory for interface files]:directory:_files -/' \ + '-hisuf[Set the suffix to use for interface files]:suffix:' \ + '-odir[Set directory for object files]:directory:_files -/' \ + '-ohi[Set the filename in which to put the interface]:filename:_files -/' \ + '-osuf[Set the output file suffix]:suffix:' \ + '-stubdir[Redirect FFi stub files]:directory:_files -/' \ + '-dumpdir[Redirect dump files]:directory:_files -/' \ + '-outputdir[Set output directory]:directory:_files -/' \ + '-keep-hc-files[Retain intermediate .hc files]' \ + '-keep-llvm-files[Retain intermediate LLVM .ll files]' \ + '-keep-s-files[Retain intermediate .s files]' \ + '-keep-raw-s-files[Retain intermediate .raw_s files]' \ + '-keep-tmp-files[Retain all intermediate temporary files]' \ + '-static[Use static Haskell libraries]' \ + '-split-objs[Split objects (for libraries)]' \ + '-no-link[Omit linking]' \ + '-main-is[Set main module and function]:function:' \ + '*-L-[Add dir to the list of directories searched for libraries]:directory:_files -/' \ + '*-l-[Link in library]:library:->library' + + [[ -n "$state" ]] && + case "$state" in + ghc_include_directory) _ghc_include_directory ;; + library) + _wanted libraries expl library \ + compadd - \ + ${^=LD_LIBRARY_PATH:-/usr/lib /usr/local/lib}/lib*.(a|so*)(:t:fr:s/lib//) \ + && ret=0 + esac +} + + +_ghc_include_directory () +{ + compset -P '*:' + compset -S ':*' + _path_files -r': ' -/ +} + +_ghc_compiler_flags () +{ + local _ghc_compiler_flags_list + _ghc_compiler_flags_list=( + 'ghci-hist-size:Set the number of entries GHCi keeps for \:history' + 'print-explicit-foralls:Print explicit forall quantification in types' + 'print-explicit-kinds:Print explicit kind foralls and kind arguments in types' + {no-,}'break-on-error:Break on uncaught exceptions and errors' + {no-,}'break-on-exception:Break on any exception thrown' + {no-,}'case-merge:Enable case-merging' + {no-,}'defer-type-errors:Defer as many type errors as possible until runtime' + {no-,}'dicts-strict:Make dictionaries strict' + {no-,}'do-eta-reduction:Enable eta-reduction' + {no-,}'do-lambda-eta-expansion:Enable lambda eta-reduction' + 'eager-blackholing:Turn on eager blackholing' + {no-,}'enable-rewrite-rules:Switch on all rewrite rules (including rules generated by automatic specialisation of overloaded functions)' + 'error-spans:Output full span in error messages' + 'ext-core:Generate .hcr external Core file' + 'force-recomp:Turn off recompilation checking' + {no-,}'float-in:Turn on the float-in transformation' + {no-,}'full-laziness:Turn on full laziness (floating bindings outwards)' + {no-,}'fun-to-thunk:Allow worker-wrapper to convert a function closure into a thunk if the function does not use any of its arguments. Off by default.' + {no-,}'glasgow-exts:Enable most language extensions' + {no-,}'helpful-errors:Make suggestions for mis-spelled names' + 'history-size:Set simplification history size' + {no-,}'ignore-asserts:Ignore assertions in the source' + {no-,}'ignore-interface-pragmas:Ignore pragmas in interface files' + {no-,}'loopification:Turn saturated self-recursive tail-calls into local jumps in the generated assembly' + {no-,}'late-dmd-anal:Run demand analysis again, at the end of the simplification pipeline' + {no-,}'liberate-case:Turn on the liberate-case transformation' + 'liberate-case-threshold=:Set the size threshold for the liberate-case transformation (default 200)' + 'no-liberate-case-threshold:Set the size threshold for the liberate-case transformation (default 200)' + {no-,}'max-relevant-bindings=N:Set the maximum number of bindings to display in type error messages (default 6).' + 'max-worker-args=:If a worker has that many arguments, none will be unpacked anymore (default 10)' + 'max-simplifier-iterations=:Set the max iterations for the simplifier' + 'no-asm-mangling:Turn off assembly mangling' + 'no-black-holing:Turn off black holing' + "no-hi-version-check:Don't complain about .hi file mismatches" + 'no-implicit-import-qualified:Turn off implicit qualified import of everything in GHCi' + 'no-print-bind-contents:Turn off printing of binding contents in GHCi' + 'no-opt-coercion:Turn off the coercion optimiser' + 'no-ghci-history:Do not use the load/store the GHCi command history from/to ghci_history' + 'no-ghci-sandbox:Turn off the GHCi sandbox. Means computations are run in the main thread, rather than a forked thread' + 'no-gen-manifest:Do not generate a manifest file (Windows only)' + 'no-embed-manifest:Do not embed the manifest in the executable (Windows only)' + "no-shared-implib:Don't generate an import library for a DLL (Windows only)" + 'no-pre-inlining:Turn off pre-inlining' + 'no-state-hack:Turn off the "state hack" whereby any lambda with a real-world state token as argument is considered to be single-entry' + {no-,}'print-bind-result:Turn on printing of binding results in GHCi' + {no-,}'print-evld-with-show:Enable usage of Show instances in \:print' + 'unregisterised:Unregisterised compilation' + 'asm:Use the native code generator' + 'via-C:Compile via C' + 'no-code:Omit code generation' + 'byte-code:Generate byte-code' + 'object-code:Generate object code' + 'hpc:Turn on Haskell program coverage instrumentation' + 'PIC:Generate position-independent code' + 'plugin=:Load a plugin exported by a given module' + 'plugin-opt=:Give arguments to a plugin module' + 'context-stack=:Set the limit for context reduction (default is 20)' + 'type-function-depth=:Set the limit for type function reductions (default is 200)' + 'force-recomp:Turn off recompilation checking' + {no-,}"omit-interface-pragmas:Don't generate interface pragmas" + 'package-trust:Enable Safe Haskell trusted package requirement for trustworthy modules' + {no-,}'pedantic-bottoms:Make GHC be more precise about its treatment of bottom' + {no-,}'disambiguate-record-fields:Enable record field disambiguation' + {no-,}'irrefutable-tuples:Make tuple pattern matching irrefutable' + {no-,}'vectorise:Enable vectorisation of nested data parallelism' + {no-,}'avoid-vect:Enable vectorisation avoidance' + {no-,}'excess-precision:Enable excess intermediate precision' + {no-,}'prof-auto:Auto-add SCCs to all bindings not marked INLINE' + {no-,}'prof-auto-top:Auto-add SCCs to all top-level bindings not marked INLINE' + {no-,}'prof-auto-exported:Auto-add SCCs to all exported bindings not marked INLINE' + {no-,}'prof-cafs:Auto-add SCCs to all CAFs' + {no-,}'prof-count-entries:Collect entry counts' + 'simplifier-phases:Set the number of phases for the simplifier (default 2)' + 'simpl-tick-factor=:Set the percentage factor for simplifier ticks (default 100)' + {no-,}'spec-constr:Turn on the SpecConstr transformation' + {no-,}'spec-constr-threshold=:Set the size threshold for the SpecConstr transformation (default 200)' + {no-,}'spec-constr-count=:Set the maximum number of specialisations that will be created for any one function by the SpecConstr transformation (default 3)' + 'strictness=before=:Run an additional strictness analysis before a simplifier phase' + {no-,}'static-argument-transformation:Turn on the static argument transformation' + {no-,}'unbox-strict-fields:Flatten strict constructor fields' + {no-,}'unbox-small-strict-fields:Flatten strict constructor fields with a pointer-sized representation' + {no-,}'unfolding-creation-threshold:Tweak unfolding settings' + {no-,}'unfolding-fun-discount:Tweak unfolding settings' + {no-,}'unfolding-keeness-factor:Tweak unfolding settings' + {no-,}'unfolding-use-threshold:Tweak unfolding settings' + {no-,}'warn-warnings-deprecations:Warn about uses of functions & types that have warnings or deprecated pragmas' + {no-,}'warn-deprecated-flags:Warn about uses of commandline flags that are deprecated' + {no-,}'warn-duplicate-exports:Warn when an entity is exported multiple times' + {no-,}'warn-hi-shadowing:Warn when a .hi file in the current directory shadows a library' + {no-,}'warn-implicit-prelude:Warn when the Prelude is implicitly imported' + {no-,}'warn-incomplete-patterns:Warn when a pattern match could fail' + {no-,}'warn-incomplete-record-updates:Warn when a record update could fail' + {no-,}'warn-missing-fields:Warn when fields of a record are uninitialised' + {no-,}'warn-missing-methods:Warn when class methods are undefined' + {no-,}'warn-missing-signatures:Warn about top-level functions without signatures' + {no-,}'warn-duplicate-constraints:Warn when a constraint appears duplicated in a type signature' + {no-,}'warn-identities:Warn about uses of Prelude numeric conversions that are probably the identity (and hence could be omitted)' + {no-,}'warn-incomplete-uni-patterns:Warn when a pattern match in a lambda expression or pattern binding could fail' + {no-,}'warn-lazy-unlifted-bindings:(Deprecated) warn when a pattern binding looks lazy but must be strict' + {no-,}'warn-missing-import-lists:Warn when an import declaration does not explicitly list all the names brought into scope' + {no-,}'warn-missing-local-sigs:Warn about polymorphic local bindings without signatures' + {no-,}'warn-monomorphism-restriction:Warn when the Monomorphism Restriction is applied' + {no-,}'warn-name-shadowing:Warn when names are shadowed' + {warn-orphans,warn-auto-orphans}':Warn when the module contains orphan instance declarations or rewrite rules' + {no-,}'warn-overlapping-patterns:Warn about overlapping patterns' + {no-,}'warn-tabs:Warn if there are tabs in the source file' + {no-,}'warn-type-defaults:Warn when defaulting happens' + {no-,}"warn-unrecognised-pragmas:Warn about uses of pragmas that GHC doesn't recognise" + {no-,}'warn-unused-binds:Warn about bindings that are unused' + {no-,}'warn-unused-imports:Warn about unnecessary imports' + {no-,}"warn-unused-matches:Warn about variables in patterns that aren't used" + {no-,}'warn-unused-do-bind:Warn about do bindings that appear to throw away values of types other than ()' + {no-,}'warn-wrong-do-bind:Warn about do bindings that appear to throw away monadic values that you should have bound instead' + {no-,}'warn-unsafe:Warn if the module being compiled is regarded to be unsafe' + {no-,}'warn-safe:Warn if the module being compiled is regarded to be safe' + {no-,}'warn-amp:Warn on definitions conflicting with the Applicative-Monad Proposal (AMP)' + {no-,}'warn-typed-holes:Enable holes in expressions' + ) + _describe -t flags 'ghc' _ghc_compiler_flags_list || compadd "$@" +} + +_ghc_debugging_options () +{ + local _ghc_debugging_options_list + _ghc_debugging_options_list=( + "dump-hi:Dump the new interface to stdout" + "dump-hi-diffs:Show the differences vs. the old interface" + "dump-minimal-imports:Dump a minimal set of imports" + "core-lint:Turn on internal sanity checking" + "dump-asm:Dump assembly" + "dump-bcos:Dump interpreter byte code" + "dump-cmm:Dump C-- output" + "dump-cpranal:Dump output from CPR analysis" + "dump-cse:Dump CSE output" + "dump-deriv:Dump deriving output" + "dump-ds:Dump desugarer output" + 'dump-flatC:Dump "flat" C' + "dump-foreign:Dump foreign export stubs" + "dump-hpc:Dump after instrumentation for program coverage" + "dump-inlinings:Dump inlining info" + "dump-occur-anal:Dump occurrence analysis output" + "dump-opt-cmm:Dump the results of C-- to C-- optimising passes" + "dump-parsed:Dump parse tree" + "dump-prep:Dump prepared core" + "dump-rn:Dump renamer output" + "dump-rules:Dump rules" + "dump-simpl:Dump final simplifier output" + "dump-simpl-phases:Dump output from each simplifier phase" + "dump-simpl-iterations:Dump output from each simplifier iteration" + "dump-spec:Dump specialiser output" + "dump-splices:Dump TH spliced expressions" + "dump-stg:Dump final STG" + "dump-stranal:Dump strictness analyser output" + "dump-tc:Dump typechecker output" + "dump-types:Dump type signatures" + "dump-worker-wrapper:Dump worker-wrapper output" + "dump-if-trace:Trace interface files" + "dump-tc-trace:Trace typechecker" + "dump-to-file:Dump to files instead of stdout" + "dump-core-stats:Print a one-line summary of the size of the Core program at the end of the optimisation pipeline" + "dump-llvm:Dump LLVM intermediate code" + "dump-rule-firings:Dump rule firing info" + "dump-rule-rewrites:Dump detailed rule firing info" + "dump-vect:Dump vectoriser input and output" + "dump-strsigs:Dump strictness signatures" + "dump-vt-trace:Trace vectoriser" + "dump-rn-trace:Trace renamer" + "dump-rn-stats:Renamer stats" + "dump-simpl-stats:Dump simplifier stats" + "suppress-all:In core dumps, suppress everything (except for uniques) that is suppressible" + "suppress-uniques:Suppress the printing of uniques in debug output (easier to use diff)" + "suppress-idinfo:Suppress extended information about identifiers where they are bound" + "suppress-module-prefixes:Suppress the printing of module qualification prefixes" + "suppress-type-signatures:Suppress type signatures" + "suppress-type-applications:Suppress type applications" + "suppress-coercions:Suppress the printing of coercions in Core dumps to make them shorter" + "no-debug-output:Suppress unsolicited debugging output" + "ppr-debug:Turn on debug printing (more verbose)" + "ppr-noprags:Don't output pragma info in dumps" + "ppr-user-length:Set the depth for printing expressions in error msgs" + "ppr-colsNNN:Set the width of debugging output. For example -dppr-cols200" + "ppr-case-as-let:Print single alternative case expressions as strict lets" + "source-stats:Dump haskell source stats" + "cmm-lint:C-- pass sanity checking" + "stg-lint:STG pass sanity checking" + "stg-stats:Dump STG stats" + "verbose-core2core:Show output from each core-to-core pass" + "verbose-stg2stg:Show output from each STG-to-STG pass" + "show-passes:Print out each pass name as it happens" + "faststring-stats:Show statistics for fast string usage when finished" + ) + _describe -t flags 'ghc' _ghc_debugging_options_list || compadd "$@" +} + + +_ghc_language_flags () +{ + local _ghc_language_flags_list + _ghc_language_flags_list=( + "AllowAmbiguousTypes:Allow the user to write ambiguous types, and the type inference engine to infer them" + "Arrows:Enable arrow notation extension" + "AutoDeriveTypeable:Automatically derive Typeable instances for every datatype and type class declaration" + "BangPatterns:Enable bang patterns" + "ConstraintKinds:Enable a kind of constraints" + "CPP:Enable the C preprocessor" + "ConstrainedClassMethods:Enable constrained class methods" + "DataKinds:Enable datatype promotion" + "DefaultSignatures:Enable default signatures" + "DeriveDataTypeable:Enable deriving for the Data and Typeable classes" + "DeriveGeneric:Enable deriving for the Generic class" + "DisambiguateRecordFields:Enable record field disambiguation" + "EmptyCase:Allow empty case alternatives" + "EmptyDataDecls:Enable empty data declarations" + "ExistentialQuantification:Enable existential quantification" + "ExplicitForAll:Enable explicit universal quantification" + "ExplicitNamespaces:Enable using the keyword type to specify the namespace of entries in imports and exports" + "ExtendedDefaultRules:Use GHCi's extended default rules in a normal module" + "FlexibleContexts:Enable flexible contexts" + "FlexibleInstances:Enable flexible instances" + "ForeignFunctionInterface:Enable foreign function interface" + "FunctionalDependencies:Enable functional dependencies" + "GADTs:Enable generalised algebraic data types" + "GADTSyntax:Enable generalised algebraic data type syntax" + "GeneralizedNewtypeDeriving:Enable newtype deriving" + "Generics:Enable generic classes" + "ImplicitParams:Enable Implicit Parameters" + "ImpredicativeTypes:Enable impredicative types" + "IncoherentInstances:Enable incoherent instances" + "InterruptibleFFI:Enable interruptible FFI" + "KindSignatures:Enable kind signatures" + "LambdaCase:Enable lambda-case expressions" + "LiberalTypeSynonyms:Enable liberalised type synonyms" + "MonadComprehensions:Enable monad comprehensions" + "MonoLocalBinds:Enable do not generalise local bindings" + "MultiParamTypeClasses:Enable multi parameter type classes" + "MultiWayIf:Enable multi-way if-expressions" + "NamedFieldPuns:Enable record puns" + "NegativeLiterals:Enable support for negative literals" + "NewQualifiedOperators:Enable new qualified operator syntax" + "NoImplicitPrelude:Don't implicitly import Prelude" + "NoMonoPatBinds:Make pattern bindings polymorphic" + "NoMonomorphismRestriction:Disable the monomorphism" + "NoNPlusKPatterns:Disable support for n+k patterns" + "NoTraditionalRecordSyntax:Disable support for traditional record syntax (as supported by Haskell 98) C {f = x}" + "NullaryTypeClasses:Enable nullary (no parameter) type classes" + "NumDecimals:Enable support for 'fractional' integer literals" + "OverlappingInstances:Enable overlapping instances" + "OverloadedLists:Enable overloaded lists" + "OverloadedStrings:Enable overloaded string literals" + "PArr:Enable parallel arrays" + "PackageImports:Enable package-qualified imports" + "ParallelArrays:Enable parallel arrays" + "ParallelListComp:Enable parallel list comprehensions" + "PatternGuards:Enable pattern guards" + "PolyKinds:Enable kind polymorphism" + "PolymorphicComponents:Enable polymorphic components for data constructors" + "QuasiQuotes:Enable quasiquotation" + "Rank2Types:Enable rank-2 types" + "RankNTypes:Enable rank-N types" + "RebindableSyntax:Employ rebindable syntax" + "RecordWildCards:Enable record wildcards" + "RecursiveDo:Enable recursive do (mdo) notation" + "RelaxedPolyRec:Relaxed checking for mutually-recursive polymorphic functions" + "Safe:Enable the Safe Haskell Safe mode" + "ScopedTypeVariables:Enable lexically-scoped type variables" + "StandaloneDeriving:Enable standalone deriving" + "TemplateHaskell:Enable Template Haskell" + "TransformListComp:Enable transform list comprehensions" + "TypeFamilies:Enable type families" + "TypeOperators:Enable type operators" + "TypeSynonymInstances:Enable type synonyms" + "Trustworthy:Enable the Safe Haskell Trustworthy mode" + "UnboxedTuples:Enable unboxed tuples" + "UndecidableInstances:Enable undecidable instances" + "UnicodeSyntax:Enable unicode syntax" + "UnliftedFFITypes:Enable unlifted FFI types" + "Unsafe:Enable Safe Haskell Unsafe mode" + "ViewPatterns:Enable view patterns" + 'MagicHash:Allow "#" as a postfix modifier on identifiers' + ) + _describe -t flags 'ghc' _ghc_language_flags_list || compadd "$@" +} + +# +# ghc-pkg +# + +_ghc_pkg () +{ + WORDS=() + for w in $words[1,(($CURRENT - 1))]; do + if [[ $w != --* ]]; then WORDS+=$w; fi + done + _arguments '*:command:_ghc_pkg_command' +} + +_ghc_pkg_command() +{ + local -a _ghc_pkg_cmds + _ghc_pkg_cmds=( + "register:Register the package using package description" + "update:Register the package (overwriting existing package)" + "unregister:Unregister the specified package" + "expose:Expose the specified package" + "hide:Hide the specified package" + "list:List registered packages" + "find-module:List registered packages exposing module" + "latest:Prints the highest registered version of a package" + "check:Check the consistency of package dependencies and list broken packages" + "describe:Give the registered description for the specified package" + "field:Extract the specified field of the package description" + "dump:Dump the registered description for every package" + ) + + if (( $#WORDS == 1 )); then + _describe -t commands 'command' _ghc_pkg_cmds || compadd "$@" + else + local curcontext="$curcontext" + cmd="${${_ghc_pkg_cmds[(r)$WORDS[2]:*]%%:*}}" + if (( $#cmd )); then + _arguments \ + "--user[Use current user's package database]" \ + '--global[User the global package database]' \ + {-f,--package-conf=}'[Use the specified package config file]:Package config file:_files' \ + '--no-user-package-conf[Never reader the user package config]' \ + {-V,--version}'[Output version information and exit]' \ + '--force[Ignore missing directories and libraries only]' \ + {-g,--auto-ghci-libs}'[Automatically build libs for GHCi]' \ + {-?,--help}'[Display this help and exit]' \ + '--simple-output[Print output in easy-to-parse format for some commands]' \ + '--names-only[Only print package names, not versions]' \ + '--ignore-case[Ignore case for substring matching]' \ + '*:argument:_ghc_pkg_'$cmd + else + _message "unknown ghc-pkg command: $WORDS[2]" + fi + fi +} + +_ghc_pkg_unregister () { _ghc_pkg_list_packages } + +_ghc_pkg_expose () { _ghc_pkg_list_packages } + +_ghc_pkg_hide () { _ghc_pkg_list_packages } + +_ghc_pkg_latest () { _ghc_pkg_list_packages } + +_ghc_pkg_describe () { _ghc_pkg_list_packages } + +_ghc_pkg_field () +{ + _ghc_pkg_available_packages + if (( $#WORDS == 2 )); then + compadd "$@" -a -- _ghc_pkg_packages + elif (( $#WORDS == 3 )); then + compset -P '*,' + compset -S ',*' + compadd "$@" -S ',' -q -- \ + name version license copyright maintainer \ + stability homepage package-url description \ + category author exposed exposed-modules \ + hidden-modules import-dirs hs-libraries \ + extra-libraries extra-ghci-libraries include-dirs \ + includes depends hugs-options cc-options ld-options \ + framework-dirs frameworks haddock-interfaces \ + haddock-html + fi +} + +_ghc_pkg_register () { _files } + +_ghc_pkg_update () { _files } + +_ghc_pkg_list () { _ghc_pkg_list_packages } + +_ghc_pkg_find-module () +{ + if (( $#WORDS == 2)); then + if ( [[ ${+_ghc_modules} -eq 0 ]] || _cache_invalid GHC_MODULES ) && + ! _retrieve_cache GHC_MODULES; + then + _ghc_modules=( $(ghc-pkg dump | sed -n '/^exposed-modules:/{s/^exposed-modules:[ ]\+\(.*\)$/\1/;s/ /\n/;p;be};b;:e;n;/^ /{s/^[ ]\+\(.*\)$/\1/;s/ /\n/;p;be}') ) + _store_cache GHC_MODULES _ghc_modules + fi + compadd "$@" -a -- _ghc_modules + fi +} + +_ghc_pkg_dump () {} + +_ghc_pkg_check () {} + +_ghc_pkg_available_packages () +{ + if ( [[ ${+_ghc_pkg_packages_pkgs} -eq 0 ]] || _cache_invalid GHC_PACKAGES ) && + ! _retrieve_cache GHC_PACKAGES; + then + _ghc_pkg_packages=( $(ghc-pkg list --simple-output --names-only) ) + _store_cache GHC_PACKAGES _ghc_pkg_packages + fi +} + +_ghc_pkg_list_packages () +{ + _ghc_pkg_available_packages + compadd "$@" -a -- _ghc_pkg_packages +} + + +# +# dispatcher +# + +case $service in + ghc) + _ghc_compiler + ;; + ghci) + _ghc_ghci + ;; + ghc-pkg) + _ghc_pkg + ;; +esac diff --git a/.zprezto/modules/completion/external/src/_gist b/.zprezto/modules/completion/external/src/_gist new file mode 100644 index 0000000..826c1b7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_gist @@ -0,0 +1,66 @@ +#compdef gist +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gist (https://github.com/defunkt/gist) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '(--login)--login[Authenticate gist on this computer.]' \ + '(-f --filename)'{-f,--filename}'[Sets the filename and syntax type.]:NAME' \ + '(-t --type)'{-t,--type}'[Sets the file extension and syntax type.]:EXT' \ + '(-p --private)'{-p,--private}'[Makes your gist private.]' \ + '(--no-private)'--no-private'[Makes your gist no private.]' \ + '(-d --description)'{-d,--description}'[Adds a description to your gist.]:DESCRIPTION' \ + '(-s --shorten)'{-s,--shorten}'[Shorten the gist URL using git.io.]' \ + '(-u --update)'{-u,--update}'[Update an existing gist.]:URL ID' \ + '(-a --anonymous)'{-a,--anonymous}'[Create an anonymous gist.]' \ + '(-c --copy)'{-c,--copy}'[Copy the resulting URL to the clipboard]' \ + '(-e --embed)'{-e,--embed}'[Copy the embed code for the gist to the clipboard]' \ + '(-o --open)'{-o,--open}'[Open the resulting URL in a browser]' \ + '(--no-open)'--no-open'[No open the resulting URL in a browser]' \ + '(-P --paste)'{-P,--paste}'[Paste from the clipboard to gist]' \ + '(-h --help)'{-h,--help}'[print options help]' \ + '(-v --version)'{-v,--version}'[print version]' \ + '*: :_files' && ret=0 + +return ret diff --git a/.zprezto/modules/completion/external/src/_git-flow b/.zprezto/modules/completion/external/src/_git-flow new file mode 100644 index 0000000..1f4e866 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_git-flow @@ -0,0 +1,424 @@ +#compdef git-flow +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-flow (http://github.com/nvie/gitflow). +# +# Source: https://github.com/bobthecow/git-flow-completion +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Justin Hileman (https://github.com/bobthecow) +# * Yusuke Muraoka (https://github.com/jbking) +# * Vincent Driessen (https://github.com/nvie) +# * Zifei Tong (https://github.com/chevalun) +# * Ben O'Hara (https://github.com/benohara) +# +# ------------------------------------------------------------------------------ + + +_git-flow () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'init:Initialize a new git repo with support for the branching model.' + 'feature:Manage your feature branches.' + 'release:Manage your release branches.' + 'hotfix:Manage your hotfix branches.' + 'support:Manage your support branches.' + 'version:Shows version information.' + 'status:Shows some status.' + ) + _describe -t commands 'git flow' subcommands + ;; + + (options) + case $line[1] in + + (init) + _arguments \ + -f'[Force setting of gitflow branches, even if already configured]' \ + -d'[Use default branch naming conventions and prefixes]' + ;; + + (version) + ;; + + (hotfix) + __git-flow-hotfix + ;; + + (release) + __git-flow-release + ;; + + (feature) + __git-flow-feature + ;; + + (support) + __git-flow-support + ;; + + esac + ;; + esac +} + +__git-flow-release () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new release branch.' + 'finish:Finish a release branch.' + 'list:List all your release branches. (Alias to `git flow release`)' + 'publish:Publish this release branch to origin.`)' + 'track:Track a release branch from origin.`)' + ) + _describe -t commands 'git flow release' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':version:__git_flow_version_list' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -s'[Sign the release tag cryptographically]'\ + -u'[Use the given GPG-key for the digital signature (implies -s)]'\ + -m'[Use the given tag message]'\ + -n'[Dont tag this release ]'\ + -p'[Push to $ORIGIN after performing finish]'\ + -k'[Keep branch after performing finish]'\ + ':version:__git_flow_version_list' + ;; + + (publish) + _arguments \ + ':version:__git_flow_version_list' + ;; + + (track) + _arguments \ + ':version:__git_flow_version_list' + ;; + + + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-hotfix () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new hotfix branch.' + 'finish:Finish a hotfix branch.' + 'list:List all your hotfix branches. (Alias to `git flow hotfix`)' + 'publish:Publish this hotfix branch to origin`)' + ) + _describe -t commands 'git flow hotfix' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':hotfix:__git_flow_version_list'\ + ':branch-name:__git_branch_names' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -s'[Sign the release tag cryptographically]'\ + -u'[Use the given GPG-key for the digital signature (implies -s)]'\ + -m'[Use the given tag message]'\ + -p'[Push to $ORIGIN after performing finish]'\ + ':hotfix:__git_flow_hotfix_list' + ;; + + (publish) + _arguments \ + ':hotfix:__git_flow_hotfix_list' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-feature () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new feature branch.' + 'finish:Finish a feature branch.' + 'list:List all your feature branches. (Alias to `git flow feature`)' + 'publish:Publish this feature branch to origin.' + 'track:Track a feature branch from origin.' + 'diff:Show a diff of changes since this feature branched off.' + 'rebase:Rebase a feature branch on top of develop.' + 'checkout:Check out (switch to) the given feature branch.' + 'pull:Pull a feature branch from a remote peer.' + ) + _describe -t commands 'git flow feature' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':feature:__git_flow_feature_list'\ + ':branch-name:__git_branch_names' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -r'[Finish branch by rebasing first]'\ + -k'[Keep branch after performing finish]'\ + -D'[Force delete feature branch after finish]'\ + ':feature:__git_flow_feature_list' + ;; + + (publish) + _arguments \ + ':feature:__git_flow_feature_list'\ + ;; + + (track) + _arguments \ + ':feature:__git_flow_feature_list'\ + ;; + + (diff) + _arguments \ + ':branch:__git_branch_names'\ + ;; + + (rebase) + _arguments \ + -i'[Do an interactive rebase]' \ + ':branch:__git_branch_names' + ;; + + (checkout) + _arguments \ + ':branch:__git_flow_feature_list'\ + ;; + + (pull) + _arguments \ + ':remote:__git_remotes'\ + ':branch:__git_branch_names' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-support () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new support branch.' + 'list:List all your support branches. (Alias to `git flow support`)' + ) + _describe -t commands 'git flow support' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':feature:__git_flow_support_list'\ + ':branch-name:__git_branch_names' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git_flow_version_list () +{ + local expl + declare -a versions + + versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted versions expl 'version' compadd $versions +} + +__git_flow_feature_list () +{ + local expl + declare -a features + + features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted features expl 'feature' compadd $features +} + +__git_remotes () { + local expl gitdir remotes + + gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null) + __git_command_successful || return + + remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]}) + __git_command_successful || return + + # TODO: Should combine the two instead of either or. + if (( $#remotes > 0 )); then + _wanted remotes expl remote compadd $* - $remotes + else + _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*" + fi +} + +__git_flow_hotfix_list () +{ + local expl + declare -a hotfixes + + hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted hotfixes expl 'hotfix' compadd $hotfixes +} + +__git_flow_support_list () +{ + local expl + declare -a support + + support=(${${(f)"$(_call_program support git flow support list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted hotfixes expl 'support' compadd $support +} + + +__git_branch_names () { + local expl + declare -a branch_names + + branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/}) + __git_command_successful || return + + _wanted branch-names expl branch-name compadd $* - $branch_names +} + +__git_command_successful () { + if (( ${#pipestatus:#0} > 0 )); then + _message 'not a git repository' + return 1 + fi + return 0 +} + +_git-flow "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_git-pulls b/.zprezto/modules/completion/external/src/_git-pulls new file mode 100644 index 0000000..88fb8a8 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_git-pulls @@ -0,0 +1,108 @@ +#compdef git-pulls +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-pulls 0.3.1 (https://git-pulls.com/schacon/git-pulls). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud (https://github.com/nicoulaj) +# +# ------------------------------------------------------------------------------ + + +_git-pulls() { + typeset -A opt_args + local context state line curcontext="$curcontext" + + local ret=1 + + _arguments -C \ + '(- 1 *)--help[show usage]' \ + '1:cmd:->cmds' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (cmds) + local commands; commands=( + 'update:update pull requests list' + 'list:list pull requests' + 'show:show pull request' + 'browse:open pull request in a web browser' + 'merge:merge pull request' + ) + _describe -t commands 'command' commands && ret=0 + ;; + (args) + curcontext="${curcontext%:*:*}:git-pulls-cmd-$words[1]:" + case $words[1] in + (update) + _message 'no more arguments' && ret=0 + ;; + (list) + _arguments \ + '--reverse[list in reverse order]' \ + && ret=0 + ;; + (show) + _arguments \ + '1: :_git-pulls_pull_requests_numbers' \ + '--full[use verbose output]' \ + && ret=0 + ;; + (browse|merge) + _arguments \ + '1: :_git-pulls_pull_requests_numbers' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_git-pulls_pull_requests_numbers] )) || +_git-pulls_pull_requests_numbers() { + local pull_requests; pull_requests=(${${${(M)${(f)"$(_call_program users $service list)"}:#[[:digit:]]##[[:space:]]*}//:/\\:}/[[:space:]]##/:}) + _describe -t pull-request-numbers 'pull request number' pull_requests "$@" +} + +_git-pulls "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_git-wtf b/.zprezto/modules/completion/external/src/_git-wtf new file mode 100644 index 0000000..e909235 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_git-wtf @@ -0,0 +1,58 @@ +#compdef git-wtf +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-wtf, authored by +# William Morgan (http://git-wt-commit.rubyforge.org/git-wtf) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# +# ------------------------------------------------------------------------------ + +_arguments -w -C -s \ + '(--long --short)'{-l,--long}'[include author info and date for each commit]' \ + '(--long --short)'{-s,--short}'[do not show commits]' \ + '(--all)'{-a,--all}'[show all branches across all remote repos, not just those from origin]' \ + '(--all-commits)'{-A,--all-commits}'[show all commits, not just the first 5]' \ + '(--key)'{-k,--key}'[show key]' \ + '(--relations)'{-r,--relations}'[show relation to features / integration branches]' \ + '(--dump-config)--dump-config[print out current configuration and exit]' \ + '*: :__git_branch_names' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_github b/.zprezto/modules/completion/external/src/_github new file mode 100644 index 0000000..3e98356 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_github @@ -0,0 +1,272 @@ +#compdef github gh +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Github gem 0.6.2 (https://github.com/defunkt/github-gem). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud (https://github.com/nicoulaj) +# +# ------------------------------------------------------------------------------ + + +_github() { + typeset -A opt_args + local context state line curcontext="$curcontext" + + local ret=1 + + _arguments -C \ + '1:cmd:->cmds' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (cmds) + local commands; commands=( + 'admin:open this repo'\''s Admin panel a web browser' + 'browse:open this repo in a web browser' + 'clone:clone a repo' + 'config:automatically set configuration info, or pass args to specify' + 'create:create a new, empty GitHub repository' + 'create-from-local:create a new GitHub repository from the current local repository' + 'fetch:fetch from a remote to a local branch' + 'fetch_all:fetch all refs from a user' + 'fork:forks a GitHub repository' + 'home:open this repo'\''s master branch in a web browser' + 'ignore:ignore a SHA' + 'info:info about this project' + 'issues:project issues tools' + 'network:project network tools' + 'open:open the given user/project in a web browser' + 'pull:pull from a remote' + 'pull-request:generate the text for a pull request' + 'search:search GitHub for the given repository name' + 'track:track another user'\''s repository' + ) + _describe -t commands 'command' commands && ret=0 + ;; + (args) + curcontext="${curcontext%:*:*}:github-cmd-$words[1]:" + case $words[1] in + (admin|fetch|fetch_all|home|info) + _message 'no more arguments' && ret=0 + ;; + (browse) + _arguments \ + '1: :_github_users' \ + '2: :_github_branches' \ + && ret=0 + ;; + (clone) + _arguments \ + '1: :_github_users' \ + '2: :_github_repos' \ + '3: :_files -/' \ + '--search[search for user or repo and clone selected repository]:user or repo' \ + '--ssh[clone using the git@github.com style url]' \ + && ret=0 + ;; + (config) + _arguments \ + '1: :_github_users' \ + '2: :_github_repos' \ + && ret=0 + ;; + (create) + _arguments \ + '1:repo name' \ + '--markdown[create README.markdown]' \ + '--mdown[create README.mdown]' \ + '--private[create private repository]' \ + '--rdoc[create README.rdoc]' \ + '--rst[create README.rst]' \ + '--textile[create README.textile]' \ + && ret=0 + ;; + (create-from-local) + _arguments \ + '--private[create private repository]' \ + && ret=0 + ;; + (fork) + _arguments \ + '1: :_github_user_slash_repos' \ + && ret=0 + ;; + (ignore) + _arguments \ + '1: :_github_network_commits' \ + && ret=0 + ;; + (issues) + _arguments -C \ + '1:issue-status:->issue-statuses' \ + '2:: :_github_users' \ + '--after[only show issues updated after a certain date]:date' \ + '--label[only show issues with a certain label]:label' \ + && ret=0 + case "$state" in + (issue-statuses) + local statuses; statuses=( + 'open:show open issues' + 'closed:show closed issues' + ) + _describe -t statuses 'status' statuses && ret=0 + ;; + esac + ;; + (network) + _arguments -C \ + '1:network-subcommand:->network-subcommands' \ + '*::network-arg:->network-args' \ + '(--after)--before[only show commits before a certain date]:date' \ + '(--before)--after[only show commits after a certain date]:date' \ + '--applies[filter commits to patches that apply cleanly]' \ + '--author[filter commits on a email address of author]:author' \ + '--cache[use the network data even if it'\''s expired]' \ + '--common[show common branch point]' \ + '--limit[only look through the first X heads - useful for really large projects]:number' \ + '--noapply[filter commits to patches that do not apply cleanly]' \ + '--nocache[do not use the cached network data]' \ + '--project[filter commits on a certain project]:project' \ + '--shas[only show shas]' \ + '--sort[how to sort : date, branch, author]:sort type:((date\:sort\ by\ date\ \(default\) branch\:sort\ by\ branch author\:sort\ by\ author))' \ + '--thisbranch[look at branches that match the current one]' \ + && ret=0 + case "$state" in + (network-subcommands) + local subcommands; subcommands=( + 'web:open network in a web browser' + 'list:list network members' + 'fetch:fetch network members commits' + 'commits:list network members commits' + ) + _describe -t subcommands 'subcommand' subcommands && ret=0 + ;; + (network-args) + case $words[1] in + (web) + _arguments \ + '1: :_github_users' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (open) + _arguments \ + '1: :_github_user_slash_repos' \ + && ret=0 + ;; + (pull) + _arguments \ + '1: :_github_users' \ + '2: :_github_branches' \ + '--merge[automatically merge remote'\''s changes into your master]' \ + && ret=0 + ;; + (pull-request) + _arguments \ + '1: :_github_users' \ + '2: :_github_branches' \ + && ret=0 + ;; + (search) + _arguments \ + '1:query' \ + && ret=0 + ;; + (track) + _arguments \ + '1:: :((remote))' \ + '*: :_github_user_slash_repos' \ + {--private,--ssh}'[use git@github.com: instead of git://github.com/]' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_github_users] )) || +_github_users() { + _alternative \ + 'users:user:_users' \ + 'github-network-users:github network user:_github_network_users' +} + +(( $+functions[_github_network_users] )) || +_github_network_users() { + local users; users=(${(f)"$(_call_program users $service network list 2>/dev/null)"}) + _describe -t github-network-users 'github network user' users "$@" +} + +(( $+functions[_github_repos] )) || +_github_repos() { + _message -e repos 'repo' +} + +(( $+functions[_github_branches] )) || +_github_branches() { + _message -e branches 'branch' +} + +(( $+functions[_github_user_slash_repos] )) || +_github_user_slash_repos() { + local ret=1 + if compset -P '*/'; then + _wanted repos expl 'repo' _github_repos && ret=0 + else + _wanted users expl 'user' _github_users -qS/ && ret=0 + fi + return ret +} + +(( $+functions[_github_network_commits] )) || +_github_network_commits() { + local commits; commits=(${${(f)"$(_call_program commits $service network commits 2>/dev/null)"}%%[[:blank:]]*}) + _describe -t commits 'commit' commits "$@" +} + +_github "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_glances b/.zprezto/modules/completion/external/src/_glances new file mode 100644 index 0000000..e0298ea --- /dev/null +++ b/.zprezto/modules/completion/external/src/_glances @@ -0,0 +1,63 @@ +#compdef glances +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for glances (http://nicolargo.github.com/glances/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + +_glances() { + + _arguments \ + "-b[Display network rate in Byte per second]" \ + "-B[Bind server to the given IP or host NAME]:host:_hosts" \ + "-c[Connect to a Glances server]:host:_hosts" \ + "-C[Path to the configuration file]:configuration path:_files -/" \ + "-d[Disable disk I/O module]" \ + "-e[Enable the sensors module (Linux-only)]" \ + "-f[Set the output folder (HTML) or file (CSV)]:output path:_files -/" \ + "-h[Display the syntax and exit]" \ + "-m[Disable mount module]" \ + "-n[Disable network module]" \ + "-o[Define additional output (available: HTML or CSV)]:output type:(HTML CSV)" \ + "-p[Define the client or server TCP port (default: 61209)]:port:_ports" \ + "-P[Client/server password]:password:" \ + "-s[Run Glances in server mode]" \ + "-t[Set the refresh time in seconds (default: 3)]:seconds:" \ + "-v[Display the version and exit]" \ + "-z[Do not use the bold color attribute]" \ +} + +_glances "$@" \ No newline at end of file diff --git a/.zprezto/modules/completion/external/src/_google b/.zprezto/modules/completion/external/src/_google new file mode 100644 index 0000000..ca1987f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_google @@ -0,0 +1,69 @@ +#compdef google +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for googlecl (https://code.google.com/p/googlecl/) +# +# Source: https://raw.github.com/dadrc/zsh-cfg/master/completions/_google +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * dadrc (https://github.com/dadrc) +# * Ben O'Hara (https://github.com/benohara) +# +# ------------------------------------------------------------------------------ + +_google() { + # init variables + local curcontext="$curcontext" state line + typeset -A opt_args + + # init state + _arguments \ + '1: :->service'\ + '2: :->task' + + case $state in + service) + _arguments '1:service:(picasa blogger youtube docs contacts calendar finance)' + ;; + *) + case $words[2] in + picasa) + compadd "$@" get create list list-albums tag post delete + ;; + blogger) + compadd "$@" post tag list delete + ;; + youtube) + compadd "$@" post tag list delete + ;; + docs) + compadd "$@" edit delete list upload get + ;; + contacts) + compadd "$@" list list-groups add add-groups delete-groups delete + ;; + calendar) + compadd "$@" add list today delete + ;; + finance) + compadd "$@" list-txn delete-pos create-pos delete-txn create create-txn list list-pos delete + ;; + *) + esac + esac +} + +_google "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_gradle b/.zprezto/modules/completion/external/src/_gradle new file mode 100644 index 0000000..9587e4b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_gradle @@ -0,0 +1,135 @@ +#compdef gradle gradlew +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Gradle 1.0-milestone-5 (http://www.gradle.org). +# +# Status: incomplete (see TODO/FIXME tags) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_gradle() { + typeset -A opt_args + local context state line + + local curcontext="$curcontext" + + _arguments \ + '(- 1 *)'{-?,-h,--help}'[show help message]' \ + '(-a --no-rebuild)'{-a,--no-rebuild}'[do not rebuild project dependencies]' \ + '(-b --build-file)'{-b,--build-file}'[specify the build file]:build file:_gradle_scripts' \ + '(-C --cache)'{-C,--cache}'[specify how compiled build scripts should be cached]:cache strategy:((rebuild\:rebuild\ the\ cache on\:use\ the\ cache\ \(default\)))' \ + '(-c --settings-file)'{-c,--settings-file}'[specify the settings file]:settings file:_gradle_scripts' \ + '*'{-D-,--system-prop}'[set system property of the JVM]:property:_gradle_properties' \ + '(-d --debug -q --quiet -i --info)'{-d,--debug}'[log in debug mode (includes normal stacktrace)]' \ + '(--foreground --no-daemon --stop)--daemon[use the Gradle daemon to run the build, starts the daemon if not running]' \ + '(-e --embedded)'{-e,--embedded}'[specify an embedded build script]:embedded build script' \ + '(--daemon --no-daemon --stop)--foreground[start the Gradle daemon in the foreground]' \ + '(-g --gradle-user-home)'{-g,--gradle-user-home}'[specify the gradle user home directory]: :_files -/' \ + '--gui[launch a GUI application]' \ + '(-I --init-script)'{-I,--init-script}'[specify an initialization script]:init script:_gradle_scripts' \ + '(-i --info -q --quiet -d --debug)'{-i,--info}'[set log level to info]' \ + '(-m --dry-run)'{-m,--dry-run}'[run the builds with all task actions disabled]' \ + '(-n --dependencies)'{-n,--dependencies}'[show list of all project dependencies]' \ + '--no-color[do not use color in the console output]' \ + '(--daemon --foreground --stop)--no-daemon[do not use the Gradle daemon to run the build]' \ + '--no-opt[ignore any task optimization]' \ + '*'{-P-,--project-prop}'[set project property for the build script]:property:_gradle_properties' \ + '(-p --project-dir)'{-p,--project-dir}'[specify the start directory for Gradle]: :_files -/' \ + '--profile[profile build execution time and generate a report in the /reports/profile directory]' \ + '(-q --quiet -d --debug -i --info)'{-q,--quiet}'[log errors only]' \ + '(-r --properties)'{-r,--properties}'[show list of all available project properties]' \ + '(-S --full-stacktrace)'{-S,--full-stacktrace}'[print out the full (very verbose) stacktrace for any exceptions]' \ + '(-s --stacktrace)'{-s,--stacktrace}'[print out the stacktrace also for user exceptions]' \ + '(--daemon --foreground)--stop[stop the Gradle daemon if it is running]' \ + '(-t --tasks)'{-t,--tasks}'[show list of available tasks]' \ + '(-u --no-search-upward)'{-u,--no-search-upward}'[don'\''t search in parent folders for a settings.gradle file]' \ + '(-v --version)'{-v,--version}'[print version info]' \ + '(-x --exclude-task)*'{-x,--exclude-task}'[specify a task to be excluded from execution]:task:_gradle_tasks' \ + '*: :_gradle_tasks' +} + +(( $+functions[_gradle_tasks] )) || +_gradle_tasks() { + local alternatives task_group task_group_name task_group_tasks + local project="${PREFIX%:*}" + alternatives=("project:project:_gradle_projects -qS:") + for task_group in ${(M)${(ps:\n\n:)"$($service --daemon --quiet --no-color ${project}:tasks 2>/dev/null)"}:#*[[:space:]]\-[[:space:]]*}; do + task_group_name="${${${task_group%%---*}%[[:space:]]tasks[[:space:]]*}:l}" + task_group_tasks=(${(q)${(f)${task_group##*---}}/[[:space:]]\-[[:space:]]/:}) + alternatives+=("${task_group_name//[[:space:]]/-}-task:${task_group_name} task:((${task_group_tasks[@]}))") + done + _alternative "${alternatives[@]}" +} + +(( $+functions[_gradle_projects] )) || +_gradle_projects() { + local project="${PREFIX%:*}" + local projects; projects=(${${${(M)${(f)"$($service --daemon --quiet --no-color ${project}:projects 2>/dev/null)"}:#*--- Project\ \':*}#*\'}%\'*}) + _multi_parts $@ : projects +} + +(( $+functions[_gradle_scripts] )) || +_gradle_scripts() { + _files -g '*.gradle*' +} + +(( $+functions[_gradle_properties] )) || +_gradle_properties() { + local ret=1 + if compset -P '*='; then + _message -e property-values 'property value' && ret=0 + else + _wanted property-names expl 'property name' _gradle_property_names -qS= && ret=0 + fi + return ret +} + +(( $+functions[_gradle_property_names] )) || +_gradle_property_names() { + local property_names; property_names=(${${(M)${(f)"$($service --daemon --quiet --no-color :properties 2>/dev/null)"}:#*:*}%%:*}) + _describe -t property_names 'property name' property_names "$@" +} + +_gradle "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_heroku b/.zprezto/modules/completion/external/src/_heroku new file mode 100644 index 0000000..dcc0b54 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_heroku @@ -0,0 +1,209 @@ +#compdef heroku +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the Heroku client gem (https://github.com/heroku/heroku) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Ali B. (http://awhitebox.com) +# +# ------------------------------------------------------------------------------ + +local -a _1st_arguments +_1st_arguments=( + "account\:confirm_billing":"Confirm that your account can be billed at the end of the month" + "addons":"list installed addons" + "addons\:list":"list all available addons" + "addons\:add":"install an addon" + "addons\:upgrade":"upgrade an existing addon" + "addons\:downgrade":"downgrade an existing addon" + "addons\:remove":"uninstall an addon" + "addons\:open":"open an addon's dashboard in your browser" + "apps":"list your apps" + "apps\:info":"show detailed app information" + "apps\:create":"create a new app" + "apps\:rename":"rename the app" + "apps\:open":"open the app in a web browser" + "apps\:destroy":"permanently destroy an app" + "auth\:login":"log in with your heroku credentials" + "auth\:logout":"clear local authentication credentials" + "config":"display a config vars for an app" + "config\:get":"display a config value for an app" + "config\:set":"set one or more config vars" + "config\:unset":"unset one or more config vars" + "db\:push":"push local data up to your app" + "db\:pull":"pull heroku data down into your local database" + "domains":"list custom domains for an app" + "domains\:add":"add a custom domain to an app" + "domains\:remove":"remove a custom domain from an app" + "domains\:clear":"remove all custom domains from an app" + "help":"list available commands or display help for a specific command" + "keys":"display keys for the current user" + "keys\:add":"add a key for the current user" + "keys\:remove":"remove a key from the current user" + "keys\:clear":"remove all authentication keys from the current user" + "logs":"display recent log output" + "logs\:cron":"DEPRECATED: display cron logs from legacy logging" + "logs\:drains":"manage syslog drains" + "maintenance\:on":"put the app into maintenance mode" + "maintenance\:off":"take the app out of maintenance mode" + "open":"open app in a web browser" + "pg\:info":"display database information" + "pg\:ingress":"allow direct connections to the database from this IP for one minute" + "pg\:promote":"sets DATABASE as your DATABASE_URL" + "pg\:psql":"open a psql shell to the database" + "pg\:reset":"delete all data in DATABASE" + "pg\:unfollow":"stop a replica from following and make it a read/write database" + "pg\:wait":"monitor database creation, exit when complete" + "pgbackups":"list captured backups" + "pgbackups\:url":"get a temporary URL for a backup" + "pgbackups\:capture":"capture a backup from a database id" + "pgbackups\:restore":"restore a backup to a database" + "pgbackups\:destroy":"destroys a backup" + "plugins":"list installed plugins" + "plugins\:install":"install a plugin" + "plugins\:uninstall":"uninstall a plugin" + "plugins\:update":"updates all plugins or a single plugin by name" + "ps\:dynos":"scale to QTY web processes" + "ps\:workers":"scale to QTY background processes" + "ps":"list processes for an app" + "ps\:restart":"restart an app process" + "ps\:scale":"scale processes by the given amount" + "releases":"list releases" + "releases\:info":"view detailed information for a release" + "rollback":"roll back to an older release" + "run":"run an attached process" + "run\:rake":"remotely execute a rake command" + "run\:console":"open a remote console session" + "sharing":"list collaborators on an app" + "sharing\:add":"add a collaborator to an app" + "sharing\:remove":"remove a collaborator from an app" + "sharing\:transfer":"transfer an app to a new owner" + "ssl":"list certificates for an app" + "ssl\:add":"add an ssl certificate to an app" + "ssl\:remove":"remove an ssl certificate from an app" + "ssl\:clear":"remove all ssl certificates from an app" + "stack":"show the list of available stacks" + "stack\:migrate":"prepare migration of this app to a new stack" + "version":"show heroku client version" +) + +_arguments '*:: :->command' + +if (( CURRENT == 1 )); then + _describe -t commands "heroku command" _1st_arguments + return +fi + +local -a _command_args +case "$words[1]" in + apps:info) + _command_args=( + '(-r|--raw)'{-r,--raw}'[output info as raw key/value pairs]' \ + ) + ;; + apps:create) + _command_args=( + '(-a|--addons)'{-a,--addons}'[a list of addons to install]' \ + '(-r|--remote)'{-r,--remote}'[the git remote to create, default "heroku"]' \ + '(-s|--stack)'{-s,--stack}'[the stack on which to create the app]' \ + ) + ;; + config) + _command_args=( + '(-s|--shell)'{-s,--shell}'[output config vars in shell format]' \ + ) + ;; + db:push) + _command_args=( + '(-c|--chunksize)'{-c,--chunksize}'[specify the number of rows to send in each batch]' \ + '(-d|--debug)'{-d,--debug}'[enable debugging output]' \ + '(-e|--exclude)'{-e,--exclude}'[exclude the specified tables from the push]' \ + '(-f|--filter)'{-f,--filter}'[only push certain tables]' \ + '(-r|--resume)'{-r,--resume}'[resume transfer described by a .dat file]' \ + '(-t|--tables)'{-t,--tables}'[only push the specified tables]' \ + ) + ;; + db:pull) + _command_args=( + '(-c|--chunksize)'{-c,--chunksize}'[specify the number of rows to send in each batch]' \ + '(-d|--debug)'{-d,--debug}'[enable debugging output]' \ + '(-e|--exclude)'{-e,--exclude}'[exclude the specified tables from the pull]' \ + '(-f|--filter)'{-f,--filter}'[only pull certain tables]' \ + '(-r|--resume)'{-r,--resume}'[resume transfer described by a .dat file]' \ + '(-t|--tables)'{-t,--tables}'[only pull the specified tables]' \ + ) + ;; + keys) + _command_args=( + '(-l|--long)'{-l,--long}'[display extended information for each key]' \ + ) + ;; + logs) + _command_args=( + '(-n|--num)'{-n,--num}'[the number of lines to display]' \ + '(-p|--ps)'{-p,--ps}'[only display logs from the given process]' \ + '(-s|--source)'{-s,--source}'[only display logs from the given source]' \ + '(-t|--tail)'{-t,--tail}'[continually stream logs]' \ + ) + ;; + pgbackups:capture) + _command_args=( + '(-e|--expire)'{-e,--expire}'[if no slots are available to capture, delete the oldest backup to make room]' \ + ) + ;; + stack) + _command_args=( + '(-a|--all)'{-a,--all}'[include deprecated stacks]' \ + ) + ;; + esac + +_arguments \ + $_command_args \ + '(-a|--app)'{-a,--app}'[the app name]' \ + '(-r|--remote)'{-r,--remote}'[the git remote name]:remote:->remotes' \ + && return 0 + +__heroku_git_remotes () { + local expl gitdir remotes + + gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null) + __heroku_git_command_successful || return + + remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]}) + __heroku_git_command_successful || return + + # TODO: Should combine the two instead of either or. + if (( $#remotes > 0 )); then + _wanted remotes expl remote compadd $* - $remotes + else + _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*" + fi +} + +__heroku_git_command_successful () { + if (( ${#pipestatus:#0} > 0 )); then + _message 'not a git repository' + return 1 + fi + return 0 +} + +case $state in + (remotes) + __heroku_git_remotes && return 0 + ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_hledger b/.zprezto/modules/completion/external/src/_hledger new file mode 100644 index 0000000..156bf92 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_hledger @@ -0,0 +1,177 @@ +#compdef hledger + +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for hleder 0.23.2 ( http://hledger.org/ ) +# Last updated: 16.11.2014 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# account completion depends on availability of a ~/.hledger.journal file +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" curstate state line expl grp cmd ret=1 +typeset -a args +typeset -A opt_args + +args=( + '(- *)'{-h,--help}'[print help information]' + '(-f --file)'{-f,--file}'=[use a different input file]:input file:_files' + '--rules-file=[CSV conversion rules file]:rules file:_files' + '--alias=[display accounts named OLD as NEW]:alias specification' + '(-b --begin)'{-b,--begin}'=[include postings/txns on or after this date]:date' + '(-e --end)'{-e,--end}'=[include postings/txns before this date]:date' + '(-D --daily)'{-D,--daily}'[multiperiod/multicolumn report by day]' + '(-W --weekly)'{-W,--weekly}'[multiperiod/multicolumn report by week]' + '(-M --monthly)'{-M,--monthly}'[multiperiod/multicolumn report by month]' + '(-Q --quarterly)'{-Q,--quarterly}'[multiperiod/multicolumn report by quarter]' + '(-Y --yearly)'{-Y,--yearly}'[multiperiod/multicolumn report by year]' + '(-p --period)'{-p,--period}'=[set start date, end date, and/or reporting interval all at once]' + '(-C --cleared)'{-C,--cleared}'[include only cleared postings/txns]' + '(-U --uncleared)'{-U,--uncleared}'[include only uncleared postings/txns]' + '(-R --real)'{-R,--real}'[include only non-virtual postings]' + '(--depth)--depth=[hide accounts/postings deeper than N]:depth' + '(-E --empty)'{-E,--empty}'[show empty/zero things which are normally omitted]' + '(-B --cost)'{-B,--cost}'[show amounts in their cost price'\''s commodity]' +) + +_arguments -C "$args[@]" -A "-*" \ + '(- *)--version[print version information]' \ + '--debug[show debug output]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +while (( $#state )); do + curstate=$state + shift state + case $curstate in + cmds) + typeset -a cmds + cmds=( + 'print:show transaction entries' + 'accounts:show account names' + 'balance:show accounts and balances (bal)' + 'register:show postings and running total (reg)' + 'incomestatement:show an income statement (is)' + 'balancesheet:show a balance sheet (bs)' + 'cashflow:show a cashflow statement (cf)' + 'activity:show an ascii barchart of posting counts per interval' + 'stats:show some journal statistics' + ) + _describe 'subcommands' cmds && ret=0 + ;; + args) + : $words + local cmd=$words[1] + (( $+cmd )) || return 1 + # curcontext="${curcontext%:*:*}:$service-$cmd:" + case $cmd in + accounts) + args+=( + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(--drop)--drop=[flat mode, omit N leading account name parts]:drop n' + ) + ;; + activity) + ;; + bal|balance) + args+=( + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--no-total)--no-total[do not show the final total]' + '(--cumulative)--cumulative[multicolumn mode, show accumulated ending balances]' + '(-H --historical)'{-H,--historical}'[multicolumn mode, show historical ending balances]' + ) + ;; + cashflow|cf|balancesheet|bs|incomestatement|is) + args+=( + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + ) + ;; + print) + ;; + register|reg) + args+=( + '(-H --historical)'{-H,--historical}'[include prior postings in the running total]' + '(-A --average)'{-A,--average}'[show a running average instead of the running total]' + '(-r --related)'{-r,--related}'[show postings'\'' siblings instead]' + '(-w --width)'{-w,--width}'=[set output width to 120, or N]:width (default 80)' + ) + ;; + stats) + ;; + # fallback to _default + *) _arguments -C -A "-*" "$args[@]" \ + '*: :_default' && ret=0 + continue + esac + _arguments -C -A "-*" "$args[@]" \ + '*:query patterns:->query' && ret=0 + ;; + query) + + local -a accs keywords + keywords=( + 'code\::match by transaction code' + 'desc\::match transaction descriptions' + 'tag\::match by tag name' + 'depth\::match at or above depth' + 'status\::match cleared/uncleared transactions' + 'real\::match real/virtual transactions' + 'empty\::match if amount is/is not zero' + 'amt\::match transaction amount' + ) + if compset -P 'amt:'; then + _message 'match amount (<, <=, >, >=, add sign for non-absolute match)' && ret=0 + continue + fi + if compset -P '(#b)(code|desc|tag|depth|status|real|empty):'; then + _message "'$match[1]' parameter" && ret=0 + continue + fi + + accs=( ${(f)"$(_call_program hledger hledger accounts $PREFIX 2>/dev/null)"} ) + if (( $? )); then + _message "error fetching accounts from hledger" + fi + + # decided against partial matching here. these lines can + # be uncommented to complete subaccounts hierarchically + # (add -S '' -q to the compadd below, too) + # if compset -P '(#b)(*):'; then + # accs=( ${(M)accs:#$match[1]:*} ) + # accs=( ${accs#$IPREFIX} ) + # fi + # accs=( ${accs%%:*} ) + + _wanted accounts expl "accounts" compadd -a accs && ret=0 + _describe "matcher keywords" keywords -S '' && ret=0 + + # not is special, it doesn't need the -S '' + keywords=( + 'not:negate expression' + ) + _describe "matcher keywords" keywords && ret=0 + + ;; + esac +done + +return ret diff --git a/.zprezto/modules/completion/external/src/_httpie b/.zprezto/modules/completion/external/src/_httpie new file mode 100644 index 0000000..ea4a2ed --- /dev/null +++ b/.zprezto/modules/completion/external/src/_httpie @@ -0,0 +1,177 @@ +#compdef http +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for httpie 0.7.2 (http://httpie.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# * Valodim +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +_httpie_params () { + + local ret=1 expl + + # or a url + if (( CURRENT <= NORMARG+1 )) && [[ $words[NORMARG] != *:* ]] ; then + _httpie_urls && ret=0 + + # regular param, if we already have a url + elif (( CURRENT > NORMARG )); then + + # if the suffix is precisely : this is shorthand for a header + if [[ -prefix ':' ]]; then + PREFIX= + SUFFIX=: + fi + + # if we are in front of a : (possibly due to the PREFIX move before) + if [[ -suffix ':' ]]; then + + # this is rather buggy with normal tab behavior :\ + compstate[insert]=menu + _wanted http_header expl 'HTTP Header' \ + compadd -s ':' -S '' -- Content-Type Cookie && return 0 + fi + + # ignore all prefix stuff + compset -P '(#b)([^:@=]#)' + local name=$match[1] + + if compset -P ':'; then + _message "$name header content" + elif compset -P '@'; then + _files + elif compset -P ':='; then + _message "$name raw json data" + elif compset -P '=='; then + _message "$name url parameter value" + elif compset -P '='; then + _message "$name data field value" + else + typeset -a ops + ops=( + '=:data field' + '\::header' + '==:request parameter' + '@:data file field' + '\:=:raw json field' + ) + _describe -t httpparams "parameter types" ops -Q -S '' + fi + + ret=0 + + fi + + # first arg may be a request method + (( CURRENT == NORMARG )) && + _wanted http_method expl 'Request Method' \ + compadd GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK && ret=0 + + return $ret + +} + +_httpie_urls() { + + local ret=1 + + if ! [[ -prefix [-+.a-z0-9]#:// ]]; then + local expl + compset -S '[^:/]*' && compstate[to_end]='' + _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0 + else + _urls && ret=0 + fi + + return $ret + +} + +_httpie_printflags () { + + local ret=1 + + # not sure why this is necessary, but it will complete "-pH" style without it + [[ $IPREFIX == "-p" ]] && IPREFIX+=" " + + compset -P '(#b)([a-zA-Z]#)' + + local -a flags + [[ $match[1] != *H* ]] && flags+=( "H:request headers" ) + [[ $match[1] != *B* ]] && flags+=( "B:request body" ) + [[ $match[1] != *h* ]] && flags+=( "h:response headers" ) + [[ $match[1] != *b* ]] && flags+=( "b:response body" ) + + _describe -t printflags "print flags" flags -S '' && ret=0 + + return $ret + +} + +integer NORMARG + +_arguments -n -C -s \ + '(-j --json -f)'{-j,--json}'[Data items from the command line are serialized as a JSON object.]' \ + '(-f --form -j)'{-f,--form}'[Data items from the command line are serialized as form fields.]' \ + '--pretty=[Controls output processing.]:output format:(all colors format none)' \ + '(-s --style)'{-s,--style}'=[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \ + '(-p --print)'{-p,--print}'=[String specifying what the output should contain]:print flags:_httpie_printflags' \ + '(-v --verbose)'{-v,--verbose}'[Print the whole request as well as the response.]' \ + '(-p -h --headers)'{-h,--headers}'[Print only the response headers.]' \ + '(-p -b --body)'{-b,--body}'[Print only the response body.]' \ + '(-S --stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \ + '(-o --output)'{-o,--output}'=[Save output to FILE.]:output file:_files' \ + '(-d --download)'{-d,--download}'=[Do not print the response body to stdout.]' \ + '(-c --continue)'{-c,--continue}'[Resume an interrupted download.]' \ + '(--session-read-only)--session=[Create, or reuse and update a session.]:session name (or path)' \ + '(--session)--session-read-only=[Create or read a session without updating it form the request/response exchange.]:session name (or path)' \ + '(-a --auth)'{-a,--auth}'=[If only the username is provided (-a username)]:USER\:PASS' \ + '--auth-type=[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \ + '--proxy=[String mapping protocol to the URL of the proxy.]:PROXY' \ + '--follow[Allow full redirects.]' \ + "--verify=[Enable or disable verification of ssl certificates.]:verify certificate:(yes no)" \ + '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \ + '--timeout=[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:timeout (seconds)' \ + '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \ + '--ignore-stdin[Do not attempt to read stdin.]' \ + '(- *)--help[show help message.]' \ + "(- *)--version[show program's version number and exit.]" \ + '--traceback[Prints exception traceback should one occur.]' \ + '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \ + '*:args:_httpie_params' && return 0 diff --git a/.zprezto/modules/completion/external/src/_id3 b/.zprezto/modules/completion/external/src/_id3 new file mode 100644 index 0000000..df4f1de --- /dev/null +++ b/.zprezto/modules/completion/external/src/_id3 @@ -0,0 +1,70 @@ +#compdef id3 + +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for id3, based on v0.15 +# +# Last updated: 03.04.2013 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ + +_id3_genre () { + + setopt localoptions extendedglob + + local -A _id3_genres + # got them cached? + if _cache_invalid id3-genres || ! _retrieve_cache id3-genres ; then + + # generate from id3 -L otherwise + local tmp + for line in ${${${(f)"$(_call_program id3genre id3 -L)"}## #}}; do + tmp=( ${(s,: ,)line} ) + _id3_genres[${tmp[1]}]=$tmp[2] + # alternate display string, which I decided against in the end + # to preserve reasonable alphabetic sorting + # "${(l:3:: :)${tmp[1]}}: ${tmp[2]}" + done + + # store if we got any + (( $#_id3_genres > 0 )) && _store_cache id3-genres _id3_genres + fi + + # bail if we don't + (( $#_id3_genres > 0 )) || { _message "could not fetch genres"; return } + + _wanted id3genres expl 'Genres' \ + compadd -d _id3_genres -k _id3_genres && return 0 + +} + +# only show files if at least one argument or something has been provided +local showfiles='' +(( CURRENT <= 2 )) && showfiles='!' + +_arguments \ + - tagging \ + '-t[modify title tag]:title' \ + '-T[modify track tag]:track' \ + '-a[modify artist tag]:artist' \ + '-A[modify album tag]:album' \ + '-y[modify year tag]:year' \ + '-c[modify comment tag]:comment' \ + '-g[modify genre tag]:genre:_id3_genre' \ + '(-)-l[lists tags]' \ + '-R[use rfc822-style format for output]' \ + '(-)-d[delete id3 tag]' \ + $showfiles'*:mp3 file:_files -g \*.mp3' \ + - meta \ + '(- *)-L[list all genres]' \ + '(- *)-h[display help info]' \ + '(- *)-v[print version info]' && return 0 + diff --git a/.zprezto/modules/completion/external/src/_id3v2 b/.zprezto/modules/completion/external/src/_id3v2 new file mode 100644 index 0000000..edae6e7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_id3v2 @@ -0,0 +1,116 @@ +#compdef id3v2 + +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for id3v2, based on v0.1.12 +# +# Last updated: 05.04.2013 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ + +_id3v2_genre () { + + setopt localoptions extendedglob + + local -A _id3v2_genres + # got them cached? + if _cache_invalid id3v2-genres || ! _retrieve_cache id3v2-genres ; then + + # generate from id3 -L otherwise + local tmp + for line in ${${${(f)"$(_call_program id3v2genres id3v2 -L)"}## #}}; do + tmp=( ${(s,: ,)line} ) + _id3v2_genres[${tmp[1]}]=$tmp[2] + # alternate display string, which I decided against in the end + # to preserve reasonable alphabetic sorting + # "${(l:3:: :)${tmp[1]}}: ${tmp[2]}" + done + + # store if we got any + (( $#_id3v2_genres > 0 )) && _store_cache id3v2-genres _id3v2_genres + fi + + # bail if we don't + (( $#_id3v2_genres > 0 )) || { _message "could not fetch genres"; return } + + _wanted id3v2genres expl 'Genres' \ + compadd -d _id3v2_genres -k _id3v2_genres && return 0 + +} + +# this function assumes _id3v2_frames is defined! +_id3v2_frame () { + + (( $#_id3v2_frames > 0 )) || { _message "could not fetch genres"; return } + local -a framenames + framenames=( ${_id3v2_frames#--} ) + _describe -t framenames 'id3v2 frames' framenames + +} + +_id3v2 () { + + setopt localoptions extendedglob + + # previous word was a frame name? this is an argument, then. + if [[ $words[$CURRENT-1] == --[A-Z](#c4) ]]; then + _message 'frame value' + return 0 + fi + + # load frame names + local -a _id3v2_frames + if _cache_invalid id3v2-frames || ! _retrieve_cache id3v2-frames ; then + _id3v2_frames=( ${${${(f)"$(_call_program id3v2frames id3v2 -f)"}## #}/ /:} ) + (( $#_id3v2_frames > 0 )) && _store_cache id3v2-frames _id3v2_frames + fi + + local ret=1 + + # if we already have a -- prefix, show all those frames + if [[ -prefix -- ]] && (( $#_id3v2_frames > 0 )); then + _describe -t frames 'id3v2 frames' _id3v2_frames && ret=0 + fi + + local showfiles='' + (( CURRENT <= 2 )) && showfiles='!' + + # regular arguments either way + _arguments \ + - tagging \ + '(-s --delete-v1 -d --delete-v2)'{-s,--delete-v1}'[deletes id3v1 tags]' \ + '(-s --delete-v1 -d --delete-v2)'{-d,--delete-v2}'[deletes id3v2 tags]' \ + '(-C --convert)'{-C,--convert}'[converts id3v1 tag to id3v2]' \ + '(-1 --id3v1-only -2 --id3v2-only)'{-1,--id3v1-only}'[write only id3v1 tag]' \ + '(-1 --id3v1-only -2 --id3v2-only)'{-2,--id3v2-only}'[write only id3v2 tag]' \ + '(-r --remove-frame)'{-r,--remove-frame}'[removes specified id3v2 frame]:frame id:_id3v2_frame' \ + '(-a --artist)'{-a,--artist}'[set artist]:artist' \ + '(-A --album)'{-A,--album}'[set album title]:album' \ + '(-t --song)'{-t,--song}'[set song title]:song title' \ + '(-c --comment)'{-c,--comment}'[set comment field]' \ + '(-g --genre)'{-g,--genre}'[set the genre number]:genre:_id3v2_genre' \ + '(-y --year)'{-y,--year}'[set the year]:year' \ + '(-T --track)'{-T,--track}'[set the track number/(optional) total tracks]:track number (current/total)' \ + '(-R --list-rfc822)'{-R,--list-rfc822}'[lists using an rfc822-style format for output]' \ + '(-)'{-D,--delete-all}'[deletes both id3v1 and id3v2 tags]' \ + '(-)'{-l,--list}'[lists the tag(s) on the file(s)]' \ + $showfiles'*:mp3 file:_files -g "*.mp3"' \ + - meta \ + '(- *)'{-f,--list-frames}'[display all possible frames for id3v2]' \ + '(- *)'{-L,--list-genres}'[lists all id3v1 genres]' \ + '(- *)'{-h,--help}'[display help and exit]' \ + '(- *)'{-v,--version}'[display version information and exit]' && ret=0 + + return ret + +} + +_id3v2 "$@" diff --git a/.zprezto/modules/completion/external/src/_iw b/.zprezto/modules/completion/external/src/_iw new file mode 100644 index 0000000..6217a33 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_iw @@ -0,0 +1,247 @@ +#compdef iw + +# Some parameters to hold patterns that will be used later. +local xp='[[:xdigit:]][[:xdigit:]]' +local -a bssid devices flags fouraddr fouronoff frequency high_throughput ifacename ifacetype ifacetypes +local -a matchany matchnum key lladdr lladdrs meshid meshidval ssid value +# matches any word +matchany=(/$'[^\0]##\0'/) +# matches any number +matchnum=(/$'[[:digit:]]##\0'/) +# matches any BSSID +bssid=($matchany ':bssid:BSSID:') +# matches any devices +devices=( /$'[[:alpha:]]##[[:digit:]]##(\.[[:digit:]]##)#\0'/ ':interfaces:network_interface:_net_interfaces' ) +# matches the word 'flags' followed by a list of some of the following words: none fcsfail control otherbss cook +flags=(/$'flags\0'/ ':flags:flags:(flags)' $matchany ':flags:flags:(none fcsfail control otherbss cook)' \#) +# matches the word '4addr' followed by either 'on' or 'off' +fouronoff=(/$'(on|off)\0'/ ':4addr:4addr:(on off)') +fouraddr=( /$'4addr\0'/ ':4addr:4addr:(4addr)' $fouronoff ) +# matches any number (description is 'frequency') +frequency=($matchnum ':freq:frequency:') +# matches one of HT20 HT40+ or HT40- +high_throughput=(/$'HT[0-9]##(+|-)#\0'/ ':HT:high throughput:(HT20 HT40+ HT40-)') +# matches any name (description is 'name') +ifacename=($matchany ':name:name:') +# matches the word 'type' followed by one of: managed ibss monitor mesh wds +ifacetypes=(/$'(managed|ibss|monitor|mesh|wds)\0'/ ':type:type:(managed ibss monitor mesh wds)') +ifacetype=(/$'type\0'/ ':type:type:(type)' $ifacetypes) +# matches any word (description is 'key') +key=($matchany ':key:key:') +# matches a MAC address (i.e. a sequence of six 2-digit numbers separated by spaces), $xp is defined earlier. +lladdr=(/"${xp}:${xp}:${xp}:${xp}:${xp}:${xp}"$'\0'/ ':lladdress:link layer (MAC) address:') +# as above but with a different description +lladdrs=(/"${xp}:${xp}:${xp}:${xp}:${xp}:${xp}"$'\0'/ ':lladdress:link layer (MAC) addresses (use - to match any octet):' \#) +# matches the word 'mesh_id' followed by a number +meshidval=($matchnum ':meshid:mesh ID:') +meshid=(/$'mesh_id\0'/ ':meshid:meshid:(mesh_id)' $meshidval) +# matches any word (description 'SSID') +ssid=($matchany ':ssid:SSID:') +# matches any word (description 'value') +value=($matchany ':val:value:') +# matches any number (description 'value') +numvalue=($matchnum ':val:value:') + +# Use the _regex_words function to create a variable containing command words to go after "iw reg" +local -a reg_cmds +_regex_words regulatory-commands "reg command" \ + 'g*et:print out the kernels current regulatory domain information'\ + 's*et:notify the kernel about the current regulatory domain' +reg_cmds=("$reply[@]") + +# Options for to go after "iw event" +local -a event_opts +_regex_words event-options "event option" \ + '-t:print timestamp' \ + '-r:print relative timestamp' \ + '-f:print full frame for auth/assoc etc' +event_opts=("$reply[@]") + +# Commands to go after "iw phy wowlan enable" +local -a phy_wowlan_enable_cmds +_regex_words phy-wowlan-enable-commands "phy WoWLAN enable commands" \ + '4*way-handshake:enable WoWLAN with 4way handshake trigger' \ + 'a*ny:enable WoWLAN with any trigger' \ + 'd*isconnect:enable WoWLAN with disconnect trigger' \ + 'e*ap-identity-request:enable WoWLAN with EAP identity request trigger' \ + 'g*tk-rekey-failure:enable WoWLAN with gtk rekey failure trigger' \ + 'm*agic-packet:enable WoWLAN with magic packet trigger' \ + 'p*atterns:MAC address triggers:$lladdrs' \ + 'r*fkill-release:enable WoWLAN with rfkill release trigger' +phy_wowlan_enable_cmds=("$reply[@]") + +# Commands to go after "iw phy wowlan" +local -a phy_wowlan_cmds +_regex_words phy-wowlan-commands "phy WoWLAN commands" \ + 's*how:show WoWLAN status' \ + 'd*isable:disable WoWLAN' \ + 'e*nable:enable WoWLAN:$phy_wowlan_enable_cmds' +phy_wowlan_cmds=("$reply[@]") + +# Some parameters to hold patterns that will be used for "iw phy set" commands +# (not perfect, but mostly OK). +local -a phy_set_antenna phy_set_channel phy_set_coverage phy_set_frag phy_set_freq phy_set_distance +local -a phy_set_name phy_set_netns phy_set_rts phy_set_txpower phy_txpower_opt +phy_set_antenna=($matchany ':antenna:bitmap:') +phy_set_channel=($matchnum ':channel:channel (1-14):' $high_throughput) +phy_set_coverage=($matchnum ':coverage:coverage class (0-255):') +phy_set_distance=($matchnum ':distance:valid values\: 0 - 114750:') +phy_set_frag=(/$'([0-9]##|off)\0'/ ':channel:channel (1-14):(1 2 3 4 5 6 7 8 9 10 11 12 13 14 off)') +phy_set_freq=($frequency $high_throughput) +phy_set_name=($matchany ':name:device name:') +phy_set_netns=($matchany ':netns:network namespace:') +phy_set_rts=($matchnum ':rts:rts threshold:') +phy_txpower_opt=($matchany ':txpower:tx power in mBm:') +_regex_words phy-set-txpower "set txpower" \ + 'a*uto:auto:' \ + 'f*ixed:fixed:$phy_txpower_opt' \ + 'l*imit:limit:$phy_txpower_opt' +phy_set_txpower=("$reply[@]") + +# Commands to go after "iw phy set" +local -a phy_set_cmds +_regex_words phy-set-commands "phy set commands" \ + 'a*ntenna:set a bitmap of allowed antennas to use for TX and RX:$phy_set_antenna' \ + 'ch*annel:set channel:$phy_set_channel' \ + 'co*verage:set coverage class (1 for every 3 usec of air propagation time):$phy_set_coverage' \ + 'd*istance:set appropriate coverage class for given link distance in meters:$phy_set_distance' \ + 'fra*g:set fragmentation threshold:$phy_set_frag' \ + 'fre*q:set frequency/channel the hardware is using, including HT configuration:$phy_set_freq' \ + 'na*me:rename this wireless device:$phy_set_name' \ + 'ne*tns:set network namespace:$phy_set_netns' \ + 'r*ts:set rts threshold:$phy_set_rts' \ + 't*xpower:specify transmit power level and setting type:$phy_set_txpower' +phy_set_cmds=("$reply[@]") + +# Commands to go after "iw phy interface" +local -a phy_interface_cmds +# This needs work (should not offer meshid, fouraddr of flags more than once, and need to accomodate multiple flag options) +phy_interface_cmds=(\( /$'add\0'/ ':add:add a new virtual interface with the given configuration:(add)' $ifacename $ifacetype \ + \( $meshid \| $fouraddr \| $flags \) \# \)) + +# Commands to go after "iw phy " +local -a phy_cmds +_regex_words phy-commands "phy command" \ + 's*et:set/configure interface properties:$phy_set_cmds' \ + 'inf*o:show capabilities for the specified wireless device' \ + 'int*erface:add a new virtual interface with the given configuration:$phy_interface_cmds' \ + 'w*owlan:WoWLAN commands:$phy_wowlan_cmds' +phy_cmds=("$reply[@]") + +# Parameters to hold patterns for dev commands +local -a dev_cmds_connect dev_cmds_cqm dev_cmds_get dev_cmds_ibss dev_cmds_interface dev_cmds_mesh dev_cmds_scan_options +local -a dev_cmds_mpath dev_cmds_offchannel dev_cmds_roc dev_cmds_scan dev_cmds_set dev_cmds_station dev_cmds_survey +dev_cmds_connect=($ssid $frequency $bssid $key) +dev_cmds_cqm=(/$'rssi\0'/ ':rssi:rssi:(rssi)' $matchnum ':thresh:threshold:' $matchnum ':hysteresis:hysteresis:') +dev_cmds_get=(/$'(mesh_param|power_save)\0'/ ':get:parameter:(mesh_param power_save)' $value) +# TODO: THIS NEEDS WORK! THE FINAL OPTIONS FOR JOIN NEED WORK +# dev ibss join [fixed-freq] [] [beacon-interval ] [basic-rates ] [mcast-rate ] [key d:0:abcde] +dev_cmds_ibss=(\( /$'leave\0'/ ':cmd:command:((leave:"Leave the IBSS cell"))' \| \( /$'join\0'/ ':cmd:command:((join\:"Join an IBSS cell"))' $ssid $frequency \( /$'fixed-freq\0'/ ':opt:option:((fixed-freq\:"fixed frequency (no args)"))' \| $bssid \| /$'beacon-interval\0'/ ':opt:option:((beacon-interval\:"beacon interval (takes single arg)"))' $numvalue \| /$'basic-rates\0'/ ':opt:option:((basic-rates\:"basic rates (comma separated list of rates)"))' $numvalue \| /$'mcast-rate\0'/ ':opt:option:((mcast-rate\:"multicast rate (takes single arg)"))' $numvalue \| $key \) \# \) \)) +dev_cmds_interface=(/$'add\0'/ ':add:add:(add)' $ifacename $ifacetype \( $meshid \| $fouraddr \| $flags \) \# ) +dev_cmds_mesh=(\( /$'leave\0'/ ':leave:leave a mesh:(leave)' \| /$'join\0'/ ':join:join a mesh:(join)' \ + $matchnum ':meshid:mesh ID:' $matchany ':parameter:mesh parameters [=]*:' \# \)) +dev_cmds_mpath=(\( /$'(del|get)\0'/ ':mpath:mesh path command:((del\:"remove the mesh path to the given node" \ +get\:"get information on mesh path to the given node"))' $lladdr \| /$'(new|set)\0'/ ':mpath:mesh path \ +command:((new\:"create a new mesh path (instead of relying on automatic discovery)" set\:"set an existing mesh \ +paths next hop"))' $lladdr /$'next_hop\0'/ ':nexthop:next hop:(next_hop)' $lladdr \| /$'dump\0'/ ':mpath:mesh path \ +command:((dump\:"list known mesh paths"))' \)) +dev_cmds_offchannel=($frequency $matchnum ':duration:duration:') +dev_cmds_roc=(/$'start\0'/ ':start:start:(start)' $frequency $matchnum ':time:time:') +dev_cmds_scan_options=(/$'freq\0'/ ':freq:freq:(freq)' $frequency $frequency \# /$'ies\0'/ ':ies:ies:(ies)' $lladdr \( /$'ssid\0'/ ':ssid:ssid:(ssid)' $ssid \# \| /$'passive\0'/ ':opt:passive:(passive)' \)) +dev_cmds_scan=(\( $dev_cmds_scan_options \| $matchany -'! [[ $match[1] =~ "dump|trigger" ]]' ':opt:option:((-u\:"include unknown data in results" \:""))' $dev_cmds_scan_options \| /$'dump\0'/ ':cmd:command:((dump\:"dump the current scan results"))' $matchany ':opt:option:((-u\:"include unknown data in results" \:""))' \| /$'trigger\0'/ ':cmd:command:((trigger\:"trigger a scan on the given frequencies with probing for the given SSIDs (or wildcard if not given) unless passive scanning is requested"))' $dev_cmds_scan_options \)) +local -a dev_cmds_set_bitrates dev_cmds_set_freq dev_cmds_set_mesh_param +local -a dev_cmds_set_monitor dev_cmds_set_peer dev_cmds_set_power_save +local -a dev_cmds_set_type dev_cmds_set_txpower +# dev set bitrates [legacy-<2.4|5> *] +dev_cmds_set_bitrates=(/$'legacy-*\0'/ ':opt:legacy:(legacy-2.4 legacy-2.5)' $matchnum ':rate:legacy rate in Mbps:') +# dev set freq [HT20|HT40+|HT40-] +dev_cmds_set_freq=($frequency $high_throughput) +# dev set mesh_param = [=]* +dev_cmds_set_mesh_param=( $matchany ':val:param=value:' \# ) +# dev set monitor * +dev_cmds_set_monitor=( $matchany ':flag:flag:((none\:"no special flags" fcsfail\:"show frames with FCS errors"\ + control\:"show control frames" otherbss\:"show frames from other BSSes" cook\:"use cooked mode"))' \# ) +# dev set peer +dev_cmds_set_peer=($lladdr) +# dev set power_save +dev_cmds_set_power_save=(/$'(on|off)\0'/ ':opt:power save mode:(on off)') + +_regex_words setcmds "dev set commands" \ + '4*addr:set interface 4addr (WDS) mode:$fouronoff'\ + 'b*itrates:set/clear specified rate masks:$dev_cmds_set_bitrates'\ + 'c*hannel:set channel:$phy_set_channel'\ + 'f*req:set frequency:$dev_cmds_set_freq'\ + 'mesh_param:set mesh parameters:$dev_cmds_set_mesh_param'\ + 'meshid:set mesh id:$meshidval'\ + 'mo*nitor:set monitor flags:$dev_cmds_set_monitor'\ + 'pe*er:set interface WDS peer MAC address:$dev_cmds_set_peer'\ + 'po*wer_save:set power save on/off:$dev_cmds_set_power_save'\ + 'tx*power:set transmission power:$phy_set_txpower'\ + 'ty*pe:set type:$ifacetypes' +dev_cmds_set=("$reply[@]") + +local -a dev_cmds_station_plink dev_cmds_station_vlan +dev_cmds_station_plink=(/$'(open|block)\0'/ ':opt::(open block)') +dev_cmds_station_vlan=($matchnum ':val:ifindex:') + +local -a dev_cmds_station_set +_regex_words stationsetcmds "dev station set commands"\ + 'plink_action:set peer link action:$dev_cmds_station_plink'\ + 'vlan:set AP VLAN:$dev_cmds_station_vlan' +dev_cmds_station_set=(\( $lladdr \) "$reply[@]") + +_regex_words stationcmds "dev station commands" \ + 'del:remove the given station entry (use with caution!):$lladdr'\ + 'dump:list all stations known, e.g. the AP on managed interfaces:'\ + 'get:get information for a specific station:$lladdr'\ + 'set:set AP VLAN or mesh peer link action:$dev_cmds_station_set' +dev_cmds_station=("$reply[@]") + +dev_cmds_survey=(/$'dump\0'/ ':dump:list all gathered channel survey data:(dump)') + +local -a dev_cmds +_regex_words dev-commands "dev commands" \ + 'co*nnect:join a network:$dev_cmds_connect' \ + 'cq*m:set connection quality monitor RSSI threshold:$dev_cmds_cqm' \ + 'de*l:remove this virtual interface' \ + 'di*sconnect:disconnect from the current network' \ + 'g*et:retrieve mesh parameter / power save state:$dev_cmds_get' \ + 'ib*ss:join/leave IBSS cell:$dev_cmds_ibss' \ + 'inf*o:show information for this interface' \ + 'int*erface:add an interface:$dev_cmds_interface' \ + 'l*ink:print information about the current link, if any' \ + 'me*sh:join/leave a mesh:$dev_cmds_mesh' \ + 'mp*ath:mesh path commands:$dev_cmds_mpath' \ + 'o*ffchannel:leave operating channel and go to the given channel for a while:$dev_cmds_offchannel' \ + 'r*oc:roc:$dev_cmds_roc' \ + 'sc*an:scan:$dev_cmds_scan' \ + 'se*t:set interface parameter:$dev_cmds_set' \ + 'st*ation:station commands:$dev_cmds_station' \ + 'su*rvey:list all gathered channel survey data:$dev_cmds_survey' +dev_cmds=( $devices "$reply[@]") + +# Arguments to _regex_arguments, built up in array $args. +local -a args reply +# Command word. Don't care what that is. +args=( $matchany ) + +local -a phydevs +phy_devs=( \( $(iw list|grep '^[[:alnum:]]\+'|cut -f 2 -d ' ') \) ) +phy_cmds=( \( $matchany ":test:test:$phy_devs[*]" \) "$phy_cmds[@]" ) + +_regex_words commands "iw command" \ + 'd*ev:commands to control/list the software devices:$dev_cmds' \ + 'e*vent:monitor events from the kernel:$event_opts' \ + 'h*elp:print usage for each command' \ + 'l*ist:list all wireless devices and their capabilities' \ + 'p*hy:commands to control the physical device:$phy_cmds' \ + 'r*eg:get/set regulatory domain:$reg_cmds' +args+=("$reply[@]") + +_regex_arguments _iw "${args[@]}" + +_iw "$@" + +# Local Variables: +# mode:shell-script +# End: diff --git a/.zprezto/modules/completion/external/src/_jekyll b/.zprezto/modules/completion/external/src/_jekyll new file mode 100644 index 0000000..ca119e6 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_jekyll @@ -0,0 +1,145 @@ +#compdef jekyll +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for jekyll(http://jekyllrb.com) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * farseer90718 (https://github.com/farseer90718) +# +# ------------------------------------------------------------------------------ + +local ret=1 state + +local -a common_ops +common_ops=( + {-v,--version}"[Display version information]" + {-h,--help}"[Display help documentation]" + {-p,--plugins}"[Plugins directory (defautls to ./_plugins)]: :_directories" + {-s,--source}"[Source directory (defaults to ./)]: :_directories" + {-d,--destination}"[Destination directory (defautls to ./_site)]: :_directories" + "--layouts=[Layouts directory (defaults to ./_layouts)]: :_directories" + "--safe=[Safe mode (defaults to false)]" +) + +typeset -A opt_args +_arguments \ + ':subcommand:->subcommand' \ + $common_ops \ + '*::options:->options' && ret=0 + +case $state in + subcommand) + local -a subcommands + subcommands=( + "build:Build your site" + "docs:Launch local server with docs for jekyll" + "doctor:Search site and print specific deprecation warnings" + "help:Display global or [command] help documentation" + "import:Import your old blog to Jekyll" + "new:Creates a new Jekyll site scaffold in PATH" + "serve:Serve your site locally" + ) + + _describe -t subcommands 'jekyll subcommand' subcommands && ret=0 + ;; + + options) + local -a args + args=( + $common_ops + ) + + local -a config + config=( + "--config[Custom configuration file]: :_files" + ) + local -a help + help=( + {-h,--help}"[Display help information]" + ) + local -a build + build=( + {-w,--watch}"[Watch for changes and rebuild]" + "--limit_posts[Limits the number of posts to parse and publish]" + "--future[Publishes posts with a future date]" + "--lsi[Use LSI for improved related posts]" + "--drafts[Render posts in the _drafts folder]" + ) + + case $words[1] in + help) + args=() + compadd "$@" build docs doctor help import new serve + ;; + + build) + args+=( + $build + $config + ) + ;; + + docs) + args=( + {-p,--port}"[Port to listen on]: :_ports" + {-u,--host}"[Host to bind to]: :_hosts" + $help + ) + ;; + + doctor) + args+=( + $config + ) + ;; + + import) + args=( + "--source[Source file or URL to migrate from]:url" + "--file[File to migrate from]: :_files" + "--dbname[Database name to migrate from]:database" + "--user[Username to use when migrating]:user" + "--pass[Password to use when migrating]:password" + "--host[Host address to use when migrating]:url" + $help + ) + ;; + + new) + args=( + ": :_directories" + "--force[Force creation even if PATH already exists]" + "--blank[Creates scaffolding but with empty files]" + $help + ) + ;; + + serve) + args+=( + $build + $config + {-P,--port}"[Port to listen on]: :_posts" + {-H,--host}"[Host to bind to]: :_hosts" + {-b,--baseurl}"[Base URL]:url" + ) + + esac + + _arguments $args && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_jmeter b/.zprezto/modules/completion/external/src/_jmeter new file mode 100644 index 0000000..762747b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_jmeter @@ -0,0 +1,74 @@ +#compdef jmeter +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for JMeter (http://jakarta.apache.org/jmeter). +# +# Status: incomplete +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- 1 *)'{-h,--help}'[print usage information and exit]' \ + '(- 1 *)'{-v,--version}'[print the version information and exit]' \ + {-p,--propfile}'[the jmeter property file to use]:properties file:_files -g "*.properties"' \ + '*'{-q,--addprop}'[additional property file(s)]:properties file:_files -g "*.properties"' \ + {-t,--testfile}'[the jmeter test plan file to run]:JMeter test plan file:_files -g "*.jmx"' \ + {-j,--jmeterlogfile}'[the jmeter log file]: :_files -g "*.log"' \ + {-l,--logfile}'[the file to log samples to]: :_files -g "*.jtl"' \ + {-n,--nongui}'[run JMeter in nongui mode]' \ + {-s,--server}'[run the JMeter server]' \ + {-H,--proxyHost}'[set a proxy server for JMeter to use]: :_hosts' \ + {-P,--proxyPort}'[set proxy server port for JMeter to use]:number' \ + {-u,--username}'[set username for proxy server that JMeter is to use]:username:_users' \ + {-a,--password}'[set password for proxy server that JMeter is to use]:password' \ + {-J-,--jmeterproperty}'[define additional JMeter properties]:argument=value' \ + {-G-,--globalproperty}'[define Global properties (sent to servers)]:argument=value' \ + {-D-,--systemproperty}'[define additional System properties]:argument=value' \ + {-S,--systemPropertyFile}'[a property file to be added as System properties]:properties file:_files -g "*.properties"' \ + {-L,--loglevel}'[define loglevel]:[category=]level' \ + {-r,--runremote}'[start remote servers (as defined by the jmeter property remote_hosts)]' \ + {-R,--remotestart}'[start these remote servers (overrides remote_hosts)]:remote servers list' \ + {-d,--homedir}'[the JMeter home directory to use]: :_files -/' \ + {-X,--remoteexit}'[exit the remote servers at end of test (non-GUI)]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_jmeter-plugins b/.zprezto/modules/completion/external/src/_jmeter-plugins new file mode 100644 index 0000000..8c466ac --- /dev/null +++ b/.zprezto/modules/completion/external/src/_jmeter-plugins @@ -0,0 +1,67 @@ +#compdef jmeter-plugins +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for jmeter-plugins command line tool 0.4.2 +# (http://code.google.com/p/jmeter-plugins). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- 1 *)--help[show help options]' \ + '--generate-png[generate PNG file containing graph]:PNG file name:_files -g "*.png"' \ + '--generate-csv[generate CSV file containing graph data]:CSV file name:_files -g "*.csv"' \ + '--input-jtl[load data from specified JTL file]:JTL file:_files -g "*.jtl"' \ + '--plugin-type[type of graph to use for results generation]:class:((AggregateReport ThreadsStateOverTime BytesThroughputOverTime HitsPerSecond LatenciesOverTime PerfMon ResponseCodesPerSecond ResponseTimesDistribution ResponseTimesOverTime ResponseTimesPercentiles ThroughputOverTime ThroughputVsThreads TimesVsThreads TransactionsPerSecond))' \ + '--width[set graph width]:graph width (pixels)' \ + '--height[set graph height]::graph height (pixels)' \ + '--granulation[granulation time for samples]:time (ms)' \ + '--relative-times[use relative X axis times, no will set absolute times]: :((yes no))' \ + '--aggregate-rows[aggregate all rows into one]: :((yes no))' \ + '--paint-gradient[paint gradient background]: :((yes no))' \ + '--paint-zeroing[paint zeroing lines]: :((yes no))' \ + '--prevent-outliers[prevent outliers on distribution graph]: :((yes no))' \ + '--limit-rows[limit number of points in row]:number of points' \ + '--force-y[force Y axis limit]:limit' \ + '--hide-low-counts[hide points with sample count below limit]:limit' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_jonas b/.zprezto/modules/completion/external/src/_jonas new file mode 100644 index 0000000..6aeb879 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_jonas @@ -0,0 +1,125 @@ +#compdef jonas +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for JOnAS 5.2 (http://jonas.ow2.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +typeset -A opt_args +local context state line curcontext="$curcontext" ret=1 + +_arguments -C \ + '1:cmd:->cmds' \ + '*::arg:->args' \ +&& ret=0 + +case "$state" in + (cmds) + local commands; commands=( + 'version:show version information' + 'check:check that the JOnAS environment is correctly set' + 'start:start a server instance' + 'stop:stop a server instance' + 'admin:administrate a server instance' + ) + _describe -t commands 'command' commands && ret=0 + ;; + (args) + curcontext="${curcontext%:*:*}:jonas-cmd-$words[1]:" + case $words[1] in + (version|check) + _message 'no more arguments' && ret=0 + ;; + (start) + _arguments \ + '-standby[start a minimal JOnAS server with only mandatory services]' \ + '(-bg)-fg[start the server in foreground mode]' \ + '(-fg)-bg[start the server in background mode]' \ + '-win[start the server in a new window]' \ + '(-bg)-tui[start the Apache Felix TUI (force foreground mode)]' \ + '-gui[start the Apache Felix GUI]' \ + '-dev[start a JOnAS server by using bundles present in the default maven repository instead of bundles under $JONAS_ROOT/lib/bundles]' \ + '-clean[clean the Apache Felix cache before starting a JOnAS server]' \ + '-n[set the server name, must be unique in the domain (default: jonas)]:name' \ + '-target[start another server or cluster (group of servers) in the domain]:server' \ + '-Ddomain.name=[set the name of the management domain to which the server belongs]:domain' \ + && ret=0 + ;; + (stop) + _arguments \ + '-standby[stop all services except the mandatory ones]' \ + '-n[set the name of the server to stop (default: jonas)]:name' \ + '-target[stop another server or cluster (group of servers) in the domain]:server' \ + '-Ddomain.name=[set the name of the management domain to which the server belongs]:domain' \ + && ret=0 + ;; + (admin) + _arguments \ + '(- : *)-?[print the help message]' \ + '-win[administer the server in a new window]' \ + '-n[set the name of the server to administer (default: jonas)]:name' \ + '-username[set the username when authentication is required]: :_users' \ + '-password[set the password when authentication is required]:password' \ + '-registry[set the registry URL]: :_urls' \ + '-protocol[set the protocol name]:protocol:((jrmp\:JRE\ implementation\ of\ RMI\ on\ the\ JRMP\ protocol\ \(default\) iiop\:JacORB\ implementation\ of\ RMI\ over\ the\ IIOP\ protocol irmi\:Oracle\ JRE\ independant\ implementation\ of\ RMI))' \ + '-a[deploy an application from a given filepath on the current server, or on another target in the domain if the current server is a master]:Java application archive:_files -g "*.(j|w|r|e)ar"' \ + '-r[undeploy a previously deployed application from the current server or from the specified target if the current server is a master]:Java application archive:_files -g "*.(j|w|r|e)ar"' \ + '-gc[run the garbage collector on the current JOnAS server]' \ + '-passivate[passivate all entity bean instances]' \ + '-e[list the properties of the current JOnAS server]' \ + '-j[list the registered JNDI names, as seen by the current JOnAS server]' \ + '-l[list the beans currently loaded by the current JOnAS server]' \ + '-synch[synchronize the entity bean instances on the current JOnAS server]' \ + '-debug[set the logging level for the given topic to DEBUG]:topic' \ + '-tt[change the default timeout for transactions]:timeout (seconds)' \ + '-ping[wait until the JOnAS server is available]' \ + '-timeout[maximum time to wait when -ping is used]:timeout (seconds)' \ + && ret=0 + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_jq b/.zprezto/modules/completion/external/src/_jq new file mode 100644 index 0000000..3cd9c50 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_jq @@ -0,0 +1,84 @@ +#compdef jq +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for jq (http://stedolan.github.io/jq/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideaki Miyake (https://github.com/mollifier) +# * George Kontridze (https://github.com/gkze) +# +# ------------------------------------------------------------------------------ + +declare -a opts args +args=( + '--argfile[This option passes the first value from the named file as a value to the jq program as a predefined variable]' + '--unbuffered[Flush the output after each JSON object is printed]' + '(-C --color-output)'{-C,--color-output}'[Colorize the output even if writing to a pipe or a file]' + '(-I --online-input)'{-I,--online-input}'[When the top-level input value is an array produce its elements instead of the array]' + '(-M --monochrome-output)'{-M,--monochrome-output}'[Not colorize the output]' + '(-R --raw-input)'{-R,--raw-input}'[Parse the input as not JSON but string]' + '(-S --sort-keys)'{-S,--sort-keys}'[Output the fields of each object with the keys in sorted order]' + '(-V --version)'{-V,--version}'[Display version information]' + '(-a --ascii-output)'{-a,--ascii-output}'[Output with pure ASCII characters]' + '(-e --exit-status)'{-e,--exit-status}'[Sets the exitstatus of jq to 0 if the last output values was neither false nor null, 1 if the last output value was either false or null, or 4 if no valid result was ever produced]' + '(-c --compact-output)'{-c,--compact-output}'[Compact output]' + '(-h --help)'{-h,--help}'[Display help information]' + '(-n --null-input)'{-n,--null-input}'[Run the filter using null as the input]' + '(-r --raw-output)'{-r,--raw-output}'[Not format string result as a JSON string with quotes]' + '(-s --slurp)'{-s,--slurp}'[Run the filter just once]' + '--arg[Passes a value to the jq program, e.g. --arg foo bar]:jq variable: ' + '1: :_guard "^-*" pattern' + '*:files:->file' +) +local curcontext=$curcontext state line ret=1 +declare -A opt_args + +_arguments -C $opts \ + $args && ret=0 + +case $state in + file) + _files && ret=0 + ;; +esac + +return $ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/.zprezto/modules/completion/external/src/_kitchen b/.zprezto/modules/completion/external/src/_kitchen new file mode 100644 index 0000000..dee5c58 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_kitchen @@ -0,0 +1,85 @@ +#compdef kitchen +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Test Kitchen (http://kitchen.ci/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Peter Eisentraut (https://github.com/petere) +# +# ------------------------------------------------------------------------------ + + +_kitchen() { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments '1: :->cmds'\ + '2: :->args' + + case $state in + cmds) + _kitchen_commands + ;; + args) + case $line[1] in + converge|create|destroy|diagnose|list|setup|test|verify) + compadd 'all' + _kitchen_instances + ;; + login) + _kitchen_instances + ;; + esac + ;; + esac +} + +_kitchen_commands() { + local commands + + commands=("${(@f)$(_call_program commands $service help | sed -n 's/^ kitchen \([[:alpha:]]*\) [ [].*# \(.*\)$/\1:\2/p')}") + _describe -t commands 'kitchen commands' commands +} + +_kitchen_instances() { + if [[ $_kitchen_instances_cache_dir != $PWD ]]; then + unset _kitchen_instances_cache + fi + if [[ ${+_kitchen_instances_cache} -eq 0 ]]; then + _kitchen_instances_cache=(${(f)"$(_call_program instances $service list -b 2>/dev/null)"}) + _kitchen_instances_cache_dir=$PWD + fi + _wanted instances expl 'instance' compadd -a _kitchen_instances_cache +} + +_kitchen "$@" diff --git a/.zprezto/modules/completion/external/src/_knife b/.zprezto/modules/completion/external/src/_knife new file mode 100644 index 0000000..be55e56 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_knife @@ -0,0 +1,214 @@ +#compdef knife +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Chef's knife (http://www.opscode.com/chef). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/knife +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Frank Louwers (https://github.com/franklouwers) +# * Mark Cornick (https://github.com/markcornick) +# +# ------------------------------------------------------------------------------ + + +# knife has a very special syntax, some example calls are: +# knife status +# knife cookbook list +# knife role show ROLENAME +# knife data bag show DATABAGNAME +# knife role show ROLENAME --attribute ATTRIBUTENAME +# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes + +# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces +_knife() { + local curcontext="$curcontext" state line + typeset -A opt_args + + # These flags should be available everywhere according to man knife + knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes --environment ) + + cloudproviders=(bluebox ec2 rackspace slicehost terremark) + _arguments \ + '1: :->knifecmd'\ + '2: :->knifesubcmd'\ + '3: :->knifesubcmd2' \ + '4: :->knifesubcmd3' \ + '5: :->knifesubcmd4' \ + '6: :->knifesubcmd5' + + case $state in + knifecmd) + compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" environment user exec index node recipe role search ssh status windows $cloudproviders + ;; + knifesubcmd) + case $words[2] in + (bluebox|ec2|rackspace|slicehost|terremark) + compadd "$@" server images + ;; + client) + compadd -Q "$@" "bulk delete" list create show delete edit reregister + ;; + configure) + compadd "$@" client + ;; + cookbook) + compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload + ;; + environment) + compadd -Q "$@" create delete edit "from file" list show + ;; + user) + compadd -Q "$@" create delete edit list reregister show + ;; + node) + compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete" + ;; + recipe) + compadd "$@" list + ;; + role) + compadd -Q "$@" "bulk delete" create delete edit "from file" list show + ;; + windows) + compadd "$@" bootstrap + ;; + *) + _arguments '2:Subsubcommands:($(_knife_options1))' + esac + ;; + knifesubcmd2) + case $words[3] in + server) + compadd "$@" list create delete + ;; + images) + compadd "$@" list + ;; + site) + compadd "$@" vendor show share search download list unshare + ;; + (show|delete|edit) + _arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))' + ;; + (upload|test) + _arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)' + ;; + list) + compadd -a "$@" knife_general_flags + ;; + bag) + compadd -Q "$@" show edit list "from file" create delete + ;; + *) + _arguments '3:Subsubcommands:($(_knife_options2))' + esac + ;; + knifesubcmd3) + case $words[3] in + show) + case $words[2] in + cookbook) + versioncomp=1 + _arguments '4:Cookbookversions:($(_cookbook_versions) latest)' + ;; + (node|client|role|environment) + compadd "$@" --attribute + esac + esac + case $words[4] in + (show|edit) + _arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))' + ;; + file) + _arguments '*:file or directory:_files -g "*.(rb|json)"' + ;; + list) + compadd -a "$@" knife_general_flags + ;; + *) + _arguments '*:Subsubcommands:($(_knife_options3))' + esac + ;; + knifesubcmd4) + if (( versioncomp > 0 )); then + compadd "$@" attributes definitions files libraries providers recipes resources templates + else + _arguments '*:Subsubcommands:($(_knife_options2))' + fi + ;; + knifesubcmd5) + _arguments '*:Subsubcommands:($(_knife_options3))' + esac +} + +# Helper functions to provide the argument completion for several depths of commands +_knife_options1() { + ( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options2() { + ( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options3() { + ( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +# The chef_x_remote functions use knife to get a list of objects of type x on the server +_chef_roles_remote() { + (knife role list | awk '{print $1}') +} + +_chef_clients_remote() { + (knife client list | awk '{print $1}') +} + +_chef_nodes_remote() { + (knife node list | awk '{print $1}') +} + +_chef_cookbooks_remote() { + (knife cookbook list | awk '{print $1}') +} + +_chef_sitecookbooks_remote() { + (knife cookbook site list | awk '{print $1}') +} + +_chef_data_bags_remote() { + (knife data bag list | awk '{print $1}') +} + +_chef_environments_remote() { + (knife environment list | awk '{print $1}') +} + +_chef_users_remote() { + (knife user list | awk '{print $1}') +} + +# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server +_chef_cookbooks_local() { + (for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done) +} + +# This function extracts the available cookbook versions on the chef server +_cookbook_versions() { + (knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g') +} + +_knife "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_language_codes b/.zprezto/modules/completion/external/src/_language_codes new file mode 100644 index 0000000..19322ac --- /dev/null +++ b/.zprezto/modules/completion/external/src/_language_codes @@ -0,0 +1,275 @@ +#autoload +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completer for language codes. +# +# Usage: _language_codes ISO-639-1 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +(( $+functions[_language_codes_iso_639_1] )) || +_language_codes_iso_639_1() { + local codes; codes=( + 'aa:Afar' + 'ab:Abkhazian' + 'af:Afrikaans' + 'ak:Akan' + 'sq:Albanian' + 'am:Amharic' + 'ar:Arabic' + 'an:Aragonese' + 'hy:Armenian' + 'as:Assamese' + 'av:Avaric' + 'ae:Avestan' + 'ay:Aymara' + 'az:Azerbaijani' + 'ba:Bashkir' + 'bm:Bambara' + 'eu:Basque' + 'be:Belarusian' + 'bn:Bengali' + 'bh:Bihari languages' + 'bi:Bislama' + 'bo:Tibetan' + 'bs:Bosnian' + 'br:Breton' + 'bg:Bulgarian' + 'my:Burmese' + 'ca:Catalan' + 'cs:Czech' + 'ch:Chamorro' + 'ce:Chechen' + 'zh:Chinese' + 'cu:Church Slavic' + 'cv:Chuvash' + 'kw:Cornish' + 'co:Corsican' + 'cr:Cree' + 'cy:Welsh' + 'cs:Czech' + 'da:Danish' + 'de:German' + 'dv:Divehi' + 'nl:Dutch' + 'dz:Dzongkha' + 'el:Greek, Modern (1453-)' + 'en:English' + 'eo:Esperanto' + 'et:Estonian' + 'eu:Basque' + 'ee:Ewe' + 'fo:Faroese' + 'fa:Persian' + 'fj:Fijian' + 'fi:Finnish' + 'fr:French' + 'fy:Western Frisian' + 'ff:Fulah' + 'ka:Georgian' + 'de:German' + 'gd:Gaelic' + 'ga:Irish' + 'gl:Galician' + 'gv:Manx' + 'gn:Guarani' + 'gu:Gujarati' + 'ht:Haitian' + 'ha:Hausa' + 'he:Hebrew' + 'hz:Herero' + 'hi:Hindi' + 'ho:Hiri Motu' + 'hr:Croatian' + 'hu:Hungarian' + 'hy:Armenian' + 'ig:Igbo' + 'is:Icelandic' + 'io:Ido' + 'ii:Sichuan Yi' + 'iu:Inuktitut' + 'ie:Interlingue' + 'ia:Interlingua (International Auxiliary Language Association)' + 'id:Indonesian' + 'ik:Inupiaq' + 'is:Icelandic' + 'it:Italian' + 'jv:Javanese' + 'ja:Japanese' + 'kl:Kalaallisut' + 'kn:Kannada' + 'ks:Kashmiri' + 'ka:Georgian' + 'kr:Kanuri' + 'kk:Kazakh' + 'km:Central Khmer' + 'ki:Kikuyu' + 'rw:Kinyarwanda' + 'ky:Kirghiz' + 'kv:Komi' + 'kg:Kongo' + 'ko:Korean' + 'kj:Kuanyama' + 'ku:Kurdish' + 'lo:Lao' + 'la:Latin' + 'lv:Latvian' + 'li:Limburgan' + 'ln:Lingala' + 'lt:Lithuanian' + 'lb:Luxembourgish' + 'lu:Luba-Katanga' + 'lg:Ganda' + 'mk:Macedonian' + 'mh:Marshallese' + 'ml:Malayalam' + 'mi:Maori' + 'mr:Marathi' + 'ms:Malay' + 'mk:Macedonian' + 'mg:Malagasy' + 'mt:Maltese' + 'mn:Mongolian' + 'mi:Maori' + 'ms:Malay' + 'my:Burmese' + 'na:Nauru' + 'nv:Navajo' + 'nr:Ndebele, South' + 'nd:Ndebele, North' + 'ng:Ndonga' + 'ne:Nepali' + 'nl:Dutch' + 'nn:Norwegian Nynorsk' + 'nb:Bokmål, Norwegian' + 'no:Norwegian' + 'ny:Chichewa' + 'oc:Occitan (post 1500)' + 'oj:Ojibwa' + 'or:Oriya' + 'om:Oromo' + 'os:Ossetian' + 'pa:Panjabi' + 'fa:Persian' + 'pi:Pali' + 'pl:Polish' + 'pt:Portuguese' + 'ps:Pushto' + 'qu:Quechua' + 'rm:Romansh' + 'ro:Romanian' + 'ro:Romanian' + 'rn:Rundi' + 'ru:Russian' + 'sg:Sango' + 'sa:Sanskrit' + 'si:Sinhala' + 'sk:Slovak' + 'sk:Slovak' + 'sl:Slovenian' + 'se:Northern Sami' + 'sm:Samoan' + 'sn:Shona' + 'sd:Sindhi' + 'so:Somali' + 'st:Sotho, Southern' + 'es:Spanish' + 'sq:Albanian' + 'sc:Sardinian' + 'sr:Serbian' + 'ss:Swati' + 'su:Sundanese' + 'sw:Swahili' + 'sv:Swedish' + 'ty:Tahitian' + 'ta:Tamil' + 'tt:Tatar' + 'te:Telugu' + 'tg:Tajik' + 'tl:Tagalog' + 'th:Thai' + 'bo:Tibetan' + 'ti:Tigrinya' + 'to:Tonga (Tonga Islands)' + 'tn:Tswana' + 'ts:Tsonga' + 'tk:Turkmen' + 'tr:Turkish' + 'tw:Twi' + 'ug:Uighur' + 'uk:Ukrainian' + 'ur:Urdu' + 'uz:Uzbek' + 've:Venda' + 'vi:Vietnamese' + 'vietnamien' + 'vo:Volapük' + 'cy:Welsh' + 'wa:Walloon' + 'wo:Wolof' + 'xh:Xhosa' + 'yi:Yiddish' + 'yo:Yoruba' + 'za:Zhuang' + 'zh:Chinese' + 'zu:Zulu' + ) + _describe -t language-codes 'ISO 639-1 language code' codes "$@" +} + +_language_codes() { + local command="$argv[$#]" ret=1 + + case $command in + ISO-639-1) + _language_codes_${${command//-/_}:l} "${@[1,-2]}" && ret=0 + ;; + *) + _message "unknown command: $command" + ;; + esac + + return ret +} + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_lein b/.zprezto/modules/completion/external/src/_lein new file mode 100644 index 0000000..c1b988f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_lein @@ -0,0 +1,62 @@ +#compdef lein +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Leiningen (https://github.com/technomancy/leiningen) +# +# Source: https://github.com/technolize/zsh-completion-funcs +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * technolize (https://github.com/technolize) +# +# ------------------------------------------------------------------------------ + +local ret=1 state +_arguments ':subcommand:->subcommand' && ret=0 + +case $state in + subcommand) + subcommands=( + "check:Check syntax and warn on reflection." + "classpath:Print the classpath of the current project." + "clean:Remove all files from project's target-path." + "compile:Compile Clojure source into .class files." + "deploy:Build and deploy jar to remote repository." + "deps:Download all dependencies." + "do:Higher-order task to perform other tasks in succession." + "help:Display a list of tasks or help for a given task." + "install:Install the current project to the local repository." + "jack-in:Jack in to a Clojure SLIME session from Emacs." + "jar:Package up all the project's files into a jar file." + "javac:Compile Java source files." + "new:Generate project scaffolding based on a template." + "pom:Write a pom.xml file to disk for Maven interoperability." + "pprint:Pretty-print a representation of the project map." + "repl:Start a repl session either with the current project or standalone." + "retest:Run only the test namespaces which failed last time around." + "run:Run a -main function with optional command-line arguments." + "search:Search remote maven repositories for matching jars." + "show-profiles:List all available profiles or display one if given an argument." + "test:Run the project's tests." + "trampoline:Run a task without nesting the project's JVM inside Leiningen's." + "uberjar:Package up the project files and dependencies into a jar file." + "upgrade:Upgrade Leiningen to specified version or latest stable." + "version:Print version for Leiningen and the current JVM." + "with-profile:Apply the given task with the profile(s) specified." + ) + _describe -t subcommands 'leiningen subcommands' subcommands && ret=0 +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_logger b/.zprezto/modules/completion/external/src/_logger new file mode 100644 index 0000000..2b25938 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_logger @@ -0,0 +1,61 @@ +#compdef logger +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for logger (from bsdutils). +# +# Last updated: 26.02.2013 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ + + +_logger_priority() { + local expl + + if compset -P '*.'; then + # hidden aliases.. not quite sure how this is supposed to work :\ + # compadd -n panic warning error + + # just this one tag + _wanted priority expl "Priority" \ + compadd -- debug info notice warn err crit alert emerg + return 0 + fi + + _wanted facility expl "Facility" \ + compadd -S '.' -- kern user mail daemon auth syslog lpr news \ + uucp cron security ftp ntp logaudit logalert clock \ + local0 local1 local2 local3 local4 local5 local6 local7 + return 0 + +} + +_logger() { + + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C -S -s \ + {-d,--udp}'[use UDP (TCP is default)]' \ + {-i,--id}'[log the process ID too]' \ + {-f,--file}'[log the contents of this file]:Logfile:_files' \ + '(-)'{-h,--help}'[display this help text and exit]' \ + {-n,--server}'[write to this remote syslog server]:Server:_hosts' \ + {-P,--port}'[use this UDP port]:UDP Port' \ + {-p,--priority}'[mark given message with this priority]:Priority:_logger_priority' \ + {-s,--stderr}'[output message to standard error as well]' \ + {-t,--tag}'[mark every line with this tag]:Tag' \ + {-u,--socket}'[write to this Unix socket]:Socket:_files -W *(=)' \ + '(-)'{-V,--version}'[output version information and exit]' \ + '*:Message:' && return 0 + +} + +_logger "$@" diff --git a/.zprezto/modules/completion/external/src/_lunar b/.zprezto/modules/completion/external/src/_lunar new file mode 100644 index 0000000..19b4832 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_lunar @@ -0,0 +1,314 @@ +#compdef lunar lin lrm lvu +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Lunar (http://www.lunar-linux.org) +# +# Source: https://github.com/Valodim/lunar-zsh-completion +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim (https://github.com/Valodim) +# +# ------------------------------------------------------------------------------ + + +# completion for lunar itself (different name, see below) +_lunar_comp() { + local suf ret=1 curcontext="$curcontext" + local -a vals state line expl + + # regular arguments, this will probably just hand down to the * command below + _arguments -C \ + '(- :)-d[Enables debug messages]' \ + '(- :)-h[Display help text]' \ + '(- :)-v[Increases the level of message output]' \ + '*::command:->command' && return 0 + + # complete the first word, ie. subcommand + if (( CURRENT == 1 )); then + local -a lunar_commands + # all lunar subcommands + lunar_commands=( + 'prune:Removes old sources and install/compile logs' + 'renew:Checks ver. against moonbase & recompiles if necessary' + 'update:Fetches latest moonbase and then does a "renew"' + 'rebuild:Recompiles all installed modules' + 'optimize:Shortcut to the optimization menu' + 'fix:Check and fix all modules and internal state of lunar' + 'nofix:Check but do not fix modules and internal state' + 'fixdepends:Check and fix the dependency database of lunar' + 'set:Check internal variable(s) and assign their values' + 'unset:Unsets an internal variable' + 'resurrect:Force modulename(s) to be unpacked from /var/cache' + 'install:Install a checklist of modules' + 'remove:Remove a checklist of modules' + 'hold:Place a hold on a checklist of modules' + 'unhold:Remove a hold on a checklist of modules' + 'exile:Remove a module a/o prevent it from being resurrected' + 'unexile:Allows a module to be compiled|resurrected again') + + # just show the commands with description + _describe -t commands 'lunar command' lunar_commands && ret=0 + return ret + else + + # at this point, we have to decide what to complete for specific subcommands + + # make a list of subcommands with no further arguments for later + local -a lunar_no_args + lunar_no_args=( prune renew update rebuild optimize fix nofix fixdepends ) + + # update the current context + curcontext="${curcontext%:*:*}:lunar-$words[1]:" + # if there is a specific function of the form _lunar-subcommand + if (( $+functions[_lunar-$words[1]] )); then + # call that for completion + _call_function ret _lunar-$words[1] + elif [[ -n "${lunar_no_args[(r)${words[1]}]}" ]]; then + # all commands from the array above take no further arguments + _message "lunar ${words[1]} requires no arguments" + else + # by default, complete modules + _lunar_modules + fi + return ret + fi +} + +# specific completion for lunar set +_lunar-set() { + # second argument: all lunar variables + if (( CURRENT == 2 )); then + local vars + vars=( ${(f)"$(cat /var/lib/lunar/unset.sh | cut -d' ' -f2)"} ) + _describe -t modules 'lunar variable' vars && return 0 + # third argument: some value + elif (( CURRENT == 3 )); then + _message "value" + # no further argument + else + _message "no further arguments" + fi +} + +_lunar-unset() { + local vars + vars=( ${(f)"$(cat /var/lib/lunar/unset.sh | cut -d' ' -f2)"} ) + _describe -t modules 'lunar variable' vars && return 0 +} + +_lunar-unhold() { + local vals + vals=( ${(f)"$(lvu held | sort | uniq)"} ) + _describe -t modules 'held modules' vals && return 0 +} + +_lunar-unexile() { + local vals + vals=( ${(f)"$(lvu exiled | sort | uniq)"} ) + _describe -t modules 'exiled modules' vals && return 0 +} + +_lrm() { + _arguments \ + '(-d --debug)'{-d,--debug}'[Enables debug messages]' \ + '(-D --downgrade)'{-D,--downgrade}'[downgrades a module]:module:_lunar_modules:version' \ + '(-h --help)'{-h,--help}'[Displays this help text]' \ + '(-k --keepconfig)'{-k,--keepconfig}'[remove module(s) but keep dependencies and config]' \ + '(-n --nosustain)'{-n,--nosustain}'[removes module(s) even if they are sustained]' \ + '(-u --upgrade)'{-u,--upgrade}'[remove the module but do not run scripts etc.]' \ + '(-v --verbose)'{-v,--verbose}'[Increases the level of message output]' \ + '(-p --purge)'{-p,--purge}'[Delete all modules that depend on the module(s) being removed as well]' \ + '*:module:_lunar_installed_modules' && return 0 +} + +_lin() { + _arguments \ + '(-c --compile)'{-c,--compile}'[Ignore /var/cache/lunar and compiles]' \ + '(-d --debug)'{-d,--debug}'[Enables debug messages]' \ + '--deps[Configure modules and determine dependencies]' \ + '(-f --from)'{-f,--from}'[Specify an alternate for /var/spool/lunar]:directory:_files -/' \ + '(-h --help)'{-h,--help}'[Displays help text]' \ + '--opts[Add custom configure options to the module]:configure option string' \ + '(-p --probe)'{-p,--probe}'[Only lin if not already installed]' \ + '(-r --reconfigure)'{-r,--reconfigure}'[Select new dependencies for modules]' \ + '(-R --resurrect)'{-R,--resurrect}'[Force to be unpacked from /var/cache/lunar]' \ + '(-s --silent)'{-s,--silent}'[Decreases the level of message output]' \ + '(-v --verbose)'{-v,--verbose}'[Increases the level of message output]' \ + '(-w --want)'{-w,--want}'[Try to install a different version]:wanted version' \ + '*:module:_lunar_modules' && return 0 +} + +# completion for lvu, very similar to the lunar one above (therefore uncommented) +_lvu() { + local suf ret=1 curcontext="$curcontext" + local -a vals state line expl + + _arguments -C \ + '(- :)-d[Enables debug messages]' \ + '(- :)-h[Display help text]' \ + '(- :)-v[Increases the level of message output]' \ + '*::command:->command' && return 0 + + if (( CURRENT == 1 )); then + local -a lvu_commands + lvu_commands=( + 'what:display a module''s description' + 'short:display a module''s short description' + 'where:display a module''s section' + 'cd:change directory to module and execs a new shell' + 'alien:discover untracked files' + 'from:discover what installed a given file' + 'leafs:display installed modules that have no explicit dependencies on them' + 'orphans:display installed modules that are missing dependencies' + 'conflicts:display conflicting files' + 'held:display held modules' + 'exiled:display exiled modules' + 'expired:display a list of modules which need an update' + 'info:display terse summary information about module' + 'search:searches all modules long descriptions for phrase.' + 'service:displays modules that provide that service' + 'website:display a module''s website' + 'install:display an install log' + 'size:find and show installed size of a module or ALL (slow)' + 'installed:display installed modules/version of module' + 'compile:display a compile log' + 'compiler:display the compiler version used' + 'links:display a list of modules that this module links to' + 'sources:display source files for a module' + 'urls:display all URLs for a module' + 'maintainer:display maintainer for a module' + 'version:display version of module in moonbase' + 'new:attempt to create a new module from scratch' + 'edit:copy a module to zlocal for editing' + 'diff:view changes on edited module' + 'submit:attempt to submit a module to the lunar ML' + 'unedit:delete zlocal copy of a module' + 'sum:display checksums' + 'md5sum:display md5sums' + 'export:make snapshot of box''s configuration.' + 'import:restores an exported snapshot.' + 'section:display moonbase sections' + 'moonbase:display text listing of the moonbase' + 'html:display html listing of the moonbase' + 'updatelog:display summary log of previous lunar update' + 'activity:display main log file' + 'newer:display available modules newer than Aug 01, 2003' + 'older:display modules installed before Jan 01, 2003' + 'voyeur:peak into module compilation' + 'pam:display installed modules that are Linux-PAM aware' + 'depends:displays installed modules that explicitly or recursively depend on this module.' + 'tree:displays a tree of the module''s dependencies' + 'stree:same as ''tree'' but highly abbreviated' + 'eert:same as ''tree'' but reverse and installed deps only' + 'leert:full reverse dependency tree') + + _describe -t commands 'lvu command' lvu_commands && ret=0 + + return ret + elif (( CURRENT == 2 )); then + local -a lvu_no_args + lvu_no_args=( alien leafs orphans conflicts held exiled expired export moonbase html updatelog pam ) + + curcontext="${curcontext%:*:*}:lvu-$words[1]:" + if (( $+functions[_lvu-$words[1]] )); then + _call_function ret _lvu-$words[1] + elif [[ -n "${lvu_no_args[(r)${words[1]}]}" ]]; then + _message "lvu ${words[1]} requires no arguments" + else + _lunar_modules + fi + return ret + else + _message "No further arguments" + fi + +} + +_lvu-service() { + _alternative \ + 'service:service name:_lvu-service-service' \ + 'port:port number:_guard "[0-9]#" "port number"' +} + +_lvu-service-service() { + local vals + vals=( ${(f)"$(cat /etc/services | grep -E -o '^(\w+)' | sort | uniq)"} ) + _describe -t modules 'service' vals && return 0 +} + +_lvu-diff() { + local vals + vals=( /var/lib/lunar/moonbase/zlocal/*(/:t) ) + _describe -t modules 'moonbase module from zlocal' vals && return 0 +} + +_lvu-unedit() { + local vals + vals=( /var/lib/lunar/moonbase/zlocal/*(/:t) ) + _describe -t modules 'moonbase module from zlocal' vals && return 0 +} + +_lvu-newer() { + _message "date string" +} + +_lvu-older() { + _message "date string" +} + +_lvu-import() { + _files +} + +_lvu-from() { + _files +} + +_lvu-new() { + _message "module name" +} + +_lvu-search() { + _message "search string" +} + +# specific completion for moonbase modules +_lunar_modules() { + local vals + vals=( /var/lib/lunar/moonbase/*/*(/:t) ) + _describe -t modules 'moonbase module' vals && return 0 +} + +# specific completion for moonbase modules +_lunar_installed_modules() { + local vals + vals=( ${(f)"$(lvu installed | cut -d':' -f1)"} ) + _describe -t modules 'moonbase installed module' vals && return 0 +} + +# hub function called for completion +_lunar() { + # decide which completion to use + case "$service" in + lin) _lin "$@";; + lrm) _lrm "$@";; + lvu) _lvu "$@";; + lunar) _lunar_comp "$@";; + *) _message "unknown command $service";; + esac +} + +_lunar "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_lunchy b/.zprezto/modules/completion/external/src/_lunchy new file mode 100644 index 0000000..652c186 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_lunchy @@ -0,0 +1,49 @@ +#compdef lunchy +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for lunchy (https://github.com/mperham/lunchy). +# +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Blake Walters (https://github.com/markupboy) +# +# ------------------------------------------------------------------------------ + +local state line cmds ret=1 + +_arguments -C '1: :->cmds' '*: :->args' + +case $state in + cmds) + local -a cmds + cmds=( + 'ls:list available agents' + 'start:start an agent' + 'stop:stop an agent' + 'restart:restart an agent' + 'status:get the status of agent[s]' + 'install:install an agents plist file' + 'edit:edit an agent' + ) + _describe -t commands 'lunchy command' cmds && ret=0 + ;; + args) + case $line[1] in + (install) + ;; + (restart|stop) + _values 'items' `lunchy status | awk '{print $3}' ` 2>/dev/null && ret=0 + ;; + *) + _values 'items' `lunchy ls` 2>/dev/null && ret=0 + ;; + esac + ;; +esac + +return ret diff --git a/.zprezto/modules/completion/external/src/_manage.py b/.zprezto/modules/completion/external/src/_manage.py new file mode 100644 index 0000000..7b6ccda --- /dev/null +++ b/.zprezto/modules/completion/external/src/_manage.py @@ -0,0 +1,270 @@ +#compdef manage.py django-admin.py +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Django's manage.py (https://www.djangoproject.com). +# +# Source: https://github.com/technolize/zsh-completion-funcs +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * technolize (https://github.com/technolize) +# +# ------------------------------------------------------------------------------ + + +_managepy-cleanup(){} +_managepy-compilemessages(){} + +_managepy-createcachetable(){ + _arguments -s : \ + $nul_args && ret=0 +} + +_managepy-dbshell(){ + _arguments -s : \ + $nul_args && ret=0 +} + +_managepy-diffsettings(){ + _arguments -s : \ + $nul_args && ret=0 +} + +_managepy-dumpdata(){ + _arguments -s : \ + '--format=-[specifies the output serialization format for fixtures.]:format:(json yaml xml)' \ + '--indent=-[specifies the indent level to use when pretty-printing output.]:' \ + $nul_args \ + '*::appname:_applist' && ret=0 +} + +_managepy-flush(){ + _arguments -s : \ + '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ + '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ + $nul_args && ret=0 +} + +_managepy-help(){ + _arguments -s : \ + '*:command:_managepy_cmds' \ + $nul_args && ret=0 +} + +_managepy_cmds(){ + local line + local -a cmd + _call_program help-command ./manage.py help \ + |& sed -n '/^ /s/[(), ]/ /gp' \ + | while read -A line; do cmd=($line $cmd) done + _describe -t managepy-command 'manage.py command' cmd +} + +_managepy-inspectdb(){ + _arguments -s : \ + $nul_args && ret=0 +} + +_managepy-loaddata(){ + _arguments -s : \ + '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ + '*::file:_files' \ + $nul_args && ret=0 +} + +_managepy-makemessages(){} + +_managepy-reset(){ + _arguments -s : \ + '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ + '*::appname:_applist' \ + $nul_args && ret=0 +} + +_managepy-runfcgi(){ + local state + + local fcgi_opts + fcgi_opts=( + 'protocol[fcgi, scgi, ajp, ... (default fcgi)]:protocol:(fcgi scgi ajp)' + 'host[hostname to listen on..]:' + 'port[port to listen on.]:' + 'socket[UNIX socket to listen on.]::file:_files' + 'method[prefork or threaded (default prefork)]:method:(prefork threaded)' + 'maxrequests[number of requests a child handles before it is killed and a new child is forked (0 = no limit).]:' + 'maxspare[max number of spare processes / threads.]:' + 'minspare[min number of spare processes / threads.]:' + 'maxchildren[hard limit number of processes / threads.]:' + 'daemonize[whether to detach from terminal.]:boolean:(False True)' + 'pidfile[write the spawned process-id to this file.]:file:_files' + 'workdir[change to this directory when daemonizing.]:directory:_files' + 'outlog[write stdout to this file.]:file:_files' + 'errlog[write stderr to this file.]:file:_files' + ) + + _arguments -s : \ + $nul_args \ + '*: :_values "FCGI Setting" $fcgi_opts' && ret=0 +} + +_managepy-runserver(){ + _arguments -s : \ + '--noreload[tells Django to NOT use the auto-reloader.]' \ + '--adminmedia[specifies the directory from which to serve admin media.]:directory:_files' \ + $nul_args && ret=0 +} + +_managepy-shell(){ + _arguments -s : \ + '--plain[tells Django to use plain Python, not IPython.]' \ + $nul_args && ret=0 +} + +_managepy-sql(){} +_managepy-sqlall(){} +_managepy-sqlclear(){} +_managepy-sqlcustom(){} +_managepy-sqlflush(){} +_managepy-sqlindexes(){} +_managepy-sqlinitialdata(){} +_managepy-sqlreset(){} +_managepy-sqlsequencereset(){} +_managepy-startapp(){} + +_managepy-startproject(){ + _arguments -s : \ + "(-v --verbosity)"{-v,--verbosity}"[Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output.]:Verbosity:((0\:minimal 1\:normal 2\:verbose 4\:very\ verbose))" \ + '--template[The path or URL to load the template from.]:file:_files' \ + "(-e --extension)"{-e,--extension}"[The file extension(s) to render (default: "py"). Separate multiple extensions with commas, or use -e multiple times.]" \ + "(-n --name)"{-n,--name}"[The file name(s) to render. Separate multiple extensions with commas, or use -n multiple times. --version show program\'s version number and exit]:file:_files" \ + $nul_args \ + '*::args:_gnu_generic' +} + +_managepy-syncdb() { + _arguments -s : \ + '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ + '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ + $nul_args && ret=0 +} + +_managepy-test() { + _arguments -s : \ + '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ + '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ + '*::appname:_applist' \ + $nul_args && ret=0 +} + +_managepy-testserver() { + _arguments -s : \ + '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ + '--addrport=-[port number or ipaddr:port to run the server on.]' \ + '*::fixture:_files' \ + $nul_args && ret=0 +} + +_managepy-validate() { + _arguments -s : \ + $nul_args && ret=0 +} + +_managepy-changepassword(){} +_managepy-createsuperuser(){} +_managepy-collectstatic(){} +_managepy-findstatic(){} + +_managepy-commands() { + local -a commands + + commands=( + 'cleanup:Can be run as a cronjob or directly to clean out old data from the database (only expired sessions at the moment).' + 'compilemessages:Compiles .po files to .mo files for use with builtin gettext support.' + 'createcachetable:creates the table needed to use the SQL cache backend.' + 'dbshell:runs the command-line client for the current DATABASE_ENGINE.' + "diffsettings:displays differences between the current settings.py and Django's default settings." + 'dumpdata:Output the contents of the database as a fixture of the given format.' + 'flush:Executes ``sqlflush`` on the current database.' + 'help:manage.py help.' + 'inspectdb:Introspects the database tables in the given database and outputs a Django model module.' + 'loaddata:Installs the named fixture(s) in the database.' + 'makemessages:Runs over the entire source tree of the current directory and pulls out all strings marked for translation.' + 'reset:Executes ``sqlreset`` for the given app(s) in the current database.' + 'runfcgi:Run this project as a fastcgi (or some other protocol supported by flup) application,' + 'runserver:Starts a lightweight Web server for development.' + 'shell:Runs a Python interactive interpreter.' + 'sql:Prints the CREATE TABLE SQL statements for the given app name(s).' + 'sqlall:Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s).' + 'sqlclear:Prints the DROP TABLE SQL statements for the given app name(s).' + 'sqlcustom:Prints the custom table modifying SQL statements for the given app name(s).' + 'sqlflush:Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed.' + 'sqlindexes:Prints the CREATE INDEX SQL statements for the given model module name(s).' + "sqlinitialdata:RENAMED: see 'sqlcustom'" + 'sqlreset:Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).' + 'sqlsequencereset:Prints the SQL statements for resetting sequences for the given app name(s).' + "startapp:Creates a Django app directory structure for the given app name in this project's directory." + "startproject:Creates a Django project directory structure for the given project name in the current directory or the given destination." + "syncdb:Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created." + 'test:Runs the test suite for the specified applications, or the entire site if no apps are specified.' + 'testserver:Runs a development server with data from the given fixture(s).' + 'validate:Validates all installed models.' + ) + if [[ $words[1] =~ "manage.py$" ]]; then + commands=($commands + "changepassword:Change a user's password for django.contrib.auth." + 'createsuperuser:Used to create a superuser.' + 'collectstatic:Collect static files in a single location.' + 'findstatic:Finds the absolute paths for the given static file(s).' + ) + fi + + _describe -t commands 'manage.py command' commands && ret=0 +} + +_applist() { + local line + local -a apps + _call_program help-command "python -c \"import os.path as op, re, settings, sys;\\ + bn=op.basename(op.abspath(op.curdir));[sys\\ + .stdout.write(str(re.sub(r'^%s\.(.*?)$' % + bn, r'\1', i)) + '\n') for i in settings.\\ + INSTALLED_APPS if re.match(r'^%s' % bn, i)]\"" \ + | while read -A line; do apps=($line $apps) done + _values 'Application' $apps && ret=0 +} + +_manage.py() { + local -a nul_args + nul_args=( + '--settings=-[the Python path to a settings module.]:file:_files' + '--pythonpath=-[a directory to add to the Python path.]::directory:_directories' + '--traceback[print traceback on exception.]' + "--version[show program's version number and exit.]" + {-h,--help}'[show this help message and exit.]' + ) + + local curcontext=$curcontext ret=1 + + if ((CURRENT == 2)); then + _managepy-commands + else + shift words + (( CURRENT -- )) + curcontext="${curcontext%:*:*}:managepy-$words[1]:" + _call_function ret _managepy-$words[1] + fi +} + +_manage.py "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_middleman b/.zprezto/modules/completion/external/src/_middleman new file mode 100644 index 0000000..6c18551 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_middleman @@ -0,0 +1,136 @@ +#compdef middleman +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for middleman (http://middlemanapp.com/) +# Includes commands from middleman-blog and middleman-deploy extesions. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jozef Izso (https://github.com/jozefizso) +# +# ------------------------------------------------------------------------------ + +local ret=1 state + +local -a common_ops +common_ops=( + "--help[Display help]" +) + +typeset -A opt_args +_arguments \ + ':subcommand:->subcommand' \ + $common_ops \ + '*::options:->options' && ret=0 + +case $state in + subcommand) + local -a subcommands + subcommands=( + "article:Create a new blog article" + "build:Builds the static site for deployment" + "console:Start an interactive console in the context of your Middleman application" + "deploy:Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages on github)." + "extension:Create Middleman extension scaffold" + "init:Create new project" + "server:Start the preview server" + "upgrade:Upgrade installed bundle" + "version:Show version" + ) + + _describe -t subcommands 'middleman subcommand' subcommands && ret=0 + ;; + + options) + local -a args + args=( + $common_ops + ) + + local -a help + help=( + "--help[Display help information]" + ) + + case $words[1] in + article) + args=( + {-d,--date}"[The date to create the post with (defaults to now)]:date" + ) + ;; + + build) + args=( + "--clean[Remove orphaned files from build (Default: true)]" + "--no-clean[Disable removing orphaned files from build]" + {-g,--glob}"[Build a subset of the project]:glob" + "--verbose[Print debug messages]" + "--instrument[Print instrument messages]:instrument" + "--profile[Generate profiling report for the build]" + ) + ;; + + console) + args=( + {-e,--environment}"[The environment Middleman will run under (Default: development)]:environment" + "--verbose[Print debug messages]" + ) + ;; + + deploy) + args=( + {-b,--build-before}"[Run \`middleman build\` before the deploy step]" + ) + ;; + + extension) + args=( + "--git[Default: true]" + ) + ;; + + init) + args=( + {-T,--template}"[Use a project template: default, html5, mobile, smacss, empty. (Default: default)]:template" + "--css-dir [The path to the css files]:css_dir" + "--js-dir [The path to the javascript files]:js_dir" + "--images-dir [The path to the image files]:images_dir" + "--rack [Include a config.ru file]" + "--skip-gemfile [Don't create a Gemfile]" + "--skip-bundle [Don't run bundle install]" + "--skip-git [Skip Git ignores and keeps]" + ) + ;; + + server) + args=( + {-e,--environment}"[The environment Middleman will run under (Default: development)]:environment" + {-h,--host}"[Bind to HOST address (Default: 0.0.0.0)]:host" + {-p,--port}"[The port Middleman will listen on (Default: 4567)]:port" + "--verbose [Print debug messages]" + "--instrument [Print instrument messages]:instrument" + "--disable-watcher [Disable the file change and delete watcher process]" + "--profile [Generate profiling report for server startup]" + "--reload-paths [Additional paths to auto-reload when files change]:reload_paths" + "--force-polling [Force file watcher into polling mode]" + ) + ;; + + upgrade) + args=() + ;; + + version) + args=() + ;; + esac + + _arguments $args && ret=0 + ;; +esac + +return ret diff --git a/.zprezto/modules/completion/external/src/_mina b/.zprezto/modules/completion/external/src/_mina new file mode 100644 index 0000000..2a8d935 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_mina @@ -0,0 +1,43 @@ +#compdef mina +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Mina (http://nadarei.co/mina/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + {-h,--help}'[Show help]' \ + {-V,--version}'[Show program version]' \ + {-v,--verbose}'[Show commands as they happen]' \ + {-s,--simulate}'[Run in simulation mode]' \ + {-t,--trace}'[Show backtraces when errors occur]' \ + -f'[Use FILE as the deploy configuration]:file:_files' \ + '*: :->cmds' && ret=0 + +case $state in + cmds) + cmds=( ${(f)"$(_call_program commands mina -T 2> /dev/null | sed -e 's/:/\\:/g; s/\[/\\[/g; s/\]/\\]/g; s/mina \([^ ]*\) .*# /\1:/g')"} ) + _describe -t commands 'mina command' cmds && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_mosh b/.zprezto/modules/completion/external/src/_mosh new file mode 100644 index 0000000..f0c8a9d --- /dev/null +++ b/.zprezto/modules/completion/external/src/_mosh @@ -0,0 +1,35 @@ +#compdef mosh +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for mosh (http://mosh.mit.edu). +# +# Source: https://gist.github.com/2242920 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Ben O'Hara (https://github.com/benohara) +# +# ------------------------------------------------------------------------------ + +_arguments \ + '--client=:client helper:_command_names -e' \ + '--server=:server helper:_files' \ + '--ssh=:ssh command to run:_files' \ + '(-a -n)--predict=:when:(adaptive always never)' \ + '(--predict -n)-a[predict always]' \ + '(--predict -a)-n[predict never]' \ + {-p,--port=}':port:_ports' \ + ':remote:_hosts' \ + ':remote command:_command_names -e' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_mussh b/.zprezto/modules/completion/external/src/_mussh new file mode 100644 index 0000000..ff2e96e --- /dev/null +++ b/.zprezto/modules/completion/external/src/_mussh @@ -0,0 +1,86 @@ +#compdef mussh +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for MUltihost SSH Wrapper (http://mussh.sourceforge.net/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +# TODO: +# -i: admit more than one use +# -d, -v, -t: control input +# -m: Accept number (but also empty) +# -h: Accept multiple hosts, also more than one use +# -H: Accept multiple files, also more than one use + +_arguments -C \ + '--help[display this help message]' \ + '-V[print version info and exit]' \ + '-d[Verbose debug]:level (from 0 to 2)' \ + '-v[SSH debug level]:level (from 0 to 3)' \ + '-m[Run concurrently]' \ + '(-b -B)-b[Print each hosts output in a block without mingling with other hosts output]' \ + '(-b -B)-B[Allow hosts output to mingle. (default)]' \ + '(-a -A)-a[Force loading ssh-agent]' \ + '(-a -A)-A[Do NOT load ssh-agent]' \ + '(-u -U)-u[Unique. Eliminate duplicate hosts. (default)]' \ + '(-u -U)-U[Do NOT make host list unique]' \ + '-P[Do NOT fall back to passwords on any host. This will skip hosts where keys fail]' \ + '-i[Load an identity file. May be used more than once]:identity' \ + '-o[Args to pass to ssh with -o option]:ssh-args' \ + '(-l -L)-l[Use _login_ when no other is specified with the hostname]:login' \ + '(-l -L)-L[Force use of _login_ on all hosts]:login' \ + '-s[Path to shell on remote host]:shell' \ + '-t[Timeout setting for each session]:timeout' \ + '-p[Host to use as proxy]:[user@]host' \ + '-po[Args to pass to ssh on proxy with -o option]:ssh-args' \ + '(-h -H)-h[Add a host to list of hosts]:[user@]host' \ + '(-h -H)-H[Add contents of file to list of hosts]:host file:_files' \ + '(-c -C)-c[Add a command or quoted list of commands to list of commands to be executed on each host]:command' \ + '(-c -C)-C[Add file contents to list of commands to be executed on each host]:commands file:_files' \ + '(-q)-q[No output unless necessary]' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_mvn b/.zprezto/modules/completion/external/src/_mvn new file mode 100644 index 0000000..2dc385b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_mvn @@ -0,0 +1,628 @@ +#compdef mvn mvnDebug +# ------------------------------------------------------------------------------ +# Copyright (c) 2010-2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Maven (http://maven.apache.org). +# +# Status: See FIXME and TODO tags. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# * By default advanced phases are displayed only if you start typing them. To have +# them always displayed: +# +# zstyle ':completion:*:mvn:*' show-all-phases true +# +# * By default full form plugins (groupId:artifactId[:version]) are only shown if you +# start typing them. To have them always displayed: +# +# zstyle ':completion:*:mvn:*' show-full-form-plugins true +# +# * By default only the plugins for which the completion has already been +# called ("mvn plugin:") are shown. To define your own list of plugins: +# +# maven_plugins=(jboss tomcat gwt android) +# zstyle ':completion:*:mvn:*' plugins $maven_plugins +# +# * To have a better presentation of completions: +# +# zstyle ':completion:*:*:mvn:*:matches' group 'yes' +# zstyle ':completion:*:*:mvn:*:options' description 'yes' +# zstyle ':completion:*:*:mvn:*:options' auto-description '%d' +# zstyle ':completion:*:*:mvn:*:descriptions' format $'\e[1m -- %d --\e[22m' +# zstyle ':completion:*:*:mvn:*:messages' format $'\e[1m -- %d --\e[22m' +# zstyle ':completion:*:*:mvn:*:warnings' format $'\e[1m -- No matches found --\e[22m' +# +# ------------------------------------------------------------------------------ + + +_mvn() { + typeset -A opt_args + local context state line + + local curcontext="$curcontext" maven_version excl_opts + + excl_opts=(-h --help -v --version -ep --encrypt-password -emp --encrypt-master-password) + + _pick_variant -r maven_version maven3='Maven 3' maven2='Maven 2' unknown --version + if [[ $maven_version == 'maven3' ]]; then + opts=( + "($excl_opts -T --threads)"{-T,--threads}'[thread count, for instance 2.0C where C is core multiplied]:thread count:_mvn_thread_counts' + "($excl_opts -t --toolchains)"{-t,--toolchains}'[alternate path for the user toolchains file]:toolchains file:_mvn_toolchains_files' + "($excl_opts -l --log-file)"{-l,--log-file}'[log file to where all build output will go]:log file:_mvn_log_files' + ) + elif [[ $maven_version == 'maven2' ]]; then + opts=( + "($excl_opts -cpu --check-plugin-updates -up --update-plugins -npu --no-plugin-updates -o --offline)"{-cpu,--check-plugin-updates,-up,--update-plugins}'[force upToDate check for any relevant registered plugins]' + "($excl_opts -npr --no-plugin-registry)"{-npr,--no-plugin-registry}'[don'\''t use plugin-registry.xml for plugin versions]' + "($excl_opts -npu --no-plugin-updates -cpu --check-plugin-updates -up --update-plugins)"{-npu,--no-plugin-updates}'[suppress upToDate check for any relevant registered plugins]' + "($excl_opts -r --reactor)"{-r,--reactor}'[dynamically build reactor from subdirectories]:reactor:_mvn_reactors' + ) + fi + + [[ -n ${(M)words:#"-pl"} || -n ${(M)words:#"--projects"} ]] && opts+=( + "($excl_opts -am --also-make)"{-am,--also-make}'[if project list is specified, also build projects required by the list]' + "($excl_opts -amd --also-make-dependents)"{-amd,--also-make-dependents}'[if project list is specified, also build projects that depend on projects on the list]' + ) + + _arguments -C \ + "(- : *)"{-h,--help}'[display help information]' \ + "(- : *)"{-v,--version}'[display version information]' \ + "(- : *)"{-emp,--encrypt-master-password}'[encrypt master security password]:master password:_mvn_passwords' \ + "(- : *)"{-ep,--encrypt-password}'[encrypt server password]:password:_mvn_passwords' \ + "($excl_opts -B --batch-mode)"{-B,--batch-mode}'[run in non-interactive (batch) mode]' \ + "($excl_opts -V --show-version)"{-V,--show-version}'[display version information without stopping build]' \ + "($excl_opts -q --quiet -X --debug)"{-q,--quiet}'[quiet output, only show errors]' \ + "($excl_opts -X --debug -q --quiet)"{-X,--debug}'[produce execution debug output]' \ + "($excl_opts -N --non-recursive)"{-N,--non-recursive}'[do not recurse into sub-projects]' \ + "($excl_opts -C --strict-checksums -c --lax-checksums)"{-C,--strict-checksums}'[fail the build if checksums don'\''t match]' \ + "($excl_opts -c --lax-checksums -C --strict-checksums)"{-c,--lax-checksums}'[warn if checksums don'\''t match]' \ + "($excl_opts -e --errors)"{-e,--errors}'[produce execution error messages]' \ + "($excl_opts -f --file)"{-f,--file}'[force the use of an alternate POM file]:POM file:_mvn_pom_files' \ + "($excl_opts -s --settings)"{-s,--settings}'[alternate path for the user settings file]:settings file:_mvn_settings_files' \ + "($excl_opts -gs --global-settings)"{-gs,--global-settings}'[alternate path for the global settings file]:global settings file:_mvn_settings_files' \ + "($excl_opts -fae --fail-at-end -ff --fail-fast -fn --fail-never)"{-fae,--fail-at-end}'[only fail the build afterwards, allow all non-impacted builds to continue]' \ + "($excl_opts -ff --fail-fast -fae --fail-at-end -fn --fail-never)"{-ff,--fail-fast}'[stop at first failure in reactorized builds]' \ + "($excl_opts -fn --fail-never -fae --fail-at-end -ff --fail-fast)"{-fn,--fail-never}'[never fail the build, regardless of project result]' \ + "($excl_opts)*"{-P,--activate-profiles}'[comma-delimited list of profiles to activate]:profile:_mvn_profiles -s ,' \ + "($excl_opts -pl --projects)"{-pl,--projects}'[build specified reactor projects instead of all projects]:project list:_mvn_projects -s ,' \ + "($excl_opts -rf --resume-from)"{-rf,--resume-from}'[resume reactor from specified project]:project:_mvn_projects' \ + "($excl_opts -o --offline -U --update-snapshots -cpu --check-plugin-updates -up --update-plugins)"{-o,--offline}'[work offline]' \ + "($excl_opts -U --update-snapshots -nsu --no-snapshot-updates -o --offline)"{-U,--update-snapshots}'[force a check for updated releases and snapshots on remote repositories]' \ + "($excl_opts -nsu --no-snapshot-updates -U --update-snapshots -o --offline)"{-nsu,--no-snapshot-updates}'[Suppress SNAPSHOT updates]' \ + "*"{-D-,--define}'[define a system property]:property:_mvn_properties' \ + "${opts[@]}" \ + "($excl_opts)*: :_mvn_args" +} + +(( $+functions[_mvn_args] )) || +_mvn_args() { + _alternative \ + 'phases:phase:_mvn_phases' \ + 'plugin-colon-goals:plugin colon goal:_mvn_plugin_colon_goals' +} + +(( $+functions[_mvn_phases] )) || +_mvn_phases() { + local phases + phases=( + 'clean:remove all files generated by the previous build' + 'compile:compile the source code of the project' + 'test:run tests using a suitable unit testing framework' + 'package:take the compiled code and package it in its distributable format, such as a JAR' + 'integration-test:process and deploy the package if necessary into an environment where integration tests can be run' + 'verify:run any checks to verify the package is valid and meets quality criteria' + 'install:install the package into the local repository, for use as a dependency in other projects locally' + 'deploy:done in an integration or release environment, copies the final package to the remote repository' + 'site:generates the projects site documentation' + 'site-deploy:deploys the generated site documentation to the specified web server' + ) + if [[ $#PREFIX -gt 0 ]] || zstyle -t ":completion:${curcontext}:" show-all-phases; then + phases+=( + 'pre-clean:executes processes needed prior to the actual project cleaning' + 'post-clean:executes processes needed to finalize the project cleaning' + 'validate:validate the project is correct and all necessary information is available' + 'initialize:initialize build state, e.g. set properties or create directories' + 'generate-sources:generate any source code for inclusion in compilation' + 'process-sources:process the source code, for example to filter any values' + 'generate-resources:generate resources for inclusion in the package' + 'process-resources:copy and process the resources into the destination directory, ready for packaging' + 'process-classes:post-process the generated files from compilation' + 'generate-test-sources:generate any test source code for inclusion in compilation' + 'process-test-sources:process the test source code, for example to filter any values' + 'generate-test-resources:create resources for testing' + 'process-test-resources:copy and process the resources into the test destination directory' + 'test-compile:compile the test source code into the test destination directory' + 'process-test-classes:post-process the generated files from test compilation' + 'prepare-package:perform any operations necessary to prepare a package before the actual packaging' + 'pre-integration-test:perform actions required before integration tests are executed' + 'post-integration-test:perform actions required after integration tests have been executed' + 'pre-site:executes processes needed prior to the actual project site generation.' + 'post-site:executes processes needed to finalize the site generation, and to prepare for site deployment' + ) + fi + _describe -t 'phases' "phase" phases +} + +(( $+functions[_mvn_plugins] )) || +_mvn_plugins() { + local ret=1 + if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then + _wanted full-form-plugins expl 'full form plugin' _mvn_full_form_plugins && ret=0 + else + _wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_colon_goals] )) || +_mvn_plugin_colon_goals() { + local ret=1 + if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then + _wanted full-form-plugin-colon-goals expl 'full form plugin colon goal' _mvn_full_form_plugin_colon_goals && ret=0 + else + _wanted plugin-prefix-colon-goals expl 'plugin prefix colon goal' _mvn_plugin_prefix_colon_goals && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_prefix_colon_goals] )) || +_mvn_plugin_prefix_colon_goals() { + local ret=1 + if compset -P '*:'; then + local plugin="${IPREFIX%:}" + _wanted goals expl "${plugin} plugin goal" _mvn_plugin_goals $plugin && ret=0 + else + _wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_prefixes] )) || +_mvn_plugin_prefixes() { + local plugins + zstyle -a ":completion:${curcontext}:" plugins plugins + [[ $#plugins -eq 0 ]] && plugins=($(__mvn_get_plugin_prefix $(__mvn_get_cache_dir)/mvn/plugins/*(:t))) + _describe -t plugin-prefixes 'plugin prefix' plugins $@ +} + +(( $+functions[_mvn_full_form_plugin_colon_goals] )) || +_mvn_full_form_plugin_colon_goals() { + local ret=1 + # FIXME Duplicates _mvn_full_form_plugins + if compset -P 1 '*:'; then + local groupId="${${IPREFIX%:}##*:}" + if compset -P 1 '*:'; then + local artifactId="${${IPREFIX%:}##*:}" + if compset -P 1 '*:'; then + local version="${${IPREFIX%:}##*:}" + _wanted goals expl "${artifactId}:${version} goal" _mvn_plugin_goals "${groupId}:${artifactId}:${version}" && ret=0 + else + _alternative \ + "versions:${artifactId} version:_mvn_artifact_versions -qS: ${groupId}:${artifactId}" \ + "goals:${artifactId} goal:_mvn_plugin_goals ${groupId}:${artifactId}" \ + && ret=0 + fi + else + _wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: $groupId && ret=0 + fi + else + _wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_full_form_plugins] )) || +_mvn_full_form_plugins() { + local ret=1 chunk="${PREFIX%%:*}" + if compset -P 1 '*:'; then + local groupId="$chunk" + chunk="${PREFIX%%:*}" + if compset -P 1 '*:'; then + _wanted versions expl "${current} version" _mvn_artifact_versions $@ "${groupId}:${chunk}" && ret=0 + else + _wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: "${groupId}" && ret=0 + fi + else + _wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_groupIds] )) || +_mvn_groupIds() { + local repository_location=$(__mvn_get_repository_location) update_policy ret=1 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_groupIds_caching_policy + + if [[ -d $repository_location ]]; then + unset _groupIds + if ( [[ ${+_groupIds} -eq 0 ]] || _cache_invalid "mvn/repositories/${repository_location}/groupIds" ) && ! _retrieve_cache "mvn/repositories/${repository_location}/groupIds"; then + _groupIds=($repository_location/**/) + _groupIds=(${${${(u)_groupIds:h:h}#"$repository_location/"}//\//.}) + [[ $#_groupIds -gt 0 ]] && _store_cache "mvn/repositories/${repository_location}/groupIds" _groupIds + fi + + [[ $#_groupIds -gt 0 ]] && _multi_parts $@ . _groupIds && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_groupId_artifactIds] )) || +_mvn_groupId_artifactIds() { + local groupId_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//\.//}" ret=1 + + if [[ -d $groupId_repository_location ]]; then + local artifactIds; artifactIds=($groupId_repository_location/*/*/*.pom(:h:h:t)) + _describe -t artifactIds "artifactId" artifactIds $@[0,-2] && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_artifact_versions] )) || +_mvn_artifact_versions() { + local artifact_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//[\.:]//}" ret=1 + + if [[ -d $artifact_repository_location ]]; then + local versions; versions=($artifact_repository_location/*/*.pom(:h:t)) + _describe -t versions "version" versions $@[0,-2] + fi + + return ret +} + +(( $+functions[_mvn_plugin_goals] )) || +_mvn_plugin_goals() { + local ret=1 plugin="$@[-1]" update_policy + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_goals_caching_policy + + unset _goals + if ( [[ ${+_goals} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin}" ) && ! _retrieve_cache "mvn/plugins/${plugin}"; then + setopt localoptions extendedglob + _goals=(${(s:,,,:)${${${(f)${${${(f)${${${${(F)${(S)${(f)"$(_call_program goals $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=$plugin)"}//#$(__mvn_get_plugin_prefix $plugin):/,,,}}:#*BUILD FAILURE*}#*This plugin has*goals#:}%For more information, run \'mvn help:describe*}}//:/\\:}}}// ##/ }// Description\\: /:}}) + [[ $#_goals -gt 0 ]] && _store_cache "mvn/plugins/${plugin}" _goals + fi + + [[ $#_goals -gt 0 ]] && _describe -t "goals" "${plugin} goal" _goals $@[0,-2] && ret=0 + + return ret +} + +(( $+functions[_mvn_profiles] )) || +_mvn_profiles() { + + # FIXME Use "mvn help:all-profiles" output instead of parsing settings and pom files... + # Blocked on http://jira.codehaus.org/browse/MPH-82 and http://jira.codehaus.org/browse/MPH-83 + local profs update_policy settings_file=$(__mvn_get_settings_file) parent_pom_file=$(__mvn_get_parent_pom_file) cache_name profiles_section ret=1 + + # TODO Should be split into _mvn_profiles/mvn_profiles_lists + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_profiles_caching_policy + + profs=() + + # Resolve profiles from settings.xml + if [[ -f $settings_file ]]; then + unset _profiles + cache_name="mvn/profiles${settings_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10 + if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then + _profiles=() + profiles_section="${(M)${(f)$(<$settings_file)}:#**}" + if [[ -n "$profiles_section" ]]; then + for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*}%*}//*<\/repositories>}//*<\/pluginRepositories>}//*<\/build>}//<\/id>*/,,,}##*}%%*}}; do + [[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in settings file"']') + done + fi + [[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles + fi + profs+=($_profiles) + fi + + # Resolve project profiles + if [[ -f $parent_pom_file ]]; then + unset _profiles + cache_name="mvn/profiles${parent_pom_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10 + if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then + _profiles=() + setopt localoptions extendedglob + for file in ${parent_pom_file:h}/**/pom.xml~*target\/*; do # FIXME project.build.directory is not always target/ + profiles_section="${(M)${(f)$(<$file)}:#**}" + if [[ -n "$profiles_section" ]]; then + for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*}%*}//*<\/repositories>}//*<\/pluginRepositories>}//*<\/build>}//<\/id>*/,,,}##*}%%*}}; do + [[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in ${file#${parent_pom_file:h}\/}"']') + done + fi + done + [[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles + fi + profs+=($_profiles) + fi + + compset -P '-'; compset -P '+'; compset -P '!' # FIXME Only works for the first profile + + [[ $#profs -gt 0 ]] && _values $@ 'profile' "${profs[@]}" && ret=0 + + return ret +} + +(( $+functions[_mvn_projects] )) || +_mvn_projects() { + # TODO Projects can also be given in the form [groupId:]artifactId. + # TODO Should be split into _mvn_projects/mvn_projects_lists + local pom_file=$(__mvn_get_parent_pom_file) ret=1 + + if [[ -f $pom_file ]]; then + setopt localoptions extendedglob + local projects; projects=(${pom_file:h}/*/**/pom.xml~*target\/*) # FIXME project.build.directory is not always target/ + projects=(${${projects#.\/}:h}) + [[ $#projects -gt 0 ]] && _values "$@" 'project' "${projects[@]}" && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_properties] )) || +_mvn_properties() { + local ret=1 + if compset -P '*='; then + _wanted property-values expl 'property value' _mvn_property_values ${${IPREFIX%=}#-D} && ret=0 + else + _wanted property-names expl 'property name' _mvn_property_names -qS= && ret=0 + fi + return ret +} + +(( $+functions[_mvn_property_names] )) || +_mvn_property_names() { + # FIXME "-qS=" should be inherited from _mvn_properties + local alternatives; alternatives=( + "common-property-names:common property name:_mvn_common_property_names -qS=" + ) + for plugin_colon_goal in ${(M)words:#[^-]*:*}; do + alternatives+=("plugin-property-names:plugin property name:_mvn_plugin_goal_property_names -qS= ${plugin_colon_goal}") + done + _alternative "${alternatives[@]}" +} + +(( $+functions[_mvn_common_property_names] )) || +_mvn_common_property_names() { + local properties; properties=( + 'skipTests:skip tests execution' + 'maven.test.skip:skip tests compilation and execution' + 'gpg.passphrase:gpg passphrase' + ) + _describe -t 'common-property-names' 'common property name' properties $@ +} + +(( $+functions[_mvn_plugin_goal_property_names] )) || +_mvn_plugin_goal_property_names() { + local plugin_colon_goal="$@[-1]" update_policy ret=1 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_properties_caching_policy + + unset _properties + if ( [[ ${+_properties} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin_colon_goal}" ) && ! _retrieve_cache "mvn/plugins/${plugin_colon_goal}"; then + # FIXME Does not work for: + # android:apk (new line before expression) + # ear:ear (unknown cause) + _properties=(${(M)${(ps:,,,:)${${${${(pj: :)${${${(f)${"$(_call_program properties $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=${plugin_colon_goal%:*} -Dgoal=${plugin_colon_goal##*:} -Ddetail)"#*Available parameters:}%%\[INFO\]*}//# [a-z]*/,,,}##*Expression: \$\{}}//\}[[:space:]]##/:}//[[:space:]]##/ }//[[:space:]]#,,,[[:space:]]#/,,,}}:#[a-zA-Z]##:*}) + [[ $#_properties -gt 0 ]] && _store_cache "mvn/plugins/${plugin_colon_goal}" _properties + fi + + [[ $#_properties -gt 0 ]] && _describe -t "${plugin_colon_goal//:/-}-property-names" "${plugin_colon_goal} property name" _properties $@[0,-2] && ret=0 + + return ret +} + +(( $+functions[_mvn_property_values] )) || +_mvn_property_values() { + local ret=1 + setopt localoptions extendedglob + case $@[-1] in + ((#i)*pomFile*) _wanted pom-files expl 'POM file' _mvn_pom_files && ret=0;; + ((#i)*file*) _wanted files expl 'file' _files && ret=0;; + ((#i)*groupId*) _wanted groupIds expl 'groupId' _mvn_groupIds && ret=0;; + ((#i)*artifactId*) _wanted artifactIds expl 'artifactId' _mvn_groupId_artifactIds ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=} && ret=0;; + ((#i)*version*) _wanted versions expl 'version' _mvn_artifact_versions ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=}:${${(M)${(ps.:.)opt_args[(K)-D]}:#artifactId=*}#artifactId=} && ret=0;; + ((#i)*repositoryId*) _message -e repositoryIds 'repositoryId' && ret=0;; # TODO Not implemented + ((#i)*classifier*) _message -e classifiers 'classifier' && ret=0;; + ((#i)*scope*) _wanted scopes expl 'scope' _mvn_scopes && ret=0;; + ((#i)*url*) _wanted urls expl 'url' _urls && ret=0;; # TODO Use _alternative and add repository urls from settings + projects + ((#i)*(password|passphrase)*) _wanted passwords expl password _mvn_passwords && ret=0;; + ((#i)*(createChecksum|generatePom|maven.test.skip)*) _wanted booleans expl 'boolean' _mvn_booleans && ret=0;; + ((#i)*user*) _wanted users expl 'user' _users && ret=0;; # TODO Use _alternative and add repository usernames from settings + projects + ((#i)*plugin*) _wanted plugin expl 'plugin' _mvn_plugins && ret=0;; + (*) _default && ret=0;; + esac + return ret +} + +(( $+functions[_mvn_scopes] )) || +_mvn_scopes() { + local scopes; scopes=( + 'compile:default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects.' + 'provided:much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.' + 'runtime:indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.' + 'test:indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases.' + 'system:similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.' + 'import:only used on a dependency of type pom in the section. It indicates that the specified POM should be replaced with the dependencies in that POM'\''s section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.' + ) + _describe -t scopes 'scope' scopes +} + +(( $+functions[_mvn_thread_counts] )) || +_mvn_thread_counts() { + local thread_counts; thread_counts=( + '1:build with 1 thread' '1C:build with 1 thread per CPU core' + '2:build with 2 threads' '2C:build with 2 threads per CPU core' + '3:build with 3 threads' '3C:build with 3 threads per CPU core' + '4:build with 4 threads' '4C:build with 4 threads per CPU core' + '5:build with 5 threads' '5C:build with 5 threads per CPU core' + '6:build with 6 threads' '6C:build with 6 threads per CPU core' + '7:build with 7 threads' '7C:build with 7 threads per CPU core' + '8:build with 8 threads' '8C:build with 8 threads per CPU core' + ) + _describe -t thread-counts 'thread count' thread_counts +} + +(( $+functions[_mvn_reactors] )) || +_mvn_reactors() { + _message -e reactors 'reactor' # FIXME No idea what kind of value the "--reactor" option is supposed to take +} + +(( $+functions[_mvn_passwords] )) || +_mvn_passwords() { + _message -e passwords 'password' +} + +(( $+functions[_mvn_pom_files] )) || +_mvn_pom_files() { + _files -g '*pom*\.xml*' +} + +(( $+functions[_mvn_toolchains_files] )) || +_mvn_toolchains_files() { + _files -g '*toolchains*\.xml*' +} + +(( $+functions[_mvn_settings_files] )) || +_mvn_settings_files() { + _files -g '*settings*\.xml*' +} + +(( $+functions[_mvn_log_files] )) || +_mvn_log_files() { + _files +} + +(( $+functions[_mvn_booleans] )) || +_mvn_booleans() { + local booleans; booleans=( + 'true:"true" boolean value' + 'false:"false" boolean value' + ) + _describe -t booleans 'boolean' booleans +} + + +# ------------------------------------------------------------------------------ +# Helper functions +# ------------------------------------------------------------------------------ + +__mvn_get_pom_file() { + print ${~opt_args[-f]:-${opt_args[--file]:-pom.xml}} +} + +__mvn_get_parent_pom_file() { + local pom_file=$(__mvn_get_pom_file) + while [[ -f ${pom_file:a:h:h}/pom.xml ]]; do + pom_file=${pom_file:a:h:h}/pom.xml; + done + print $pom_file +} + +__mvn_get_settings_file() { + print ${~opt_args[-s]:-${opt_args[--settings]:-$HOME/.m2/settings.xml}} +} + +__mvn_get_repository_location() { + print ${${${${(M)"$(<$(__mvn_get_settings_file))":#**}:-$HOME/.m2/repository}##*}%%<\/localRepository>*} +} + +__mvn_get_plugin_prefix() { + print ${${${${@#*.*:}%%:*}%-plugin}/-#maven-#} +} + +__mvn_get_cache_dir() { + local cache_dir + zstyle -s ":completion:${curcontext}:" cache-path cache_dir + print ${cache_dir:-${ZDOTDIR:-$HOME}/.zcompcache} +} + + +# ------------------------------------------------------------------------------ +# Caching policies +# ------------------------------------------------------------------------------ + +(( $+functions[_mvn_goals_caching_policy] )) || +_mvn_goals_caching_policy() { + # Rebuild if cache is older than one month. + local -a oldp + oldp=( "$1"(NmM+1) ) + (( $#oldp )) +} + +(( $+functions[_mvn_properties_caching_policy] )) || +_mvn_properties_caching_policy() { + _mvn_goals_caching_policy +} + +(( $+functions[_mvn_groupIds_caching_policy] )) || +_mvn_groupIds_caching_policy() { + _mvn_goals_caching_policy +} + +(( $+functions[_mvn_profiles_caching_policy] )) || +_mvn_profiles_caching_policy() { + # Rebuild if cached file more recent than cache. + local cached_file="${1#$(__mvn_get_cache_dir)}" + [[ -f $cached_file && $cached_file -nt "$1" ]] && return 0 + + # Rebuild if cache is older than one week. + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) && return 0 + + return 1 +} + +_mvn "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_nl b/.zprezto/modules/completion/external/src/_nl new file mode 100644 index 0000000..53db404 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_nl @@ -0,0 +1,56 @@ +#compdef nl +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for GNU nl (coreutils 8.13). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * github.com/RobSis +# +# ------------------------------------------------------------------------------ + +local arguments style_values format_values ret=1 + +style_values=( + "a:number all lines" + "t:number only nonempty lines" + "n:number no lines" + "pBRE:number only lines that contain a match for the basic regular expression, BRE" +) + +format_values=( + "ln:left justified, no leading zeros" + "rn:right justified, no leading zeros" + "rz:right justified, leading zeros" +) + +_arguments -C -s -S \ + {-b+,--body-numbering=}'[use STYLE for given number of lines]:style:->style' \ + {-d+,--section-delimiter=}'[use CC for separating logical pages]' \ + {-f+,--footer-numbering=}'[use STYLE for numbering footer lines]:style:->style' \ + {-h+,--header-numbering=}'[use STYLE for numbering header lines]:style:->style' \ + {-i+,--line-increment=}'[line number increment at each line]' \ + {-l+,--join-blank-lines=}'[group of NUMBER empty lines counted as one]' \ + {-n+,--number-format=}'[insert line numbers according to FORMAT]:format:->format' \ + {-p,--no-renumber}'[do not reset line numbers at logical pages]' \ + {-s+,--number-separator=}'[add STRING after (possible) line number]' \ + {-v+,--starting-line-number=}'[first line number on each logical page]' \ + {-w+,--number-width=}'[use NUMBER columns for line numbers]' \ + --help'[display help and exit]' \ + --version'[output version information and exit]' \ + '*:filename:_files' && ret=0 + +case "$state" in + (style) + _describe -t style style style_values && ret=0 + ;; + (format) + _describe -t format format format_values && ret=0 + ;; +esac + +return $ret diff --git a/.zprezto/modules/completion/external/src/_node b/.zprezto/modules/completion/external/src/_node new file mode 100644 index 0000000..f9ef3c7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_node @@ -0,0 +1,66 @@ +#compdef node +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Node.js v0.8.4 (http://nodejs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# * Nicholas Penree (https://github.com/drudge) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '(- 1 *)--help[print options help]' \ + '(- 1 *)'{-v,--version}'[print node version]' \ + '(--no-deprecation)--no-deprecation[silence deprecation warnings]' \ + '(--trace-deprecation)--trace-deprecation[show stack traces on deprecations]' \ + '(- 1 *)--v8-options[print v8 command line options]' \ + '(--max-stack-size)--max-stack-size=[set max v8 stack size (bytes)]' \ + '(-e --eval)'{-e,--eval}'[evaluate script]:Inline Script' \ + '(-i --interactive)'{-i,--interactive}'[always enter the REPL even if stdin does not appear to be a terminal]' \ + '(-p --print)'{-p,--print}'[print result of --eval]' \ + '(--vars)--vars[print various compiled-in variables]' \ + '*:JS Script:_files -g "*.js"' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_nvm b/.zprezto/modules/completion/external/src/_nvm new file mode 100644 index 0000000..2f6acc5 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_nvm @@ -0,0 +1,85 @@ +#compdef nvm +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nvm (https://github.com/creationix/nvm). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Changwoo Park (https://github.com/pismute) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 + +local -a _1st_arguments +_1st_arguments=( + 'help:Show this message' + 'install:Download and install a ' + 'uninstall:Uninstall a ' + 'use:Modify PATH to use ' + 'run:Run with as arguments' + 'ls:List installed [versions]' + 'ls-remote:List remote versions available for install' + 'deactivate:Undo effects of NVM on current shell' + 'alias:Set an alias named pointing to . Show all aliases beginning with [].' + 'unalias:Deletes the alias named ' + 'copy-packages:Install global NPM packages contained in to current version' + 'clear-cache:Clear cache' + 'version:Show current node version' +) + +_arguments -C \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +__nvm_aliases(){ + local aliases + aliases="" + if [ -d $NVM_DIR/alias ]; then + aliases="`cd $NVM_DIR/alias && ls`" + fi + echo "${aliases}" +} + +__nvm_versions(){ + echo "$(nvm_ls) $(__nvm_aliases)" +} + +case $state in + cmds) + _describe -t commands 'nvm command' _1st_arguments && ret=0 + ;; + + args) + case $words[2] in + (use|run|ls|list|install|uninstall|copy-packages) + + _values 'version' $(__nvm_versions) && ret=0 + ;; + + (alias|unalias) + + _values 'aliases' $(__nvm_aliases) && ret=0 + ;; + + *) + (( ret )) && _message 'no more arguments' + ;; + + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_optirun b/.zprezto/modules/completion/external/src/_optirun new file mode 100644 index 0000000..ebc0e00 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_optirun @@ -0,0 +1,75 @@ +#compdef optirun +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the optirun command from bumblebee +# (https://github.com/Bumblebee-Project/Bumblebee). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Christophe-Marie Duquesne +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line +typeset -A opt_args + +local -a arguments + +arguments=( + '--version[output version information]' + '(-h --help)'{-h,--help}'[show help]' + '(-c --vgl-compress)'{-c,--vgl-compress}'[image transport method]:method:(proxy jpeg rgb xb yuv)' + '--failsafe[run a program even if the nvidia card is unavailable]:boolean:(true false)' + '--no-failsafe[do not run a program if the nvidia card is unavailable]' + '--vgl-options[options to be passed to vglrun (example: +tr)]' + '(-q --quiet --silent)'{-q,--quiet,--silent}'[suppress all logging messages]' + '(-v --verbose)'{-v,--verbose}'[increase the verbosity level of log messages]' + '--debug[set the verbosity level to the maximum]' + '(-b --bridge)'{-b,--bridge}'[specify bridge library to use: VirtualGL, Primus or auto]:method:(auto primus virtualgl none)' + '(-d --display)'{-d,--display}'[the X display number to use]' + '(-C --config)'{-C,--config}'[retrieve settings for Bumblebee from FILE]:file:_files' + '(-l --ldpath)'{-l,--ldpath}'[PATH the libraries like libGL.so are searched in]:file:_files' + '--primus-ldpath[a colon-separated list of paths which are searched for the primus libGL.so.1]:file:_files' + '(-s --socket)'{-s,--socket}'[use FILE for communication with the daemon]:file:_files' + '--no-xorg[do not start secondary X server (implies -b none)]' + '*::arguments: _normal' +) + +_arguments $arguments + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_pactree b/.zprezto/modules/completion/external/src/_pactree new file mode 100644 index 0000000..06bd404 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_pactree @@ -0,0 +1,26 @@ +#compdef pactree +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pactree 4.0 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Limao Luo +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args + +_pactree() { + local -a cmd packages packages_long + packages_long=(/var/lib/pacman/local/*(/)) + packages=( ${${packages_long#/var/lib/pacman/local/}%-*-*} ) + compadd "$@" -a packages +} + +# run the main dispatcher +_pactree "$@" diff --git a/.zprezto/modules/completion/external/src/_pear b/.zprezto/modules/completion/external/src/_pear new file mode 100644 index 0000000..86f368f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_pear @@ -0,0 +1,89 @@ +#compdef pear +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Pear (http://pear.php.net). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * aki77 (https://github.com/aki77) +# +# ------------------------------------------------------------------------------ + + +_pear () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments \ + '1: :->subcmds' \ + '*:: :->args' && ret=0 + + case $state in + subcmds) + _pear_commands + ;; + args) + local cmd args + + cmd=$words[1] + args=() + + case $cmd in + channel-alias|channel-delete|channel-info|channel-update) + args+=( + ':channel:_pear_discovered_channels' + ) + ;; + uninstall|upgrade|run-scripts) + args+=( + ':package:_pear_installed_packages' + ) + ;; + esac + + _arguments "$args[@]" && ret=0 + return + ;; + esac + return ret +} + +_pear_commands () { + local commands + + commands=( + ${${(f)${"$(_call_program commands $service 2>&1)"#*Commands:}%Usage:*}/[[:blank:]]*[[:blank:]][[:blank:]]/:} + ) + _describe -t commands 'Pear commands' commands +} + +_pear_installed_packages () { + local packages + + packages=( + ${${(f)"$(pear list)"#*STATE}%%[[:blank:]]*} + ) + _wanted package expl 'package' compadd -a packages +} + +_pear_discovered_channels () { + local channels + + channels=( + ${${${(f)"$(_call_program commands pear list-channels)"#*SUMMARY}%__uri*}%%[[:blank:]]*} + ) + _wanted channel expl 'channel' compadd -a channels +} + +_pear "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_perf b/.zprezto/modules/completion/external/src/_perf new file mode 100644 index 0000000..bf5898d --- /dev/null +++ b/.zprezto/modules/completion/external/src/_perf @@ -0,0 +1,279 @@ +#compdef perf +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Linux performance counters 3.3 (perf.wiki.kernel.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_perf() { + local context curcontext="$curcontext" state line + typeset -A opt_args + + local ret=1 + + _arguments -C \ + '(- : *)--version[show version number and exit]' \ + '(- : *)--help[show help]: :_perf_cmds' \ + '1: :_perf_cmds' \ + '*::arg:->args' \ + && ret=0 + + case $state in + (args) + curcontext="${curcontext%:*:*}:perf-cmd-$words[1]:" + case $line[1] in + (annotate) + # TODO Complete CPU list + # TODO Complete disassembler style + _arguments \ + '(- : *)'{-a,--all}'[prints all the available commands on the standard output]' \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-d --dsos)'{-d,--dsos=}'[only consider symbols in these dsos]:dso list' \ + '(-s --symbol)'{-s,--symbol=}'[symbol to annotate]:symbol' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]: :_files' \ + '(-m --modules)'{-m,--modules}'[load module symbols]' \ + '(-l --print-line)'{-l,--print-line}'[print matching source lines]' \ + '(-P --full-paths)'{-P,--full-paths}'[don'\''t shorten the displayed pathnames]' \ + '--stdio[use the stdio interface]' \ + '--tui[use the TUI interface]' \ + '(-C --cpu)'{-C,--cpu}'[only report samples for the list of CPUs provided]:CPU list' \ + '--asm-raw[show raw instruction encoding of assembly instructions]' \ + '(--no-source)--source[interleave source code with assembly code]' \ + '(--source)--no-source[don'\''t interleave source code with assembly code]' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '(-M --disassembler-style)'{-M,--disassembler-style=}'[set disassembler style for objdump]:disassembler style' \ + '1::symbol name' \ + && ret=0 + ;; + (archive) + _arguments \ + '1: :_files' \ + && ret=0 + ;; + (bench) + # TODO Complete subsystems + # TODO Complete suites + _arguments \ + '(-f --format)'{-f,--format=}'[specify format style]: :((default\:mainly\ for\ human\ reading simple\:friendly\ for\ automated\ processing\ by\ scripts))' \ + '1::subsystem' \ + '2::suite' \ + && ret=0 + ;; + (buildid-cache) + _arguments \ + '(-a --add)'{-a,--add=}'[add specified file to the cache]: :_files' \ + '(-r --remove)'{-r,--remove=}'[remove specified file from the cache]: :_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + && ret=0 + ;; + (buildid-list) + _arguments \ + '(-H --with-hits)'{-H,--with-hits}'[show only DSOs with hits]' \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-f --force)'{-f,--force}'[don'\''t do ownership validation]' \ + '(-k --kernel)'{-k,--kernel}'[show running kernel build id]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + && ret=0 + ;; + (diff) + _arguments \ + '(-M --displacement)'{-M,--displacement}'[show position displacement relative to baseline]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-m --modules)'{-m,--modules}'[load module symbols]' \ + '(-d --dsos)'{-d,--dsos=}'[only consider symbols in these dsos]:dso list' \ + '(-C --comms)'{-C,--comms=}'[only consider symbols in these comms]:comm list' \ + '(-S --symbols)'{-S,--symbols=}'[only consider these symbols]:symbol list' \ + '(-s --sort)'{-s,--sort=}'[sort by key(s)]: :_values -s , key pid comm dso symbol' \ + '(-t --field-separator)'{-t,--field-separator=}'[use a special separator character and don'\''t pad with spaces]:separator' \ + '(-v --verbose)'{-v,--verbose}'[be verbose, for instance, show the raw counts in addition to the diff]' \ + '(-f --force)'{-f,--force}'[don'\''t complain, do it]' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '1:old file:_files' \ + '2:new file:_files' \ + && ret=0 + ;; + (evlist) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + && ret=0 + ;; + (inject) + _arguments \ + '(-b --build-ids)'{-b,--build-ids=}'[inject build-ids into the output stream]:build-id list' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + && ret=0 + ;; + (kmem) + # TODO Complete 'record' command + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '--caller[show per-callsite statistics]' \ + '--alloc[show per-allocation statistics]' \ + '(-s --sort)'{-s,--sort=}'[sort by output]: :_values -s , key frag hit bytes' \ + '(-n --lines)'{-n,--lines}'[print n lines only]:number' \ + '1:command:((record\:record\ the\ kmem\ events\ of\ an\ arbitrary\ workload stat\:report\ kernel\ memory\ statistics))' \ + && ret=0 + ;; + (kvm) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-o --output)'{-o,--output=}'[output file name]: :_files' \ + '--host=[collect host side performance profile]:host' \ + '--guest=[collect guest side performance profile]:guest' \ + '--guestmount=[guest os root file system mount directory]: :_files -/' \ + '--guestkallsyms=[guest os /proc/kallsyms file copy]: :_files' \ + '--guestmodules=[guest os /proc/modules file copy]: :_files' \ + '--guestvmlinux=[guest os kernel vmlinux]: :_files' \ + '1:command:((top record report diff buildid-list))' \ + && ret=0 + ;; + (list) + _arguments \ + '1:event type:((hw\:hardware\ events hardware\:hardware\ events sw\:software\ events software\:software\ events cache\:cache\ events hwcache\:cache\ events tracepoint\:tracepoint\ events))' \ + && ret=0 + ;; + (lock) + # TODO Complete 'record' command + # TODO Complete 'report' command options + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '1:command:((record\:record\ lock\ events trace\:show\ raw\ lock\ events report\:report\ statistical\ data))' \ + && ret=0 + ;; + (probe) + # TODO not implemented + ;; + (record) + # TODO not implemented + ;; + (report) + # TODO not implemented + ;; + (sched) + # TODO Complete 'record' command + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '1:command:((record\:record\ scheduling\ events script\:see\ a\ detailed\ trace replay\:simulate\ the\ workload map\:print\ a\ textual\ context-switching\ outline))' \ + && ret=0 + ;; + (script) + # TODO not implemented + ;; + (stat) + # TODO not implemented + ;; + (test) + _arguments \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + && ret=0 + ;; + (timechart) + # TODO Complete 'record' command + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-o --output)'{-o,--output=}'[output file name]: :_files' \ + '(-w --width)'{-w,--width=}'[select the width of the SVG file]:width' \ + '(-P --power-only)'{-P,--power-only}'[only output the CPU power section of the diagram]' \ + '(-p --process)'{-p,--process}'[select the processes to display, by name or PID]:process' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '1:command:((record))' \ + && ret=0 + ;; + (top) + # TODO not implemented + ;; + (help) + _arguments \ + '(- : *)'{-a,--all}'[prints all the available commands on the standard output]' \ + '1: :_perf_cmds' \ + && ret=0 + ;; + *) + _call_function ret _perf_cmd_$words[1] && ret=0 + (( ret )) && _message 'no more arguments' + ;; + esac + ;; + esac +} + +# FIXME Parse 'perf --help' instead of hard-coding. +(( $+functions[_perf_cmds] )) || +_perf_cmds() { + local commands; commands=( + 'annotate:read perf.data (created by perf record) and display annotated code' + 'archive:create archive with object files with build-ids found in perf.data file' + 'bench:general framework for benchmark suites' + 'buildid-cache:manage build-id cache' + 'buildid-list:list the buildids in a perf.data file' + 'diff:read two perf.data files and display the differential profile' + 'evlist:list the event names in a perf.data file' + 'inject:filter to augment the events stream with additional information' + 'kmem:tool to trace/measure kernel memory(slab) properties' + 'kvm:tool to trace/measure kvm guest os' + 'list:list all symbolic event types' + 'lock:analyze lock events' + 'probe:define new dynamic tracepoints' + 'record:run a command and record its profile into perf.data' + 'report:read perf.data (created by perf record) and display the profile' + 'sched:tool to trace/measure scheduler properties (latencies)' + 'script:read perf.data (created by perf record) and display trace output' + 'stat:run a command and gather performance counter statistics' + 'test:runs sanity tests' + 'timechart:tool to visualize total system behavior during a workload' + 'top:system profiling tool' + 'help:show command usage information' + ) + _describe -t commands 'command' commands "$@" +} + +_perf "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_periscope b/.zprezto/modules/completion/external/src/_periscope new file mode 100644 index 0000000..1d950b4 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_periscope @@ -0,0 +1,61 @@ +#compdef periscope +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Periscope (http://code.google.com/p/periscope). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- : *)'{-h,--help}'[show help message and exit]' \ + '(- : *)--version[show version number and exit]' \ + '*'{-l,--language}'[wanted language]: :_language_codes ISO-639-1' \ + '(-f --force)'{-f,--force}'[replace existing subtitle file]' \ + '(-q --query)'{-q,--query}'[query to send to the subtitles website]:queries' \ + '--list-plugins[list all plugins supported by periscope]' \ + '--list-active-plugins[list all plugins used to search subtitles]' \ + '--cache-folder[cache/config directory to use]: :_files -/' \ + '--quiet[run in quiet mode (only show warn and error messages)]' \ + '--debug[set the logging level to debug]' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_pgsql_utils b/.zprezto/modules/completion/external/src/_pgsql_utils new file mode 100644 index 0000000..64cd527 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_pgsql_utils @@ -0,0 +1,444 @@ +#compdef psql pg_dump pg_dumpall pg_restore createdb dropdb vacuumdb createuser dropuser initdb +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for PostgreSQL utils (http://postgresql.org). +# +# Source: http://www.zsh.org/mla/users/2004/msg01006.html +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Dominic Mitchell +# +# * Johann 'Myrkraverk' Oskarsson +# +# * Daniel Serodio pg_dumpall completion +# +# * J Smith pg_restore completion +# +# ------------------------------------------------------------------------------ + + +_pgsql_get_identity () { + _pgsql_user=${(v)opt_args[(i)-U|--username]} + _pgsql_port=${(v)opt_args[(i)-p|--port]} + _pgsql_host=${(v)opt_args[(i)-h|--host]} + + _pgsql_params=( + ${_pgsql_user:+"--username=$_pgsql_user"} + ${_pgsql_port:+"--port=$_pgsql_port"} + ${_pgsql_host:+"--host=$_pgsql_host"} + ) +} + +# Postgres Allows specifying the path to the directory containing the +# socket as well as a hostname. +_pgsql_host_or_dir() { + _alternative \ + 'hosts:host:_hosts' \ + 'directories:directory:_directories' +} + +# This creates a port completion list based on socket files on the +# local computer. Be default, Postgres puts them in /tmp/ but Debian +# changed that to /var/run/postgresql/ in their packages. +_pgsql_ports() { + compadd "$@" - /tmp/.s.PGSQL.<->(N:e) /var/run/postgresql/.s.PGSQL.<->(N:e) +} + +_pgsql_users () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + local _pgsql_user_sql + _pgsql_get_identity + + # We use _pgsql_port and _pgsql_host directly here instead of + # _pgsql_params so as to not pick up a partially completed + # username. + _pgsql_params=( + ${_pgsql_port:+"--port=$_pgsql_port"} + ${_pgsql_host:+"--host=$_pgsql_host"} + ) + + _pgsql_user_sql='select r.rolname from pg_catalog.pg_roles r where r.rolcanlogin = true' + + compadd "$@" - $( psql $_pgsql_params[@] -Aqt -c $_pgsql_user_sql template1 2>/dev/null ) + +} + +_pgsql_tables () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + # Need to pull out the database name from the existing arguments. + # This is going to vary between commands. Thankfully, it's only + # used by pg_dump, which always has the dbname in arg1. If it's + # not present it defaults to ${PGDATABASE:-$LOGNAME}, which + # matches (I think) the PostgreSQL behaviour. + + local db + db=${line[1]:-${PGDATABASE:-$LOGNAME}} + + ## Instead of parsing the output of the psql \ commands, we look + ## up the tables ourselves. The following query has been tested + ## with Postgres 8.2 - 9.2. + + local _pgsql_table_sql + _pgsql_table_sql="select n.nspname || '.' || c.relname \ + from pg_catalog.pg_class c \ + left join pg_catalog.pg_namespace n on n.oid = c.relnamespace \ + where c.relkind in ('r', '') \ + and n.nspname <> 'pg_catalog' \ + and n.nspname <> 'information_schema' \ + and n.nspname !~ '^pg_toast' \ + and pg_catalog.pg_table_is_visible( c.oid ) \ + order by 1" + + compadd "$@" - \ + $( psql $_pgsql_params[@] -Aqt -c $_pgsql_table_sql $db 2>/dev/null ) +} + +_pgsql_schemas () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + local db + db=${line[1]:-${PGDATABASE:-$LOGNAME}} + + local _pgsql_schema_sql="select n.nspname \ + from pg_catalog.pg_namespace n \ + where n.nspname !~ '^pg_' \ + and n.nspname <> 'information_schema' \ + order by 1;" + + compadd "$@" - \ + $( psql $_pgsql_params[@] -Aqt -c $_pgsql_schema_sql $db 2>/dev/null ) +} + +_pgsql_databases () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + local _pgsql_db_sql + _pgsql_db_sql="select d.datname from pg_catalog.pg_database d \ + where d.datname <> 'template0'" + + compadd "$@" - $( psql $_pgsql_params[@] -Atq -c $_pgsql_db_sql template1 2>/dev/null ) +} + +_pgsql_encodings () { + local _pgsql_user + _pgsql_get_identity + + local _pgsql_db_sql + _pgsql_db_sql="select pg_encoding_to_char(i) from generate_series(0,100) i;" + + compadd "$@" - $( psql $_pgsql_params[@] -Atq -c $_pgsql_db_sql template1 ) +} + + +## +## The actual completion code for the commands +## + +_psql () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s "-*" \ + "$_pgsql_common_opts[@]" \ + {-V,--version}'[display client version]' \ + {-a,--echo-all}'[print commands read]' \ + {-A,--no-align}'[unaligned output mode]' \ + {-c+,--command=}':execute SQL command:' \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-e,--echo-queries}'[display queries submitted]' \ + {-E,--echo-hidden}'[display hidden queries]' \ + {-f+,--file=}':SQL file to read:_files' \ + {-F+,--field-separator=}':field separator char:' \ + {-H,--html}'[HTML output]' \ + {-l,--list}'[list databases]' \ + {-o+,--output=}':query output:_files' \ + {-P+,--pset=}':set psql variable:' \ + {-q,--quiet}'[non verbose mode]' \ + {-R+,--record-separator=}':record separator char:' \ + {-s,--single-step}'[prompt before each query]' \ + {-S,--single-line}'[newline sends query]' \ + {-t,--tuples-only}'[dont display header/footer]' \ + {-T+,--table-attr=}':HTML table options:' \ + -u'[prompt for username/password]' \ + {-v+,--set=,--variable=}':set SQL variable:' \ + {-x,--expanded}'[one column per line]' \ + {-X,--no-psqlrc}'[dont read ~/.psqlrc]' \ + ':PostgreSQL database:_pgsql_databases' \ + ':PostgreSQL user:_pgsql_users' +} + +_pg_dump () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--data-only}'[dump only data]' \ + {-b,--blobs}'[dump blobs as well]' \ + {-c,--clean}'[include clean cmds in dump]' \ + {-C,--create}'[include createdb cmds in dump]' \ + {-E+,--encoding=}':database encoding:_pgsql_encodings' \ + {-d,--inserts}'[use INSERT not COPY]' \ + {-D,--{attribute,column}-inserts}'[use INSERT (cols) not COPY]' \ + {-f+,--file=}':output file:_files' \ + {-F+,--format=}':output format:_values "format" "p[plain text]" "t[tar]" "c[custom]"' \ + {-i,--ignore-version}'[ignore version mismatch]' \ + {-n+,--schema=}':schema to dump:_pgsql_schemas' \ + {-N+,--exclude-schema=}':schema to NOT dump:_pgsql_schemas' \ + {-o,--oids}'[dump objects identifiers for every table]' \ + {-O,--no-owner}'[dont recreate as same owner]' \ + {-R,--no-reconnect}'[dont output connect]' \ + {-s,--schema-only}'[no data, only schema]' \ + {-S+,--superuser=}':superuser name:_pgsql_users' \ + {-t+,--table=}':table to dump:_pgsql_tables' \ + {-T+,--exclude-table=}':table to NOT dump:_pgsql_tables' \ + {-v,--verbose}'[verbose mode]' \ + {-V,--version}'[display client version]' \ + {-x,--no-{acl,privileges}}'[dont dump ACLs]' \ + -X+':option:_values "option" use-set-session-authorization disable-triggers' \ + {-Z+,--compress=}':compression level:_values "level" 9 8 7 6 5 4 3 2 1 0' \ + ':PostgreSQL database:_pgsql_databases' \ + --section=':dump named section:_values "section" pre-data data post-data' \ + --disable-dollar-quoting'[disable dollar quoting, use SQL standard quoting]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --no-security-labels'[do not dump security label assignments]' \ + --no-tablespaces'[do not dump tablespace assignments]' \ + --no-unlogged-table-data'[do not dump unlogged table data]' \ + --quote-all-identifiers'[quote all identifiers, even if not key words]' \ + --serializable-deferrable'[wait until the dump can run without anomalies]' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION commands instead of ALTER OWNER]' +} + +_pg_restore () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-f+,--file=}':output file:_files' \ + {-F+,--format=}':output format:_values "format" "p[plain text]" "t[tar]" "c[custom]"' \ + {-l,--list}'[list databases]' \ + {-a,--data-only}'[dump only data]' \ + {-c,--clean}'[include clean (drop) cmds before recreating]' \ + {-C,--create}'[include createdb cmds in dump]' \ + {-e,--exit-on-error}'[exit on error, default is to continue]' \ + {-I,--index=}':index name:' \ + {-j,--jobs=}':use this many parallel jobs to restore:' \ + {-L,--use-list=}':use table of contents from this file for selecting/ordering output:' \ + {-n,--schema=}':restore only objects in this schema:' \ + {-O,--no-owner}'[skip restoration of object ownership]' \ + {-P,--function=}':restore named function:' \ + {-s,--schema-only}'[restore only the schema, no data]' \ + {-S,--superuser=}':superuser user name to use for disabling triggers:' \ + {-t,--table=}':restore named table:' \ + {-T,--trigger=}':restore named trigger:' \ + {-x,--no-privileges}'[skip restoration of access privileges (grant/revoke)]' \ + {-1,--single-transaction}'[restore as a single transaction]' \ + {-v,--verbose}'[verbose mode]' \ + {-V,--version}'[display client version]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --if-exists'[use IF EXISTS when dropping objects]' \ + --no-data-for-failed-tables'[do not restore data of tables that could not be created]' \ + --no-security-labels'[do not restore security labels]' \ + --no-tablespaces'[do not restore tablespace assignments]' \ + --section=':dump named section:_values "section" pre-data data post-data' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership]' +} + +_pg_dumpall () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--data-only}'[dump only data]' \ + {-c,--clean}'[include clean (drop) cmds before recreating]' \ + {-g,--globals-only}'[dump only global objects, no databases]' \ + {-f+,--file=}':output file:_files' \ + {-o,--oids}'[dump objects identifiers for every table]' \ + {-O,--no-owner}'[dont recreate as same owner]' \ + {-r,--roles-only}'[no databases or tablespaces, only roles]' \ + {-s,--schema-only}'[no data, only schema]' \ + {-S+,--superuser=}':superuser name:_pgsql_users' \ + {-t,--tablespaces-only}'[no databases or roles, only tablespaces]' \ + {-x,--no-privileges}'[dont dump ACLs]' \ + --binary-upgrade'[for use by upgrade utilities only]' \ + --column-inserts'[use INSERT with column names not COPY]' \ + --disable-dollar-quoting'[disable dollar quoting, use SQL standard quoting]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --inserts'[use INSERT not COPY]' \ + --no-security-labels'[do not dump security label assignments]' \ + --no-tablespaces'[do not dump tablespace assignments]' \ + --no-unlogged-table-data'[do not dump unlogged table data]' \ + --quote-all-identifiers'[quote all identifiers, even if not key words]' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION cmds instead of ALTER OWNER]' +} + +_createdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-D+,--location=}':database location:_directories' \ + {-T+,--template=}':database template:_pgsql_databases' \ + {-E+,--encoding=}':database encoding:_pgsql_encodings' \ + ':PostgreSQL database:' \ + ':comment:' +} + +_dropdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-i,--interactive}'[confirm before drop]' \ + ':PostgreSQL database:_pgsql_databases' +} + +_vacuumdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--all}'[vacuum all databases]' \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-t+,--table=}':table to dump:_pgsql_tables' \ + {-f,--full}'[do full vacuuming]' \ + {-z,--analyze}'[update optimizer hints]' \ + {-e,--echo}'[show the commands being sent to the server]' \ + {-q,--quiet}'[do not write any messages]' \ + {-v,--verbose}'[write a lot of output]' \ + '--help[show this help, then exit]' \ + '--version[output version information, then exit]' \ + '1:PostgreSQL database:_pgsql_databases' +} + +_createuser () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-c,--connection-limit=}'[connection limit for role (default: no limit)]' \ + {-d,--createdb}'[role can create new databases]' \ + {-D,--no-createdb}'[role cannot create databases]' \ + {-E,--encrypted}'[encrypt stored password]' \ + {-i,--inherit}'[role inherits privileges of roles it is a member of (default)]' \ + {-I,--no-inherit}'[role does not inherit privileges]' \ + {-l,--login}'[role can login (default)]' \ + {-L,--no-login}'[role cannot login]' \ + {-N,--unencrypted}'[do not encrypt stored password]' \ + {-P,--pwprompt}'[assign a password to new role]' \ + {-r,--createrole}'[role can create new roles]' \ + {-R,--no-createrole}'[role cannot create roles]' \ + {-s,--superuser}'[role will be superuser]' \ + {-S,--no-superuser}'[role will not be superuser]' +} + +_dropuser () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-i,--interactive}'[confirm before drop]' \ + ':PostgreSQL user:_pgsql_users' +} + +_initdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + {--auth=,-A+}':default authentication method for local connections:_values "auth methods" $_pgsql_auth_methods[@]' \ + {-D+,--pgdata=}':location for this database cluster:_files' \ + {-E+,--encoding=}':set default encoding for new databases:' \ + --locale=':set default locale for new databases:' \ + --lc-collate=':set the default locale for collate:' \ + --lc-ctype=':set the default locale for ctype:' \ + --lc-messages=':set the default locale for messages:' \ + --lc-monetary=':set the default locale for monetary:' \ + --lc-numeric=':set the default locale for numeric:' \ + --lc-time=':set the default local for time:' \ + --no-locale'[equivalent to --locale=C]' \ + --pwfile=':read password for the new superuser from file:_files' \ + {-T+,--text-search-config=}'[default text search configuration]' \ + {-U+,--username=NAME}':database superuser name:' \ + {-W,--pwprompt}'[prompt for a password for the new superuser]' \ + {-X+,--xlogdir=}':location for the transaction log directory:_files' \ + {-d,--debug}'[generate lots of debugging output]' \ + -L+':where to find the input files:_files' \ + {-n,--noclean}'[do not clean up after errors]' \ + {-s,--show}'[show internal settings]' \ + ':location for this database cluster:_files' +} + +_pgsql_utils () { + local _pgsql_common_opts _pgsql_auth_methods + + _pgsql_common_opts=( + {-\?,--help}'[display help]' + {-h+,--host=}':database host:_pgsql_host_or_dir' + {-p+,--port=}':database port number:_pgsql_ports' + {-U+,--username=}':connect as user:_pgsql_users' + {-W,--password}'[prompt for password]' + ) + + _pgsql_auth_methods=( + trust + reject + md5 + password + gss + sspi + krb5 + ident + peer + ldap + radius + cert + pam + ) + + case "$service" in + psql) _psql "$@" ;; + pg_dump) _pg_dump "$@" ;; + pg_restore) _pg_restore "$@" ;; + createdb) _createdb "$@" ;; + dropdb) _dropdb "$@" ;; + vacuumdb) _vacuumdb "$@" ;; + createuser) _createuser "$@" ;; + dropuser) _dropuser "$@" ;; + initdb) _initdb "$@" ;; + esac +} + +_pgsql_utils "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_phing b/.zprezto/modules/completion/external/src/_phing new file mode 100644 index 0000000..afdaf3e --- /dev/null +++ b/.zprezto/modules/completion/external/src/_phing @@ -0,0 +1,94 @@ +#compdef phing +# ------------------------------------------------------------------------------ +# Copyright (c) Igor M. Timoshenko +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is furnished +# to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Phing (http://phing.info). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Igor Timoshenko +# +# ------------------------------------------------------------------------------ + +_phing() { + local context curcontext="$curcontext" state line ret=1 + integer NORMARG + typeset -A opt_args + + # Follow http://phing.info/docs/stable/webhelp/sec.commandlineargs.html for more information + _arguments \ + '(-h -help)'{-h,-help}'[display the help screen]' \ + '(-v -version)'{-v,-version}'[print version information and exit]' \ + '(-l -list)'{-l,-list}'[list all available targets in buildfile (excluding targets that have their hidden attribute set to true)]' \ + '(-q -quiet)'{-q,-quiet}'[quiet operation, no output at all]' \ + '-verbose[verbose, give some more output]' \ + '-debug[output debug information]' \ + '-logfile [use given file for log]:file:_files' \ + '-D[set the property to the specified value to be used in the buildfile]' \ + '-find []:file:_files' \ + '-buildfile [specify an alternate buildfile name. Default is build.xml]:file:_files' \ + '-logger [specify an alternate logger. Default is phing.listener.DefaultLogger. Other options include phing.listener.NoBannerLogger, phing.listener.AnsiColorLogger, phing.listener.XmlLogger, phing.listener.TargetLogger and phing.listener.HtmlColorLogger]' \ + '-propertyfile [load properties from the specified file]:file:_files' \ + '(-v --version)'{-v,--version}'[show version]' \ + '1: :->targets' \ + '*:: :->args' \ + && ret=0 + + case $state in + targets) + local buildfile; buildfile=build.xml + if [[ ! -f $buildfile ]] + then + ret=0 + else + local targets; targets=($(sed -nE "/ +# +# ------------------------------------------------------------------------------ + + +local -a options +options=( + '--version[Show the program version and exit]' + '--filter[Set the filter, e.g. installed]' + "--root[Set the install root, e.g. '/' or '/mnt/ltsp']" + '(-n --nowait)'{-n,--nowait}'[Exit without waiting for actions to complete]' + '(-y --noninteractive)'{-g,--noninteractive}'[Install the packages without asking for confirmation]' + '--background[Run the command using idle network bandwidth and also using less power]' + '(-p --plain)'{-p,--plain}'[Print to screen a machine readable output, rather than using animated widgets]' + '(-c --cache-age)'{-c,--cache-age}"[The maximum metadata cache age. Use -1 for 'never'.]" + '(-h --help)'{-h,--help}'[Show help options.]' + '(-v --verbose)'{-v,--verbose}'[Show debugging information for all files]' +) + +local -a actions +actions=( + 'accept-eula' + 'get-roles' + 'get-distro-upgrades' + 'get-categories' + 'get-actions' + 'get-groups' + 'get-filters' + 'get-transactions' + 'get-time' + 'search' + 'install' + 'install-local' + 'download' + 'remove' + 'update' + 'refresh' + 'resolve' + 'get-updates' + 'get-depends' + 'get-requires' + 'get-details' + 'get-files' + 'get-update-detail' + 'get-packages' + 'repo-list' + 'repo-enable' + 'repo-disable' + 'repo-set-data' + 'what-provides' + 'upgrade-system' +) + +local context state line expl cmd +local -A opt_args + +integer i=2 +while (( i < $#words )); do + case "$words[$i]" in + -*) + # skip option + (( i++ )) + continue + ;; + esac + + if [[ -z "$cmd" ]]; then + cmd="$words[$i]" + words[$i]=() + (( CURRENT-- )) + fi + (( i++ )) +done + +if [[ -z "$cmd" ]] +then + _arguments -s -w : $options \ + ":action:($actions)" + return +fi + +case "$cmd" in + search) + _arguments : $options \ + ':type:(name details group file)' \ + ':data: :' + ;; + refresh) + _arguments -s -w : $options \ + '--force' + ;; + *) + _arguments -s -w : $options + ;; +esac +return 1 + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_play b/.zprezto/modules/completion/external/src/_play new file mode 100644 index 0000000..3960d8a --- /dev/null +++ b/.zprezto/modules/completion/external/src/_play @@ -0,0 +1,215 @@ +#compdef play +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Play! framework 1.2.2 (http://www.playframework.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# * Mario Fernandez (https://github.com/sirech) +# +# ------------------------------------------------------------------------------ + + +_play() { + local context curcontext="$curcontext" state line + typeset -A opt_args + + local ret=1 + + _arguments -C \ + '1: :_play_cmds' \ + '*::arg:->args' \ + && ret=0 + + case $state in + (args) + curcontext="${curcontext%:*:*}:play-cmd-$words[1]:" + case $line[1] in + (build-module|list-modules|lm|check|id) + _message 'no more arguments' && ret=0 + ;; + (dependencies|deps) + _arguments \ + '1:: :_play_apps' \ + '(--debug)--debug[Debug mode (even more informations logged than in verbose mode)]' \ + '(--jpda)--jpda[Listen for JPDA connection. The process will suspended until a client is plugged to the JPDA port.]' \ + '(--sync)--sync[Keep lib/ and modules/ directory synced. Delete unknown dependencies.]' \ + '(--verbose)--verbose[Verbose Mode]' \ + && ret=0 + ;; + (clean|javadoc|jd|out|pid|secret|stop) + _arguments '1:: :_play_apps' && ret=0 + ;; + (help) + _arguments '1: :_play_cmds -F "(cp deps ec idea jd st lm nb nm help antify evolutions evolutions:apply evolutions:markApplied evolutions:resolve)"' && ret=0 + ;; + (status|st) + _arguments \ + '1:: :_play_apps' \ + '(--url)--url[If you want to monitor an application running on a remote server, specify the application URL using this option]:URL:_urls' \ + '(--secret)--secret[You can provide your own secret key using this option]:Secret key' \ + && ret=0 + ;; + (new) + _arguments \ + '1: :_play_apps' \ + '(--with)--with[Automatically enable this set of module for the newly created application]:Modules list:_play_modules_list' \ + && ret=0 + ;; + (install) + _arguments '1:Play! module:_play_modules_dash_versions' && ret=0 + ;; + (new-module) + _arguments '1:Module directory:_files -/' && ret=0 + ;; + (test|precompile|run|start|war|auto-test|classpath|cp|eclipsify|ec|idealize|idea|modules|netbeansify|nb) + local cmd_args; cmd_args=( + '1:: :_play_apps' + '(--deps)--deps[Resolve and install dependencies before running the command]' + ) + case $line[1] in + (precompile|run|start|restart|war) + local app_dir="$line[2]" + [[ -d "$app_dir" ]] || app_dir=. + [[ -f "$app_dir/conf/application.conf" ]] && cmd_args+=('--'${(u)${(M)$(<$app_dir/conf/application.conf):#%*}%%.*}'[Use this ID to run the application (override the default framework ID)]') + ;| + (test|run) + cmd_args+=('(-f)-f[Disable the JPDA port checking and force the jpda.port value]') + ;| + (war) + cmd_args+=( + '(-o --output)'{-o,--output}'[The path where the WAR directory will be created. The contents of this directory will first be deleted]:output directory:_files -/' + '(--zip)--zip[By default, the script creates an exploded WAR. If you want a zipped archive, specify the --zip option]' + '(--exclude)--exclude[Excludes a list of colon separated directories]:excluded directories list:_play_colon_dirs_list' + ) + ;| + (test|run|start|restart|war) + cmd_args+=('*:Java option') + ;; + esac + _arguments "$cmd_args[@]" && ret=0 + ;; + *) + _call_function ret _play_cmd_$words[1] && ret=0 + (( ret )) && _message 'no more arguments' + ;; + esac + ;; + esac +} + +# FIXME Completes only core commands, some modules add commands too (eg Maven). Where do we get them ? +# FIXME Parse 'play help' and 'play help ' (for aliases) instead of hard-coding. +(( $+functions[_play_cmds] )) || +_play_cmds() { + local commands; commands=( + 'antify:Create a build.xml file for this project' + 'auto-test:Automatically run all application tests' + 'build-module:Build and package a module' + 'check:Check for a release newer than the current one' + {classpath,cp}':Display the computed classpath' + 'clean:Delete temporary files (including the bytecode cache)' + {dependencies,deps}':Resolve and retrieve project dependencies' + {eclipsify,ec}':Create all Eclipse configuration files' + 'evolutions:Run the evolution check' + 'evolutions\:apply:Automatically apply pending evolutions' + 'evolutions\:mark:AppliedMark pending evolutions as manually applied' + 'evolutions\:resolve:Resolve partially applied evolution' + 'help:Display help on a specific command' + 'id:Define the framework ID' + {idealize,idea}':Create all IntelliJ Idea configuration files' + 'install:Install a module' + {javadoc,jd}':Generate your application Javadoc' + {list-modules,lm}':List modules available from the central modules repository' + 'modules:Display the computed modules list' + {netbeansify,nb}':Create all NetBeans configuration files' + 'new:Create a new application' + {new-module,nm}':Create a module' + 'out:Follow logs/system.out file' + 'pid:Show the PID of the running application' + 'precompile:Precompile all Java sources and templates to speed up application start-up' + 'restart:Restart the running application' + 'run:Run the application in the current shell' + 'secret:Generate a new secret key' + 'start:Start the application in the background' + {status,st}':Display the running application status' + 'stop:Stop the running application' + 'test:Run the application in test mode in the current shell' + 'war:Export the application as a standalone WAR archive' + ) + _describe -t commands 'Play! command' commands "$@" +} + +(( $+functions[_play_apps] )) || +_play_apps() { + _wanted application expl 'Play! application directory' _files -/ +} + +(( $+functions[_play_modules] )) || +_play_modules() { + local modules; modules=(${(ps:,:)${${${(S)${(f)$(_call_program modules $service list-modules)}//\]*\[/,}%%\]*}##*\[}}) + _describe -t modules 'Play! module' modules "$@" +} + +(( $+functions[_play_modules_dash_versions] )) || +_play_modules_dash_versions() { + local ret=1 + if compset -P '*-'; then + local versions; versions=(${(ps:,:)${${${${${(f)$(_call_program versions $service list-modules)}##*${IPREFIX%-}\]}#*Versions:}%%"~"*}//[[:space:]]/}}) + _describe -t module-versions "${IPREFIX%-} module versions" versions && ret=0 + else + _wanted modules expl 'Play! module' _play_modules -qS- && ret=0 + fi +} + +(( $+functions[_play_modules_list] )) || +_play_modules_list() { + compset -P '*,'; compset -S ',*' + _wanted module-list expl 'Play! modules list' _play_modules -qS, +} + +(( $+functions[_play_colon_dirs_list] )) || +_play_colon_dirs_list() { + compset -P '*:'; compset -S ':*' + _wanted directories-list expl 'Directories list' _files -/ -qS: +} + +_play "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_port b/.zprezto/modules/completion/external/src/_port new file mode 100644 index 0000000..8e3fc5b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_port @@ -0,0 +1,239 @@ +#compdef port +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for MacPorts (http://www.macports.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Matt Cable +# * Sorin Ionescu +# * Aljaž Srebrnič +# +# ------------------------------------------------------------------------------ + +_port() { + local -a upgrade_options revupgrade_options select_options \ + actions pseudo_common pseudo_advanced port_prefix + + port_prefix=$(which port | sed 's|/bin/port||') + + actions=( + 'activate\:Activate\ the\ given\ ports' + 'archive\:Archive\ the\ given\ ports,\ i.e.\ install\ the\ port\ image\ but\ do\ not\ activate' + 'archivefetch\:Fetch\ archive\ for\ the\ given\ ports' + 'build\:Build\ the\ given\ ports' + 'cat\:Writes\ the\ Portfiles\ of\ the\ given\ ports\ to\ stdout' + 'checksum\:Compares\ the\ checksums\ for\ the\ downloaded\ files\ of\ the\ given\ ports' + 'clean\:Removes\ files\ associated\ with\ the\ given\ ports' + 'configure\:Configure\ the\ given\ ports' + 'contents\:\Returns\ a\ list\ of\ files\ installed\ by\ given\ ports' + 'deactivate\:Deactivates\ the\ given\ ports' + 'dependents\:Returns\ a\ list\ of\ installed\ dependents\ for\ each\ of\ the\ given\ ports' + 'deps\:Display\ a\ dependency\ listing\ for\ the\ given\ ports' + 'destroot\:Destroot\ the\ given\ ports' + 'dir\:Returns\ the\ directories\ of\ the\ given\ ports' + 'distcheck\:Checks\ if\ the\ given\ ports\ can\ be\ fetched\ from\ all\ of\ its\ master_sites' + 'distfiles\:Returns\ a\ list\ of\ distfiles\ for\ the\ given\ port' + 'dmg\:Creates\ a\ dmg\ for\ each\ of\ the\ given\ ports' + 'dpkg\:Creates\ a\ dpkg\ for\ each\ of\ the\ given\ ports' + 'echo\:Returns\ the\ list\ of\ ports\ the\ argument\ expands\ to' + 'edit\:Edit\ given\ ports' + 'extract\:Extract\ the\ downloaded\ files\ of\ the\ given\ ports' + 'fetch\:Downloaded\ distfiles\ for\ the\ given\ ports' + 'file\:Returns\ the\ path\ to\ the\ Portfile\ for\ each\ of\ the\ given\ ports' + 'gohome\:Opens\ the\ homepages\ of\ the\ given\ ports\ in\ your\ browser' + 'help\:Displays\ short\ help\ texts\ for\ the\ given\ actions' + 'info\:Returns\ information\ about\ the\ given\ ports ' + 'install\:Installs\ the\ given\ ports' + 'installed\:List\ installed\ versions\ of\ the\ given\ port,\ or\ all\ installed\ ports\ if\ no\ port\ is\ given' + 'lint\:Checks\ if\ the\ Portfile\ is\ lint-free\ for\ each\ of\ the\ given\ ports' + 'list\:List\ the\ available\ version\ for\ each\ of\ the\ given\ ports' + 'livecheck\:Checks\ if\ a\ new\ version\ of\ the\ software\ is\ available' + 'load\:Interface\ to\ launchctl(1)\ for\ ports\ providing\ startup\ items' + 'location\:Returns\ the\ install\ location\ for\ each\ of\ the\ given\ ports' + 'log\:Shows\ main\ log\ for\ given\ ports' + 'logfile\:Returns\ the\ log\ file\ path\ for\ each\ of\ the\ given\ ports' + 'mdmg\:Creates\ a\ dmg\ containing\ an\ mpkg\ for\ each\ of\ the\ given\ ports\ and\ their\ dependencies' + 'mirror\:Fetches\ distfiles\ for\ the\ given\ ports' + 'mpkg\:Creates\ an\ mpkg\ for\ each\ of\ the\ given\ ports\ and\ their\ dependencies' + 'notes\:Displays\ informational\ notes\ for\ each\ of\ the\ given\ ports' + 'outdated\:Returns\ a\ list\ of\ outdated\ ports' + 'patch\:Applies\ patches\ to\ each\ of\ the\ given\ ports' + 'pkg\:Creates\ a\ pkg\ for\ each\ of\ the\ given\ ports' + 'platform\:Returns\ the\ current\ platform\ that\ port\ is\ running\ on' + 'provides\:Return\ which\ port\ provides\ each\ of\ the\ files\ given' + 'rdependents\:Recursive\ version\ of\ dependents' + 'rdeps\:Display\ a\ recursive\ dependency\ listing\ for\ the\ given\ ports' + 'rev-upgrade\:Scan\ for\ broken\ binaries\ in\ the\ installed\ ports\ and\ rebuild\ them\ as\ needed' + 'rpm\:Creates\ a\ rpm\ for\ each\ of\ the\ given\ ports' + 'search\:Search\ for\ a\ port' + 'select\:Select\ between\ multiple\ versions\ of\ a\ versioned\ port' + 'selfupdate\:Upgrade\ MacPorts\ itself\ and\ run\ the\ sync\ target' + 'setrequested\:Marks\ each\ of\ the\ given\ ports\ as\ requested' + 'space\:Show\ the\ disk\ space\ used\ by\ the\ given\ ports' + 'srpm\:Creates\ a\ srpm\ for\ each\ of\ the\ given\ ports' + 'sync\:Synchronize\ the\ set\ of\ Portfiles' + 'test\:Run\ tests\ on\ each\ of\ the\ given\ ports' + 'unarchive\:Unarchive\ the\ destroot\ of\ the\ given\ ports\ from\ installed\ images' + 'uninstall\:Uninstall\ the\ given\ ports' + 'unload\:Interface\ to\ launchctl(1)\ for\ ports\ providing\ startup\ items' + 'unsetrequested\:Marks\ each\ of\ the\ given\ ports\ as\ unrequested' + 'upgrade\:Upgrades\ the\ given\ ports\ to\ the\ latest\ version' + 'url\:Returns\ the\ URL\ for\ each\ of\ the\ given\ ports' + 'usage\:Returns\ basic\ usage\ of\ the\ port\ command' + 'variants\:Returns\ a\ list\ of\ variants\ provided\ by\ the\ given\ ports,\ with\ descriptions\ if\ present' + 'version\:Returns\ the\ version\ of\ MacPorts' + 'work\:Returns\ the\ path\ to\ the\ work\ directory\ for\ each\ of\ the\ given\ ports' + ) + + pseudo_common=(all current active inactive actinact installed uninstalled outdated + obsolete requested unrequested leaves) + + pseudo_advanced=('variants:' 'variant:' 'description:' 'depends:' + 'depends_lib:' 'depends_run:' 'depends_build:' 'depends_fetch:' 'depends_extract:' + 'portdir:' 'homepage:' 'epoch:' 'platforms:' 'platform:' 'name:' 'long_description:' + 'maintainers:' 'maintainer:' 'categories:' 'category:' 'version:' 'revision:' 'license:') + + select_options=( + '--list:List available versions for the group' + '--set:Select the given version for the group' + '--show:Show which version is currently selected for the group (default if none given)' + ) + + revupgrade_options=('--id-loadcmd-check:Run more checks against a special loadcommand in Mach-O binaries') + + upgrade_options=( + '--force\:Ignore\ circumstances\ that\ would\ normally\ cause\ ports\ to\ be\ skipped\ \(e.g.\ not\ outdated\).' \ + '--enforce-variants\:If\ the\ installed\ variants\ do\ not\ match\ those\ requested,\ upgrade\ even\ if\ the\ port\ is\ not\ outdated.' \ + '--no-replace\:Do\ not\ replace\ one\ port\ with\ another\ according\ to\ the\ replaced_by\ field.' \ + ) + + _arguments -s -C \ + '-v[Verbose mode (generate verbose messages)]' \ + '-d[Debug mode (generate debugging messages, implies -v)]' \ + '-q[Quiet mode (suppress messages)]' \ + "-n[Don't upgrade dependencies (affects upgrade and install)]" \ + "-R[Also upgrade dependents (only affects upgrade) - note that this does not upgrade dependents' dependencies]" \ + '-u[Uninstall non-active ports when upgrading and uninstalling]' \ + '-f[Force mode (ignore state file)]' \ + '-o[Honor state files even if the Portfile has been modified since (called -o because it used to mean "older")]' \ + '-s[Source-only mode (build and install from source, do not attempt to fetch binary archives)]' \ + '-b[Binary-only mode (build and install from binary archives, ignore source, abort if no archive available)]' \ + '-c[Autoclean mode (execute clean after install)]' \ + "-k[Keep mode (don't autoclean after install)]" \ + '-D[Specify portdir]' \ + '-F[Read and process the file of commands specified by the argument.]' \ + '-p[Despite any errors encountered, proceed to process multiple ports and commands.]' \ + '-y[Perform a dry run.]' \ + '-t[Enable trace mode debug facilities on platforms that support it (Mac OS X).]' \ + "1:Port actions:(($actions))" \ + '::Per-action arguments:_port_dispatch' \ + && return 0 +} + +_port_dispatch() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + zstyle ":completion:${curcontext}:" cache-policy ${cache_policy:-_port_caching_policy} + + case "$words[2]" in + provides) + _files + ;; + search) + _message 'pattern' + ;; + help) + _describe -t actions 'Port actions' actions + ;; + select) + _call_function - _port_select + ;; + contents|deactivate|setrequested|space|uninstall|unsetrequested) + # Cache the list of installed ports. + if ( [[ ${+_port_installed_packages} -eq 0 ]] || _cache_invalid PORT_INSTALLED_PACKAGES ) && + ! _retrieve_cache PORT_INSTALLED_PACKAGES; + then + _port_installed_packages=( $(_call_program path-all "port -q echo installed") ) + _store_cache PORT_INSTALLED_PACKAGES _port_installed_packages + fi + _alternative \ + "ports:Installed ports:($_port_installed_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + upgrade) + # No good reason to actually cache outdated ports list + local outdated_packages + outdated_packages=( $(_call_program path-outdated "port -q echo outdated") ) + _alternative -- \ + "upgrade-options:Upgrade options:(($upgrade_options))" \ + "ports:Outdated ports:($outdated_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + rev-upgrade) + if (( CURRENT == 3 )); then + _describe 'Rev-upgrade options' revupgrade_options + fi + ;; + outdated|sync) + # No need to complete anything more here. + return 0; + ;; + selfupdate) + _all_labels 'Selfupdate options' '--nosync' + ;; + *) + # Cache the list of all ports. + if ( [[ ${+_port_available_packages} -eq 0 ]] || _cache_invalid PORT_AVAILABLE_PACKAGES ) && + ! _retrieve_cache PORT_AVAILABLE_PACKAGES; + then + _port_available_packages=( $(_call_program path-all "port -q echo all") ) + _store_cache PORT_AVAILABLE_PACKAGES _port_available_packages + fi + _alternative \ + "ports:Available ports:($_port_available_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + esac +} + +_port_select() { + if (( CURRENT == 3 )); then + _describe 'Port select options' select_options + elif (( CURRENT == 4 )); then + local select_group + select_group=() + for f in $port_prefix/etc/select/*; do + select_group+=$(basename $f) + done + _describe "Port select groups" select_group + elif [[ $CURRENT -eq 5 && $words[3] == '--set' ]]; then + local select_variants + select_variants=("${(f)$(port select --list $words[4] | sed -e '1 d' -e 's/^[ \t]*//' -e 's/ (active)$//')}") + _describe "Port select group $words[4] variants" select_variants + fi +} + +_port_caching_policy() { + local reg_time comp_time check_file + case "${1##*/}" in + PORT_INSTALLED_PACKAGES) + check_file=$port_prefix/var/macports/registry/registry.db + ;; + PORT_AVAILABLE_PACKAGES) + check_file=${$(port dir MacPorts)%/*/*}/PortIndex + ;; + esac + reg_time=$(stat -c '%Z' $check_file) + comp_time=$(stat -c '%Z' $1) + return $(( reg_time < comp_time )) +} + +_port "$@" diff --git a/.zprezto/modules/completion/external/src/_primus b/.zprezto/modules/completion/external/src/_primus new file mode 100644 index 0000000..6530db2 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_primus @@ -0,0 +1,43 @@ +# compdef primus +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for primus (https://github.com/amonakov/primus). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Christophe-Marie Duquesne +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line +typeset -A opt_args + +args=( + '--version[output version information]' + '(-h --help)'{-h,--help}'[show help]' + '(-c --vgl-compress)'{-c,--vgl-compress}'[image transport method]:method:(proxy jpeg rgb xb yuv)' + '--failsafe[run a program even if the nvidia card is unavailable]' + '--no-failsafe[do not run a program if the nvidia card is unavailable]' + '--vgl-options[options to be passed to vglrun (example: +tr)]' + '(-q --quiet --silent)'{-q,--quiet,--silent}'[suppress all logging messages]' + '(-v --verbose)'{-v,--verbose}'[increase the verbosity level of log messages]' + '--debug[set the verbosity level to the maximum]' + '(-d --display)'{-d,--display}'[the X display number to use]' + '(-C --config)'{-C,--config}'[retrieve settings for Bumblebee from FILE]:file:_files' + '(-l --ldpath)'{-l,--ldpath}'[PATH the libraries like libGL.so are searched in]:file:_files -/' + '(-s --socket)'{-s,--socket}'[use FILE for communication with the daemon]:file:_files' +) + +_arguments $args +# -c, --vgl-compress METHOD image compression or transport to use with +# VirtualGL. Valid values for METHOD are proxy, +# jpeg, rgb, xv and yuv. Changing this setting +# may affect performance, CPU usage and image +# quality +# -d, --display DISPLAY the X display number to use + diff --git a/.zprezto/modules/completion/external/src/_ps b/.zprezto/modules/completion/external/src/_ps new file mode 100644 index 0000000..a0755d4 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ps @@ -0,0 +1,102 @@ +#compdef ps + +# This works with procps version 3.2.8 + +local context state state_descr line +typeset -A opt_args +local filterexcl="(-A -a -C -d -e -g -G --group --Group -p --pid --ppid -s --sid -t --tty -u -U --user --User)" + +_arguments -s -w \ + "$filterexcl-A[all processes]"\ + "$filterexcl-a[all w/ tty except session leaders]"\ + "--cumulative[include some dead child process data (as a sum with the parent)]"\ + "(-f -F --format -l -o -O)--context[display security context format (for SE Linux)]"\ + "-c[show different scheduler information]"\ + "$filterexcl-C[by command name]:processes:->pname"\ + "(--columns)--cols[set screen width]:width:( )"\ + "(--cols)--columns[set screen width]:width:( )"\ + "--deselect[negate selection]"\ + "$filterexcl-d[all except session leaders]"\ + "$filterexcl-e[all processes]"\ + "--forest[ASCII art process tree]"\ + "(--context -F --format -o -O)-f[full format listing]"\ + "(--context -f --format -o -O)-F[extra full format]"\ + "(--context -f -F -j -l -o -O)--format[user-defined format]:output format:->format"\ + "$filterexcl-g[by session OR by effective group name]:groups:_groups"\ + "$filterexcl-G[by real group ID (supports names)]:groups:->rgid"\ + "$filterexcl--group[by session OR by effective group name]:groups:_groups"\ + "$filterexcl--Group[by real group ID (supports names)]:groups:->rgid"\ + "-H[show process hierarchy]"\ + "(--no-heading)--heading[repeat header lines, one per page of output]"\ + "-j[jobs format]"\ + "-l[long format. the -y option is often useful with this]"\ + "-L[show threads, possibly with LWP and NLWP columns]"\ + "-m[show threads after processes]"\ + "-M[add a column of security data]"\ + "-N[negate selection]"\ + "(--heading --header)--no-heading[omit header lines]"\ + "(--context -f -F --format -j -l)-o[user-defined format]:output format:->format"\ + "(--context -f -F --format -j -l)-O[preloaded -o (user-defined with some)]:output format:->format"\ + "$filterexcl-p[by process ID]:process IDs:->pid"\ + "$filterexcl--pid[by process ID]:process IDs:->pid"\ + "$filterexcl--ppid[select by parent process ID]:process IDs:->ppid"\ + "--rows[set screen height.]:height:( )"\ + "$filterexcl-s[by session IDs]:sessions:->sid"\ + "$filterexcl--sid[by session IDs]:sessions:->sid"\ + "--sort[specify sorting order]:sort specs:->sortspec"\ + "$filterexcl-t[by tty]:ttys:->tty"\ + "-T[show threads, possibly with SPID column]"\ + "$filterexcl--tty[by tty]:ttys:->tty"\ + "$filterexcl-u[by effective user ID (supports names)]:users:_users"\ + "$filterexcl-U[by real user ID (supports names)]:users:_users"\ + "$filterexcl--user[by effective user ID (supports names)]:users:_users"\ + "$filterexcl--User[by real user ID (supports names)]:users:_users"\ + "(--version)-V[print the procps version]"\ + "(-V)--version[print the procps version]"\ + "-w[wide output]"\ + "-y[use with -l, do not show flags, show rss in place of addr]"\ + "1:BSD-style options (complete - to see unix & gnu-style options):((T\:'all processes on this terminal' a\:'all w/ tty, including other users' r\:'only running processes' x\:'processes w/o controlling ttys' t\:'list by tty' j\:'BSD jobs control format' l\:'BSD long format' s\:'signal format' v\:'virtual memory format' u\:'user-oriented format' X\:'register format' L\:'list format codes' S\:'sum info of children into parents' c\:'true command name' n\:'numeric WCHAN & UID' H\:'show threads as if they were processes' U\:'by effective user ID' p\:'by process ID'))"\ + - debug "--info[print debugging info]" + +case "$state" in + pid) + _values -s , 'process id' "${(uonzf)$(ps -A o pid=)}" + ;; + rgid) + _values -s , 'process group id' "${(uonzf)$(ps -A o rgid=)}" + ;; + pname) + local ispat="pattern matching " + if (( ${+opt_args[-x]} )) + then + ispat="" + fi + if (( ${+opt_args[-f]} )) + then + _wanted pname expl $ispat'process command line' compadd ${(u)${(f)"$(ps -A o cmd=)"}} + else + _wanted pname expl $ispat'process name' compadd ${(u)${(f)"$(ps -A co cmd=)"}} + fi + ;; + sid) + _values -s , 'session id' "${(uonzf)$(ps -A o sid=)}" + ;; + tty) + local -a ttys + ttys=( /dev/tty*(N) /dev/pts/*(N) ) + _values -s , 'terminal device' ${ttys#/dev/} + ;; + ppid) + _values -s , 'parent process id' "${(uonzf)$(ps -A o ppid=)}" + ;; + sortspec) + _values -s , 'format specifier (prefix with - for decreasing order)' "${(uozf)$(ps L|cut -f 1 -d" ")}" + ;; + format) + _values -s , 'format specifier' "${(uozf)$(ps L|cut -f 1 -d" ")}" + ;; +esac + +# Local Variables: +# mode:shell-script +# End: diff --git a/.zprezto/modules/completion/external/src/_pygmentize b/.zprezto/modules/completion/external/src/_pygmentize new file mode 100644 index 0000000..bc62304 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_pygmentize @@ -0,0 +1,147 @@ +#compdef pygmentize +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pygmentize. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideo Hattori +# +# ------------------------------------------------------------------------------ + +_pygmentize() { + local context state line + + _arguments -s -S \ + '-h[prints help]:' \ + '-V[prints the package version]:' \ + '-L[lists lexers, formatters, styles or filters]:args:(lexers formatters styles filters):' \ + '-f[formatter]:FORMATTER:_get_formatters' \ + '-o[output file]:FILENAME:_gnu_generic' \ + '(-h -V -L -f -o -S -F -H -g -l)-N[guesses and prints out a lexer name based solely on given filename]:FILENAME:_files:' \ + '(-h -V -L -o -F -H -g -l -N)-S[style]:STYLE:_get_styles' \ + '-F[filter]:STYLE:_get_filters' \ + '-H[prints detailed help for the object of type ]:' \ + '(-g)-l[lexer]::LEXER:_get_lexers:' \ + '(-l)-g[attempt to guess the lexer from the file contents]' \ + '*:args:_gnu_generic' +} + + +_get_filters() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_filters} -eq 0 ]] || _cache_invalid pygmentize_filters ) \ + && ! _retrieve_cache pygmentize_filters; then + _pygmentize_filters=(${${(f)"$(pygmentize -L filters | grep '* ' | cut -c3- | sed -e 's/:$//')"}}) + _store_cache pygmentize_filters _pygmentize_filters + fi + + local expl + _wanted pygmentize_filters expl 'pygmentize filters' compadd -a _pygmentize_filters +} + + +(( $+functions[_pygmentize_get_formatters] )) || +_get_formatters() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_formatter} -eq 0 ]] || _cache_invalid pygmentize_formatter ) \ + && ! _retrieve_cache pygmentize_formatter; then + _pygmentize_formatter=(${${(f)"$(pygmentize -L formatters | grep '* ' | cut -c3- | sed -e 's/, /\n/g' -e 's/:$//')"}}) + _store_cache pygmentize_formatter _pygmentize_formatter + fi + + local expl + _wanted pygmentize_formatter expl 'pygmentize formatters' compadd -a _pygmentize_formatter +} + + +_get_lexers() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_lexer} -eq 0 ]] || _cache_invalid pygmentize_lexer ) \ + && ! _retrieve_cache pygmentize_lexer; then + _pygmentize_lexer=(${${(f)"$(pygmentize -L lexers | grep '* ' | cut -c3- | sed -e 's/, /\n/g' -e 's/:$//')"}}) + _store_cache pygmentize_lexer _pygmentize_lexer + fi + + local expl + _wanted pygmentize_lexer expl 'pygmentize lexers' compadd -a _pygmentize_lexer +} + + +_get_styles() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_style} -eq 0 ]] || _cache_invalid pygmentize_style ) \ + && ! _retrieve_cache pygmentize_style; then + _pygmentize_style=(${${(f)"$(pygmentize -L styles | grep '* ' | cut -c3- | sed -e 's/:$//')"}}) + _store_cache pygmentize_style _pygmentize_style + fi + + local expl + _wanted pygmentize_style expl 'pygmentize styles' compadd -a _pygmentize_style +} + + +_pygmentize_caching_policy() { + local -a oldp + oldp=( "$1"(Nmh+24) ) # 24 hour + (( $#oldp )) +} + +_pygmentize "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_rails b/.zprezto/modules/completion/external/src/_rails new file mode 100644 index 0000000..4b66108 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_rails @@ -0,0 +1,580 @@ +#compdef rails +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Ruby on Rails (http://rubyonrails.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +_rails() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_${words[1]}" || _nothing + else + __rails_commands + fi +} + +__rails_commands() { + local context state line curcontext="$curcontext" + + local -a rails_options + __rails_setup_rails_options + + _arguments -C \ + $rails_options \ + ': :->command' + + case "$state" in + command) + local -a commands + local application_directory + __rails_setup_application_directory + + if [ -n "$application_directory" ]; then + commands=( + {generate,g}'[Generate new code]' + {console,c}'[Start the Rails console]' + {server,s}'[Start the Rails server]' + {dbconsole,db}'[Start a console for the database specified in config/database.yml]' + application'[Generate the Rails application code]' + {destroy,d}'[Undo code generated with "generate"]' + benchmarker'[See how fast a piece of code runs]' + profiler'[Get profile information from a piece of code]' + plugin'[Install a plugin]' + {runner,r}'[Run a piece of code in the application environment]' + ) + else + commands=( + new'[Create a new Rails application]' + ) + fi + + _values 'command' $commands + ;; + esac +} + +__rails_setup_application_directory() { + application_directory="$(pwd)" + + while [ -n "$application_directory" ]; do + if [ -f "${application_directory}/script/rails" -o -f "${application_directory}/bin/rails" ]; then + return + fi + application_directory="${application_directory%/*}" + done + + application_directory= +} + +__rails_setup_rails_options() { + rails_options=( + {-h,--help}'[Show this help message and quit]' + {-v,--version}'[Show Rails version number and quit]' + ) +} + +__rails_setup_runtime_options() { + runtime_options=( + '(-f --force)'{-f,--force}'[Overwrite files that already exist]' + '(-p --pretend)'{-p,--pretend}'[Run but do not make any changes]' + '(-q --quiet)'{-q,--quiet}'[Suppress status output]' + '(-s --skip)'{-s,--skip}'[Skip files that already exist]' + ) +} + +__rails_setup_generators_options() { + local -a runtime_options + __rails_setup_runtime_options + + generators_options=( + $runtime_options + --skip-namespace'[Skip namespace (affects only isolated applications)]' + --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" + ) +} + +__rails_setup_model_generators_options() { + local -a generators_options + __rails_setup_generators_options + + model_generators_options=( + $generators_options + '(-o --orm)'{-o,--orm=}'[Orm to be invoked]:orm' + ) +} + +__rails_setup_resource_generators_options() { + local -a model_generators_options + __rails_setup_model_generators_options + + resource_generators_options=( + $model_generators_options + --force-plural'[Forces the use of a plural ModelName]' + --resource-route'[Indicates when to generate resource route]: :__rails_boolean' + ) +} + +__rails_boolean() { + _values 'boolean' 'true' 'false' +} + +__rails_migration_fields() { + if compset -P '*:*:'; then + _values 'index' 'index' 'uniq' + else + if compset -P '*:'; then + _values -s ':' 'type' 'string' 'text' 'integer' 'float' 'decimal' 'datetime' 'timestamp' 'time' 'date' 'binary' 'boolean' 'references' + else + _guard '[[:alnum:]_]#' 'field' + fi + fi +} + +_rails_generate() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_generate_${words[1]}" || _rails_generate_default + else + __rails_generate_commands + fi +} + +_rails_g() { + _rails_generate +} + +__rails_generate_commands() { + local context curcontext="$curcontext" update_policy + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + if [ -z "$update_policy" ]; then + zstyle ":completion:${curcontext}:" cache-policy _rails_generate_commands_caching_policy + fi + + local application_directory + __rails_setup_application_directory + local cache_name + cache_name="rails/${application_directory##*/}/all_generators" + if ! _retrieve_cache ${cache_name}; then + local -a all_generators + all_generators=($(_call_program rails_generators rails generate 2> /dev/null | awk '/^ [a-zA-Z_]+/{ print $1 }')) + _store_cache ${cache_name} all_generators + fi + + local -a rails_generators + rails_generators=(${all_generators:#*:*}) + _describe -t rails_generators 'rails generator' rails_generators + + local -a -U namespaces + local namespace + local -a generators + namespaces=(${(R)${(M)all_generators:#*:*}%:*}) + for namespace in $namespaces; do + generators=(${${(M)all_generators:#${namespace}:*}/:/\\:}) + _describe -t ${namespace}_generators "${namespace/_/ } generator" generators + done +} + +_rails_generate_commands_caching_policy() { + local application_directory + __rails_setup_application_directory + + if [ "${application_directory}/Gemfile" -nt "$1" ]; then + return 0 + fi + + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) +} + +_rails_generate_default() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '*:argument' +} + +_rails_generate_assets() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-j --javascripts)'{-j,--javascripts}'[Generate JavaScripts]: :__rails_boolean' \ + '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \ + '(-je --javascript-engine)'{-je,--javascript-engine=}'[Engine for JavaScripts]:javascript engine' \ + '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_controller() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + --helper'[Indicates when to generate helper]: :__rails_boolean' \ + --assets'[Indicates when to generate assets]: :__rails_boolean' \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "action"' +} + +_rails_generate_generator() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --namespace'[Namespace generator under lib/generators/name]: :__rails_boolean' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_helper() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_integration_test() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --integration-tool='[Integration tool to be invoke]:integration tool' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_jbuilder() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_mailer() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "method"' +} + +_rails_generate_migration() { + local -a modelgenerators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_model() { + _rails_generate_migration +} + +_rails_generate_observer() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' +} + +_rails_generate_performance_test() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --performance-tool='[Performance tool to be invoked]:performance tool' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_resource() { + local context state line curcontext="$curcontext" + + local -a resource_generators_options + __rails_setup_resource_generators_options + + _arguments -C \ + $resource_generators_options \ + '(-c --resource-controller)'{-c,--resource-controller=}'[Resource controller to be invoked]:name' \ + '(-a --actions)'{-a,--actions=}'[Actions for the resource controller]: :->actions' \ + ': :->name' \ + '*: :->fields' + + if (( words[(I)(--actions=*|-a)] > 0 && words[(I)(--actions=*|-a)] == words[(I)-*] )); then + state=actions + fi + + case "$state" in + actions) + _guard "[[:alnum:]_]#" "actions" + ;; + name) + _guard "^-*" "name" + ;; + fields) + __rails_migration_fields + ;; + esac +} + +_rails_generate_scaffold() { + local -a resource_generators_options + __rails_setup_resource_generators_options + + _arguments \ + $resource_generators_options \ + '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \ + '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \ + '(-c --scaffold-controller)'{-c,--scaffold-controller=}'[Scaffold controller to be invoked]:name' \ + --assets'[Indicates when to generate assets]:boolean:(true false)' \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_scaffold_controller() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + '(-e,--template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t,--test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + --helper'[Indicates when to generate helper]: :__rails_boolean' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_session_migration() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' +} + +_rails_generate_task() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "action"' +} + +_rails_console() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-s --sandbox)'{-s,--sandbox}'[Rollback database modifications on exit]' \ + --debugger'[Enable ruby-debugging for the console]' +} + +_rails_c() { + _rails_console +} + +_rails_server() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-p --port)'{-p,--port=}'[Runs Rails on the specified port]: :_guard "[[\:digit\:]]#" "port"' \ + '(-b --binding)'{-b,--binding=}'[Binds Rails to the specified ip]:ip:_hosts' \ + '(-c --config)'{-c,--config=}'[Use custom rackup configuration file]:file:_files -g "*.ru"' \ + '(-d --daemon)'{-d,--daemon}'[Make server run as a Daemon]' \ + '(-u --debugger)'{-u,--debugger}'[Enable ruby-debugging for the server]' \ + '(-e --environment)'{-e,--environment=}'[Specifies the environment to run this server under (test/development/production)]:name:(test development production)' \ + '(-P --pid)'{-P,--pid=}'[Specifies the PID file]:pid:_files -g "*.pid"' +} + +_rails_s() { + _rails_server +} + +_rails_dbconsole() { + _arguments \ + '(- *)'--help'[Show this help message]' \ + '(-p --include-password)'{-p,--include-password}'[Automatically provide the password from database.yml]' \ + --mode'[Automatically put the sqlite3 database in the specified mode (html, list, line, column)]:mode:(html list line column)' \ + --header +} + +_rails_new() { + local context state line curcontext="$curcontext" + + local _a rails_options runtime_options + __rails_setup_rails_options + __rails_setup_runtime_options + + _arguments -C \ + $rails_options \ + $runtime_options \ + '(-r,--ruby)'{-r,--ruby=}'[Path to the Ruby binary of your choice]:path' \ + '(-b,--builder)'{-b,--builder=}'[Path to a application builder (can be a filesystem path or URL)]: :->path_or_url' \ + '(-m,--template)'{-m,--template=}'[Path to an application template (can be a filesystem path or URL)]: :->path_or_url' \ + --skip-gemfile"[Don't create a Gemfile]" \ + --skip-bundle"[Don't run bundle install]" \ + '(-G,--skip-git)'{-G,--skip-git}'[Skip Git ignores and keeps]' \ + '(-O,--skip-active-record)'{-O,--skip-active-record}'[Skip Active Record files]' \ + '(-S,--skip-sprockets)'{-S,--skip-sprockets}'[Skip Sprockets files]' \ + '(-d,--database)'{-d,--database=}'[Preconfigure for selected database]:database:(mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc)' \ + '(-j,--javascript)'{-j,--javascript=}'[Preconfigure for selected JavaScript library]:javascript' \ + '(-J --skip-javascript)'{-J,--skip-javascript}'[Skip JavaScript files]' \ + --dev'[Setup the application with Gemfile pointing to your Rails checkout]' \ + --edge'[Setup the application with Gemfile pointing to Rails repository]' \ + '(-T --skip-test-unit)'{-T,--skip-test-unit}'[Skip Test::Unit files]' \ + --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" \ + ':app path:_directories' + + case "$state" in + path_or_url) + _alternative \ + 'files:path:_files -g "*.rb"' \ + 'url:url:_urls' + ;; + esac +} + +_rails_application() { + _rails_new +} + +_rails_db() { + _rails_dbconsole +} + +_rails_destroy() { + _rails_generate +} + +_rails_d() { + _rails_destroy +} + +_rails_benchmarker() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \ + '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \ + '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "wall_time" "memory" "objects" "gc_runs" "gc_time"' \ + '*: :_guard "^-*" "ruby code"' +} + +_rails_profiler() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \ + '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \ + '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "process_time" "memory" "objects"' \ + '(-f --formats)'{-f,--formats}'[Formats to output to]: :_values -s "," "formats" "flat" "graph" "html" "call_tree" "call_stack"' \ + '*: :_guard "^-*" "ruby code"' +} + +_rails_plugin() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_plugin_${words[1]}" || _nothing + else + __rails_plugin_commands + fi +} + +__rails_plugin_commands() { + _values 'plugin command' \ + install'[Install plugin(s) from known repositories or URLs]' \ + remove'[Uninstall plugins]' \ + new +} + +_rails_plugin_install() { + _arguments \ + '(-x --externals)'{-x,--externals}'[Use svn:externals to grab the plugin. Enables plugin updates and plugin versioning]' \ + '(-o --checkout)'{-o,--checkout}'[Use svn checkout to grab the plugin. Enables updating but does not add a svn:externals entry]' \ + '(-e --export)'{-e,--export}'[Use svn export to grab the plugin. Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry]' \ + '(-q --quiet)'{-q,--quiet}'[Suppresses the output from installation. Ignored if -v is passed (rails plugin -v install ...)]' \ + '(-r --revision)'{-r,--revision=}'[Checks out the given revision from subversion or git. Ignored if subversion/git is not used]:revision' \ + '(-f --force)'{-f,--force}"[Reinstalls a plugin if it's already installed]" \ + '*:plugin:_urls' +} + +_rails_plugin_remove() { + local -a plugins + + plugins=($(_call_program rails_plugins ls -1 vendor/plugins)) + + _describe -t plugins 'plugin' plugins +} + +_rails_plugin_new() { + _rails_new +} + +_rails_runner() { + local context state line curcontext="$curcontext" + + _arguments -C \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-e --environment)'{-e,--environment=}'[Specifies the environment for the runner to operate under (test/development/production)]:name:(test development production)' \ + ': :->code_or_path' + + case "$state" in + code_or_path) + _alternative \ + 'files:filename:_files -g "*.rb"' \ + 'codes:ruby code:_guard "^-*" "ruby code"' + ;; + esac +} + +_rails_r() { + _rails_runner +} + +_rails "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_ralio b/.zprezto/modules/completion/external/src/_ralio new file mode 100644 index 0000000..7c35552 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ralio @@ -0,0 +1,115 @@ +#compdef ralio + +# ZSH completion for ralio +# +# https://github.com/oesmith/ralio +# +# Author +# +# Peter Yates + +_ralio () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' \ + + case $state in + (command) + + local -a subcommands + subcommands=( + "backlog:Show the product backlog" + "sprint:Show the current team iteration" + "show:Show related information for an individual story, defect or task" + "open:Open a story, defect or task in a web browser" + "start:Set a task, defect or story state to in-progress and assign it to you" + "finish:Set a task, defect or story state to completed and assign it to you" + "abandon:Set a task, defect or story state to defined and clear the owner" + "block:Set a task, defect or story state to blocked" + "unblock:Set a task, defect or story state to unblocked" + "current:Show your current tasks and stories" + "point:Set the points for a story or defect" + "task:Allow you to create and delete story tasks." + "configure:Set your Rally configurations." + ) + _describe -t commands 'ralio commands' subcommands + + _arguments -C \ + {-V,--version}"[display version information]" \ + {-h,--help}"[output usage information]" + ;; + + (options) + case $line[1] in + + + (sprint) + _arguments \ + "-t[Show tasks]" \ + "-p[Project name]" \ + "-f[Filter results]" + ;; + + (start | finish) + _arguments \ + '--pair[Pair programming partner]' \ + "--resolution[Resolution status]" \ + "--rootcause[Root cause]" + ;; + + (task) + __ralio-task + ;; + + esac + ;; + esac +} + +__ralio-task () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + "create:Create a new task" + "delete:Delete a task" + ) + _describe -t commands 'ralio task' subcommands + ;; + + (options) + case $line[1] in + + (create|delete) + _arguments \ + -n"[Name of the new task]" \ + -t"[Name of the parent task]" + ;; + + esac + ;; + esac +} + +_ralio "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_redis-cli b/.zprezto/modules/completion/external/src/_redis-cli new file mode 100644 index 0000000..1e1aa36 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_redis-cli @@ -0,0 +1,163 @@ +#compdef redis-cli rec +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Redis (http://redis.io). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/redis-cli +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Alexandru Totolici (https://github.com/totolici) +# +# ------------------------------------------------------------------------------ + + +local -a _1st_arguments +_1st_arguments=( + 'append:append a value to a key' + 'auth:authenticate to the server' + 'bgrewriteeaof:asynchronously rewrite the append-only file' + 'bgsave:asynchornously save the dataset to disk' + 'blpop:remove and get the first element in a list, or block until one is available' + 'brpop:remove and get the last element in a list, or block until one is available' + 'brpoplpush:pop a value from a list, push it to another list and return it; or block until one is available' + # 'config get:get the value of a configuration parameter' + # 'config set:set a configuration parameter to the given value' + # 'config resetstat: reset the stats returned by INFO' + 'dbsize:return the number of keys in the selected database' + # 'debug object:get debugging information about a key' + # 'debug setgfault:make the server crash' + 'decr:decrement the integer value of a key by one' + 'decrby:decrement the integer value of a key by the given number' + 'del:delete a key' + 'discard:discard all commands issued after MULTI' + 'echo:echo the given string' + 'exec:execute all commands issued after a MULTI' + 'exists:determine if a key exists' + 'expire:set the time to live for a key, in seconds' + 'expireat:set the expiration for a key as a UNIX timestamp' + 'flushall:remove all keys from all databases' + 'flushdb:remove all keys from the current database' + 'get:get the value of a key' + 'getbit:returns the bit value at offset in the string value stored at key' + 'getrange:get a substring of the string stored at a key' + 'getset:set the string value of a key and return its old value' + 'hdel:delete a hash field' + 'hexists:determine if a hash field exists' + 'hget:get the value of a hash field' + 'hgetall:get all the fields and values in a hash' + 'hincrby:increment the integer value of a hash field by the given number' + 'hkeys:get all the fields in a hash' + 'hlen:get the number of fields in a hash' + 'hmget:get the values of all the given hash fields' + 'hmset:set multiple hash fields to multiple values' + 'hset:set the string value of a hash field' + 'hsetnx:set the value of a hash field, only if the field does not exist' + 'hvals:get all the values in a hash' + 'incr:increment the integer value of a key by one' + 'incrby:increment the integer value of a key by the given number' + 'info:get information and statistics about the server' + 'keys:find all keys matching the given pattern' + 'lastsave:get the UNIX timestamp of the last successful save to disk' + 'lindex:get an element from a list by its index' + 'linsert:insert an element before or after another element in a list' + 'llen:get the length of a list' + 'lpop:remove and get the first element in a list' + 'lpush:prepend a value to a list' + 'lpushx:prepend a value to a list, only if the list exists' + 'lrange:get a range of elements from a list' + 'lrem:remove elements from a list' + 'lset:set the value of an element in a list by its index' + 'ltrim:trim a list to the specified range' + 'mget:get the values of all the given keys' + 'monitor:listen for all requests received by the server in real time' + 'move:move a key to another database' + 'mset:set multiple keys to multiple values' + 'msetnx:set multiple keys to multiple values, only if none of the keys exist' + 'multi:mark the start of a transaction block' + 'object:inspect the internals of Redis objects' + 'persist:remove the expiration from a key' + 'ping:ping the server' + 'psubscribe:listen for messages published to channels matching the given patterns' + 'publish:post a message to a channel' + 'punsubscribe:stop listening for messages posted to channels matching the given patterns' + 'quit:close the connection' + 'randomkey:return a random key from the keyspace' + 'rename:rename a key' + 'renamenx:rename a key, only if the new key does not exist' + 'rpop:remove and get the last element in a list' + 'rpoplpush:remove the last element in a list, append it to another list and return it' + 'rpush:append a value to a list' + 'rpushx:append a value to a list, only if the list exists' + 'sadd:add a member to a set' + 'save:synchronously save the dataset to disk' + 'scard:get the number of members in a set' + 'sdiff:subtract multiple sets' + 'sdiffstore:subtract multiple sets and store the resulting set in a key' + 'select:change the selected database for the current connection' + 'set:set the string value of a key' + 'setbit:sets or clears the bit at offset in the string value stored at key' + 'setex:set the value and expiration of a key' + 'setnx:set the value of a key, only if the key does not exist' + 'setrange:overwrite part of a string at key starting at the specified offset' + 'shutdown:synchronously save the dataset to disk and then shut down the server' + 'sinter:intersect multiple sets' + 'sinterstore:intersect multiple sets and store the resulting set in a key' + 'sismember:determine if a given value is a member of a set' + 'slaveof:make the server a slave of another instance, or promote it as master' + 'smembers:get all the members in a set' + 'smove:move a member from one set to another' + 'sort:sort the elements in a list, set or sorted set' + 'spop:remove and return a random member from a set' + 'srandmember:get a random member from a set' + 'srem:remove a member from a set' + 'strlen:get the length of the value stored in a key' + 'subscribe:listen for messages published to the given channels' + 'sunion:add multiple sets' + 'sunionstore:add multiple sets and store the resulting set in a key' + 'ttl:get the time to live for a key' + 'type:determine the type stored at key' + 'unsubscribe:stop listening for messages posted to the given channels' + 'unwatch:forget about all watched keys' + 'watch:watch the given keys to determine execution of the MULTI/EXEC block' + 'zadd:add a member to a sorted set, or update its score if it already exists' + 'zcard:get the number of members in a sorted set' + 'zcount:count the members in a sorted set with scores within the given values' + 'zincrby:increment the score of a member in a sorted set' + 'zinterstore:intersect multiple sorted sets and store the resulting sorted set in a new key' + 'zrange:return a range of members in a sorted set, by index' + 'zrangebyscore:return a range of members in a sorted set, by score' + 'zrank:determine the index of a member in a sorted set' + 'zrem:remove a member from a sorted set' + 'zremrangebyrank:remove all members in a sorted set within the given indexes' + 'zremrangebyscore:remove all members in a sorted set within the given scores' + 'zrevrange:return a range of members in a sorted set, by index, with scores ordered from high to low' + 'zrevrangebyscore:return a range of members in a sorted set, by score, with scores ordered from high to low' + 'zrevrank:determine the index of a member in a sorted set, with scores ordered from high to low' + 'zscore:get the score associated with the given member in a sorted set' + 'zunionstore:add multiple sorted sets and store the resulting sorted set in a new key' +) + +local expl + +_arguments \ + '(-v --version)'{-v,--version}'[show version]' \ + '(-h --help)'{-h,--help}'[show help]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands "redis-cli subcommand" _1st_arguments + return +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_rfkill b/.zprezto/modules/completion/external/src/_rfkill new file mode 100644 index 0000000..1c88133 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_rfkill @@ -0,0 +1,102 @@ +#compdef rfkill +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Vincent Bernat +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rfkill (http://wireless.kernel.org/en/users/Documentation/rfkill) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Vincent Bernat +# +# ------------------------------------------------------------------------------ + +_rfkill_types() { + declare -a devicetypes + devicetypes=(all + "wifi:Wireless LAN" "wlan:Wireless LAN" + "bluetooth:Bluetooth" + "uwb:Ultrawide Band" + "ultrawideband:Ultrawide Band" + "wimax:Wimax" + "wwan:3G" + "gps:GPS" + "fm:FM Radio" + "nfc:NFC") + _describe -t device-types "device types" devicetypes +} + +_rfkill_devices() { + declare -a devices + devices=(${(M)${(f)"$(rfkill list)"}:#[0-9]*}) + _rfkill_types + _describe -t devices "devices" devices +} + +_rfkill_commands () { + declare -a subcommands + subcommands=(help event list block unblock) + _describe -t rfkill-commands "rfkill command" subcommands +} + +_rfkill_subcommand () { + case "$words[1]" in + (help|event) + ;; + (list) + _arguments ':types:_rfkill_types' + ;; + (block|unblock) + _arguments ':device:_rfkill_devices' + ;; + (*) + _message 'Unknown subcommand' + esac +} + +_rfkill () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + '--version[get version]:' \ + '(-): :->command' \ + '(-)*:: :->arguments' + + case $state in + (command) + _rfkill_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:rfkill-$words[1]: + _rfkill_subcommand + ;; + esac +} + +_rfkill "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_rspec b/.zprezto/modules/completion/external/src/_rspec new file mode 100644 index 0000000..394fe4b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_rspec @@ -0,0 +1,78 @@ +#compdef rspec +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for RSpec (http://rspec.info/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +_rspec() { + local context state line curcontext="$curcontext" + + _arguments -C \ + -I'[Specify PATH to add to $LOAD_PATH (may be used more than once)]:PATH:_files' \ + '*'{-r,--require}'[Require a file]:PATH:_files' \ + '*'{-O,--options}'[Specify the path to a custom options file]:PATH:_files' \ + --order'[Run examples by the specified order type]: :->order' \ + --seed'[Equivalent of --order rand:SEED]: :_guard "[[\:digit\:]]#" "SEED"' \ + --fail-fast'[Abort the run on first failure]' \ + --no-fail-fast'[Do not abort the run on first failure]' \ + --failure-exit-code'[Override the exit code used when there are failing specs]: :_guard "[[\:digit\:]]#" "CODE"' \ + --dry-run'[Print the formatter output of your suite without running any examples or hooks]' \ + '(-X --drb)'{-X,--drb}'[Run examples via DRb]' \ + --drb-port'[Port to connect to the DRb server]: :_guard "[[\:digit\:]]#" "PORT"' \ + '(-f --format)'{-f,--format}'[Choose a formatter]:FORMATTER:(progress documentation html json)' \ + '(-o --out)'{-o,--out}'[Write output to a file instead of $stdout]:FILE:_files' \ + --deprecation-out'[Write deprecation warnings to a file instead of $stderr]:FILE:_files' \ + '(-b --backtrace)'{-b,--backtrace}'[Enable full backtrace]' \ + '(-c --color)'{-c,--color}'[Enable color in the output]' \ + '(-p --profile)'{-p,--profile}'[Enable profiling of examples and list the slowest examples (default: 10)]: :_guard "[[\:digit\:]]#" "COUNT"' \ + '(-w --warnings)'{-w,--warnings}'[Enable ruby warnings]' \ + '(-P --pattern)'{-P,--pattern}'[Load files matching pattern (default: "spec/**/*_spec.rb")]:PATTERN:' \ + --exclude-pattern'[Load files except those matching pattern]:PATTERN:' \ + '(-e --example)'{-e,--example}'[Run examples whose full nested names include STRING (may be used more than once)]:STRING:' \ + '(-t --tag)'{-t,--tag}'[Run examples with the specified tag, or exclude examples by adding ~ before the tag]: :->tag' \ + --default-path'[Set the default path where RSpec looks for examples (can be a path to a file or a directory)]:PATH:_files' \ + '(- *)'--init'[Initialize your project with RSpec]' \ + '(- *)'{-h,--help}"[You're looking at it]" \ + '(- *)'{-v,--version}'[Display the version]' \ + '*:files or directories:_files' + + case "$state" in + order) + if compset -P '*:'; then + _guard '[[:digit:]]#' 'SEED' + else + _values 'TYPE[:SEED]' \ + defined'[examples and groups are run in the order they are defined]' \ + rand'[randomize the order of groups and examples]' \ + random'[alias for rand]' + fi + ;; + tag) + if compset -P '*:'; then + _message 'VALUE' + else + _message 'TAG[:VALUE]' + fi + ;; + esac +} + +_rspec "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_rubocop b/.zprezto/modules/completion/external/src/_rubocop new file mode 100644 index 0000000..8be7be5 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_rubocop @@ -0,0 +1,83 @@ +#compdef rubocop +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rubocop (https://github.com/bbatsov/rubocop) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_rubocop_format_params() { + _values \ + 'FORMATTER' \ + 'progress' \ + 'simple' \ + 'clang' \ + 'disabled' \ + 'fuubar' \ + 'emacs' \ + 'json' \ + 'files' \ + 'offenses' +} + +_arguments -C \ + '(--only)--only[Run only the given cop(s)]' \ + '(-c --config)'{-c,--config}'[Specify configuration file]' \ + '(--auto-gen-config)--auto-gen-config[Generate a configuration file acting as a TODO list]' \ + '(--force-exclusion)--force-exclusion[Force excluding files specified in the configuration `Exclude` even if they are explicitly passed as arguments]' \ + '(-f --format)'{-f,--format}'[Choose an output formatter.]:FORMATTER:_rubocop_format_params' \ + '(-o --out)'{-o,--out}'[Write output to a file instead of STDOUT]' \ + '(-r --require)'{-r,--require}'[Require Ruby file.]' \ + '(--fail-level)--fail-level[Minimum severity for exit with error code.]' \ + '(--show-cops)--show-cops[Shows the given cops, or all cops by default, and their configurations for the current directory.]' \ + '(-F --fail-fast)'{-f,--fail-fast}'[Inspect files in order of modification time ant stop after the first file containing offenses]' \ + '(-d --debug)'{-d,--debug}'[Display debug info]' \ + '(-D --display-cop-names)'{-D,--display-cop-names}'[Display cop names in offense messages.]' \ + '(-R --rails)'{-R,--rails}'[Run extra Rails cops.]' \ + '(-l --lint)'{-l,--lint}'[Run only lint cops.]' \ + '(-a --auto-correct)'{-a,--auto-correct}'[Auto-correct offenses.]' \ + '(-n --no-color)'{-n,--no-color}'[Disable color output.]' \ + '(-v --version)'{-v,--version}'[Disable version.]' \ + '(-V --verbose-version)'{-V,--verbose-version}'[Disable verbose version.]' \ + '(-h --help)'{-h,--help}'[Show help.]' \ + '*: :_files' && ret=0 + +return ret diff --git a/.zprezto/modules/completion/external/src/_rvm b/.zprezto/modules/completion/external/src/_rvm new file mode 100644 index 0000000..2a600e7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_rvm @@ -0,0 +1,127 @@ +#compdef rvm +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rvm (https://rvm.beginrescueend.com/). +# +# Source: https://github.com/wayneeseguin/rvm/blob/master/scripts/zsh/Completion/_rvm +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '(-l --level)'{-l,--level}'+[patch level to use with rvm use / install]:number' \ + '--bin[path for binaries to be placed (~/.rvm/bin/)]:path:_files' \ + '--source[src directory to use (~/.rvm/src/)]:path:_files' \ + '--archives[directory for downloaded files (~/.rvm/archives/)]:path:_files' \ + '-S[Specify a script file to attempt to load and run (rubydo)]:file:_files' \ + '-e[Execute code from the command line]:code' \ + '-G[root gem path to use]:path:_files' \ + '--gems[Used to set the gems_flag, use with remove to remove gems]' \ + '--archive[Used to set the archive_flag, use with remove to remove archive]' \ + '--patch[With MRI Rubies you may specify one or more full paths to patches]:paths:->patches' \ + '(-C --configure)'{-C,--configure}'=[custom configure options]' \ + '--nice[process niceness (for slow computers, default 0)]:number' \ + '--ree-options[Options passed directly to ree ./installer on the command line]:options' \ + '--head[with update, updates rvm to git head version]' \ + '--rubygems[with update, updates rubygems for selected ruby]' \ + '--default[with ruby select, sets a default ruby for new shells]' \ + '--debug[Toggle debug mode on for very verbose output]' \ + '--trace[Toggle trace mode on to see EVERYTHING rvm is doing]' \ + '--force[Force install, even given ruby is already install]' \ + '--summary[Used with rubydo to print out a summary of the commands run]' \ + '--latest[with gemset --dump skips version strings for latest gem]' \ + '--gems[with uninstall/remove removes gems with the interpreter]' \ + '--docs[with install, attempt to generate ri after installation]' \ + '--reconfigure[Force ./configure on install even if Makefile already exists]' \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +case $state in + + patches) + compset -P '*,' + compset -S ',*' + _files -q -S , + ;; + + cmds) + + cmds=( ${(f)"$(_call_program commands rvm help 2> /dev/null | __rvm_sed -e '/^== Action/,/^== Implementation/!d; / :: /!d; s/^[ *]*\([^ ]*\) *:: *\(.*\)/\1:\2/')"} ) + cmds+=( $(rvm list strings) ) + _describe -t commands 'rvm command' cmds && ret=0 + ;; + + args) + + case $line[1] in + + (use|uninstall|remove|list) + + if (( CURRENT == 3 )); then + # See if we’ve made it to the ‘@’; eg, 1.9.2@ + if ! __rvm_grep '@' <<< "${line[CURRENT-1]}" >/dev/null ; then + _values -S , 'rubies' \ + $(rvm list strings | __rvm_sed -e 's/ruby-\([^) ]*\)-\([^) ]*\)/ruby-\1-\2 \1-\2 \1/g') \ + default system $(rvm alias list names) && ret=0 + else + # Construct a full version string for each of the gemsets. + # Eg, 1.9.2@min 1.9.2@rail3 … + _values -S , 'gemsets' \ + $(rvm ${line[CURRENT-1]%%@*} gemset list | __rvm_awk '/^[ -_[:alnum:]]+$/ {print "'${line[CURRENT-1]%%@*}'@"$1}') + fi + fi + ;; + + (install|fetch) + + _values -S , 'rubies' $(rvm list known_strings) && ret=0 + ;; + + gemset) + + if (( CURRENT == 3 )); then + _values 'gemset_commands' $(rvm gemset help | __rvm_sed -e '/create/!d; s/^.*[{]\(.*\)[}].*$/\1/; s/,/ /g') + else + #_values -S , 'gemsets' $(rvm gemset list | __rvm_grep -v gemset 2>/dev/null) + _values -S , 'gemsets' $(rvm gemset list | __rvm_grep -Ev '(gemset|info)' 2>/dev/null | __rvm_awk '/^[ -_[:alnum:]]+$/ {print '$1'}') + fi + ret=0 + ;; + + package) + + if (( CURRENT == 3 )); then + _values 'package_commands' $(rvm package | __rvm_sed -e '/Usage/!d; s/^.*[{]\(.*\)[}] [{].*$/\1/; s/,/ /g') + else + _values 'packages' $(rvm package | __rvm_sed -e '/Usage/!d; s/^.*[}] [{]\(.*\)[}].*$/\1/; s/,/ /g') + fi + ret=0 + ;; + + *) + (( ret )) && _message 'no more arguments' + ;; + + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_sbt b/.zprezto/modules/completion/external/src/_sbt new file mode 100644 index 0000000..f2de6e9 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_sbt @@ -0,0 +1,93 @@ +#compdef sbt +# ------------------------------------------------------------------------------ +# Copyright (c) 2013 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for sbt 0.12+ (http://scala-sbt.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tony Sloane +# * Mirko Caserta +# +# ------------------------------------------------------------------------------ + +local -a _sbt_commands +_sbt_commands=( + 'clean:delete files produced by the build' + 'compile:compile sources' + 'console:start the Scala REPL with project classes on the classpath' + 'console-quick:start the Scala REPL with project deps on the classpath' + 'console-project:start the Scala REPL w/sbt+build-def on the classpath' + 'dist:generate distribution artifacts' + 'dist\:clean:clean distribution artifacts' + 'doc:generate API documentation' + 'gen-idea:generate Intellij Idea project files' + 'package:produce the main artifact, such as a binary jar' + 'package-doc:produce a doc artifact, such as a jar containing API docs' + 'package-src:produce a source artifact, such as a jar containing sources' + 'publish:publish artifacts to a repository' + 'publish-local:publish artifacts to the local repository' + 'run:run a main class' + 'run-main:run the main class selected by the first argument' + 'test:execute all tests' + 'test-only:execute the tests provided as arguments' + 'test-quick:execute previously failed tests' + 'update:resolve and optionally retrieve dependencies' +) + +local expl + +_arguments \ + '(-help)-h[prints an help message]' \ + '(-h)-help[prints an help message]' \ + '(-verbose)-v[this runner is chattier]' \ + '(-v)-verbose[this runner is chattier]' \ + '(-debug)-d[set sbt log level to debug]' \ + '(-d)-debug[set sbt log level to debug]' \ + '-no-colors[disable ANSI color codes]' \ + '-sbt-create[start even if current dir contains no sbt project]' \ + '-sbt-dir[path to global settings/plugins dir (default: ~/.sbt)]' \ + '-sbt-boot[path to shared boot dir (default: ~/.sbt/boot)]' \ + '-ivy[path to local Ivy repository (default: ~/.ivy2)]' \ + '-mem[set memory options]' \ + '-no-share[use all local caches; no sharing]' \ + '-no-global[use global caches, but do not use global ~/.sbt dir]' \ + '-jvm-debug[turn on JVM debugging, open at the given port]' \ + '-batch[disable interactive mode]' \ + '-sbt-version[use the specified version of sbt]' \ + '-sbt-jar[use the specified jar as the sbt launcher]' \ + '(-sbt-snapshot)-sbt-rc[use an RC version of sbt]' \ + '(-sbt-rc)-sbt-snapshot[use a snapshot version of sbt]' \ + '-java-home[alternate JAVA_HOME]' \ + '*:: :->subcmds' && return 0 + +_describe -t commands "sbt subcommand" _sbt_commands +return 0 diff --git a/.zprezto/modules/completion/external/src/_scala b/.zprezto/modules/completion/external/src/_scala new file mode 100644 index 0000000..c4ccb37 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_scala @@ -0,0 +1,249 @@ +#compdef scala scalac +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for scala and scalac (http://www.scala-lang.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tony Sloane +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args +local context state line + +_scala_features () { + compadd "postfixOps" "reflectiveCalls" "implicitConversions" "higherKinds" \ + "existentials" "experimental.macros" "_" +} + +_scala_phases () { + compadd "parser" "namer" "packageobjects" "typer" "patmat" "superaccessors" \ + "extmethods" "pickler" "refchecks" "selectiveanf" "selectivecps" "uncurry" \ + "tailcalls" "specialize" "explicitouter" "erasure" "posterasure" "lazyvals" \ + "lambdalift" "constructors" "flatten" "mixin" "cleanup" "icode" "inliner" \ + "inlineExceptionHandlers" "closelim" "dce" "jvm" "terminal" +} + +local -a shared_opts +shared_opts=( + "-bootclasspath+[Override location of bootstrap class files]:bootstrap class directory:_files -/" + "-classpath+[Specify where to find user class files]:directory:_files -/" + "-D-[Pass -Dproperty=value directly to the runtime system]" + "-d+[Destination for generated classfiles]: directory or jar file:_files" + "-dependencyfile+[Set dependency tracking file]:dependency tracking file:_files" + "-deprecation[Emit warning and location for usages of deprecated APIs]" + "-encoding+[Specify character encoding used by source files]:encoding:" + "-explaintypes[Explain type errors in more detail]" + "-extdirs+[Override location of installed extensions]:extensions directory:_files -/" + "-g\:-[Set level of generated debugging info (default\: vars)]:debugging info level:(none source line vars notailcalls)" + "-help[Print a synopsis of standard options]" + "-J-[pass argument directly to Java runtime system]:JVM argument:" + "-javabootclasspath+[Override java boot classpath]:Java boot class path directory]:_files -/" + "-javaextdirs+[Override java extdirs classpath]:Java extdirs directory:_files -/" + "-language\:-[Enable one or more language features]:feature:_scala_features" + "-no-specialization[Ignore @specialize annotations]" + "-nobootcp[Do not use the boot classpath for the scala jars]" + "-nowarn[Generate no warnings]" + "-optimise[Generate faster bytecode by applying optimisations to the program]" + "-P\:-[Pass an option to a plugin (written plugin\:opt)]:plugin option:" + "-print[Print program with Scala-specific features removed]" + "-sourcepath+[Specify location(s) of source files]:source file directory:_files -/" + "-target\:-[Target platform for object files (default\: jvm-1.5)]:platform name:(jvm-1.5 msil)" + "-toolcp+[Add to the runner classpath]:directory:_files -/" + "-unchecked[Enable detailed unchecked (erasure) warnings]" + "-uniqid[Uniquely tag all identifiers in debugging output]" + "-usejavacp[Utilize the java.class.path in classpath resolution]" + "-verbose[Output messages about what the compiler is doing]" + "-version[Print product version and exit]" + "-X[Print a synopsis of advanced options]" + "-Y[Print a synopsis of private options]" +) + +local -a X_opts +X_opts=( + "-Xcheck-null[Warn upon selection of nullable reference]" + "-Xcheckinit[Wrap field accessors to throw an exception on uninitialized access]" + "-Xdisable-assertions[Generate no assertions or assumptions]" + "-Xelide-below+[Calls to @elidable methods are omitted if method priority is lower than integer argument]" + "-Xexperimental[Enable experimental extensions]" + "-Xfatal-warnings[Fail the compilation if there are any warnings]" + "-Xfull-lubs[Retains pre 2.10 behavior of less aggressive truncation of least upper bounds]" + "-Xfuture[Turn on future language features]" + "-Xgenerate-phase-graph+[Generate the phase graphs (outputs .dot files) to fileX.dot]:output file:_files" + "-Xlint[Enable recommended additional warnings]" + "-Xlog-free-terms[Print a message when reification creates a free term]" + "-Xlog-free-types[Print a message when reification resorts to generating a free type]" + "-Xlog-implicits[Show more detail on why some implicits are not applicable]" + "-Xlog-implicit-conversions[Print a message whenever an implicit conversion is inserted]" + "-Xlog-reflective-calls[Print a message when a reflective method call is generated]" + "-Xmacro-settings\:-[Custom settings for macros]:option" + "-Xmain-class+[Class for manifest's Main-Class entry (only useful with -d jar)]:path:" + "-Xmax-classfile-name+[Maximum filename length for generated classes]" + "-Xmigration[Warn about constructs whose behavior may have changed]" + "-Xno-forwarders[Do not generate static forwarders in mirror classes]" + "-Xno-patmat-analysis[Don't perform exhaustivity/unreachability analysis. Also, ignore @switch annotation]" + "-Xno-uescape[Disable handling of \u unicode escapes]" + "-Xnojline[Do not use JLine for editing]" + "-Xoldpatmat[Use the pre-2.10 pattern matcher. Otherwise, the 'virtualizing' pattern matcher is used in 2.10]" + "-Xprint\:-[Print out program after ]:phase name:_scala_phases" + "-Xprint-icode\:-[Log internal icode to *.icode files after phase (default\: icode)]:phase name:_scala_phases" + "-Xprint-pos[Print tree positions, as offsets]" + "-Xprint-types[Print tree types (debugging option)]" + "-Xprompt[Display a prompt after each error (debugging option)]" + "-Xresident[Compiler stays resident: read source filenames from standard input]" + "-Xscript+[Treat the source file as a script and wrap it in a main method]:main object name" + "-Xshow-class+[Show internal representation of class]:class name" + "-Xshow-object+[Show internal representation of object]:object name" + "-Xshow-phases[Print a synopsis of compiler phases]" + "-Xsource-reader+[Specify a class name for a custom method of reading source files]:class name" + "-Xverify[Verify generic signatures in generated bytecode]" + + "-Xassem-extdirs+[List of directories containing assemblies (requires -target:msil) (default\: lib)]:assembly directory:_files -/" + "-Xassem-name+[Name of the output assembly (requires -target:msil)]:assembly name:_files" + "-Xassem-path+[List of assemblies referenced by the program (requires -target:msil)]:assembly path:_files" + "-Xsourcedir+[Mirror source folder structure in output directory (requires -target:msil)]:source directory:_files -/" + + "-Xplugin\:-[Load one or more plugins from file]:plugin file:_files" + "-Xpluginsdir+[Path to search compiler plugins]:plugin directory:_files -/" + "-Xplugin-list[Print a synopsis of loaded plugins]" + "-Xplugin-disable\:-[Disable the given plugin(s)]" + "-Xplugin-require\:-[Abort unless the given plugin(s) are available]" +) + +local -a Y_opts +Y_opts=( + "-Y[Print a synopsis of private options]" + "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]" + "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:build manager:(none refined simple)" + "-Yclosure-elim[Perform closure elimination]" + "-Ycompact-trees[Use compact tree printer when displaying trees]" + "-Ydead-code[Perform dead code elimination]" + "-Ydependent-method-types[Allow dependent method types]" + "-Ydump-classes+[Dump the generated bytecode to .class files (useful for reflective compilation that utilizes in-memory classloaders)]:output directory:_files -/" + "-Yeta-expand-keeps-star[Eta-expand varargs methods to T* rather than Seq[T]. This is a temporary option to ease transition.]" + "-Ygen-javap+[Generate a parallel output directory of .javap files]:output directory:_files -/" + "-Yinfer-argument-types[Infer types for arguments of overriden methods]" + "-Yinline[Perform inlining when possible]" + "-Yinline-handlers[Perform exception handler inlining when possible]" + "-Yinline-warnings[Emit inlining warnings (normally surpressed due to high volume)]" + "-Yinvalidate+[Invalidate classpath entry before run]:classpath entry" + "-Ylinearizer\:-[Linearizer to use (default\: rpo)]:linearizer:(normal dfs rpo dump)" + "-Ylog-classpath[Output information about what classpath is being applied]" + "-Yno-adapted-args[Do not adapt an argument list (either by inserting unit or creating a tuple) to match the receiver]" + "-Ymacro-debug-lite[Trace essential macro-related activities]" + "-Ymacro-debug-verbose[Trace all macro-related activities: compilation, generation of synthetics, classloading, expansion, exceptions]" + "-Yno-completion[Disable tab-completion in the REPL]" + "-Yno-generic-signatures[Suppress generation of generic signatures for Java]" + "-Yno-imports[Compile without any implicit imports]" + "-Yno-predef[Compile without importing Predef]" + "-Yno-self-type-checks[Suppress check for self-type conformance among inherited members]" + "-Yno-squeeze[Disable creation of compact code in matching]" + "-Ynotnull[Enable (experimental and incomplete) scala.NotNull]" + "-Yoverride-objects[Allow member objects to be overridden]" + "-Yoverride-vars[Allow vars to be overridden]" + "-Ypmat-naive[Desugar matches as naively as possible]" + "-Ypresentation-delay+[Wait number of ms after typing before starting typechecking]" + "-Ypresentation-log+[Log presentation compiler events into file]:log file:_files" + "-Ypresentation-replay+[Replay presentation compiler events from file]:log file:_files" + "-Ypresentation-strict[Do not report type errors in sources with syntax errors]" + "-Ypresentation-verbose[Print information about presentation compiler tasks]" + "-Yprofile-class+[Specify name of profiler class]:profiler class name" + "-Yprofile-memory[Heap snapshot after compiler run (requires jgpagent on JVM -agentpath)]" + "-Yrangepos[Use range positions for syntax trees]" + "-Yrecursion+[Set recursion depth used when locking symbols]" + "-Yreify-copypaste[Dump the reified trees in copypasteable representation]" + "-Yrepl-sync[Do not use asynchronous code for REPL startup]" + "-Yresolve-term-conflict\:-[Resolve term conflicts (default\: error)]:resolution strategy:(package object error)" + "-Yself-in-annots[Include a \"self\" identifier inside of annotations]" + "-Yshow\:-[Show after (requires -Xshow-class or -Xshow-object)]:phase name:_scala_phases" + "-Yshow-syms[Print the AST symbol hierarchy after each phase]" + "-Yshow-symkinds[Print abbreviated symbol kinds next to symbol names]" + "-Yshow-trees[Print detailed ASTs (requires -Xprint\:phase)]" + "-Yshow-trees-compact[Print detailed ASTs in compact form (requires -Xprint\:)]" + "-Yshow-trees-stringified[Print stringifications along with detailed ASTs (requires -Xprint\:)]" + "-Ystatistics[Print compiler statistics]" + "-Ystruct-dispatch\:-[Structural method dispatch policy (default\: poly-cache)]:policy name:(no-cache mono-cache poly-cache invoke-dynamic)" + + "-Ybrowse\:-[Browse the abstract syntax tree after ]:phase name:_scala_phases" + "-Ycheck\:-[Check the tree at the end of ]:phase name:_scala_phases" + "-Ylog\:-[Log operations during ]:phase name:_scala_phases" + "-Yprofile\:-[Profile CPU usage of given phases (requires jgpagent on JVM -agentpath)]:phase name:_scala_phases" + "-Yskip\:-[Skip ]:phase name:_scala_phases" + "-Ystop-after\:-[Stop after given phase ]:phase name:_scala_phases" + "-Ystop-before\:-[Stop before given phase ]:phase name:_scala_phases" + + "-Ywarn-adapted-args[Warn if an argument list is modified to match the receiver]" + "-Ywarn-all[Enable all -Y warnings]" + "-Ywarn-dead-code[Warn when dead code is identified]" + "-Ywarn-inaccessible[Warn about inaccessible types in method signatures]" + "-Ywarn-nullary-override[Warn when non-nullary overrides nullary, e.g. def foo() over def foo]" + "-Ywarn-nullary-unit[Warn when nullary methods return Unit]" + "-Ywarn-numeric-widen[Warn when numerics are widened]" + "-Ywarn-value-discard[Warn when non-Unit expression results are unused]" + + "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]" + "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:manager:(none refined simple)" + "-Ycompletion-debug[Trace all tab completion activity]" + "-Ydebug[Increase the quantity of debugging output]" + "-Ydoc-debug[Trace all scaladoc activity]" + "-Yide-debug[Generate, validate and output trees using the interactive compiler]" + "-Yinfer-debug[Trace type inference and implicit search]" + "-Yissue-debug[Print stack traces when a context issues an error]" + "-Ypatmat-debug[Trace pattern matching translation]" + "-Ypmat-debug[Trace all pattern matcher activity]" + "-Ypos-debug[Trace position validation]" + "-Ypresentation-debug[Enable debugging output for the presentation compiler]" + "-Yreify-debug[Trace reification]" + "-Yrepl-debug[Trace all REPL activity]" + "-Ytyper-debug[Trace all type assignments]" +) + +local -a scala_opts +scala_opts=( + "-e+[execute as if entered in the repl]:string" \ + "-howtorun+[what to run (default\: guess)]:execution mode:(script object jar guess)" \ + "-i+[preload before starting the repl]:file to preload:_files" \ + "-nc[no compilation daemon\: do not use the fsc offline compiler]" \ + "-save[save the compiled script in a jar for future use]" +) + +case $words[$CURRENT] in + -X*) _arguments $X_opts;; + -Y*) _arguments $Y_opts;; + *) case $service in + scala) _arguments $scala_opts $shared_opts "*::filename:_files";; + scalac) _arguments $shared_opts "*::filename:_files";; + esac +esac + +return 0 diff --git a/.zprezto/modules/completion/external/src/_sdd b/.zprezto/modules/completion/external/src/_sdd new file mode 100644 index 0000000..c722095 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_sdd @@ -0,0 +1,66 @@ +#compdef sdd +# ------------------------------------------------------------------------------ +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for sdd (http://freshmeat.net/projects/sdd/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + +_values -w 'option' \ + 'if[specify input file]:input file:_tilde_files' \ + 'of[specify output file]:output file:_tilde_files' \ + '(bs)ibs[input block size]:block size (bytes)' \ + '(bs)obs[output block size]:block size (bytes)' \ + '(ibs obs)bs[block size]:block size (bytes)' \ + 'cbs[conversion buffer size]:buffer size (bytes)' \ + 'skip[input/output initially skipped]:bytes' \ + 'seek[input/output initially skipped]:bytes' \ + 'count[number of input blocks to copy]:blocks' \ + '-notrunc[do not truncate existing output file]' \ + '-pg[print a dot on each write to indicate progress]' \ + '-noerror[do not stop on error]' \ + '-noerrwrite[do not write blocks not read correctly]' \ + "-noseek[don't seek]" \ + 'try[error retry count]:number' \ + '-debug[print debugging messages]' \ + '-fill[fill each record with zeros up to obs]' \ + '-swab' '-block' '-unblock' '-lcase' '-ucase' '-ascii' '-ebcdic' '-ibm' \ + '-help[show help]' \ + '-version[show version]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_setup.py b/.zprezto/modules/completion/external/src/_setup.py new file mode 100644 index 0000000..8b7402e --- /dev/null +++ b/.zprezto/modules/completion/external/src/_setup.py @@ -0,0 +1,695 @@ +#compdef setup.py +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for setup.py (http://docs.python.org/distutils/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideo Hattori (https://github.com/hhatto) +# +# ------------------------------------------------------------------------------ + +_setup.py() { + typeset -A opt_args + local context state line + + _arguments -s -S \ + "--verbose[run verbosely (default)]" \ + "-v[run verbosely (default)]" \ + "--quiet[run quietly (turns verbosity off)]" \ + "-q[run quietly (turns verbosity off)]" \ + "--dry-run[don't actually do anything]" \ + "-n[don't actually do anything]" \ + "--help[show detailed help message]" \ + "-h[show detailed help message]" \ + "--no-user-cfg[ignore pydistutils.cfg in your home directory]" \ + "--command-packages=[list of packages that provide distutils commands]" \ + "--help-commands[list all available commands]" \ + "--name[print package name]" \ + "--version[print package version]" \ + "-V[print package version]" \ + "--fullname[print -]" \ + "--author[print the author's name]" \ + "--author-email[print the author's email address]" \ + "--maintainer[print the maintainer's name]" \ + "--maintainer-email[print the maintainer's email address]" \ + "--contact[print the maintainer's name if known, else the author's]" \ + "--contact-email[print the maintainer's email address if known, else the author's]" \ + "--url[print the URL for this package]" \ + "--license[print the license of the package]" \ + "--licence[alias for --license]" \ + "--description[print the package description]" \ + "--long-description[print the long package description]" \ + "--platforms[print the list of platforms]" \ + "--classifiers[print the list of classifiers]" \ + "--keywords[print the list of keywords]" \ + "--provides[print the list of packages/modules provided]" \ + "--requires[print the list of packages/modules required]" \ + "--obsoletes[print the list of packages/modules made obsolete]" \ + "*::setup.py commands:_setuppy_command" +} + +(( $+functions[_setuppy_command] )) || +_setuppy_command() { + local cmd ret=1 + + (( $+setuppy_cmds )) || _setuppy_cmds=( + "build:build everything needed to install" \ + "build_py:\"build\" pure Python modules (copy to build directory)" \ + "build_ext:build C/C++ extensions (compile/link to build directory)" \ + "build_clib:build C/C++ libraries used by Python extensions" \ + "build_scripts:\"build\" scripts (copy and fixup #! line)" \ + "clean:clean up temporary files from 'build' command" \ + "install:install everything from build directory" \ + "install_lib:install all Python modules (extensions and pure Python)" \ + "install_headers:install C/C++ header files" \ + "install_scripts:install scripts (Python or otherwise)" \ + "install_data:install data files" \ + "sdist:create a source distribution (tarball, zip file, etc.)" \ + "register:register the distribution with the Python package index" \ + "bdist:create a built (binary) distribution" \ + "bdist_dumb:create a \"dumb\" built distribution" \ + "bdist_rpm:create an RPM distribution" \ + "bdist_wininst:create an executable installer for MS Windows" \ + "upload:upload binary package to PyPI" \ + "check:perform some checks on the package" \ + "alias:define a shortcut to invoke one or more commands" \ + "bdist_egg:create an \"egg\" distribution" \ + "develop:install package in 'development mode'" \ + "easy_install:Find/get/install Python packages" \ + "egg_info:create a distribution's .egg-info directory" \ + "rotate:delete older distributions, keeping N newest files" \ + "saveopts:save supplied options to setup.cfg or other config file" \ + "setopt:set an option in setup.cfg or another config file" \ + "test:run unit tests after in-place build" \ + "install_egg_info:Install an .egg-info directory for the package" \ + "upload_docs:Upload documentation to PyPI" \ + ) + + if (( CURRENT == 1 )); then + _describe -t commands 'setup.py subcommand' _setuppy_cmds || compadd "$@" - ${(s.:.)${(j.:.)_setuppy_syns}} + else + local curcontext="$curcontext" + + cmd="${${_setuppy_cmds[(r)$words[1]:*]%%:*}:-${(k)_setuppy_syns[(r)(*:|)$words[1](:*|)]}}" + if (( $#cmd )); then + curcontext="${curcontext%:*:*}:setuppy-${cmd}:" + _call_function ret _setuppy_$cmd || _message 'no more arguments' + else + _message "unknown setup.py command: $words[1]" + fi + return ret + fi +} + +(( $+functions[_setuppy_build] )) || +_setuppy_build() { + _arguments -s \ + "--build-base=[base directory for build library]" \ + "-b[base directory for build library]" \ + "--build-purelib=[build directory for platform-neutral distributions]" \ + "--build-platlib=[build directory for platform-specific distributions]" \ + "--build-lib=[build directory for all distribution (defaults to either build-purelib or build-platlib]" \ + "--build-scripts=[build directory for scripts]" \ + "--build-temp=[temporary build directory]" \ + "-t[temporary build directory]" \ + "--plat-name=[platform name to build for, if supported (default: linux-i686)]" \ + "-p[platform name to build for, if supported (default: linux-i686)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "--debug[compile extensions and libraries with debugging information]" \ + "-g[compile extensions and libraries with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--executable=[specify final destination interpreter path (build.py)]" \ + "-e[specify final destination interpreter path (build.py)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_py] )) || +_setuppy_build_py() { + _arguments -s \ + "--build-lib=[directory to \"build\" (copy) to]" \ + "-d[directory to \"build\" (copy) to]" \ + "--compile[compile .py to .pyc]" \ + "-c[compile .py to .pyc]" \ + "--no-compile[don't compile .py files \[default\]]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_ext] )) || +_setuppy_build_ext() { + _arguments -s \ + "--build-lib=[directory for compiled extension modules]" \ + "-b[directory for compiled extension modules]" \ + "--build-temp=[directory for temporary files (build by-products)]" \ + "-t[directory for temporary files (build by-products)]" \ + "--plat-name=[platform name to cross-compile for, if supported (default: linux-i686)]" \ + "-p[platform name to cross-compile for, if supported (default: linux-i686)]" \ + "--inplace[ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules]" \ + "-i[ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules]" \ + "--include-dirs=[list of directories to search for header files (separated by ':')]" \ + "-I[list of directories to search for header files (separated by ':')]" \ + "--define=[C preprocessor macros to define]" \ + "-D[C preprocessor macros to define]" \ + "--undef=[C preprocessor macros to undefine]" \ + "-U[C preprocessor macros to undefine]" \ + "--libraries=[external C libraries to link with]" \ + "-l[external C libraries to link with]" \ + "--library-dirs=[directories to search for external C libraries (separated by ':')]" \ + "-L[directories to search for external C libraries (separated by ':')]" \ + "--rpath=[directories to search for shared C libraries at runtime]" \ + "-R[directories to search for shared C libraries at runtime]" \ + "--link-objects=[extra explicit link objects to include in the link]" \ + "-O[extra explicit link objects to include in the link]" \ + "--debug[compile/link with debugging information]" \ + "-g[compile/link with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "--swig-cpp[make SWIG create C++ files (default is C)]" \ + "--swig-opts=[list of SWIG command line options]" \ + "--swig=[path to the SWIG executable]" \ + "--user[add user include, library and rpath]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_clib] )) || +_setuppy_build_clib() { + _arguments -s \ + "--build-clib=[directory to build C/C++ libraries to]" \ + "-b[directory to build C/C++ libraries to]" \ + "--build-temp=[directory to put temporary build by-products]" \ + "-t[directory to put temporary build by-products]" \ + "--debug[compile with debugging information]" \ + "-g[compile with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_scripts] )) || +_setuppy_build_scripts() { + _arguments -s \ + "--build-dir=[directory to \"build\" (copy) to]" \ + "-d[directory to \"build\" (copy) to]" \ + "--force[forcibly build everything (ignore file timestamps]" \ + "-f[forcibly build everything (ignore file timestamps]" \ + "--executable=[specify final destination interpreter path]" \ + "-e[specify final destination interpreter path]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_clean] )) || +_setuppy_clean() { + _arguments -s \ + "--build-base=[base build directory (default: 'build.build-base')]" \ + "-b[base build directory (default: 'build.build-base')]" \ + "--build-lib=[build directory for all modules (default: 'build.build-lib')]" \ + "--build-temp=[temporary build directory (default: 'build.build-temp')]" \ + "-t[temporary build directory (default: 'build.build-temp')]" \ + "--build-scripts=[build directory for scripts (default: 'build.build-scripts')]" \ + "--bdist-base=[temporary directory for built distributions]" \ + "--all[remove all build output, not just temporary by-products]" \ + "-a[remove all build output, not just temporary by-products]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install] )) || +_setuppy_install() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--exec-prefix=[(Unix only) prefix for platform-specific files]" \ + "--home=[(Unix only) home directory to install under]" \ + "--user[install in user site-package]" \ + "--install-base=[base installation directory (instead of --prefix or --home)]" \ + "--install-platbase=[base installation directory for platform-specific files (instead of --exec-prefix or --home)]" \ + "--root=[install everything relative to this alternate root directory]" \ + "--install-purelib=[installation directory for pure Python module distributions]" \ + "--install-platlib=[installation directory for non-pure module distributions]" \ + "--install-lib=[installation directory for all module distributions (overrides --install-purelib and --install-platlib)]" \ + "--install-headers=[installation directory for C/C++ headers]" \ + "--install-scripts=[installation directory for Python scripts]" \ + "--install-data=[installation directory for data files]" \ + "--compile[compile .py to .pyc \[default\]]" \ + "-c[compile .py to .pyc \[default\]]" \ + "--no-compile[don't compile .py files]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--force[force installation (overwrite any existing files)]" \ + "-f[force installation (overwrite any existing files)]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--record=[filename in which to record list of installed files]" \ + "--old-and-unmanageable[Try not to use this!]" \ + "--single-version-externally-managed[used by system package builders to create 'flat' eggs]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_lib] )) || +_setuppy_install_lib() { + _arguments -s \ + "--install-dir=[directory to install to]" \ + "-d[directory to install to]" \ + "--build-dir=[build directory (where to install from)]" \ + "-b[build directory (where to install from)]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "--compile[compile .py to .pyc \[default\]]" \ + "-c[compile .py to .pyc \[default\]]" \ + "--no-compile[don't compile .py files]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--skip-build[skip the build steps]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_headers] )) || +_setuppy_install_headers() { + _arguments -s \ + "--install-dir=[directory to install header files to]" \ + "-d[directory to install header files to]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_scripts] )) || +_setuppy_install_scripts() { + _arguments -s \ + "--install-dir=[directory to install scripts to]" \ + "-d[directory to install scripts to]" \ + "--build-dir=[build directory (where to install from)]" \ + "-b[build directory (where to install from)]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "--skip-build[skip the build steps]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_data] )) || +_setuppy_install_data() { + _arguments -s \ + "--install-dir=[base directory for installing data files (default: installation base dir)]" \ + "-d[base directory for installing data files (default: installation base dir)]" \ + "--root=[install everything relative to this alternate root directory]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_sdist] )) || +_setuppy_sdist() { + _arguments -s \ + "--formats=[formats for source distribution (comma-separated list)]" \ + "--keep-temp[keep the distribution tree around after creating archive file(s)]" \ + "-k[keep the distribution tree around after creating archive file(s)]" \ + "--dist-dir=[directory to put the source distribution archive(s) in \[default: dist\]]" \ + "-d[directory to put the source distribution archive(s) in \[default: dist\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_register] )) || +_setuppy_register() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--list-classifiers[list the valid Trove classifiers]" \ + "--strict[Will stop the registering if the meta-data are not fully compliant]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist] )) || +_setuppy_bdist() { + _arguments -s \ + "--bdist-base=[temporary directory for creating built distributions]" \ + "-b[temporary directory for creating built distributions]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--formats=[formats for distribution (comma-separated list)]" \ + "--dist-dir=[directory to put final built distributions in \[default: dist\]]" \ + "-d[directory to put final built distributions in \[default: dist\]]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--owner=[Owner name used when creating a tar file \[default: current user\]]" \ + "-u[Owner name used when creating a tar file \[default: current user\]]" \ + "--group=[Group name used when creating a tar file \[default: current group\]]" \ + "-g[Group name used when creating a tar file \[default: current group\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_dumb] )) || +_setuppy_bdist_dumb() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "-d[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--format=[archive format to create (tar, ztar, gztar, zip)]" \ + "-f[archive format to create (tar, ztar, gztar, zip)]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--relative[build the archive using relative paths(default: false)]" \ + "--owner=[Owner name used when creating a tar file \[default: current user\]]" \ + "-u[Owner name used when creating a tar file \[default: current user\]]" \ + "--group=[Group name used when creating a tar file \[default: current group\]]" \ + "-g[Group name used when creating a tar file \[default: current group\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_rpm] )) || +_setuppy_bdist_rpm() { + _arguments -s \ + "--bdist-base=[base directory for creating built distributions]" \ + "--rpm-base=[base directory for creating RPMs (defaults to \"rpm\" under --bdist-base; must be specified for RPM 2)]" \ + "--dist-dir=[directory to put final RPM files in (and .spec files if --spec-only)]" \ + "-d[directory to put final RPM files in (and .spec files if --spec-only)]" \ + "--python=[path to Python interpreter to hard-code in the .spec file (default: \"python\")]" \ + "--fix-python[hard-code the exact path to the current Python interpreter in the .spec file]" \ + "--spec-only[only regenerate spec file]" \ + "--source-only[only generate source RPM]" \ + "--binary-only[only generate binary RPM]" \ + "--use-bzip2[use bzip2 instead of gzip to create source distribution]" \ + "--distribution-name=[name of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)]" \ + "--group=[package classification \[default: \"Development/Libraries\"\]]" \ + "--release=[RPM release number]" \ + "--serial=[RPM serial number]" \ + "--vendor=[RPM \"vendor\" (eg. \"Joe Blow \") \[default: maintainer or author from setup script\]]" \ + "--packager=[RPM packager (eg. \"Jane Doe \")\[default: vendor\]]" \ + "--doc-files=[list of documentation files (space or comma-separated)]" \ + "--changelog=[RPM changelog]" \ + "--icon=[name of icon file]" \ + "--provides=[capabilities provided by this package]" \ + "--requires=[capabilities required by this package]" \ + "--conflicts=[capabilities which conflict with this package]" \ + "--build-requires=[capabilities required to build this package]" \ + "--obsoletes=[capabilities made obsolete by this package]" \ + "--no-autoreq[do not automatically calculate dependencies]" \ + "--keep-temp[don't clean up RPM build directory]" \ + "-k[don't clean up RPM build directory]" \ + "--no-keep-temp[clean up RPM build directory \[default\]]" \ + "--use-rpm-opt-flags[compile with RPM_OPT_FLAGS when building from source RPM]" \ + "--no-rpm-opt-flags[do not pass any RPM CFLAGS to compiler]" \ + "--rpm3-mode[RPM 3 compatibility mode (default)]" \ + "--rpm2-mode[RPM 2 compatibility mode]" \ + "--prep-script=[Specify a script for the PREP phase of RPM building]" \ + "--build-script=[Specify a script for the BUILD phase of RPM building]" \ + "--pre-install=[Specify a script for the pre-INSTALL phase of RPM building]" \ + "--install-script=[Specify a script for the INSTALL phase of RPM building]" \ + "--post-install=[Specify a script for the post-INSTALL phase of RPM building]" \ + "--pre-uninstall=[Specify a script for the pre-UNINSTALL phase of RPM building]" \ + "--post-uninstall=[Specify a script for the post-UNINSTALL phase of RPM building]" \ + "--clean-script=[Specify a script for the CLEAN phase of RPM building]" \ + "--verify-script=[Specify a script for the VERIFY phase of the RPM build]" \ + "--force-arch=[Force an architecture onto the RPM build process]" \ + "--quiet[Run the INSTALL phase of RPM building in quiet mode]" \ + "-q[Run the INSTALL phase of RPM building in quiet mode]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_wininst] )) || +_setuppy_bdist_wininst() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--target-version=[require a specific python version on the target system]" \ + "--no-target-compile[do not compile .py to .pyc on the target system]" \ + "-c[do not compile .py to .pyc on the target system]" \ + "--no-target-optimize[do not compile .py to .pyo (optimized)on the target system]" \ + "-o[do not compile .py to .pyo (optimized)on the target system]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--bitmap=[bitmap to use for the installer instead of python-powered logo]" \ + "-b[bitmap to use for the installer instead of python-powered logo]" \ + "--title=[title to display on the installer background instead of default]" \ + "-t[title to display on the installer background instead of default]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--install-script=[basename of installation script to be run afterinstallation or before deinstallation]" \ + "--pre-install-script=[Fully qualified filename of a script to be run before any files are installed. This script need not be in the distribution]" \ + "--user-access-control=[specify Vista's UAC handling - 'none'/default=no handling, 'auto'=use UAC if target Python installed for all users, 'force'=always use UAC]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_upload] )) || +_setuppy_upload() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--sign[sign files to upload using gpg]" \ + "-s[sign files to upload using gpg]" \ + "--identity=[GPG identity used to sign files]" \ + "-i[GPG identity used to sign files]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_check] )) || +_setuppy_check() { + _arguments -s \ + "--metadata[Verify meta-data]" \ + "-m[Verify meta-data]" \ + "--restructuredtext[Checks if long string meta-data syntax are reStructuredText-compliant]" \ + "-r[Checks if long string meta-data syntax are reStructuredText-compliant]" \ + "--strict[Will exit with an error if a check fails]" \ + "-s[Will exit with an error if a check fails]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_alias] )) || +_setuppy_alias() { + _arguments -s \ + "--remove[remove (unset) the alias]" \ + "-r[remove (unset) the alias]" \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_egg] )) || +_setuppy_bdist_egg() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "-b[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--exclude-source-files[remove all .py files from the generated egg]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_develop] )) || +_setuppy_develop() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--zip-ok[install package as a zipfile]" \ + "-z[install package as a zipfile]" \ + "--multi-version[make apps have to require() a version]" \ + "-m[make apps have to require() a version]" \ + "--upgrade[force upgrade (searches PyPI for latest versions)]" \ + "-U[force upgrade (searches PyPI for latest versions)]" \ + "--install-dir=[install package to DIR]" \ + "-d[install package to DIR]" \ + "--script-dir=[install scripts to DIR]" \ + "-s[install scripts to DIR]" \ + "--exclude-scripts[Don't install scripts]" \ + "-x[Don't install scripts]" \ + "--always-copy[Copy all needed packages to install dir]" \ + "-a[Copy all needed packages to install dir]" \ + "--index-url=[base URL of Python Package Index]" \ + "-i[base URL of Python Package Index]" \ + "--find-links=[additional URL(s) to search for packages]" \ + "-f[additional URL(s) to search for packages]" \ + "--build-directory=[download/extract/build in DIR; keep the results]" \ + "-b[download/extract/build in DIR; keep the results]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--record=[filename in which to record list of installed files]" \ + "--always-unzip[don't install as a zipfile, no matter what]" \ + "-Z[don't install as a zipfile, no matter what]" \ + "--site-dirs=[list of directories where .pth files work]" \ + "-S[list of directories where .pth files work]" \ + "--editable[Install specified packages in editable form]" \ + "-e[Install specified packages in editable form]" \ + "--no-deps[don't install dependencies]" \ + "-N[don't install dependencies]" \ + "--allow-hosts=[pattern(s) that hostnames must match]" \ + "-H[pattern(s) that hostnames must match]" \ + "--local-snapshots-ok[allow building eggs from local checkouts]" \ + "-l[allow building eggs from local checkouts]" \ + "--version[print version information and exit]" \ + "--no-find-links[Don't load find-links defined in packages being installed]" \ + "--user[install in user site-package]" \ + "--uninstall[Uninstall this source package]" \ + "-u[Uninstall this source package]" \ + "--egg-path=[Set the path to be used in the .egg-link file]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_easy_install] )) || +_setuppy_easy_install() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--zip-ok[install package as a zipfile]" \ + "-z[install package as a zipfile]" \ + "--multi-version[make apps have to require() a version]" \ + "-m[make apps have to require() a version]" \ + "--upgrade[force upgrade (searches PyPI for latest versions)]" \ + "-U[force upgrade (searches PyPI for latest versions)]" \ + "--install-dir=[install package to DIR]" \ + "-d[install package to DIR]" \ + "--script-dir=[install scripts to DIR]" \ + "-s[install scripts to DIR]" \ + "--exclude-scripts[Don't install scripts]" \ + "-x[Don't install scripts]" \ + "--always-copy[Copy all needed packages to install dir]" \ + "-a[Copy all needed packages to install dir]" \ + "--index-url=[base URL of Python Package Index]" \ + "-i[base URL of Python Package Index]" \ + "--find-links=[additional URL(s) to search for packages]" \ + "-f[additional URL(s) to search for packages]" \ + "--build-directory=[download/extract/build in DIR; keep the results]" \ + "-b[download/extract/build in DIR; keep the results]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--record=[filename in which to record list of installed files]" \ + "--always-unzip[don't install as a zipfile, no matter what]" \ + "-Z[don't install as a zipfile, no matter what]" \ + "--site-dirs=[list of directories where .pth files work]" \ + "-S[list of directories where .pth files work]" \ + "--editable[Install specified packages in editable form]" \ + "-e[Install specified packages in editable form]" \ + "--no-deps[don't install dependencies]" \ + "-N[don't install dependencies]" \ + "--allow-hosts=[pattern(s) that hostnames must match]" \ + "-H[pattern(s) that hostnames must match]" \ + "--local-snapshots-ok[allow building eggs from local checkouts]" \ + "-l[allow building eggs from local checkouts]" \ + "--version[print version information and exit]" \ + "--no-find-links[Don't load find-links defined in packages being installed]" \ + "--user[install in user site-package]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_egg_info] )) || +_setuppy_egg_info() { + _arguments -s \ + "--egg-base=[directory containing .egg-info directories (default: top of the source tree)]" \ + "-e[directory containing .egg-info directories (default: top of the source tree)]" \ + "--tag-svn-revision[Add subversion revision ID to version number]" \ + "-r[Add subversion revision ID to version number]" \ + "--tag-date[Add date stamp (e.g. 20050528) to version number]" \ + "-d[Add date stamp (e.g. 20050528) to version number]" \ + "--tag-build=[Specify explicit tag to add to version number]" \ + "-b[Specify explicit tag to add to version number]" \ + "--no-svn-revision[Don't add subversion revision ID \[default\]]" \ + "-R[Don't add subversion revision ID \[default\]]" \ + "--no-date[Don't include date stamp \[default\]]" \ + "-D[Don't include date stamp \[default\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_rotate] )) || +_setuppy_rotate() { + _arguments -s \ + "--match=[patterns to match (required)]" \ + "-m[patterns to match (required)]" \ + "--dist-dir=[directory where the distributions are]" \ + "-d[directory where the distributions are]" \ + "--keep=[number of matching distributions to keep]" \ + "-k[number of matching distributions to keep]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_saveopts] )) || +_setuppy_saveopts() { + _arguments -s \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_setopt] )) || +_setuppy_setopt() { + _arguments -s \ + "--command=[command to set an option for]" \ + "-c[command to set an option for]" \ + "--option=[option to set]" \ + "-o[option to set]" \ + "--set-value=[value of the option]" \ + "-s[value of the option]" \ + "--remove[remove (unset) the value]" \ + "-r[remove (unset) the value]" \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_test] )) || +_setuppy_test() { + _arguments -s \ + "--test-module=[Run 'test_suite' in specified module]" \ + "-m[Run 'test_suite' in specified module]" \ + "--test-suite=[Test suite to run (e.g. 'some_module.test_suite')]" \ + "-s[Test suite to run (e.g. 'some_module.test_suite')]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_egg_info] )) || +_setuppy_install_egg_info() { + _arguments -s \ + "--install-dir=[directory to install to]" \ + "-d[directory to install to]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_upload_docs] )) || +_setuppy_upload_docs() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--upload-dir=[directory to upload]" \ + "*::setup.py commands:_setup.py" +} + +_setup.py "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_showoff b/.zprezto/modules/completion/external/src/_showoff new file mode 100644 index 0000000..8a0104f --- /dev/null +++ b/.zprezto/modules/completion/external/src/_showoff @@ -0,0 +1,84 @@ +#compdef showoff +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Showoff (https://github.com/schacon/showoff). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +case $state in + cmds) + cmds=( + 'add:Add a new slide at the end in a given dir' + 'new:Add a new slide at the end in a given dir' + 'create:Create new showoff presentation' + 'init:Create new showoff presentation' + 'help:Shows list of commands or help for one command' + 'heroku:Setup your presentation to serve on Heroku' + 'serve:Serves the showoff presentation in the current directory' + 'static:Generate static version of presentation' + ) + _describe -t commands 'showoff command' cmds && ret=0 + ;; + args) + case $line[1] in + (add|new) + _arguments \ + '(-d --dir)'{-d,--dir}'=[Slide dir (where to put a new slide file)]:directory:_files' \ + '(-n --name)'{-n,--name}'=[Slide name (name of the new slide file)]:basename' \ + {-s,--source}'=[Include code from the given file as the slide body]:file:_files' \ + '(-t --style --type)'{-t,--style,--type}'=[Slide Type/Style (default: title)]:style' \ + '(-u --no-number)'{-u,--no-number}'[Dont number the slide, use the given name verbatim]' \ + '1:title' && ret=0 + ;; + (create|init) + _arguments \ + '(-d --slidedir)'{-d,--slidedir}'=[Sample slide directory name (default: one)]:arg' \ + '(-n --nosamples)'{-n,--nosamples}'=[Dont create sample slides]' \ + '1:dir_name' && ret=0 + ;; + help) + _values 'commands' add new create init help heroku serve static && ret=0 + ;; + heroku) + _message 'please entrer an heroku_name' && ret=0 + ;; + serve) + _arguments \ + '(-h --host)'{-h,--host}'=[Host or ip to run on (default: localhost)]:host' \ + '(-p --port)'{-p,--port}'=[Port on which to run (default: 9090)]:port' \ + '1:title' && ret=0 + ;; + static) + _message 'please entrer a name' && ret=0 + ;; + *) + (( ret )) && _message 'no more arguments' + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_shutdown b/.zprezto/modules/completion/external/src/_shutdown new file mode 100644 index 0000000..f695b9d --- /dev/null +++ b/.zprezto/modules/completion/external/src/_shutdown @@ -0,0 +1,71 @@ +#compdef shutdown +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for shutdown - Shut down the system +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Timofey Titovets +# +# ------------------------------------------------------------------------------ +_shutdown(){ + local -a _1st_arguments + _1st_arguments=( + "--help:Show help" + "-H:Halt the machine" "--halt:Halt the machine" + "-P:Power-off the machine" "--poweroff:Power-off the machine" + "-r:Reboot the machine" "--reboot:Reboot the machine" + "-h:Equivalent to --poweroff, overridden by --halt" + "-k:Dont halt/power-off/reboot, just send warnings" + "--no-wall:Dont send wall message before halt/power-off/reboot" + "-c:Cancel a pending shutdown" + ) + + local context state line expl + local -A opt_args + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "shutdown commands" _1st_arguments -V1 + return + fi + + case "$words[1]" in + *) + _arguments \ + ':list option:(now +{0,5,10,15,30} hh:mm)' + ;; + esac +} + +_shutdown "$@" diff --git a/.zprezto/modules/completion/external/src/_smartmontools b/.zprezto/modules/completion/external/src/_smartmontools new file mode 100644 index 0000000..5e8c788 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_smartmontools @@ -0,0 +1,115 @@ +#compdef smartctl smartd +# ------------------------------------------------------------------------------ +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for smartmontools (http://smartmontools.sourceforge.net). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + +_smartctl() { + local context state line expl + local -A opt_args + + _arguments -A "-*" \ + '(-h --help --usage)'{-h,--help,--usage}'[Show help message]' \ + '(-V --version --copyright --license)'{-v,--version,--copyright,--license}'[Print license, copyright, and version information and exit]' \ + '(-i --info)'{-i,--info}'[Show identity information for device]' \ + '(-a --all)'{-a,--all}"[Show all SMART information for device]" \ + '(-x --xall)'{-xa,--xall}"[Show all information for device]" \ + '--scan[Scan for devices]' \ + '--scan-open[Scan for devices and try to open each device]' \ + \ + '(-q --quietmode)'{-q,--quietmode}'[Set smartctl quiet mode]:TYPE:(errorsonly silent noserial)' \ + '(-d --device)'{-d,--device}'[Specify device type]:TYPE:(ata scsi sat usbcypress usbjmicron usbsunplus marvell areca 3ware hpt megaraid cciss auto test)' \ + '(-T --tolerance)'{-T,--tolerance}'[Set tolerance]:TOLERANCE:(normal conservative permissive verypermissive)' \ + '(-b --badsum)'{-q,--badsum}'[Set action on bad checksum]:TYPE:(warn exit ignore)' \ + '(-r --report)'{-r,--report}'[Report transactions]:TYPE:' \ + '(-n --nocheck)'{-n,--nocheck}'[No check if MODE]:MODE:(never sleep standby idle)' \ + \ + '(-s --smart)'{-s,--smart}'[Enable/disable SMART on device]:VALUE:(on off)' \ + '(-o --offlineauto)'{-o,--offlineauto}'[Enable/disable automatic offline testing on device]:VALUE:(on off)' \ + '(-S --saveauto)'{-S,--saveauto}'[Enable/disable attribute autosave on device]:VALUE:(on off)' \ + \ + '(-H --health)'{-H,--health}'[Show device SMART health status]' \ + '(-c --capabilities)'{-c,--capabilities}'[Show device SMART capabilities]' \ + '(-A --attributes)'{-A,--attributes}'[Show device SMART vendor-specific attributes and values]' \ + '(-f --format)'{-f,--format}'[Set output format for attributes]:FORMAT:(old brief)' \ + '(-l --log)'{-l,--log}'[Show device log]:TYPE:(error selftest selective directory background sasphy sataphy scttemp scterc gplog smartlog xerror xselftest)' \ + '(-v --vendorattribute)'{-v,--vendorattribute}'[Set display option for vendor attribute]:N,OPTION:' \ + '(-F --firmwarebug)'{-F,--firmwarebug}'[Use firmware bug workaround]:TYPE:(none samsung samsung2 samsung3 swapid)' \ + '(-P --presets)'{-P,--presets}'[Drive-specific presets]:TYPE:(use ignore show showall)' \ + '(-B --drivedb)'{-B,--drivedb}'[Read and replace drive database from file]:FILE:_files' \ + \ + '(-t --test)'{-t,--test}'[Run test]:TEST:(offline short long conveyance vendor select pending afterselect,on afterselect,off scttempint)' \ + '(-C --captive)'{-C,--captive}'[Do test in captive mode]' \ + '(-X --abort)'{-X,--abort}'[Abort any non-captive test on device]' \ + \ + '1:Device:_files' +} + +_smartd() { + local context state line expl + local -A opt_args + + _arguments -A "-*" \ + '(-h --help --usage)'{-h,--help,--usage}'[Show help message]' \ + '(-V --version --copyright --license)'{-v,--version,--copyright,--license}'[Print license, copyright, and version information and exit]' \ + \ + '(-A --attributelog)'{-A,--attributelog}'[Log ATA attribute information to {PREFIX}MODEL-SERIAL.ata.csv]:PREFIX:' \ + '(-B --drivedb)'{-B,--drivedb}'[Read and replace drive database from file]:FILE:_files' \ + '(-c --configfile)'{-c,--configfile}'[Read configuration file or stdin]:FILE:_files' \ + '(-d --debug)'{-d,--debug}'[Start smartd in debug mode]' \ + '(-D --showdirectives)'{-D,--showdirectives}'[Print the configuration file directives and exit]' \ + '(-i --interval)'{-i,--interval}'[Set interval between disk checks to N seconds, where N >= 10]:Seconds >= 10:' \ + '(-l --logfacility)'{-l,--logfacility}'[Use syslogfacility local0 - local7 or daemon]:FACILITY:(local0 local1 local2 local3 local4 local5 local6 local7)' \ + '(-n --no-fork)'{-n,--no-fork}'[Do not fork into background]' \ + '(-p --pidfile)'{-p,--pidfile}'[Write PID file]:FILE:_files' \ + '(-q --quit)'{-q,--quit}'[Quit on...]:WHEN:(nodev errors nodevstartup never onecheck showtests)' \ + '(-r --report)'{-r,--report}'[Report transactions for...]:TYPE:(ioctl ataioctl scsiioctl)' \ + '(-s --savestates)'{-s,--savestates}'[Save disk states to {PREFIX}MODEL-SERIAL.TYPE.state]:TYPE:' +} + +_smartmontools() { + local ret=1 + _call_function ret _$service + return ret +} + +_smartmontools "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_socat b/.zprezto/modules/completion/external/src/_socat new file mode 100644 index 0000000..4b15e2a --- /dev/null +++ b/.zprezto/modules/completion/external/src/_socat @@ -0,0 +1,233 @@ +#compdef socat +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for socat ( http://www.dest-unreach.org/socat/ ). +# +# Source: https://github.com/Valodim/zsh-socat-completion +# Last updated: 23.02.2013, commit 3c564c9 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# +# ------------------------------------------------------------------------------ + + +if (( ! $+_socat_params || ! $+_socat_groups )); then + + # we cache socat parameters, groups, option groups, option types parsed + # straight from socat, since these are platform specific + typeset -gHA _socat_params _socat_groups _socat_opt_groups _socat_opt_types + + if _cache_invalid socat-params || _cache_invalid socat-groups \ + || ! _retrieve_cache socat-params || ! _retrieve_cache socat-groups ; then + () { + setopt localoptions rematchpcre + local line + + # anyone know a better way to do "get rest starting from matching line" than awk? + _call_program socat-params socat -h | awk '/address-head:/,0 { print }' | while read -r line; do + + # parse line, format: proxy::: groups=A,B,C + [[ $line =~ '([^:]+)((?::<[^:]+>)*)\s+groups=(.+)' ]] || continue + + # canonicalize and note down parameters + _socat_params[$match[1]]=${${${match[2]#:}//(\<|\>)/}//:/,} + + # store groups for this parameter + _socat_groups[$match[1]]=${match[3]} + + done + + _store_cache socat-params _socat_params + _store_cache socat-groups _socat_groups + + } + fi + + if _cache_invalid socat-opt-groups || _cache_invalid socat-opt-types \ + || ! _retrieve_cache socat-opt-groups || ! _retrieve_cache socat-opt-types ; then + () { + setopt localoptions rematchpcre + local line + + _call_program socat-opts socat -hh | awk '/opt:/,0 { print }' | while read -r line; do + # parse format: wronly groups=OPEN phase=OPEN type=BOOL + [[ $line =~ ' *(\w+)\s+groups=(\w+)\s.+type=(\w+)' ]] || continue + _socat_opt_groups[$match[1]]=$match[2] + _socat_opt_types[$match[1]]=${(L)match[3]} + done + } + + _store_cache socat-opt-groups _socat_opt_groups + _store_cache socat-opt-types _socat_opt_types + fi +fi + +if (( ! $+_socat_param_handler )); then + typeset -gHA _socat_param_handler + # bunch of manually extracted parameter handlers. names work as both + _socat_param_handler=( + create _files + gopen _files + open _files + pipe '_files -g *(p)' + unix-connect '_files -g *(=)' + unix-listen '_files -g *(=)' + unix-sendto '_files -g *(=)' + unix-recvfrom '_files -g *(=)' + unix-client '_files -g *(=)' + host '_hosts -S : -r :,\ \\t\\n\\-' + ) +fi + +if (( ! $+_socat_opt_handler )); then + typeset -gHA _socat_opt_handler + # bunch of manually extracted handlers + _socat_opt_handler=( + history _files + lockfile _files + waitlock _files + allow-table _files + deny-table _files + link _files + cert _files + key _files + dhparams _files + cafile _files + egdfile _files + capath '_files -/' + tcpwrap-etc '_files -/' + capath '_files -/' + chroot-early '_files -/' + path _directories + group _groups + group-early _groups + group-late _groups + setgid _groups + setgid-early _groups + user _users + user-early _users + user-late _users + setuid _users + setuid-early _users + su _users + su-d _users + ) +fi + +_socat_address_head() { + setopt localoptions extendedglob + + # do we have a socket type yet? + if ! compset -P 1 '(#b)(*)(:|,)'; then + # all which have pameters (ie, non-empty values) + compadd -M 'M:{[:upper:]}={[:lower:]}' -S : -r ":, \t\n\-" -k '_socat_params[(R)?*]' + # others (ie, empty value) + compadd -M 'M:{[:upper:]}={[:lower:]}' -S , -q -k '_socat_params[(R)]' + return 0 + fi + + local expl ret=1 + + # any parameters? + local socket_type="${(L)match[1]}" lastop="$match[2]" + + local -a params_left + params_left=( "${(@s:,:)_socat_params[$socket_type]}" ) + + if [[ $lastop == ':' ]]; then + + # chunk away the parameters + while compset -P 1 '[^:]#:'; do + (( $#params_left > 0 )) && shift params_left + done + + if compset -P '*,'; then + lastop=',' + elif (( $#params_left == 0 )); then + _message -e parameters "No more parameters for $socket_type" && return 0 + else + # do we have a handler? this works either by typename or socket type + if (( $+_socat_param_handler[$socket_type] )); then + _wanted param expl "parameter $params_left[1]" "${(@z)_socat_param_handler[$socket_type]}" && return 0 + elif (( $+_socat_param_handler[${params_left[1]}] )); then + _wanted param expl "parameter $params_left[1]" "${(@z)_socat_param_handler[$params_left[1]]}" && return 0 + else + _message -e parameters "$params_left[1]" && return 0 + fi + fi + + # shift to make warning msg below accurate + (( $#params_left > 0 )) && shift params_left + + fi + + # got any params left? At least leave a note.. + (( $#params_left > 0 )) && _message -e parameters "Unfilled parameters: $params_left" + + if [[ $lastop == ',' ]]; then + # chip away all old opts + compset -P '*,' + # is it one with a type? + if compset -P '(#b)(*)\='; then + if (( $+_socat_opt_types[$match[1]] )); then + # do we have a handler? + if (( $+_socat_opt_handler[$match[1]] )); then + _wanted optparam expl "option parameter <$_socat_opt_types[$match[1]]>" "${(@z)_socat_opt_handler[$match[1]]}" && return 0 + else + _message -e optparam "opt param for $match[1]: $_socat_opt_types[$match[1]]" && return 0 + fi + else + _message -e optparam "opt param for $match[1]: unknown" && return 0 + fi + fi + + # add completions for all groups, then + _tags "${(s:,:)_socat_groups[$socket_type]}" + while _tags; do + for g in ${(s:,:)_socat_groups[$socket_type]}; do + _requested $g expl "${(L)g}" \ + compadd -M 'M:{[:upper:]}={[:lower:]}' -S = -r '=, \t\n\-' -k "_socat_opt_groups[(R)$g]" && ret=0 + done + (( ret )) || break + done + fi + + return ret +} + +# complete common options +_arguments \ + -V'[print version and feature information to stdout, and exit]' \ + -h'[print a help text describing command line options and addresses, and exit]' \ + -hh'[like -h, plus a list of all common address option names]' \ + -hhh'[like -hh, plus a list of all available address option names]' \ + \*-d'[increase verbosity (use up to 4 times; 2 are recommended)]' \ + -D'[analyze file descriptors before loop]' \ + -ly'[log to syslog, using facility (default is daemon)]:log facility:( auth authpriv cron daemon kern lpr mail mark news security syslog user uucp local0 local1 local2 local3 local4 local5 local6 local7 )' \ + -lf'[log to file]:log file:_files' \ + -ls'[log to stderr (default if no other log)]' \ + -lm'[mixed log mode (stderr during initialization, then syslog)]:log facility:( auth authpriv cron daemon kern lpr mail mark news security syslog user uucp local0 local1 local2 local3 local4 local5 local6 local7 )' \ + -lp'[set the program name used for logging]:log program name' \ + -lu'[use microseconds for logging timestamps]' \ + -lh'[add hostname to log messages]' \ + '(-x)'-v'[verbose data traffic, text]' \ + '(-v)'-x'[verbose data traffic, hexadecimal]' \ + -b'[set data buffer size (8192)]:buffer size (bytes)' \ + -s'[sloppy (continue on error)]' \ + -t'[wait seconds before closing second channel]:timeout (seconds)' \ + -T'[total inactivity timeout in seconds]:timeout (seconds)' \ + '(-U)'-u'[unidirectional mode (left to right)]' \ + '(-u)'-U'[unidirectional mode (right to left)]' \ + -g'[do not check option groups]' \ + '(-W)'-L'[try to obtain lock, or fail]:lockfile:_files' \ + '(-L)'-W'[try to obtain lock, or wait]:lockfile:_files' \ + '(-6)'-4'[prefer IPv4 if version is not explicitly specified]' \ + '(-4)'-6'[prefer IPv6 if version is not explicitly specified]' \ + '*:socket:_socat_address_head' && return 0 + diff --git a/.zprezto/modules/completion/external/src/_srm b/.zprezto/modules/completion/external/src/_srm new file mode 100644 index 0000000..49e6579 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_srm @@ -0,0 +1,63 @@ +#compdef srm +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for srm. +# +# It is based on the rm completion script from Zsh. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sorin Ionescu +# +# ------------------------------------------------------------------------------ + +local -a opts args +args=( + '(-f --force)'{-f,--force}'[ignore nonexistent files, never prompt]' + '(-r --interactive)'{-i,--interactive}'[prompt before any removal]' + '(-r -R --recursive)'{-r,-R,--recursive}'[remove the contents of directories recursively]' + '(-s --simple)'{-s,--simple}'[only overwrite with a single pass of random data]' + '(-v --verbose)'{-v,--verbose}'[explain what is being done]' + '(- *)--help[display help message and exit]' + '(- *)--version[output version information and exit]' + '*::files:->file' +) + +if _pick_variant gnu=gnu unix --help; then + args+=( + '(-x --one-file-system)'{-x,--one-file-system}'[stay within filesystems of files given as arguments]' + '(-P --openbsd)'{-P,--openbsd}'[overwrite the file 3 times (0xff, 0x00, 0xff)]' + '(-D --dod)'{-D,--dod}'[overwrite the file with 7 US DoD compliant passes (0xF6, 0x00, 0xFF, random, 0x00, 0xFF, random)]' + '(-E --doe)'{-E,--doe}'[overwrite the file with 3 US DoE compliant passes (random, random, DoE)]' + ) +else + args+=( + '(-m --medium)'{-m,--medium}'[overwrite the file with 7 US DoD compliant passes (0xF6, 0x00, 0xFF, random, 0x00, 0xFF, random)]' + '(-z --zero)'{-z,--zero}'[after overwriting, zero blocks used by file]' + '(-n --nounlink)'{-n,--nounlink}'[overwrite file, but do not rename or unlink it]' + ) +fi + +local curcontext=$curcontext state line ret=1 +local -A opt_args + +_arguments -s -S -C $opts \ + $args && ret=0 + +case $state in + (file) + local -a ignored + ignored=() + ((CURRENT > 1)) && + ignored+=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + ((CURRENT < $#line)) && + ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + _files -F ignored && ret=0 + ;; +esac + +return $ret diff --git a/.zprezto/modules/completion/external/src/_ssh-copy-id b/.zprezto/modules/completion/external/src/_ssh-copy-id new file mode 100644 index 0000000..98daeba --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ssh-copy-id @@ -0,0 +1,59 @@ +#compdef ssh-copy-id +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ssh-copy-id. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +# FIXME This completes "user@host" and not "[user@]host" ("user@" is optional), +# should be merged in _ssh. + +_arguments -A "-*" \ + '-i+[use identity file]:SSH identity file:_files' \ + '-n+[do a dry-run]' \ + '-h+[print usage summary]' \ + '-p+[specify custom port]' \ + '-o+[additional ssh option]' \ + '1: :_user_at_host' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_stack b/.zprezto/modules/completion/external/src/_stack new file mode 100644 index 0000000..75eebfc --- /dev/null +++ b/.zprezto/modules/completion/external/src/_stack @@ -0,0 +1,93 @@ +#compdef stack +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for stack (https://github.com/commercialhaskell/stack). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Toshiki Teramura +# +# ------------------------------------------------------------------------------ + +_stack () { + _arguments \ + --version'[Show version]' \ + --help'[Show this help text]' \ + '--docker*''[Run "stack --docker-help" for details]' \ + --verbosity'[Verbosity: silent, error, warn, info, debug]' \ + {-v,--verbose}'[Enable verbose mode: verbosity level "debug"]' \ + --system-ghc'[Enable using the system installed GHC (on the PATH) if available and a matching version]' \ + --no-system-ghc'[Disable using the system installed GHC (on the PATH) if available and a matching version]' \ + --install-ghc'[Enable downloading and installing GHC if necessary (can be done manually with stack setup)]' \ + --no-install-ghc'[Disable downloading and installing GHC if necessary (can be done manually with stack setup)]' \ + --arch'[System architecture, e.g. i386, x86_64]' \ + --os'[Operating system, e.g. linux, windows]' \ + {-j,--jobs}'[Number of concurrent jobs to run]' \ + --extra-include-dirs'[Extra directories to check for C header files]' \ + --extra-lib-dirs'[Extra directories to check for libraries]' \ + --skip-ghc-check'[Enable skipping the GHC version and architecture check]' \ + --no-skip-ghc-check'[Disable skipping the GHC version and architecture check]' \ + --skip-msys'[Enable skipping the local MSYS installation (Windows only)]' \ + --no-skip-msys'[Disable skipping the local MSYS installation (Windows only)]' \ + --resolver'[Override resolver in project file]' \ + --no-terminal'[Override terminal detection in the case of running in a false terminal]' \ + --stack-yaml'[Override project stack.yaml file (overrides any STACK_YAML environment variable)]' \ + '*: :__stack_modes' +} + +__stack_modes () { + _values \ + 'subcommand' \ + 'build[Build the project(s) in this directory/configuration]' \ + 'install[Build executables and install to a user path]' \ + 'test[Build and test the project(s) in this directory/configuration]' \ + 'bench[Build and benchmark the project(s) in this directory/configuration]' \ + 'haddock[Generate haddocks for the project(s) in this directory/configuration]' \ + 'new[Create a brand new project]' \ + 'init[Initialize a stack project based on one or more cabal packages]' \ + 'solver[Use a dependency solver to try and determine missing extra-deps]' \ + 'setup[Get the appropriate ghc for your project]' \ + 'path[Print out handy path information]' \ + 'unpack[Unpack one or more packages locally]' \ + 'update[Update the package index]' \ + 'upgrade[Upgrade to the latest stack (experimental)]' \ + 'upload[Upload a package to Hackage]' \ + 'dot[Visualize your projects dependency graph using Graphviz dot]' \ + 'exec[Execute a command]' \ + 'ghc[Run ghc]' \ + 'ghci[Run ghci in the context of project(s)]' \ + 'ide[Run ide-backend-client with the correct arguments]' \ + 'runghc[Run runghc]' \ + 'clean[Clean the local packages]' \ + 'docker[Subcommands specific to Docker use]' + +} diff --git a/.zprezto/modules/completion/external/src/_subliminal b/.zprezto/modules/completion/external/src/_subliminal new file mode 100644 index 0000000..73f097a --- /dev/null +++ b/.zprezto/modules/completion/external/src/_subliminal @@ -0,0 +1,63 @@ +#compdef subliminal +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Subliminal (https://github.com/Diaoul/subliminal). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- : *)'{-h,--help}'[show help message and exit]' \ + '(- : *)--version[show version number and exit]' \ + '*'{-l,--language}'[wanted language]: :_language_codes ISO-639-1' \ + '*'{-p,--plugin}'[plugin to use]:plugin name:((OpenSubtitles BierDopje TheSubDB SubsWiki Subtitulos))' \ + '(-m --multi)'{-m,--multi}'[download multiple subtitle languages]' \ + '(-f --force)'{-f,--force}'[replace existing subtitle file]' \ + '(-w --workers)'{-w,--workers}'[number of threads to use]:number' \ + '(-c --compatibility)'{-c,--compatibility}'[try not to use unicode]' \ + '(-q --quiet -v --verbose)'{-q,--quiet}'[disable output]' \ + '(-v --verbose -q --quiet)'{-v,--verbose}'[verbose output]' \ + '(--no-cache-dir)--cache-dir[cache directory to use]: :_files -/' \ + '(--cache-dir)--no-cache-dir[do not use cache directory]' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_svm b/.zprezto/modules/completion/external/src/_svm new file mode 100644 index 0000000..d778f34 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_svm @@ -0,0 +1,169 @@ +#compdef svm +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for svm (https://github.com/yuroyoro/svm) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideaki Miyake (https://github.com/mollifier) +# +# ------------------------------------------------------------------------------ + +local context curcontext="$curcontext" state line ret=1 +typeset -A opt_args + + +local -a _1st_arguments +_1st_arguments=( + 'help:show this usage information' + 'current:show the currently use scala version' + "list:show the scala version installed in svm_path(default is ${HOME}/.svm)" + "versions:show the available scala version not installed" + 'install:install specific scala version' + 'remove:uninstall specific scala version and remove their sources' + 'switch:setup to use a specific scala version' + 'update-latest:install or update nightly build scala version' + 'latest:setup to use nightly build scala version' + 'stable:setup to use stable(x.x.x.final) scala version' +) + +_arguments -C \ + '(-)-h[show this usage information]' \ + '-c[show the currently use scala version]' \ + "-l[show the scala version installed in svm_path(default is ${HOME}/.svm)]" \ + '-v[show the abalabe scala version not installed]' \ + '-i[install specific scala version]: :_svm_completion_not_installed_scala_versions' \ + '-r[uninstall specific scala version and remove their sources]: :_svm_completion_installed_scala_versions' \ + '(-s -u)'{-s,-u}'[setup to use a specific scala version]: :_svm_completion_not_selected_scala_versions' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + + +# installed scala versions +(( $+functions[_svm_completion_installed_scala_versions] )) || +_svm_completion_installed_scala_versions() { + local -a _installed_versions + _current_version="${$(_call_program installed svm current)#currently version is[[:space:]]*}" + + # collect lines starts with digit + _installed_versions=( ${(M)${(@f)"$(_call_program installed svm list)"}:#[[:digit:]]*} ) + + _describe -t installed "installed versions" _installed_versions +} + +# installed and not selected scala versions +(( $+functions[_svm_completion_not_selected_scala_versions] )) || +_svm_completion_not_selected_scala_versions() { + local _current_version + local -a _not_selected_versions + + _current_version="${$(_call_program installed svm current)#currently version is[[:space:]]*}" + + # collect lines starts with digit + _not_selected_versions=( ${(M)${(@f)"$(_call_program installed svm list)"}:#[[:digit:]]*} ) + + # remove current version + _not_selected_versions=( ${_not_selected_versions:#$_current_version}) + _describe -t installed "not selected versions" _not_selected_versions +} + +# not installed scala versions +(( $+functions[_svm_completion_not_installed_scala_versions] )) || +_svm_completion_not_installed_scala_versions() { + local -a _not_installed_versions + # collect lines starts with digit + _not_installed_versions=( ${(M)${(@f)"$(_call_program installed svm versions)"}:#[[:digit:]]*} ) + + _describe -t notinstalled "not installed versions" _not_installed_versions +} + + +case $state in + cmds) + # action + case $PREFIX in + u*) + # complete command synonyms + local -a _synonym_arguments + _synonym_arguments=( + 'uninstall:uninstall specific scala version and remove their sources' + 'use:setup to use a specific scala version' + 'update-latest:install or update nightly build scala version' + ) + _describe -t actions 'svm actions' _synonym_arguments && ret=0 + ;; + + *) + _describe -t actions 'svm actions' _1st_arguments + _svm_completion_not_selected_scala_versions && ret=0 + ;; + esac + ;; # end action + + args) + # scala version number + case $words[1] in + install) + # install not installed version + _arguments \ + '1: :_svm_completion_not_installed_scala_versions' \ + '--docs[with install, update-latest download scala-devel-docs.]' \ + '--sources[with install, update-latest download scala-sources.]' && ret=0 + ;; + + remove|uninstall) + # remove installed version + _arguments \ + '1: :_svm_completion_installed_scala_versions' && ret=0 + ;; + + switch|use) + # use installed version + _arguments \ + '1: :_svm_completion_not_selected_scala_versions' && ret=0 + ;; + + esac + + ;; # end args +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/.zprezto/modules/completion/external/src/_symfony b/.zprezto/modules/completion/external/src/_symfony new file mode 100644 index 0000000..ff23aad --- /dev/null +++ b/.zprezto/modules/completion/external/src/_symfony @@ -0,0 +1,456 @@ +#compdef symfony +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Symfony (http://www.symfony-project.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * aki77 (https://github.com/aki77) +# +# ------------------------------------------------------------------------------ + + +_symfony () { + local curcontext="$curcontext" state line expl ret=1 cache_version + + cache_version=$(_get_sf_cache_var version) + (( ${(P)+cache_version} == 0 )) && { + eval $cache_version=${${${(z)$($service -V)}[3]}%.*} + } + + if [ ${(P)cache_version} = "1.0" ] ; then + _symfony10 + return + fi + + _arguments -C \ + '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \ + '(-V --version)'{-V,--version}'[version]' \ + '1: :->tasks' \ + '*:: :->args' && ret=0 + + case $state in + tasks) + _sf_tasks + ;; + args) + local task args + + task=$words[1] + args=( + ${${${${${(M)${${${(z)${${"$($service help $task)"#*Usage:}#[[:cntrl:]]}%%[[:cntrl:]]*}//\[/}//\]/}:#--*}%%\"*}/=/"=-"}/(#b)--(app|application)=-/--$match[1]=-:application:_sf_apps}//(#b)--(env|environment)=-/--$match[1]=-:environment:_sf_environments} + ) + + case $task in + help) + args+=( + ':task:_sf_tasks' + ) + ;; + + app:routes) + args+=( + ':application:_sf_apps' + ':"route name":' + ) + ;; + + configure:author) + _message 'project author' + ;; + + configure:database) + _message 'database dsn' + ;; + + generate:app) + _message 'new application name' + ;; + + generate:module) + args+=( + ':application:_sf_apps' + ':"new module name":' + ) + ;; + + generate:project) + _message 'new project name' + ;; + + generate:task) + _message 'new task name' + ;; + + i18n:extract) + args+=( + ':application:_sf_apps' + ':"target culture":' + ) + ;; + + i18n:find) + args+=( + ':application:_sf_apps' + ) + ;; + + log:rotate) + args+=( + ':application:_sf_apps' + ':environment:_sf_environments' + ) + ;; + + plugin:add-channel) + _message 'channel name' + ;; + + plugin:install) + _message 'plugin name' + ;; + + plugin:publish-assets) + args+=( + ':plugin:_sf_plugins' + ) + ;; + + plugin:uninstall) + _message 'plugin name' + ;; + + plugin:upgrade) + _message 'plugin name' + ;; + + project:deploy) + _message 'server name' + ;; + + project:disable|project:enable) + args+=( + ':environment:_sf_environments' + '*:application:_sf_apps' + ) + ;; + + project:optimize) + args+=( + ':application:_sf_apps' + ':environment:_sf_environments' + ) + ;; + + propel:data-dump|doctrine:data-dump) + _message 'target filename' + ;; + + propel:data-load|doctrine:data-load) + args+=( + '*:file:_files' + ) + ;; + + propel:generate-admin) + args+=( + ':application:_sf_apps' + ':model:_sf_models' + ) + ;; + + propel:generate-module|propel:init-admin) + args+=( + ':application:_sf_apps' + ':module:_sf_modules_candidate' + ':model:_sf_models' + ) + ;; + + propel:generate-module-for-route|doctrine:generate-module-for-route) + args+=( + ':application:_sf_apps' + ':"route name":' + ) + ;; + + doctrine:create-model-tables|doctrine:delete-model-files) + args+=( + '*:model:_sf_doctrine_models' + ) + ;; + + doctrine:generate-admin) + args+=( + ':application:_sf_apps' + '*:model:_sf_doctrine_models' + ) + ;; + + doctrine:generate-module) + args+=( + ':application:_sf_apps' + ':module:_sf_doctrine_modules_candidate' + ':model:_sf_doctrine_models' + ) + ;; + + test:coverage) + args+=( + '*:file:_files' + ) + ;; + + test:functional) + args+=( + ':application:_sf_apps' + '*:test:_sf_functionaltests' + ) + ;; + + test:unit) + args+=( + '*:test:_sf_unittests' + ) + ;; + + esac + + _arguments "$args[@]" && ret=0 + return + ;; + esac + return ret +} + +_symfony10 () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \ + '(-V --version)'{-V,--version}'[version]' \ + '1: :->tasks' \ + '*:: :->args' && ret=0 + + case $state in + tasks) + _sf10_tasks + ;; + args) + local task args + + task=$words[1] + args=() + + case $task in + init-project) + _message 'new project name' + ;; + + init-app) + _message 'application name' + ;; + + init-module) + args+=( + ':application:_sf_apps' + ) + ;; + + init-batch) + args+=( + ':skeleton name:compadd default rotate' + ':"script name":' + ':application:_sf_apps' + ) + ;; + + init-controller) + args+=( + ':application:_sf_apps' + ':environment:_sf_environments' + ':"script name":' + ':"debug?":compadd true false' + ) + ;; + + log-rotate) + args+=( + ':application:_sf_apps' + ':environment:_sf_environments' + ) + ;; + + propel-load-data|propel-build-all-load) + args+=( + ':application:_sf_apps' + ':environment:_sf_environments' + ':fixtures:_sf_fixtures' + ) + ;; + + clear-cache|cc) + args+=( + ':application:_sf_apps' + ':what:compadd template config' + ) + ;; + + sync) + args+=( + ':environment:_sf_environments' + ':"real run?":compadd go' + ) + ;; + + propel-init-crud|propel*-init-admin|propel-generate-crud) + args+=( + ':application:_sf_apps' + ':module:_sf_modules_candidate' + ':model:_sf_models' + ) + ;; + + doctrine-init-admin|doctrine-generate-crud) + args+=( + ':application:_sf_apps' + ':module:_sf_doctrine_modules_candidate' + ':model:_sf_doctrine_models' + ) + ;; + + test-unit) + args+=( + ':test:_sf_unittests' + ) + ;; + + test-functional) + args+=( + ':application:_sf_apps' + ':test:_sf_functionaltests' + ) + ;; + + esac + + _arguments "$args[@]" && ret=0 + return + ;; + esac + return ret +} + +_sf_tasks () { + local tmp ns line cache_task + + cache_task=$(_get_sf_cache_var task) + (( ${(P)+cache_task} == 0 )) && { + tmp=( + ${${${(f)${"$($service -T)"##*Available tasks:}}##[[:blank:]][[:blank:]]}%%[[:blank:]]*} + ) + eval "$cache_task=()" + ns='' + + for line in $tmp; do + if [ $line[1] = ":" ] ; then + eval "$cache_task+=( ${ns}${line#:} )" + else + ns="${line}:" + fi + done + } + + _wanted symfony-task expl 'Symfony task' compadd -a $cache_task +} + +_sf10_tasks () { + local sf_tasks + + sf_tasks=( + ${${${(f)${"$($service -T)"#available pake tasks:}%%task aliases:*}#[[:blank:]][[:blank:]]}/[[:blank:]]*>[[:blank:]]/:} + ) + + _describe -t symfony-tasks 'Symfony task' sf_tasks +} + +_sf_apps () { + _wanted application expl 'application' compadd \ + ${$(echo apps/*):t} +} + +_sf_environments () { + local app + + app=$([ -f apps/"$words[2]"/config/settings.yml ] && echo $words[2] || echo frontend) + if [ -r apps/$app/config/settings.yml ] ; then + _wanted environment expl 'environment' compadd \ + ${${${(M)${(@f)"$( +# +# ------------------------------------------------------------------------------ + +_arguments \ + '--here[set up the first window in the current window]' \ + '--edit[edit the YAML layout file instead of using it]' \ + '--layout [use a specific layout file, instead of \`~/.teamocil/.yml\`]' \ + '--list[list all available layouts in \`~/.teamocil/\`]' \ + '--show[show the content of the layout file instead of executing it]' \ + '*:teamocil layouts:_files -W ~/.teamocil -g "*.yml(:r)"' diff --git a/.zprezto/modules/completion/external/src/_thor b/.zprezto/modules/completion/external/src/_thor new file mode 100644 index 0000000..62e56a3 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_thor @@ -0,0 +1,28 @@ +#compdef thor +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for thor (https://github.com/wycats/thor). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/thor +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Andrew Hodges (https://github.com/betawaffle) +# +# ------------------------------------------------------------------------------ + + +# FIXME This should be rewritten using up-to-date ZSH completion API. +compadd `thor list | grep thor | cut -d " " -f 2` + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_tmuxinator b/.zprezto/modules/completion/external/src/_tmuxinator new file mode 100644 index 0000000..d85b6ef --- /dev/null +++ b/.zprezto/modules/completion/external/src/_tmuxinator @@ -0,0 +1,43 @@ +#compdef tmuxinator mux +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for tmuxinator (https://github.com/tmuxinator/tmuxinator) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Christopher Chow (https://github.com/Soliah) +# +# ------------------------------------------------------------------------------ + +_tmuxinator() { + local commands projects + commands=(${(f)"$(tmuxinator commands zsh)"}) + projects=(${(f)"$(tmuxinator completions start)"}) + + if (( CURRENT == 2 )); then + _describe -t commands "tmuxinator subcommands" commands + _describe -t projects "tmuxinator projects" projects + elif (( CURRENT == 3)); then + case $words[2] in + copy|debug|delete|open|start) + _arguments '*:projects:($projects)' + ;; + esac + fi + + return +} + +_tmuxinator + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_vagrant b/.zprezto/modules/completion/external/src/_vagrant new file mode 100644 index 0000000..c6ea59e --- /dev/null +++ b/.zprezto/modules/completion/external/src/_vagrant @@ -0,0 +1,239 @@ +#compdef vagrant +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Vagrant (http://vagrantup.com). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/vagrant +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nikita Fedyashev (https://github.com/nfedyashev) +# * Mark Cornick (https://github.com/markcornick) +# +# ------------------------------------------------------------------------------ + +# vagrant zsh completion + +local -a _1st_arguments +_1st_arguments=( + 'box:Box commands' + 'connect:Connects to a shared, remote Vagrant environment' + 'destroy:Destroys the vagrant environment' + 'docker-logs:Shows Docker logs' + 'docker-run:Run one-off commands against a Docker container' + 'global-status:Reports the status of all active Vagrant environments on the system' + 'halt:Halts the currently running vagrant environment' + 'help:[TASK] Describe available tasks or one specific task' + 'init:[box_name] [box_url] Initializes current folder for Vagrant usage' + 'list-commands:Outputs all available Vagrant subcommands' + 'login:Authenticates against a Vagrant Cloud server to access protected boxes' + 'package:Packages a vagrant environment for distribution' + 'plugin:Manage plugins' + 'provision:Run the provisioner' + 'push:Deploys code in this environment to a configured destination' + 'rdp:Connects to machine via RDP' + 'reload:Reload the vagrant environment' + 'resume:Resumes a suspend vagrant environment' + 'rsync:Syncs rsync synced folders to remote machine' + 'rsync-auto:Syncs rsync synced folders automatically when files change' + 'share:Shares the Vagrant environment and allows remote access' + 'ssh:SSH into the currently running environment' + 'ssh-config:Outputs .ssh/config valid syntax for connecting to this environment via ssh' + 'status:Shows the status of the current Vagrant environment' + 'suspend:Suspends the currently running vagrant environment' + 'up:Creates the vagrant environment' + 'version:Prints the currently installed Vagrant version and checks for new updates' + '--version:Prints the Vagrant version information' +) + +local -a _box_arguments +_box_arguments=( + 'add:NAME URI Add a box to the system' + 'help:COMMAND Describe subcommands or one specific subcommand' + 'list:Lists all installed boxes' + 'outdated:Checks if there is a new version available for the box' + 'remove:NAME Remove a box from the system' + 'repackage:NAME Repackage an installed box into a `.box` file.' + 'update:Updates the box, if there any updates available' +) + +local -a _plugin_arguments +_plugin_arguments=( + 'install:NAME Install a plugin to the system' + 'license:NAME LICENSE_FILE Add a license for an installed plugin' + 'list:Lists all installed plugins' + 'uninstall:NAME Uninstall a plugin from the system' + 'update:[NAMES...] Update all or specified plugins' +) + +__task_list () +{ + local expl + declare -a tasks + + tasks=(box destroy global-status halt init package plugin provision \ + reload resume ssh ssh_config status suspend up version) + + _wanted tasks expl 'help' compadd $tasks +} + +__box_list () +{ + _wanted application expl 'command' compadd $(command vagrant box list | \ + awk '{print $1}' | \ + sed -e 's/ /\\ /g') +} + +__plugin_list () +{ + _wanted application expl 'command' compadd $(command vagrant plugin list \ + 2>/dev/null| cut -d' ' -f1) +} + +_vagrant_caching_policy() +{ + local reg_time comp_time check_file + + case "${1##*/}" in + VAGRANT_VMS) + if [[ -z $VAGRANT_CWD ]]; then + check_file=./Vagrantfile + else + check_file=$VAGRANT_CWD/Vagrantfile + fi + ;; + *) + echo "unknown type: $1" + return -1 + ;; + esac + + case $(uname -s) in + Darwin) STATCMD="stat -f '%c'" ;; + *) STATCMD="stat -c '%Z'" ;; + esac + reg_time=${$(${(z)STATCMD} $check_file):Q} + comp_time=${$(${(z)STATCMD} $1):Q} + + return $(( reg_time < comp_time )) +} + +__vm_list () +{ + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + zstyle ":completion:${curcontext}:" cache-policy \ + ${cache_policy:-_vagrant_caching_policy} + + # Cache the list of VMs available + if ( [[ ${+_vagrant_vms} -eq 0 ]] || _cache_invalid VAGRANT_VMS ) && + ! _retrieve_cache VAGRANT_VMS; + then + _vagrant_vms=( $(_call_program path-all "vagrant status | \ + awk '{print \$1}' | \ + egrep -v '^$|^(Current|This|above|VM,)$'" ) ) + _store_cache VAGRANT_VMS _vagrant_vms + fi + + _wanted application expl 'command' compadd $_vagrant_vms +} + +__vagrant-box () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "gem subcommand" _box_arguments + return + ;; + + (options) + case $line[1] in + (repackage|remove) + _arguments ':feature:__box_list' + ;; + esac + ;; + esac +} + +__vagrant-plugin () +{ + local curcontext="$curcontext" state line + local -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "gem subcommand" _plugin_arguments + return + ;; + + (options) + case $line[1] in + (license) + _arguments ':feature:__plugin_list' '*:file:_files' + ;; + (uninstall) + _arguments ':feature:__plugin_list' + ;; + esac + ;; + esac +} + +local expl +local -a boxes installed_boxes + +local curcontext="$curcontext" state line +local -A opt_args + +_arguments -C \ + ':command:->command' \ + '*::options:->options' + +case $state in + (command) + _describe -t commands "gem subcommand" _1st_arguments + return + ;; + + (options) + case $line[1] in + (help) + _arguments ':feature:__task_list' + ;; + + (box) + __vagrant-box + ;; + + (plugin) + __vagrant-plugin + ;; + (up|provision|package|destroy|reload|ssh|halt|resume|status|suspend) + _arguments ':feature:__vm_list' + esac + ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_veewee b/.zprezto/modules/completion/external/src/_veewee new file mode 100644 index 0000000..3de9adb --- /dev/null +++ b/.zprezto/modules/completion/external/src/_veewee @@ -0,0 +1,164 @@ +#compdef veewee +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for veewee 0.3.7 (https://github.com/jedi4ever/veewee) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Marius Bergmann (https://github.com/mbrgm) +# +# ------------------------------------------------------------------------------ + +typeset curcontext state line cmds ret + +curcontext="$curcontext" +ret=1 + +_arguments -C \ + '--debug' \ + '--workdir=[Change the working directory (the folder containing the definitions folder).]:directory:_files -/' \ + '1: :->cmds' \ + '2: :->providers' \ + '*: :->args' && ret=0 + + +local -a provider_cmds; provider_cmds=( + 'build:Build box' + 'copy:Copy a file to the VM' + 'define:Define a new basebox starting from a template' + 'destroy:Destroys the virtualmachine that was built' + 'halt:Activates a shutdown the virtualmachine' + 'help:Describe subcommands or one specific subcommand' + 'list:Lists all defined boxes' + 'ostypes:List the available Operating System types' + 'sendkeys:Sends the key sequence (comma separated) to the box. E.g for testing the :boot_cmd_sequence' + 'ssh:SSH to box' + 'templates:List the currently available templates' + 'undefine:Removes the definition of a basebox' + 'up:Starts a Box' + 'validate:Validates a box against vmfusion compliancy rules' + 'winrm:Execute command via winrm' +) + +case $state in + cmds) + local -a cmds; cmds=( + 'fusion:Subcommand for Vmware fusion' + 'help:Describe available commands or one specific command' + 'kvm:Subcommand for KVM' + 'parallels:Subcommand for Parallels' + 'vbox:Subcommand for VirtualBox' + 'version:Prints the Veewee version information' + ) + + _describe -t commands 'veewee command' cmds && ret=0 + ;; + + providers) + case $line[1] in + (help) + local -a cmds; cmds=( + 'fusion' + 'help' + 'kvm' + 'parallels' + 'vbox' + 'version' + ) + + _values -S , 'commands' $cmds && ret=0 + ;; + + (fusion) + provider_cmds+='add_share:Adds a share to the guest' + provider_cmds+='export:Exports the basebox to the vagrant format' + + _describe -t commands 'veewee fusion command' provider_cmds && ret=0 + ;; + + (kvm) + provider_cmds+='export:Exports the basebox to the vagrant format' + + _describe -t commands 'veewee kvm command' provider_cmds && ret=0 + ;; + + (parallels) + _describe -t commands 'veewee parallels command' provider_cmds && ret=0 + ;; + + (vbox) + + provider_cmds+='export:Exports the basebox to the vagrant format' + provider_cmds+='screenshot:Takes a screenshot of the box' + + _describe -t commands 'veewee vbox command' provider_cmds && ret=0 + ;; + esac; + ;; + args) + case $line[2] in + (add_share|build|copy|destroy|export|halt|screenshot|sendkeys|ssh|undefine|up|validate|winrm) + if [ ${#line[@]} -eq 3 ]; then + boxes=( ${(f)"$(ls -1 ./definitions)"} ) + _values -S , 'boxes' $boxes && ret=0 + fi + ;; + (define) + if [ ${#line[@]} -eq 4 ]; then + templates=( ${(f)"$(_call_program templates veewee $line[1] templates | awk '/^veewee.+define/{sub(/^.+>[:\47] [:\47]/, "");sub(/[:\47].+$/, "");print}')"} ) + _values -S , 'templates' $templates && ret=0 + fi + ;; + (help) + local -a cmds; cmds=( + 'build' + 'copy' + 'define' + 'destroy' + 'halt' + 'help' + 'list' + 'ostypes' + 'sendkeys' + 'ssh' + 'templates' + 'undefine' + 'up' + 'validate' + 'winrm' + ) + if [ $line[1] = "fusion" ]; then + cmds+='add_share' + cmds+='export' + elif [ $line[1] = "kvm" ]; then + cmds+='export' + elif [ $line[1] = "vbox" ]; then + cmds+='export' + cmds+='screenshot' + fi + _values -S , 'commands' $cmds && ret=0 + ;; + esac; + case $line[2] in + (add_share) + if [ ${#line[@]} -eq 5 ]; then + _arguments "*::filename:_files" + fi + ;; + (copy) + if [ ${#line[@]} -eq 4 ]; then + _arguments "*::filename:_files" + fi + ;; + (screenshot) + if [ ${#line[@]} -eq 4 ]; then + _arguments "*::filename:_files" + fi + ;; + esac; + ;; +esac; diff --git a/.zprezto/modules/completion/external/src/_virsh b/.zprezto/modules/completion/external/src/_virsh new file mode 100644 index 0000000..3dee9c7 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_virsh @@ -0,0 +1,278 @@ +#compdef virsh +# ------------------------------------------------------------------------------ +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for LibVirt's Shell (virsh) (http://libvirt.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jan-Philipp Litza +# * Vadim A. Misbakh-Soloviov +# +# ------------------------------------------------------------------------------ + +local -a args reply + +function _virsh-domains() { + local -a out + out=( ${${${${(f)"$(virsh list "$@")"}:#(---| Id)*}## #[0-9-]## ##}%% *} ) + _describe -t domains "${${1#--}:-running} domains" out + return $? +} + +local -a expand_files +expand_files=(/$'[^\0]##\0'/ ':file:file name:_files') + +local -a expand_dirs +expand_dirs=(/$'[^\0]##\0'/ ":dir:dir name:_files -/") + +local -a expand_domains +expand_domains=( + /$'[^\0]##\0'/ + ":domains:domains:{_virsh-domains --all}" +) + +local -a expand_domains_running +expand_domains_running=( + /$'[^\0]##\0'/ + ":domains:running domains:{_virsh-domains}" +) + +local -a expand_domains_inactive +expand_domains_inactive=( + /$'[^\0]##\0'/ + ":domains:inactive domains:{_virsh-domains --inactive}" +) + +local -a expand_kilobytes +expand_kilobytes=( + /'\d+'/ + ":kilobytes:kilobytes:" +) + +local -a expand_count +expand_count=( + /'\d+'/ + ":count:count:" +) + +local -a subcmd_help +subcmd_help=( + /$'[^\0]##\0'/ + ":command:virsh command:" +) + +local -a subcmd_list +_regex_words \ + list-options 'list options' \ + '--all:list all domains, not only active' \ + '--inactive:list only inactive domains' +subcmd_list=("$reply[@]") + +local -a subcmd_freecell +subcmd_freecell=( + /'\d*'/ + ":numa-cell:NUMA cell:" +) + +local -a subcmd_autostart +_regex_words \ + autostart-options 'autostart options' \ + '--disable:disables autostart instead of enabling' +subcmd_autostart=("(" "$reply[@]" "|" ")" $expand_domains) + +local -a subcmd_create +_regex_words \ + create-options 'create options' \ + '--console:attach to the console after creation' \ + '--paused:pause domain after creation (if supported by driver)' +subcmd_create=("(" "$reply[@]" "|" ")" $expand_files) + +local -a subcmd_dumpxml +_regex_words \ + dumpxml-options 'dumpxml options' \ + '--inactive:use the config for next reboot instead of current' \ + '--security-info:include security sensitive information' \ + '--update-cpu:update CPU requirements according to host CPU' +subcmd_dumpxml=("(" "$reply[@]" "|" ")" $expand_domains) + +local -a subcmd_start +_regex_words \ + start-options 'start options' \ + '--console:attach to console after start' \ + '--paused: pause after start (if supported by driver)' +subcmd_start=("(" "$reply[@]" "|" ")" $expand_domains_inactive) + +args=( /$'[^\0]#\0'/ ) + +_regex_words \ + commands "virsh command" \ + 'help:print help:$subcmd_help' \ + 'attach-device:attach device from an XML file:$expand_domains $expand_files' \ + 'attach-disk:attach disk device' \ + 'attach-interface:attach network interface' \ + 'autostart:autostart a domain:$subcmd_autostart' \ + 'capabilities:capabilities:' \ + 'cd:change the current directory:$expand_dirs' \ + 'connect:(re)connect to hypervisor' \ + 'console:connect to the guest console:$expand_domains_running' \ + 'cpu-baseline:compute baseline CPU:$expand_files' \ + 'cpu-compare:compare host CPU with a CPU described by an XML file:$expand_files' \ + 'create:create a domain from an XML file:$subcmd_create' \ + 'start:start a (previously defined) inactive domain:$subcmd_start' \ + 'destroy:destroy a domain:$expand_domains_running' \ + 'detach-device:detach device from an XML file:$expand_domains $expand_files' \ + 'detach-disk:detach disk device' \ + 'detach-interface:detach network interface' \ + 'define:define (but don'"\'"'t start) a domain from an XML file:$expand_files' \ + 'domid:convert a domain name or UUID to domain id:$expand_domains' \ + 'domuuid:convert a domain name or id to domain UUID:$expand_domains' \ + 'dominfo:domain information:$expand_domains' \ + 'domjobinfo:domain job information:$expand_domains' \ + 'domjobabort:abort active domain job:$expand_domains' \ + 'domname:convert a domain id or UUID to domain name:$expand_domains' \ + 'domstate:domain state:$expand_domains' \ + 'domblkstat:get device block stats for a domain' \ + 'domifstat:get network interface stats for a domain' \ + 'dommemstat:get memory statistics for a domain:$expand_domains_running' \ + 'domblkinfo:domain block device size information' \ + 'domxml-from-native:Convert native config to domain XML' \ + 'domxml-to-native:Convert domain XML to native config' \ + 'dumpxml:domain information in XML:$subcmd_dumpxml' \ + 'edit:edit XML configuration for a domain:$expand_domains' \ + 'find-storage-pool-sources:discover potential storage pool sources' \ + 'find-storage-pool-sources-as:find potential storage pool sources' \ + 'freecell:NUMA free memory:$subcmd_freecell' \ + 'hostname:print the hypervisor hostname:' \ + 'list:list domains:$subcmd_list' \ + 'migrate:migrate domain to another host' \ + 'migrate-setmaxdowntime:set maximum tolerable downtime' \ + 'net-autostart:autostart a network' \ + 'net-create:create a network from an XML file:$expand_files' \ + 'net-define:define (but don'"\'"'t start) a network from an XML file:$expand_files' \ + 'net-destroy:destroy a network' \ + 'net-dumpxml:network information in XML' \ + 'net-edit:edit XML configuration for a network' \ + 'net-list:list networks' \ + 'net-name:convert a network UUID to network name' \ + 'net-start:start a (previously defined) inactive network' \ + 'net-undefine:undefine an inactive network' \ + 'net-uuid:convert a network name to network UUID' \ + 'iface-list:list physical host interfaces' \ + 'iface-name:convert an interface MAC address to interface name' \ + 'iface-mac:convert an interface name to interface MAC address' \ + 'iface-dumpxml:interface information in XML' \ + 'iface-define:define (but don'"\'"'t start) a physical host interface from an XML file' \ + 'iface-undefine:undefine a physical host interface (remove it from configuration)' \ + 'iface-edit:edit XML configuration for a physical host interface' \ + 'iface-start:start a physical host interface (enable it / "if-up")' \ + 'iface-destroy:destroy a physical host interface (disable it / "if-down")' \ + 'managedsave:managed save of a domain state:$expand_domains_running' \ + 'managedsave-remove:Remove managed save of a domain:$expand_domains' \ + 'nodeinfo:node information:' \ + 'nodedev-list:enumerate devices on this host' \ + 'nodedev-dumpxml:node device details in XML' \ + 'nodedev-dettach:dettach node device from its device driver' \ + 'nodedev-reattach:reattach node device to its device driver' \ + 'nodedev-reset:reset node device' \ + 'nodedev-create:create a device defined by an XML file on the node' \ + 'nodedev-destroy:destroy a device on the node' \ + 'nwfilter-define:define or update a network filter from an XML file:$expand_files' \ + 'nwfilter-undefine:undefine a network filter' \ + 'nwfilter-dumpxml:network filter information in XML' \ + 'nwfilter-list:list network filters' \ + 'nwfilter-edit:edit XML configuration for a network filter' \ + 'pool-autostart:autostart a pool' \ + 'pool-build:build a pool' \ + 'pool-create:create a pool from an XML file:$expand_files' \ + 'pool-create-as:create a pool from a set of args' \ + 'pool-define:define (but don'"\'"'t start) a pool from an XML file:$expand_files' \ + 'pool-define-as:define a pool from a set of args' \ + 'pool-destroy:destroy a pool' \ + 'pool-delete:delete a pool' \ + 'pool-dumpxml:pool information in XML' \ + 'pool-edit:edit XML configuration for a storage pool' \ + 'pool-info:storage pool information' \ + 'pool-list:list pools' \ + 'pool-name:convert a pool UUID to pool name' \ + 'pool-refresh:refresh a pool' \ + 'pool-start:start a (previously defined) inactive pool' \ + 'pool-undefine:undefine an inactive pool' \ + 'pool-uuid:convert a pool name to pool UUID' \ + 'secret-define:define or modify a secret from an XML file:$expand_files' \ + 'secret-dumpxml:secret attributes in XML' \ + 'secret-set-value:set a secret value' \ + 'secret-get-value:Output a secret value' \ + 'secret-undefine:undefine a secret' \ + 'secret-list:list secrets' \ + 'pwd:print the current directory:' \ + 'quit:quit this interactive terminal:' \ + 'exit:quit this interactive terminal:' \ + 'reboot:reboot a domain:$expand_domains' \ + 'restore:restore a domain from a saved state in a file:$expand_files' \ + 'resume:resume a domain:$expand_domains_running' \ + 'save:save a domain state to a file:$expand_domains $expand_files' \ + 'schedinfo:show/set scheduler parameters' \ + 'dump:dump the core of a domain to a file for analysis:$expand_domains $expand_files' \ + 'shutdown:gracefully shutdown a domain:$expand_domains_running' \ + 'setmem:change memory allocation:$expand_domains $expand_kilobytes' \ + 'setmaxmem:change maximum memory limit:$expand_domains $expand_kilobytes' \ + 'setvcpus:change number of virtual CPUs:$expand_domains $expand_count' \ + 'suspend:suspend a domain:$expand_domains_running' \ + 'ttyconsole:tty console:$expand_domains_running' \ + 'undefine:undefine an inactive domain:$expand_domains_inactive' \ + 'update-device:update device from an XML file' \ + 'uri:print the hypervisor canonical URI:' \ + 'vol-create:create a vol from an XML file' \ + 'vol-create-from:create a vol, using another volume as input' \ + 'vol-create-as:create a volume from a set of args' \ + 'vol-clone:clone a volume.' \ + 'vol-delete:delete a vol' \ + 'vol-wipe:wipe a vol' \ + 'vol-dumpxml:vol information in XML' \ + 'vol-info:storage vol information' \ + 'vol-list:list vols' \ + 'vol-pool:returns the storage pool for a given volume key or path' \ + 'vol-path:returns the volume path for a given volume name or key' \ + 'vol-name:returns the volume name for a given volume key or path' \ + 'vol-key:returns the volume key for a given volume name or path' \ + 'vcpuinfo:domain vcpu information:$expand_domains_running' \ + 'vcpupin:control domain vcpu affinity' \ + 'version:show version:' \ + 'vncdisplay:vnc display:$expand_domains_running' \ + 'snapshot-create:Create a snapshot:$expand_domains $expand_files' \ + 'snapshot-current:Get the current snapshot:$expand_domains' \ + 'snapshot-delete:Delete a domain snapshot' \ + 'snapshot-dumpxml:Dump XML for a domain snapshot' \ + 'snapshot-list:List snapshots for a domain:$expand_domains' \ + 'snapshot-revert:Revert a domain to a snapshot' +args+=("$reply[@]") + +_regex_arguments _virsh "${args[@]}" + +_virsh "$@" diff --git a/.zprezto/modules/completion/external/src/_virtualbox b/.zprezto/modules/completion/external/src/_virtualbox new file mode 100644 index 0000000..de0e35a --- /dev/null +++ b/.zprezto/modules/completion/external/src/_virtualbox @@ -0,0 +1,327 @@ +#compdef VBoxManage=vboxmanage VBoxHeadless=vboxheadless +# ------------------------------------------------------------------------------ +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for VirtualBox (http://www.virtualbox.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_vboxmachines() { + VBoxManage list vms | egrep -o '^"[^"]+"' 2>/dev/null | sed -e 's|"||g' | while read machine; do + _wanted 'machine' expl 'machine' compadd $machine + done +} + +# Roughly guess command options +_vboxcommandoptions() { + cmd="$1" + cmdoutput=$(VBoxManage "$cmd" 2>/dev/null | tail -n +2 | grep -v 'Syntax error:' | grep -v '|' | sed 's|<[^>]\+>||g' | sed 's|VBoxManage [^ ]\+ | |') + + optcount=0 + option="" + optlines=() + echo "$cmdoutput" | egrep -o ' [\[A-Za-z0-9\-\<].*' | while read line; do + option="${option}${line}" + if [[ $line[-1] != '|' ]]; then + optcount=$(($optcount+1)) + optlines[$optcount]="$option" + option="" + fi + done + + # optionals ([abc]) + for line in $optlines; do + echo "$line" | egrep -o '\[[^]]+\]' | while read option; do + option=$(echo $option | sed 's|[]\[]||g' | cut -d ' ' -f 1) + _options=(${(s:|:)option}) + for option in $_options; do + _wanted "${cmd}_option" expl "${cmd} option" compadd -- $option + done + done + done + + # mandatory + for line in $optlines; do + echo "$line" | sed 's|\[[^]]\+\]|\n|g' | while read option; do + if [[ "$option" != "" ]]; then + _option=$(echo $option | cut -d ' ' -f 1) + _options=(${(s:|:)option}) + for option in $_options; do + _wanted "${cmd}_option" expl "${cmd} option" compadd -- $option + done + fi + done + done +} + +# List possible mediums +_vboxmediums() { + _wanted "mediums" expl "mediums" compadd -- "none" + _wanted "mediums" expl "mediums" compadd -- "emptydrive" + _wanted "mediums" expl "mediums" compadd -- "iscsi" + + _files -g '*.{iso,vmdk,vdi}' + + for CD in /dev/cd/*; do + readlink -f $CD + done | uniq | while read CD; do + _wanted "host drives" expl "host drives" compadd -- "host:$CD" + done +} + +# List available os types +_vboxostypes() { + VBoxManage list ostypes | grep '^ID' | awk '{print $2}' | while read OSTYPE; do + _wanted 'ostype' expl 'os type' compadd -- $OSTYPE + done +} + +# Guess options for this commands +_vboxopts_controlvm() { _vboxcommandoptions controlvm } +_vboxopts_modifyvm() { _vboxcommandoptions modifyvm } +_vboxopts_export() { _vboxcommandoptions export } + +_vboxmanage() { + local -a _1st_arguments + _1st_arguments=( + "list:gives information about VirtualBox's current settings" + 'showvminfo:shows information about a particular virtual machine' + 'registervm:import a virtual machine definition in an XML file into VirtualBox' + 'unregistervm:unregisters a virtual machine' + 'createvm:creates a new XML virtual machine definition file' + 'modifyvm:changes the properties of a registered virtual machine which is not running' + 'import:imports a virtual appliance in OVF format by copying the virtual disk images and creating virtual machines in VirtualBox' + 'export:exports one or more virtual machines from VirtualBox into a virtual appliance in OVF format' + 'startvm:starts a virtual machine that is currently in the "Powered off" or "Saved" states' + 'controlvm:change the state of a virtual machine that is currently running' + 'discardstate:discards the saved state of a virtual machine which is not currently running' + 'adoptstate:adopt a saved state file (.sav)' + 'snapshot:control snapshots' + 'closemedium:removes a hard disk, DVD or floppy image from a VirtualBox media registry' + 'storageattach:attaches/modifies/removes a storage medium connected to a storage controller' + 'storagectl:attaches/modifies/removes a storage controller' + 'bandwidthctl:creates/deletes/modifies bandwidth groups' + 'showhdinfo:shows information about a virtual hard disk image' + 'createhd:creates a new virtual hard disk image' + 'modifyhd:change the characteristics of a disk image after it has been created' + 'clonehd:duplicates a registered virtual hard disk image to a new image file with a new unique identifier' + 'convertfromraw:converts a raw disk image to a VirtualBox Disk Image (VDI) file' + 'getextradata:retrieve string data to a virtual machine or to a VirtualBox configuration' + 'setextradata:attach string data to a virtual machine or to a VirtualBox configuration' + 'setproperty:change global settings which affect the entire VirtualBox installation' + 'usbfilter:used for working with USB filters in virtual machines, or global filters' + 'sharedfolder:share folders on the host computer with guest operating systems' + 'guestproperty:get or set properties of a running virtual machine' + 'guestcontrol:control certain things inside a guest from the host' + 'debugvm:for experts who want to tinker with the exact details of virtual machine execution' + 'metrics:monitor the usage of system resources' + 'hostonlyif:change the IP configuration of a host-only network interface' + 'dhcpserver:control the DHCP server that is built into VirtualBox' + 'extpack:add or remove VirtualBox extension packs' + ) + + local context state line expl + local -A opt_args + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "VBoxManage commands" _1st_arguments -V1 + return + fi + + case "$words[1]" in + list) + _arguments \ + '--long' \ + ':list option:(vms runningvms ostypes hostdvds hostfloppies bridgedifs hostonlyifs dhcpservers hostinfo hostcpuids hddbackends hdds dvds floppies usbhost usbfilters systemproperties extpacks)' + ;; + showvminfo) + _arguments \ + :machine:_vboxmachines \ + '--details' \ + '--machinereadable' \ + '--log: :' + ;; + unregistervm) + _arguments \ + :machine:_vboxmachines \ + '--delete' + ;; + createvm) + _arguments \ + '--name: :' \ + '--ostype:os type:_vboxostypes' \ + '--register' \ + '--basefolder:folder:_files -/' \ + '--settingsfile:file:_files' \ + '--uuid: :' + ;; + modifyvm) + _arguments \ + :machine:_vboxmachines \ + :modifyvm_option:_vboxopts_modifyvm + ;; + modifyhd) + _arguments \ + :filename:_files \ + '--type:hd type:(normal writethrough immutable shareable readonly multiattach)' \ + '--autoreset:on off:(on off)' \ + '--property: :' \ + '--compact' \ + '--resize:megabytes:' \ + '--resizebyte:bytes:' + ;; + import) + _arguments \ + ':ovf file:_files -g \*.{ovf,ova}' \ + '--dry-run' + ;; + export) + _arguments \ + :machine:_vboxmachines \ + :export_option:_vboxopts_export + ;; + startvm) + _arguments \ + :machine:_vboxmachines \ + '--type:running mode:(gui sdl headless)' + ;; + controlvm) + _arguments \ + :machine:_vboxmachines \ + :controlvm_option:_vboxopts_controlvm + ;; + adoptstate) + _arguments \ + :machine:_vboxmachines \ + ':sav file:_files -g \*.sav' + ;; + closemedium) + _arguments \ + ':type:(disk dvd floppy)' \ + ':file:_files' \ + '--delete' + ;; + discardstate|bandwidthctl|getextradata|setextradata|debugvm) + _arguments \ + :machine:_vboxmachines + ;; + storagectl) + _arguments \ + :machine:_vboxmachines \ + '--name: :' \ + '--add:type:(ide scsi floppy sas)' \ + '--controller:type:(LSILogic|LSILogicSAS|BusLogic|IntelAHCI|PIIX3|PIIX4|ICH6|I82078)' \ + --sataideemulation{1..4}":port:({1..30})" \ + "--sataportcount:num:({1..30})" \ + '--hostiocache:bool:(on off)' \ + '--bootable:bool:(on off)' \ + '--remove' #" + ;; + storageattach) + _arguments \ + :machine:_vboxmachines\ + '--storagectl:storage ctl:("IDE Controller" "SATA Controller")' \ + '--port: :' \ + '--device: :' \ + '--type:drive type:(dvddrive hdd fdd)' \ + '--medium:mediums:_vboxmediums' \ + '--mtype:behaviour:(normal writethrough immutable shareable)' \ + '--comment: :' \ + '--passthrough:enabled?:(on off)' \ + '--bandwidthgroup: :' \ + '--forceunmount' '--server: :' \ + '--target: :' \ + '--lun: :' \ + '--encodedlun: :' \ + '--username: :' \ + '--password: :' \ + '--intnet: :' + ;; + createhd) + _arguments \ + '--filename:filename:_files -g \*.{vdi,vmdk,vhd}' \ + '--size:megabytes:' \ + '--sizebyte:bytes:' \ + '--format:type:(VDI VMDK VHD)' \ + '--variant:type:(Standard Fixed Split2G Stream ESX)' + ;; + sharedfolder) + _arguments \ + ':action:(add remove)' \ + :machine:_vboxmachines \ + '--name: :' \ + '--hostpath:path:_files -/' \ + '--transient' \ + '--readonly' \ + '--automount' + ;; + esac + return 1 +} + +_vboxheadless() { + local context state line expl + local -A opt_args + + _arguments \ + '(-s -startvm --startvm)'{-s,-startvm,--startvm}'[Start given VM]:machine:_vboxmachines' \ + '(-n --vnc)'{-n,--vnc}'[Enable the built in VNC server]' \ + '(-m --vncport)'{-m,--vncport}'[TCP port number to use for the VNC server]:port:' \ + '(-o --vncpass)'{-o,--vncpass}'[Set the VNC server password]:pw:' \ + '(-v -vrde --vrde)'{-v,-vrde,--vrde}"[Enable (default) or disable the VRDE server or don't change the setting]::(on off config)" \ + '(-e -vrdeproperty --vrdeproperty)'{-e,-vrdeproperty,--vrdeproperty}'[Set a VRDE property]: :' \ + '(-c -capture --capture)'{-c,-capture,--capture}'[Record the VM screen output to a file]' \ + '(-w --width)'{-w,--width}'[Frame width when recording]:width:' \ + '(-h --height)'{-h,--height}'[Frame height when recording]:height:' \ + '(-r --bitrate)'{-r,--bitrate}'[Recording bit rate when recording]:bitrate:' \ + '(-f --filename)'{-f,--filename}'[File name when recording. The codec used will be chosen based on the file extension]:filename:_files' +} + +_virtualbox() { + local ret=1 + _call_function ret _$service + return ret +} + +_virtualbox "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_vnstat b/.zprezto/modules/completion/external/src/_vnstat new file mode 100644 index 0000000..bfb08dd --- /dev/null +++ b/.zprezto/modules/completion/external/src/_vnstat @@ -0,0 +1,114 @@ +#compdef vnstat +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for vnstat 1.10 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Aaron Schrab +# +# ------------------------------------------------------------------------------ + +local context state state_descr line +typeset -A opt_args + +local period="-d --days -h --hours -m --months -w --weeks" + +_arguments : \ + '--cleartop[Remove all top 10 entries]' \ + '--config[Specify alternate configuration file]:file:_files' \ + "($period)"{-d,--days}'[Show traffic for days]' \ + "($period)"{-h,--hours}'[Show trafic for last 24 hours]' \ + "($period)"{-m,--months}'[Show traffic for months]' \ + "($period)"{-w,--weeks}'[Show traffic for 7 days]' \ + '--dbdir[Specify database directory]:directory:_files -/' \ + '(-D --debug)'{-D,--debug}'[Show additional debug output]' \ + '--delete[Delete database and stop monitoring selected interface]' \ + '--dumpdb[Dump database in parseable format]' \ + '(--disable)--enable[Enable updates for selected interface]' \ + '(--enable)--disable[Disable updates for selected interface]' \ + '(-i --iface)'{-i,--iface}'[Specify interface for actions]:interface:->interface' \ + '--iflist[List available interfaces]' \ + '(-l --live)'{-l,--live}'[Display current transfer rate]:mode:->live' \ + '--locale[Specify locale]:locale:' \ + '--nick[Set nickname for alias]:nickname:' \ + '--oneline[Traffic summary in one-line, parseable format]' \ + '(-q --query)'{-q,--query}'[Force database query mode]' \ + '(-r --reset)'{-r,--reset}'[Reset internal counters]' \ + '--rebuildtotal[Reset total trafic counters]' \ + '(-ru --rateunit)'{-ru,--rateunit}'[Swap configured rate unit]' \ + '--savemerged[Write result of database merge]' \ + '(-s --short)'{-s,--short}'[Use short output mode]' \ + '--style[Modify content and style of output]:style:->style' \ + '--sync[Synchronize internal counters]' \ + '--testkernel[Test kernel boot time information]' \ + '(-t --top10)'{-t,--top10}'[Show all time top 10 traffic days]' \ + '-tr[Calculate amount of traffic in given time]:seconds:' \ + '(-u --update)'{-u,--update}'[Update databases]' \ + '--xml[Show database content in XML format]' \ + '(-)'{-v,--version}'[Show current version]' \ + '(-)'{-\?,--help}'[Show command summary]' \ + '(-)--longhelp[Show complete options list]' \ + && ret=0 + +case "$state" in + + (live) + _values 'Live mode' \ + '0[Packets per second]' \ + '1[Traffic counters]' + ;; + + (style) + _values 'Output style' \ + '0[Narrow output]' \ + '1[Enable bar column]' \ + '2[Bar column with average traffic rate]' \ + '3[Enable average traffic rate]' \ + '4[Disable use of terminal control characters]' + ;; + + (interface) + local interfaces="$(_call_program interfaces 'vnstat --iflist')" + interfaces="${interfaces#*:}" + _values -s + 'Interface' ${(z)interfaces} + ;; + +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: filetype=zsh shiftwidth=2 tabstop=2 expandtab diff --git a/.zprezto/modules/completion/external/src/_vpnc b/.zprezto/modules/completion/external/src/_vpnc new file mode 100644 index 0000000..b5235e4 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_vpnc @@ -0,0 +1,207 @@ +#compdef vpnc vpnc-connect vpnc-disconnect +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for vpnc. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +(( $+functions[_vpnc-connect] )) || +_vpnc-connect() { + _arguments \ + '(- : *)--version[display version information]' \ + '(- : *)--'{,long-}'help[display help information]' \ + '--gateway[IP/name of your IPSec gateway]: :_hosts' \ + '--id[your group name]: :_groups' \ + '--username[your username]: :_users' \ + '--domain[domain name for authentication]: :_domains' \ + '--xauth-inter[enable interactive extended authentication]' \ + '--vendor[vendor of your IPSec gateway]: :_vpnc_gateway_vendors' \ + '--natt-mode[NAT-Traversal method]: :_vpnc_nat_traversal_methods' \ + '--script[command executed using system() to configure the interface, routing and so on]:command path:_files' \ + '--dh[name of the IKE DH Group]: :_vpnc_ike_diffie_hellman_groups' \ + '--pfs[Diffie-Hellman group to use for PFS]: :_vpnc_pfs_diffie_hellman_groups' \ + '--enable-1des[enable weak single DES encryption]' \ + '--enable-no-encryption[enable using no encryption for data traffic (key exchanged must be encrypted)]' \ + '--application-version[application version to report]:application version' \ + '--ifname[visible name of the TUN/TAP interface]:name' \ + '--ifmode[mode of TUN/TAP interface]: :_vpnc_tun_tap_modes' \ + '--debug[show verbose debug messages]: :_vpnc_debug_levels' \ + '--no-detach[Don'\''t detach from the console after login]' \ + '--pid-file[store the pid of background process in the file]:pid file:_files' \ + '--local-addr[local IP to use for ISAKMP/ESP/...]: :_hosts' \ + '--local-port[local ISAKMP port number to use]: :_vpnc_isakmp_port_numbers' \ + '--udp-port[local UDP port number to use]: :_vpnc_udp_port_numbers' \ + '--dpd-idle[send DPD packet after not receiving anything for X seconds]: :_vpnc_dpd_idle_times' \ + '--non-inter[Don'\''t ask anything, exit on missing options]' \ + '--auth-mode[authentication mode]: :_vpnc_authentication_modes' \ + '--ca-file[filename and path to the CA-PEM-File]:CA-PEM file:_files' \ + '--ca-dir[path of the trusted CA-Directory]:CA directory:_files -/' \ + '--target-network[target network in dotted decimal or CIDR notation]:target network/netmask' \ + '--print-config[print your configuration; output can be used as vpnc.conf]' \ + '*: :_vpnc_confs' +} + +(( $+functions[_vpnc-disconnect] )) || +_vpnc-disconnect() { + _message 'no more arguments' +} + +(( $+functions[_vpnc_confs] )) || +_vpnc_confs() { + # FIXME /etc/vpnc/ is only accessible to root, how do we deal with this ? + local confs; confs=(/etc/vpnc/*.conf(:t:s/\.conf/)) + _describe -t confs 'VPNC conf' confs "$@" +} + +(( $+functions[_vpnc_gateway_vendors] )) || +_vpnc_gateway_vendors() { + local vendors; vendors=( + 'cisco' + 'netscreen' + ) + _describe -t vendors 'vendor' vendors "$@" +} + +(( $+functions[_vpnc_nat_traversal_methods] )) || +_vpnc_nat_traversal_methods() { + local methods; methods=( + 'natt:NAT-T as defined in RFC3947 (default)' + 'none:disable use of any NAT-T method' + 'force-natt:always use NAT-T encapsulation even without presence of a NAT device' + 'cisco-udp:Cisco proprietary UDP encapsulation, commonly over Port 10000' + ) + _describe -t methods 'NAT traversal method' methods "$@" +} + +(( $+functions[_vpnc_ike_diffie_hellman_groups] )) || +_vpnc_ike_diffie_hellman_groups() { + local groups; groups=( + 'dh1' + 'dh2' + 'dh5' + ) + _describe -t groups 'IKE Diffie Hellman group' groups "$@" +} + +(( $+functions[_vpnc_pfs_diffie_hellman_groups] )) || +_vpnc_pfs_diffie_hellman_groups() { + local groups; groups=( + 'nopfs' + 'dh1' + 'dh2' + 'dh5' + 'server' + ) + _describe -t groups 'PFS Diffie Hellman group' groups "$@" +} + +(( $+functions[_vpnc_tun_tap_modes] )) || +_vpnc_tun_tap_modes() { + local modes; modes=( + 'tun:virtual point to point interface (default)' + 'tap:virtual ethernet interface' + ) + _describe -t modes 'TUN/TAP interface mode' modes "$@" +} + +(( $+functions[_vpnc_debug_levels] )) || +_vpnc_debug_levels() { + local levels; levels=( + '0:do not print debug information' + '1:print minimal debug information' + '2:show statemachine and packet/payload type information' + '3:dump everything excluding authentication data' + '99:dump everything INCLUDING AUTHENTICATION data (e.g. PASSWORDS)' + ) + _describe -t levels 'debug level' levels "$@" +} + +(( $+functions[_vpnc_isakmp_port_numbers] )) || +_vpnc_isakmp_port_numbers() { + local ports; ports=( + '0:use random port' + '1:minimum port number' + '500:default port number' + '65535:maximum port number' + ) + _describe -t ports 'ISAKMP port number' ports "$@" +} + +(( $+functions[_vpnc_udp_port_numbers] )) || +_vpnc_udp_port_numbers() { + local ports; ports=( + '0:use random port' + '1:minimum port number' + '10000:default port number' + '65535:maximum port number' + ) + _describe -t ports 'UDP port number' ports "$@" +} + +(( $+functions[_vpnc_dpd_idle_times] )) || +_vpnc_dpd_idle_times() { + local times; times=( + '0:completely disable DPD' + '10:minimum value' + '300:default value' + '86400:maximum value' + ) + _describe -t times 'DPD idle wait time (seconds)' times "$@" +} + +(( $+functions[_vpnc_authentication_modes] )) || +_vpnc_authentication_modes() { + local modes; modes=( + 'psk:pre-shared key (default)' + 'cert:server + client certificate' + 'hybrid:server certificate + xauth' + ) + _describe -t modes 'authentication mode' modes "$@" +} + +case $service in + vpnc|vpnc-connect) _call_function ret _vpnc-connect && return ret ;; + vpnc-disconnect) _call_function ret _vpnc-disconnect && return ret ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/completion/external/src/_watch b/.zprezto/modules/completion/external/src/_watch new file mode 100644 index 0000000..63bcddb --- /dev/null +++ b/.zprezto/modules/completion/external/src/_watch @@ -0,0 +1,55 @@ +#compdef watch +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for watch (https://gitorious.org/procps/procps). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nicolas Iooss (https://github.com/fishilico) +# +# ------------------------------------------------------------------------------ + +_arguments \ + '(-b --beep)'{-b,--beep}'[beep if command has a non-zero exit]' \ + '(-c --color)'{-c,--color}'[interpret ANSI color sequences]' \ + '(-d --differences)'{-d,--differences}'[highlight changes between updates]' \ + '(-d --differences)--differences=permanent[highlight changes since the first iteration]' \ + '(-e --errexit)'{-e,--errexit}'[exit if command has a non-zero exit]' \ + '(-g --chgexit)'{-g,--chgexit}'[exit when output from command changes]' \ + '(-n --interval)'{-n,--interval}'[seconds to wait between updates]:interval:' \ + '(-p --precise)'{-p,--precise}'[attempt run command in precise intervals]' \ + '(-t --no-title)'{-t,--no-title}'[turn off showing the header]' \ + '(-x --exec)'{-x,--exec}'[pass command to exec instead of "sh -c"]' \ + '(-h --help)'{-h,--help}'[display help information]' \ + '(-v --version)'{-v,--version}'[output version information]' \ + '(-):command: _command_names -e' \ + '*::arguments: _normal' diff --git a/.zprezto/modules/completion/external/src/_wemux b/.zprezto/modules/completion/external/src/_wemux new file mode 100644 index 0000000..d38fc28 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_wemux @@ -0,0 +1,82 @@ +#compdef wemux +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for wemux (https://github.com/zolrath/wemux) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +_wemux() { + + local -a host_commands client_commands multi_host_commands + + host_commands=( + 'start:Start the wemux server/attach to an existing wemux server.' + 'attach:Attach to an existing wemux server.' + 'stop:Kill the wemux server '\''wemux'\'', delete its socket.' + 'users:List all users currently attached to '\''wemux'\''' + 'kick:Disconnect an SSH user, remove their wemux server.' + 'config:Open the wemux configuration file in your $EDITOR.' + 'help:Display this screen.' + 'version:shows wemux version number' + ) + + client_commands=( + 'mirror:Attach to Host in read-only mode.' + 'pair:Attach to Host in pair mode, which allows editing.' + 'rogue:Attach to Host in rogue mode, which allows editing and switching to windows independently from the host.' + 'logout:Log out of the wemux rogueing session.' + 'users:List the currently attached wemux users.' + ) + + multi_host_commands=( + 'join:Join wemux server with supplied name.' + 'reset:Join default wemux server: wemux' + 'list:List all currently active wemux servers.' + ) + + if (( CURRENT == 2 )); then + _describe -t host_commands 'HOST COMMANDS' host_commands + _describe -t client_commands 'CLIENT COMMANDS' client_commands + _describe -t multi_host_commands 'MULTI-HOST COMMANDS' multi_host_commands + fi + + return 0 +} + +_wemux diff --git a/.zprezto/modules/completion/external/src/_xinput b/.zprezto/modules/completion/external/src/_xinput new file mode 100644 index 0000000..ae2b375 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_xinput @@ -0,0 +1,196 @@ +#compdef xinput +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for xinput +# TODO: Add property handler +# TODO: Add buttons handler +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Timofey Titovets +# +# ------------------------------------------------------------------------------ +_xinput(){ + # list of xinput arguments + local -a _1st_arguments + _1st_arguments=( + 'version:show version' '--version:show version' + 'help:show help options' '--help:show help options' + get-feedbacks + set-ptr-feedback + set-integer-feedback + get-button-map + set-button-map + set-pointer + 'set-mode:change the mode of device' '--set-mode:change the mode of device' + 'list:show devices' '--list:show devices' + query-state + test --test + create-master + remove-master + reattach + float + set-cp + test-xi2 + map-to-output + list-props + set-int-prop + set-float-prop + set-atom-prop + watch-props + delete-prop + set-prop + 'disable:disable the device' '--disable:disable the device' + 'enable:enable the device' '--enable:enable the device' + --get-feedbacks + --set-ptr-feedback + --set-integer-feedback + --get-button-map + --set-button-map + --set-pointer + --query-state + --create-master + --remove-master + --reattach + --float + --set-cp + --test-xi2 + --map-to-output + --list-props + --set-int-prop + --set-float-prop + --set-atom-prop + --watch-props + --delete-prop + --set-prop + ) + + local context state line expl + local -A opt_args + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "xinput commands" _1st_arguments -V1 + return + fi + + _xinput_devices_id=($(xinput list --id-only)) + for i in $(xinput list --id-only) + do + _xinput_devices_name[$i]="$(xinput list --name-only $i)" + done + _xinput_devices=( $_xinput_devices_id $_xinput_devices_name ) + + # xinput arguments handler + case "$words[1]" in + --get-feedbacks|--set-ptr-feedback|--get-button-map|--query-state|--list-props|--watch-props|get-feedbacks|set-ptr-feedback|get-button-map|query-state|list-props|watch-props|--enable|enable|--map-to-output|map-to-output|--disable|disable) + _arguments \ + ':list option:($_xinput_devices)' + ;; + --list|list) + _arguments \ + ':list option:($_xinput_devices --short --long --name-only --id-only)' \ + ':list option:(--short --long --name-only --id-only)' + ;; + --set-integer-feedback|set-integer-feedback) + _arguments \ + ':list option:($_xinput_devices)' \ + ':list option:( feedback )' \ + ':list option:( $_xinput_devices_id )' + ;; + --set-button-map|set-button-map) + _arguments \ + ':list option:($_xinput_devices)' #map button 1 [map button 2 [...]] + ;; + --set-pointer|set-pointer) + _arguments \ + ':list option:($_xinput_devices)' # [x index y index] + ;; + --set-mode|set-mode) + _arguments \ + ':list option:($_xinput_devices)' \ + ':list option:(ABSOLUTE RELATIVE)' + ;; + --test|test) + _arguments \ + ':list option:(-proximity $_xinput_devices )' \ + ':list option:($_xinput_devices)' + ;; + --reattach|reattach) + _arguments \ + ':list option:($_xinput_devices)' \ + ':list option:(master slave)' + ;; + --float|float) + _arguments \ + ':list option:($_xinput_devices_id)' + ;; + --test-xi2|test-xi2) + _arguments \ + ':list option:($_xinput_devices --root)' \ + ':list option:($_xinput_devices)' + ;; + --delete-prop|delete-prop) + _arguments \ + ':list option:($_xinput_devices)' #property + ;; + --create-master|create-master) + _arguments \ + ':list option:($_xinput_devices_id)' # [sendCore (dflt:1)] [enable (dflt:1)] + ;; + --remove-master|remove-master) + _arguments \ + ':list option:($_xinput_devices_id)' # [Floating|AttachToMaster (dflt:Floating)] [returnPointer] [returnKeyboard] + ;; + # --set-cp|set-cp); window device;; + --set-prop|set-prop) + _arguments \ + ':list option:($_xinput_devices)' \ + ':list option:(--type={atom,float,int} --format={8,16,32})' \ + ':list option:(--type={atom,float,int} --format={8,16,32})' # property val [val ...] + ;; + --set-int-prop|set-int-prop) + _arguments \ + ':list option:($_xinput_devices)' # property format (8, 16, 32) val [val ...] + ;; + --set-float-prop|set-float-prop) + _arguments \ + ':list option:($_xinput_devices)' # property val [val ...] + ;; + --set-atom-prop|set-atom-prop) + _arguments \ + ':list option:($_xinput_devices)' # property val [val ...] + ;; + esac +} + +_xinput "$@" diff --git a/.zprezto/modules/completion/external/src/_yaourt b/.zprezto/modules/completion/external/src/_yaourt new file mode 100644 index 0000000..e9db0da --- /dev/null +++ b/.zprezto/modules/completion/external/src/_yaourt @@ -0,0 +1,359 @@ +#compdef yaourt yaourt.static=yaourt + +# Completion file for yaourt, based on pacman's + +# copy this file to /usr/share/zsh/site-functions/_pacman + +# handles --help subcommand +_yaourt_action_help() { + _arguments -s : \ + "$_yaourt_opts_commands[@]" +} + +# handles cases where no subcommand has yet been given +_yaourt_action_none() { + _arguments -s : \ + "$_yaourt_opts_commands[@]" +} + +# handles --query subcommand +_yaourt_action_query() { + local context state line + typeset -A opt_args + +# _arguments -s : \ +# "$_yaourt_opts_common[@]" \ +# "$_yaourt_opts_query_actions[@]" \ +# "$_yaourt_opts_query_modifiers[@]" + + case $state in + query_file) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar.*"' + ;; + query_group) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:groups:_yaourt_completions_installed_groups' + ;; + query_owner) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:file:_files' + ;; + query_search) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_actions[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package:_yaourt_completions_installed_packages' + ;; + esac +} + +# handles --remove subcommand +_yaourt_action_remove() { + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_remove[@]" +} + +# handles --sync subcommand +_yaourt_action_sync() { + local context state line + typeset -A opt_args + +# _arguments -s : \ +# "$_yaourt_opts_common[@]" \ +# "$_yaourt_opts_sync_actions[@]" #\ +# #"$_yaourt_opts_sync_modifiers[@]" + + case $state in + sync_clean) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*-c[Remove old packages from cache]' \ + ;; + sync_group) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package group:_yaourt_completions_all_groups' + ;; + sync_search) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package:_yaourt_completions_all_packages' + ;; + esac +} + +# handles --upgrade subcommand +_yaourt_action_upgrade() { + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_pkgfile[@]" +} + +# handles --version subcommand +_yaourt_action_version() { + # no further arguments + return 0 +} + +# provides completions for package groups +_yaourt_completions_all_groups() { + local -a cmd groups + _yaourt_get_command + groups=( $(_call_program groups $cmd[@] -Sg) ) + typeset -U groups + compadd "$@" -a groups +} + +# provides completions for packages available from repositories +# these can be specified as either 'package' or 'repository/package' +_yaourt_completions_all_packages() { + local -a cmd packages repositories packages_long + _yaourt_get_command + + if compset -P1 '*/*'; then + packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) ) + typeset -U packages + if [[ -d /var/aur ]]; then + packages=( $packages $(ls /var/aur) ) + fi + _wanted repo_packages expl "repository/package" compadd ${(@)packages} + else + packages=( $(_call_program packages $cmd[@] -Sql) ) + typeset -U packages + if [[ -d /var/aur ]]; then + packages=( $packages $(ls /var/aur) ) + fi + _wanted packages expl "packages" compadd - "${(@)packages}" + + repositories=(${(o)${${${(M)${(f)"$(query_group' + '-o[Query the package that owns a file]:file:_files' + '-p[Package file to query]:*:package file:->query_file' + '-s[Search package names and descriptions]:*:search text:->query_search' + ) + + # options for passing to _arguments: options for --query and subcommands + typeset -a _yaourt_opts_query_modifiers + _yaourt_opts_query_modifiers=( + '-c[List package changelog]' + '-d[List packages installed as dependencies]' + '-e[List packages explicitly installed]' + '-i[View package information]' + '-ii[View package information including backup files]' + '-k[Check package files]' + '-l[List package contents]' + '-m[List installed packages not found in sync db(s)]' + '-t[List packages not required by any package]' + '-u[List packages that can be upgraded]' + '--aur[Install packages from aur, even if they are in community, or, with the -u option, update packages installed from aur]' + '--devel[Used with -u updates all cvs/svn/git/hg/bzr packages]' + '--date[List packages sorted ascendingly (oldest is printed first) by installation date]' + ) + + # options for passing to _arguments: options for --remove command + typeset -a _yaourt_opts_remove + _yaourt_opts_remove=( + '-c[Remove all dependent packages]' + '-d[Skip dependency checks]' + '-k[Only remove database entry, do not remove files]' + '-n[Remove protected configuration files]' + '-s[Remove dependencies not required by other packages]' + '*:installed package:_yaourt_completions_installed_packages' + ) + + # options for passing to _arguments: options for --sync command + typeset -a _yaourt_opts_sync_actions + _yaourt_opts_sync_actions=( + '*-c[Remove old packages from cache]:*:clean:->sync_clean' + '*-cc[Remove all packages from cache]:*:clean:->sync_clean' + '-g[View all members of a package group]:*:package groups:->sync_group' + '-s[Search package names and descriptions]:*:search text:->sync_search' + ) + + # options for passing to _arguments: options for --sync command + typeset -a _yaourt_opts_sync_modifiers + _yaourt_opts_sync_modifiers=( + '-d[Skip dependency checks]' + '-f[Overwrite conflicting files]' + '-i[View package information]' + '-l[List all packages in a repository]' + '-p[Print download URIs for each package to be installed]' + '-u[Upgrade all out-of-date packages]' + '-w[Download packages only]' + '-y[Download fresh package databases]' + '*--ignore[Ignore a package upgrade]:package: + _yaourt_completions_all_packages' + '*--ignoregroup[Ignore a group upgrade]:package group: + _yaourt_completions_all_groups' + '--asdeps[Install packages as non-explicitly installed]' + '--asexplicit[Install packages as explicitly installed]' + '--needed[Do not reinstall up to date packages]' + '--devel[Used with -u updates all cvs/svn/git/hg/bzr packages]' + ) + + case $words[2] in + -Q*g*) # ipkg groups + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:groups:_yaourt_completions_installed_groups' + ;; + -Q*o*) # file + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files' + ;; + -Q*p*) # file *.pkg.tar.* + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar.*"' + ;; + -Q*) _yaourt_action_query ;; + -R*) _yaourt_action_remove ;; + -S*c*) # no completion + return 0 + ;; + -S*l*) # repos + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package repo:_yaourt_completions_repositories' \ + ;; + -S*g*) # pkg groups + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package group:_yaourt_completions_all_groups' + ;; + -S*) _yaourt_action_sync ;; + -U*) _yaourt_action_upgrade ;; + -V*) _yaourt_action_version ;; + -h*) _yaourt_action_help ;; + - ) _yaourt_action_none ;; + * ) return 1 ;; + esac +} + +# run the main dispatcher +_yaourt "$@" diff --git a/.zprezto/modules/completion/external/src/_zfs b/.zprezto/modules/completion/external/src/_zfs new file mode 100644 index 0000000..d742c12 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_zfs @@ -0,0 +1,597 @@ +#compdef zfs +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for zfs +# +# Source: https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_zfs +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Rick van Hattem (https://github.com/wolph) +# +# ------------------------------------------------------------------------------ +# Synced with the S11U1 man page + +_zfs() { + local context state line expl + typeset -A opt_args + local -a subcmds rw_properties rw_propnames ro_properties create_properties + local -a share_nfs_ro_properties share_nfs_rw_properties + local -a share_smb_ro_properties share_nfs_rw_properties + local -a share_ro_properties share_rw_properties + local -a difffields delegatable_perms + + subcmds=( + "create" "destroy" "clone" "promote" "rename" "snapshot" + "rollback" "list" "set" "get" "inherit" "mount" "unmount" + "share" "unshare" "send" "receive" "allow" "unallow" + "upgrade" "userspace" "groupspace" "hold" "holds" "release" + "diff" "key" "help" + ) + + share_nfs_ro_properties=( + "share.nfs.all" + ) + + share_nfs_rw_properties=( + "share.nfs:value:(on off)" + "share.nfs.aclok:value:(on off)" + "share.nfs.acflfab:value:(on off)" + "share.nfs.anon:uid:" + "share.nfs.charset.euc-cn:access-list:" + "share.nfs.charset.euc-jpms:access-list:" + "share.nfs.charset.euc-kr:access-list:" + "share.nfs.charset.euc-tw:access-list:" + "share.nfs.charset.iso8859-1:access-list:" + "share.nfs.charset.iso8859-2:access-list:" + "share.nfs.charset.iso8859-5:access-list:" + "share.nfs.charset.iso8859-6:access-list:" + "share.nfs.charset.iso8859-7:access-list:" + "share.nfs.charset.iso8859-8:access-list:" + "share.nfs.charset.iso8859-9:access-list:" + "share.nfs.charset.iso8859-13:access-list:" + "share.nfs.charset.iso8859-15:access-list:" + "share.nfs.charset.koi8-r:access-list:" + "share.nfs.index:file:_files" + "share.nfs.log:nfslog.conf tag:" + "share.nfs.nosub:value:(on off)" + "share.nfs.nosuid:value:(on off)" + "share.nfs.public:value:(on off)" + "share.nfs.sec:security-mode-list:" + "share.nfs.sec.default.none:access-list:" + "share.nfs.sec.default.ro:access-list:" + "share.nfs.sec.default.root:access-list:" + "share.nfs.sec.default.root_mapping:uid:" + "share.nfs.sec.default.rw:access-list:" + "share.nfs.sec.default.window:seconds" + "share.nfs.sec.dh.none:access-list:" + "share.nfs.sec.dh.ro:access-list:" + "share.nfs.sec.dh.root:access-list:" + "share.nfs.sec.dh.root_mapping:uid:" + "share.nfs.sec.dh.rw:access-list:" + "share.nfs.sec.dh.window:seconds" + "share.nfs.sec.krb5.none:access-list:" + "share.nfs.sec.krb5.ro:access-list:" + "share.nfs.sec.krb5.root:access-list:" + "share.nfs.sec.krb5.root_mapping:uid:" + "share.nfs.sec.krb5.rw:access-list:" + "share.nfs.sec.krb5.window:seconds" + "share.nfs.sec.krb5i.none:access-list:" + "share.nfs.sec.krb5i.ro:access-list:" + "share.nfs.sec.krb5i.root:access-list:" + "share.nfs.sec.krb5i.root_mapping:uid:" + "share.nfs.sec.krb5i.rw:access-list:" + "share.nfs.sec.krb5i.window:seconds" + "share.nfs.sec.krb5p.none:access-list:" + "share.nfs.sec.krb5p.ro:access-list:" + "share.nfs.sec.krb5p.root:access-list:" + "share.nfs.sec.krb5p.root_mapping:uid:" + "share.nfs.sec.krb5p.rw:access-list:" + "share.nfs.sec.krb5p.window:seconds" + "share.nfs.sec.none.none:access-list:" + "share.nfs.sec.none.ro:access-list:" + "share.nfs.sec.none.root:access-list:" + "share.nfs.sec.none.root_mapping:uid:" + "share.nfs.sec.none.rw:access-list:" + "share.nfs.sec.none.window:seconds" + "share.nfs.sec.sys.none:access-list:" + "share.nfs.sec.sys.ro:access-list:" + "share.nfs.sec.sys.root:access-list:" + "share.nfs.sec.sys.root_mapping:uid:" + "share.nfs.sec.sys.rw:access-list:" + "share.nfs.sec.sys.window:seconds" + ) + + share_smb_ro_properties=( + "share.smb.all" + ) + + share_smb_rw_properties=( + "share.smb:value:(on off)" + "share.smb.ad-container" + "share.smb.abe" + "share.smb.csc:value:(disabled manual auto vdo)" + "share.smb.catia:value:(on off)" + "share.smb.dfsroot:value:(on off)" + "share.smb.guestok:value:(on off)" + "share.smb.ro:access-list:" + "share.smb.rw:access-list:" + "share.smb.none:access-list:" + ) + + share_ro_properties=( + "share.all" + "share.fs" + "share.name" + "share.point" + "share.protocols" + "share.state" + $share_nfs_ro_properties + $share_smb_ro_properties + ) + + share_rw_properties=( + "share.desc:description:" + "share.noauto:value:(on off)" + "share.path:path:" + $share_nfs_rw_properties + $share_smb_rw_properties + ) + + # TODO: userused@ and groupused@ could have more extensive handling + ro_properties=( + "name" "type" "creation" "used" "available" "referenced" + "compressratio" "mounted" "origin" "usedbychildren" + "usedbydataset" "usedbyrefreservation" "usedbysnapshots" + "defer_destroy" "userused@" "userrefs" "groupused@" + "keychangedate" "keystatus" "rekeydate" + $share_ro_properties + ) + + # TODO: Be cleverer about what values can be set. Is there any way to + # set the sorting for *size properties to false by default? + rw_properties=( + "aclinherit:value:(discard noallow restricted passthrough passthrough-x)" + "aclmode:value:(discard mask passthrough)" + "atime:value:(on off)" + "canmount:value:(on off noauto)" + "checksum:value:(on off fletcher2 fletcher4 sha256 sha256+mac)" + "compression:value:(on off lzjb gzip gzip-{1..9} zle)" + "copies:value:(1 2 3)" + "dedup:value:(on off verify sha256 sha256,verify)" + "devices:value:(on off)" + "encryption:value:(off on aes128-ccm aes-192-ccm aes-256-ccm aes-128-gcm aes-192-gcm aes-256-gcm)" + "exec:value:(on off)" + "groupquota@:value:" # TODO: complete group=size|none + "keysource:value:_zfs_keysource_props" + "logbias:value:(latency throughput)" + "mlslabel:value:(none)" # TODO: list sensitivity labels + "mountpoint:path, 'legacy', or 'none':{if [[ -prefix /* ]]; then _path_files -/; else _wanted mountpoints expl 'mountpoint (type \"/\" to start completing paths)' compadd legacy none; fi}" + "multilevel:value:(on off)" + "nbmand:value:(on off)" + "primarycache:value:(all none metadata)" + "quota:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == quota= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'quota' compadd none; fi}" + "readonly:value:(on off)" + "recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)" + "refquota:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == refquota= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'refquota' compadd none; fi}" + "refreservation:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == refreservation= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'refreservation' compadd none; fi}" + "reservation:value:{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == reservation= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'reservation' compadd none; fi}" + "rstchown:value:(on off)" + "secondarycache:value:(all none metadata)" + "setuid:value:(on off)" + "shadow:value:" # TODO: complete URI|none + "share:share properties:" + "snapdir:value:(hidden visible)" + "sync:value:(standard always disabled)" + "userquota@:value:" # TODO: complete user=size|none + "version:value:(1 2 3 4 current)" + "volsize:value:" # + "vscan:value:(on off)" + "xattr:value:(on off)" + "zoned:value:(on off)" + $share_rw_properties + ) + + create_properties=( + $rw_properties + "casesensitivity:value:(sensitive insensitive mixed)" + "normalization:value:(none formC formD formKC formKD)" + "utf8only:value:(on off)" + "volblocksize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)" + ) + + delegatable_perms=( + "allow" "clone" "create" "destroy" "diff" "hold" "key" + "keychange" "mount" "promote" "receive" "release" "rename" + "rollback" "send" "share" "snapshot" + "groupused" "userused" "userprop" + ${create_properties%%:*} + ) + + rw_propnames=( ${rw_properties%%:*} ) + + difffields=( + object parent size links linkschange name oldname user group + ctime mtime atime crtime + ) + + if [[ $service == "zfs" ]]; then + _arguments -C -A "-*" \ + '-\?[Help]' \ + '*::command:->subcmd' && return 0 + + if (( CURRENT == 1 )); then + _wanted commands expl "zfs subcommand" compadd -a subcmds + return + fi + service="$words[1]" + curcontext="${curcontext%:*}=$service:" + fi + + case $service in + ("create") + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + '-u[Filesystem is not mounted]' \ + '-o[Set initial properties]:property:_values -s , "property" $create_properties' \ + - set1 \ + ':filesystem:_zfs_dataset -t fs -e "parent dataset"' \ + - set2 \ + '-s[Create sparse volume]' \ + '-b[Set volblocksize]:blocksize:' \ + '-V[Set size]:size:' \ + ':volume:_zfs_dataset -t fs -e "parent dataset"' + ;; + + ("destroy") + _arguments -A "-*" \ + '-r[Recursively destroy all children]' \ + '-R[Recursively destroy all dependents]' \ + '-n[Do a dry run (No-op)]' \ + '-p[Display numbers exactly]' \ + '-v[Verbose]' \ + - set1 \ + '-d[delete or mark deferred]' \ + ':snapshot:_zfs_dataset -t snap' \ + - set2 \ + '-f[Force unmounts]' \ + ':filesystem/volume/snapshot:_zfs_dataset -t fs -t vol' + ;; + + ("snapshot") + _arguments -A "-*" \ + '-r[Recursively snapshot all descendant datasets]' \ + '-o[Set property]:property:_values -s , "property" $create_properties' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol -S@' + ;; + + ("rollback") + _arguments -A "-*" \ + '-r[Recursively destroy more recent snapshots]' \ + '-R[Recursively destroy more recent snapshots and clones]' \ + '-f[Force unmounts]' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("clone") + # XXX needs to bail if there are no snapshots + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + '-K[Create encryption key]' \ + '-o[Set property]:property:_values -s , "property" $create_properties' \ + ':snapshot:_zfs_dataset -t snap' \ + ':filesystem/volume:_zfs_dataset -t fs -e "parent dataset"' + ;; + + ("promote") + _arguments \ + ':filesystem:_zfs_dataset -t clone' \ + ;; + + ("rename") + _arguments -A "-*" \ + '(-r)-p[Create parent datasets]' \ + '(-p)-r[Recursively rename snapshots of all descendent datasets]' \ + '-u[Do not remount file systems]' \ + '-f[Force unmounts]' \ + ':dataset:_zfs_dataset -r1' \ + ':dataset:_zfs_dataset -r2' + ;; + + ("list") + _arguments -A "-*" \ + '-r[Recursively display children]' \ + '-H[Scripting mode]' \ + '-d[Depth]:value:' \ + '-o[Properties to list]:property:_values -s , "property" $ro_properties $rw_propnames' \ + '*-s[Sort key (ascending)]:property:_values "property" $ro_properties $rw_propnames' \ + '*-S[Sort key (descending)]:property:_values "property" $ro_properties $rw_propnames' \ + '-t[Dataset types to list]:dataset type:_values -s , "dataset type" all filesystem snapshot volume' \ + '*:filesystem/volume/snapshot/path:_zfs_dataset -p' + ;; + + ("set") + _arguments \ + '-r[Recursively apply value]' \ + ':property:_values -s , "property" $rw_properties' \ + '*:filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("get") + _arguments -A "-*" \ + "-r[Recursively display children's properties]" \ + '-d[Depth]:value:' \ + '-H[Scripting mode]' \ + '-p[Display numbers exactly]' \ + '-s[Specify sources]:source:_values -s , "source" local default inherited temporary none' \ + '-o[Specify fields]:field:_values -s , "field" name property value source' \ + ':property:_values -s , "property" $ro_properties $rw_propnames all' \ + '*:filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("inherit") + _arguments -A "-*" \ + '-r[Recursively inherit property for all children]' \ + '-S[Revert to received property value]' \ + ':property:_values -s , "property" $ro_properties $rw_properties' \ + '*:filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("userspace"|"groupspace") + _arguments -A "-*" \ + '-n[Print numeric ID]' \ + '-H[Tab-delimited output with no headers]' \ + '-p[Parseable mode]' \ + '-o[Properties to list]:property:_values -s , "property" type name used quota' \ + '*-s[Sort key (ascending)]:property:_values "property" type name used quota' \ + '*-S[Sort key (descending)]:property:_values "property" type name used quota' \ + '-t[Types to list]:type:_values -s , "type" all posixuser smbuser posixgroup smbgroup' \ + '-i[Translate SID to POSIX ID]' \ + '*:filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("mount") + _arguments -A "-*" \ + '-o[Mount options]:mount options:_values -s , "option" {,no}{devices,exec,setuid} ro rw' \ + '-O[Overlay mount]' \ + '-v[Report mount progress]' \ + - set1 \ + ':filesystem:_zfs_dataset -t fs' \ + - set2 \ + '-a[Mount all available ZFS filesystems]' + ;; + + ("unmount") + _arguments -A "-*" \ + - set1 \ + '-f[Force unmount]' \ + ':filesystem:_zfs_dataset -t fs -t mtpt' \ + - set2 \ + '-a[Unmount all ZFS filesystems]' + ;; + + ("share") + _arguments -A "-*" \ + - set1 \ + '-a[Share all available ZFS filesystems]' \ + - set2 \ + '-r[Share filesystems recursively]' \ + ':filesystem:_zfs_dataset -t fs' \ + - set3 \ + '*-o[Create a share with these properties]:property:_values -w "share properties" $share_rw_properties' \ + '-u[Create a share without sharing it]' \ + ':filesystem:_zfs_dataset -t fs' \ + - set4 \ + ':filesystem:_zfs_dataset -t fs -t mtpt -t share' + ;; + + ("unshare") + _arguments -A "-*" \ + - set1 \ + '-a[Unshare all shared ZFS filesystems]' \ + - set2 \ + '-r[Unshare filesystems recursively]' \ + ':filesystem:_zfs_dataset -t fs' \ + - set3 \ + ':filesystem:_zfs_dataset -t fs -t mtpt -t share' + ;; + + ("send") + _arguments -A "-*" \ + '-b' \ + '-i[Generate an incremental stream]:snapshot:_zfs_dataset -t snap' \ + '-D[Perform dedup processing]' \ + '-p[Send properties]' \ + '-n[Do a dry run (No-op)]' \ + '-P[Display numbers exactly]' \ + '-v[Verbose]' \ + - set1 \ + '-I[Generate an incremental stream with intermediary snapshots]:snapshot:_zfs_dataset -t snap' \ + '-R[Generate a replication stream package]' \ + ':snapshot:_zfs_dataset -t snap' \ + - set2 \ + '-c[Create a self-contained stream]' \ + '-r[Generate a recursive stream package]' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("receive") + _arguments -A "-*" \ + '-v[Verbose]' \ + '-n[Do not receive the stream]' \ + '-F[Force a rollback if necessary]' \ + '-u[Filesystem is not mounted]' \ + '-o[Include property change in the stream]::' \ + '-x[Exclude property change from the stream]:property:' \ + - set1 \ + ':filesystem/volume/snapshot:_zfs_dataset' \ + - set2 \ + '(-e)-d[Set path prefix from stream, excluding only pool name]' \ + '(-d)-e[Set path prefix from stream, using last path element]' \ + '-:filesystem:_zfs_dataset -t fs' + ;; + + ("allow") + _arguments -A "-*" \ + - set1 \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set2 \ + '(-g)-u[User]:user:_users' \ + '(-u)-g[Group]:group:_groups' \ + '-l[Allow for named dataset]' \ + '-d[Allow for descendent datasets]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set3 \ + '-e[Everyone]' \ + '-l[Allow for named dataset]' \ + '-d[Allow for descendent datasets]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set4 \ + '-c[Create-time permissions]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set5 \ + '-s[Define or modify permission sets]' \ + ':setname:' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("unallow") + _arguments -A "-*" \ + '-r[Recursive removal]' \ + - set1 \ + '-s[Remove permissions from or delete a permission set]:permission set:' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set2 \ + '(-g)-u[User]:user:_users' \ + '(-u)-g[Group]:group:_groups' \ + '-l[Allow for named dataset]' \ + '-d[Allow for descendent datasets]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set3 \ + '-e[Everyone]' \ + '-l[Allow for named dataset]' \ + '-d[Allow for descendent datasets]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' \ + - set4 \ + '-c[Create-time permissions]' \ + ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("upgrade") + _arguments -A "-*" \ + - set1 \ + '-v[Verbose]' \ + - set2 \ + '-a[Upgrade all filesystems on all pools]' \ + '-r[Upgrade descendent filesystems, too]' \ + '-V[Upgrade to specified version]:version:(1 2)' \ + - set3 \ + '-r[Upgrade descendent filesystems, too]' \ + '-V[Upgrade to specified version]:version:(1 2)' \ + ':filesystem:_zfs_dataset -t fs' + ;; + + ("hold") + _arguments -A "-*" \ + '-r[Apply hold recursively]' \ + ':tag:' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("holds") + _arguments -A "-*" \ + '-r[List holds recursively]' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("release") + _arguments -A "-*" \ + '-r[Release holds recursively]' \ + ':tag:' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("diff") + _arguments -A "-*" \ + '-F[Add column for filetype character]' \ + '-H[Parseable output]' \ + '-e[Only show new and changed files]' \ + '*-o[Show fields]:field:_values "field" $difffields' \ + '-t[Add column for ctime]' \ + - set1 \ + ':snapshot:_zfs_dataset -t snap' \ + ':snapshot or filesystem:_zfs_dataset -t snap -t fs' \ + - set2 \ + '-E[Show difference from empty]' \ + ':snapshot or filesystem:_zfs_dataset -t snap -t fs' + ;; + + ("key") + _arguments -A "-*" \ + - set1 \ + '-a[Apply to all datasets in all pools]' \ + '(-u -K -f)-l[Load the encryption key]' \ + '(-l -K)-u[Unload the encryption key]' \ + '(-l -u -f)-K[Create a new data encryption key]' \ + '(-l -K)-f[Unmount the dataset before unloading the encryption key]' \ + '-r[Apply recursively]' \ + ':filesystem or volume:_zfs_dataset -t fs -t vol' \ + - set2 \ + '-c[Change the encryption key]' \ + '-o[Change a property]:property:_zfs_keysource_props' \ + ':filesystem or volume:_zfs_dataset -t fs -t vol' + ;; + + ("help") + _arguments -A "-*" \ + - set1 \ + ':command:($subcmds $delegatable_perms $ro_properties ${rw_properties%%:*} properties)' \ + - set2 \ + '-l[Display property information]' \ + ': :(properties)' + ;; + + (*) + _message "unknown zfs subcommand: $service" + ;; + esac +} + +_zfs "$@" diff --git a/.zprezto/modules/completion/external/zsh-completions-howto.org b/.zprezto/modules/completion/external/zsh-completions-howto.org new file mode 100644 index 0000000..d494a10 --- /dev/null +++ b/.zprezto/modules/completion/external/zsh-completions-howto.org @@ -0,0 +1,440 @@ +* Intro +The official documentation for writing zsh completion functions is difficult to understand, and doesn't give many examples. +At the time of writing this document I was able to find a few other tutorials on the web, however those tutorials only +explain a small portion of the capabilities of the completion system. This document aims to cover areas not explained elsewhere, +with examples, so that you can learn how to write more advanced completion functions. I do not go into all the details, but will +give enough information and examples to get you up and running. If you need more details you can look it up for yourself in the + [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]]. + +Please make any scripts that you create publically available for others (e.g. by forking this repo and making a [[id:64bcd501-b0f0-48c7-b8e2-07af708b95ec][pull request]]). +Also if you have any more information to add or improvements to make to this tutorial, please do. +* Getting started +** Telling zsh which function to use for completing a command +Completion functions for commands are stored in files with names beginning with an underscore _, and these files should +be placed in a directory listed in the $fpath variable. +You can add a directory to $fpath by adding a line like this to your ~/.zshrc file: +#+BEGIN_SRC sh +fpath=(~/newdir $fpath) +#+END_SRC +The first line of a completion function file can look something like this: +#+BEGIN_SRC sh +#compdef foobar +#+END_SRC +This tells zsh that the file contains code for completing the foobar command. +This is the format that you will use most often for the first line, but you can also use the same file for completing +several different functions if you want. See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Autoloaded-files][here]] for more details. + +You can also use the compdef command directly (e.g. in your ~/.zshrc file) to tell zsh which function to use for completing +a command like this: +#+BEGIN_SRC sh +> compdef _function foobar +#+END_SRC +or to use the same completions for several commands: +#+BEGIN_SRC sh +> compdef _function foobar goocar hoodar +#+END_SRC +or if you want to supply arguments: +#+BEGIN_SRC sh +> compdef '_function arg1 arg2' foobar +#+END_SRC +See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Functions-4][here]] for more details. +** Completing generic gnu commands +Many [[http://www.gnu.org/][gnu]] commands have a standardized way of listing option descriptions (when the --help option is used). +For these commands you can use the _gnu_generic function for automatically creating completions, like this: +#+BEGIN_SRC sh +> compdef _gnu_generic foobar +#+END_SRC +or to use _gnu_generic with several different commands: +#+BEGIN_SRC sh +> compdef _gnu_generic foobar goocar hoodar +#+END_SRC +This line can be placed in your ~/.zshrc file. +** Copying completions from another command +If you want a command, say cmd1, to have the same completions as another, say cmd2, which has already had +completions defined for it, you can do this: +#+BEGIN_SRC sh +> compdef cmd1=cmd2 +#+END_SRC +This can be useful for example if you have created an alias for a command to help you remember it. +* Writing your own completion functions +A good way to get started is to look at some already defined completion functions. +On my linux installation these are found in /usr/share/zsh/functions/Completion/Unix +and /usr/share/zsh/functions/Completion/Linux and a few other subdirs. + +You will notice that the _arguments function is used a lot in these files. +This is a utility function that makes it easy to write simple completion functions. +The _arguments function is a wrapper around the compadd builtin function. +The compadd builtin is the core function used to add completion words to the command line, and control its behaviour. +However, most of the time you will not need to use compadd, since there are many utility functions such as _arguments +and _describe which are easier to use. + +For very basic completions the _describe function should be adequate + +** Utility functions +Here is a list of some of the utility functions that may be of use. +The full list of utility functions, with full explanations, is available [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions][here]]. +Examples of how to use these functions are given in the next section. + +*** main utility functions for overall completion +| _alternative | Can be used to generate completion candidates from other utility functions or shell code. | +| _arguments | Used to specify how to complete individual options & arguments for a command with unix style options. | +| _describe | Used for creating simple completions consisting of single words with descriptions (but no actions). Easier to use than _arguments | +| _gnu_generic | Can be used to complete options for commands that understand the `--help' option. | +| _regex_arguments | Creates a function for matching commandline arguments with regular expressions, and then performing actions/completions. | +*** functions for performing complex completions of single words +| _values | Used for completing arbitrary keywords (values) and their arguments, or comma separated lists of such combinations. | +| _combination | Used to complete combinations of values, for example pairs of hostnames and usernames. | +| _multi_parts | Used for completing multiple parts of words separately where each part is separated by some char, e.g. for completing partial filepaths: /u/i/sy -> /usr/include/sys | +| _sep_parts | Like _multi_parts but allows different separators at different parts of the completion. | +*** functions for completing specific types of objects +| _path_files | Used to complete filepaths. Take several options to control behaviour. | +| _files | Calls _path_files with all options except -g and -/. These options depend on file-patterns style setting. | +| _net_interfaces | Used for completing network interface names | +| _users | Used for completing user names | +| _groups | Used for completing group names | +| _options | Used for completing the names of shell options. | +| _parameters | Used for completing the names of shell parameters/variables (can restrict to those matching a pattern). | +*** functions for handling cached completions +If you have a very large number of completions you can save them in a cache file so that the completions load quickly. +| _cache_invalid | indicates whether the completions cache corresponding to a given cache identifier needs rebuilding | +| _retrieve_cache | retrieves completion information from a cache file | +| _store_cache | store completions corresponding to a given cache identifier in a cache file | +*** other functions +| _message | Used for displaying help messages in places where no completions can be generated. | +| _regex_words | Can be used to generate arguments for the _regex_arguments command. This is easier than writing the arguments manually. | +| _guard | Can be used in the ACTION of specifications for _arguments and similar functions to check the word being completed. | +*** Actions +Many of the utility functions such as _arguments, _regex_arguments, _alternative and _values may include an action +at the end of an option/argument specification. This action indicates how to complete the corresponding argument. +The actions can take one of the following forms: +| ( ) | Argument is required but no matches are generated for it. | +| (ITEM1 ITEM2) | List of possible matches | +| ((ITEM1\:'DESC1' ITEM2\:'DESC2')) | List of possible matches, with descriptions. Make sure to use different quotes than those around the whole specification. | +| ->STRING | Set $state to STRING and continue ($state can be checked in a case statement after the utility function call) | +| FUNCTION | Name of a function to call for generating matches or performing some other action, e.g. _files or _message | +| {EVAL-STRING} | Evaluate string as shell code to generate matches. This can be used to call a utility function with arguments, e.g. _values or _describe | +| =ACTION | Inserts a dummy word into completion command line without changing the point at which completion takes place. | +Not all action types are available for all utility functions that use them. For example the ->STRING type is not available in the +_regex_arguments or _alternative functions. +** Writing simple completion functions using _describe +The _describe function can be used for simple completions where the order and position of the options/arguments is +not important. You just need to create an array parameter to hold the options & their descriptions, and then pass +the parameter name as an argument to _describe. The following example creates completion candidates -c and -d, with +the descriptions (note this should be put in a file called _cmd in some directory listed in $fpath). +#+BEGIN_SRC sh +#compdef cmd +local -a options +options=('-c:description for -c opt' '-d:description for -d opt') +_describe 'values' options +#+END_SRC + +You can use several different lists separated by a double hyphen e.g. like this: +#+BEGIN_SRC sh +local -a options arguments +options=('-c:description for -c opt' '-d:description for -d opt') +arguments=('e:description for e arg' 'f:description for f arg') +_describe 'values' options -- arguments +#+END_SRC + +The _describe function can be used in an ACTION as part of a specification for _alternative, _arguments or _regex_arguments. +In this case you will have to put it in braces with its arguments, e.g. 'TAG:DESCRIPTION:{_describe 'values' options}' +** Writing completion functions using _alternative +Like _describe, this function performs simple completions where the order and position of options/arguments is not important. +However, unlike _describe, you can call execute shell code or call functions to obtain the completion candidates. + +As arguments it takes a list of specifications each in the form 'TAG:DESCRIPTION:ACTION' where TAG is a tag name, +DESCRIPTION is a description, and ACTION is one of the action types listed previously (apart from the ->STRING and =ACTION forms). +For example: +#+BEGIN_SRC sh +_alternative 'args:custom args:(a b c)' 'files:filenames:_files' +#+END_SRC +The first specification adds completion candidates a, b & c, and the second specification calls the _files function +for completing filepaths. + +We could split the specifications over several lines with \ and add descriptions to each of the custom args like this: +#+BEGIN_SRC sh +_alternative 'args:custom args:((a\:"description a" b\:"description b" c\:"description c"))'\ + 'files:filenames:_files' +#+END_SRC + +If we want to call _files with arguments we can put it in braces, like this: +#+BEGIN_SRC sh +_alternative 'args:custom args:((a\:"description a" b\:"description b" c\:"description c"))'\ + 'files:filenames:{_files -/}' +#+END_SRC + +To use parameter expansion to create our list of completions we must use double quotes to quote the specifications, +e.g: +#+BEGIN_SRC sh +_alternative "dirs:user directories:($userdirs)"\ + "pids:process IDs:($(ps -A o pid=))" +#+END_SRC +In this case the first specification adds the words stored in the $userdirs variable, and the second specification +evaluates 'ps -A o pid=' to get a list of pids to use as completion candidates. + +We can use other utility functions such as _values in the ACTION to perform more complex completions, e.g: +#+BEGIN_SRC sh +_alternative "dirs:user directories:($userdirs)"\ + 'opts:comma separated opts:{_values -s , a b c}' +#+END_SRC +this will complete the items in $userdirs, aswell as a comma separated list containing a, b &/or c. + +As with _describe, the _alternative function can itself be used in an ACTION as part of a specification for _arguments +or _regex_arguments. +** Writing completion functions using _arguments +With the _arguments function you can create more sophisticated completion functions. +Like the _alternative function, _arguments takes a list of specification strings as arguments. +These specification strings can be for specifying options and any corresponding option arguments (e.g. -f filename), +or command arguments. + +Basic option specifications take the form '-OPT[DESCRIPTION]', e.g. like this: +#+BEGIN_SRC sh +_arguments '-s[sort output]' '--l[long output]' '-l[long output]' +#+END_SRC +Arguments for the option can be specified after the option description in this form '-OPT[DESCRIPTION]:MESSAGE:ACTION', +where MESSAGE is a message to display and ACTION can be any of the forms mentioned in the ACTIONS section above. +For example: +#+BEGIN_SRC sh +_arguments '-f[input file]:filename:_files' +#+END_SRC + +Command argument specifications take the form 'N:MESSAGE:ACTION' where N indicates that it is the Nth command argument, +and MESSAGE & ACTION are as before. If the N is omitted then it just means the next command argument (after any that have +already been specified). If a double colon is used at the start (after N) then the argument is optional. +For example: +#+BEGIN_SRC sh +_arguments '-s[sort output]' '1:first arg:_net_interfaces' '::optional arg:_files' ':next arg:(a b c)' +#+END_SRC +here the first arg is a network interface, the next optional arg is a file name, the last arg can be either a, b or c, +and the -s option may be completed at any position. + +The _arguments function allows the full set of ACTION forms listed in the ACTION section above. +This means that you can use actions for selecting case statement branches like this: +#+BEGIN_SRC sh +_arguments '-m[music file]:filename:->files' '-f[flags]:flag:->flags' +case "$state" in + files) + local -a music_files + music_files=( Music/**/*.{mp3,wav,flac,ogg} ) + _multi_parts / music_files + ;; + flags) + _values -s , 'flags' a b c d e + ;; +esac +#+END_SRC +In this case paths to music files are completed stepwise descending down directories using the _multi_parts function, +and the flags are completed as a comma separated list using the _values function. + +I have just given you the basics of _arguments specifications here, you can also specify mutually exclusive options, +repeated options & arguments, options beginning with + insead of -, etc. For more details see the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]]. +Also have a look at the tutorials mentioned at the end of this document, and the completion functions in the [[https://github.com/vapniks/zsh-completions/tree/master/src][src directory]]. +** Writing completion functions using _regex_arguments and _regex_words +If you have a complex command line specification with several different possible argument sequences then +the _regex_arguments function may be what you need. + +_regex_arguments creates a completion function whose name is given by the first argument. +Hence you need to first call _regex_arguments to create the completion function, and then call that function, +e.g. like this: +#+BEGIN_SRC sh +_regex_arguments _cmd OTHER_ARGS.. +_cmd "$@" +#+END_SRC + +The OTHER_ARGS should be sequences of specifications for matching & completing words on the command line. +These sequences can be separated by '|' to represent alternative sequences of words. +You can use bracketing to arbitrary depth to specify alternate subsequences, but the brackets must be backslashed like this \( \) +or quoted like this '(' ')'. + +For example: +#+BEGIN_SRC sh +_regex_arguments _cmd SEQ1 '|' SEQ2 \( SEQ2a '|' SEQ2b \) +_cmd "$@" +#+END_SRC +this specifies a command line matching either SEQ1, or SEQ2 followed by SEQ2a or SEQ2b. + +Each specification in a sequence must contain a / PATTERN/ part at the start followed by an optional ':TAG:DESCRIPTION:ACTION' +part. + +Each PATTERN is a regular expression to match a word on the command line. These patterns are processed sequentially +until we reach a pattern that doesn't match at which point any corresponding ACTION is performed to obtain completions +for that word. Note that there needs to be a pattern to match the initial command itself. +See below for further explanation about PATTERNs. + +The ':TAG:DESCRIPTION:ACTION' part is interpreted in the same way as for the _alternative function specifications, +except that it has an extra : at the start, and now all of the possible ACTION formats listed previously are allowed. + +Here is an example: +#+BEGIN_SRC sh +_regex_arguments _hello /$'[^\0]##\0'/ \( /$'word1(a|b|c)\0'/ ':word:first word:(word1a word1b word1c)' '|'\ + /$'word11(a|b|c)\0'/ ':word:first word:(word11a word11b word11c)' \( /$'word2(a|b|c)\0'/ ':word:second word:(word2a word2b word2c)'\ + '|' /$'word22(a|b|c)\0'/ ':word:second word:(word22a word22b word22c)' \) \) +_cmd "$@" +#+END_SRC +in this case the first word can be word1 or word11 followed by an a, b or c, and if the first word contains 11 then a second +word is allowed which can be word2 followed by and a, b, or c, or a filename. + +If this sounds too complicated a much simpler alternative is to use the _regex_words function for creating +specifications for _regex_arguments. +*** Patterns +You may notice that the / PATTERN/ specs in the previous example don't look like normal regular expressions. +Often a string parameter in the form $'foo\0' is used. This is so that the \0 in the string is interpreted correctly +as a null char which is used to separate words in the internal representation. If you don't include the \0 at the end +of the pattern you may get problems matching the next word. If you need to use the contents of a variable in a pattern, +you can double quote it so that it gets expanded and then put a string parameter containing a null char afterwards, +like this: "$somevar"$'\0' + +The regular expression syntax for patterns seems to be a bit different from normal regular expressions, +and I can't find documentation anywhere. +However I have managed to work out what the following special chars are for: +| * | wildcard - any number of chars | +| ? | wildcard - single char | +| # | zero or more of the previous char (like * in a normal regular expression) | +| ## | one or more of the previous char (like + in a normal regular expression) | +*** _regex_words +The _regex_words function makes it much easier to create specifications for _regex_arguments. +The results of calling _regex_words can be stored in a variable which can then be used instead +of a specification for _regex_arguments. + +To create a specification using _regex_words you supply it with a tag followed by a description followed by a list +of specifications for individual words. These specifications take the form 'WORD:DESCRIPTION:SPEC' where WORD is the +word to be completed, DESCRIPTION is a description for it, and SPEC can be another variable created by _regex_words +specifying words that come after the current word or blank if there are no further words. +For example: +#+BEGIN_SRC sh +_regex_words firstword 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word' +#+END_SRC +the results of this function call will be stored in the $reply array, and so we should store it in another array +before $reply gets changed again, like this: +#+BEGIN_SRC sh +local -a firstword +_regex_words word 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word' +firstword="$reply[@]" +#+END_SRC +we could then use it with _regex_arguments like this: +#+BEGIN_SRC sh +_regex_arguments _cmd /$'[^\0]##\0'/ "$firstword[@]" +_cmd "$@" +#+END_SRC +Note that I have added an extra pattern for the initial command word itself. + +Here is a more complex example where we call _regex_words for different words on the command line +#+BEGIN_SRC sh +local -a firstword firstword2 secondword secondword2 +_regex_words word1 'The second word' 'woo:tang clan' 'hoo:not me' +secondword=("$reply[@]") +_regex_words word2 'Another second word' 'yee:thou' 'haa:very funny!' +secondword2=("$reply[@]") +_regex_words commands 'The first word' 'foo:do foo' 'man:yeah man' 'chu:at chu' +firstword=("$reply[@]") +_regex_words word4 'Another first word' 'boo:scare somebody:$secondword' 'ga:baby noise:$secondword'\ + 'loo:go to the toilet:$secondword2' +firstword2=("$reply[@]") + +_regex_arguments _hello /$'[^\0]##\0'/ "${firstword[@]}" "${firstword2[@]}" +_hello "$@" +#+END_SRC +In this case the first word can be one of "foo", "man", "chu", "boo", "ga" or "loo". +If the first word is "boo" or "ga" then the second word can be "woo" or "hoo", +and if the first word is "loo" then the second word can be "yee" or "haa", in the other +cases there is no second word. + +For a good example of the usage of _regex_words have a look at the _ip function. +** complex completions with _values, _sep_parts, & _multi_parts +The _values, _sep_parts & _multi_parts functions can be used either on their own, or as ACTIONs in specifications for +_alternative, _arguments or _regex_arguments. The following examples may be instructive. +See the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for more info. + +Space separated list of mp3 files: +#+BEGIN_SRC sh +_values 'mp3 files' ~/*.mp3 +#+END_SRC + +Comma separated list of session id numbers: +#+BEGIN_SRC sh +_values -s , 'session id' "${(uonzf)$(ps -A o sid=)}" +#+END_SRC + +Completes foo@news:woo, or foo@news:laa, or bar@news:woo, etc: +#+BEGIN_SRC sh +_sep_parts '(foo bar)' @ '(news ftp)' : '(woo laa)' +#+END_SRC + +Complete some MAC addresses one octet at a time: +#+BEGIN_SRC sh +_multi_parts : '(00:11:22:33:44:55 00:23:34:45:56:67 00:23:45:56:67:78)' +#+END_SRC + +** Adding completion words directly using compadd +For more fine grained control you can use the builtin compadd function to add completion words directly. +This function has many different options for controlling how completions are displayed and how text on the command line +can be altered when words are completed. Read the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for full details. +Here I just give a few simple examples. + +Add some words to the list of possible completions: +#+BEGIN_SRC sh +compadd foo bar blah +#+END_SRC + +As above but also display an explanation: +#+BEGIN_SRC sh +compadd -X 'Some completions' foo bar blah +#+END_SRC + +As above but automatically insert a prefix of "what_" before the completed word: +#+BEGIN_SRC sh +compadd -P what_ foo bar blah +#+END_SRC + +As above but automatically insert a suffix of "_todo" after the completed word: +#+BEGIN_SRC sh +compadd -S _todo foo bar blah +#+END_SRC + +As above but automatically remove the "_todo" suffix if a blank char is typed after the suffix: +#+BEGIN_SRC sh +compadd -P _todo -q foo bar blah +#+END_SRC + +Add words in array $wordsarray to the list of possible completions +#+BEGIN_SRC sh +compadd -a wordsarray +#+END_SRC + +* Testing & debugging +To reload a completion function: +#+BEGIN_SRC sh +> unfunction _func +> autoload -U _func +#+END_SRC + +The following functions can be called to obtain useful information. +If the default keybindings don't work you can try pressing Alt+x and then enter the command name. +| Function | Default keybinding | Description | +|-----------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------| +| _complete_help | Ctrl+x h | displays information about context names, tags, and completion functions used when completing at the current cursor position | +| _complete_help | Alt+2 Ctrl+x h | as above but displays even more information | +| _complete_debug | Ctrl+x ? | performs ordinary completion, but captures in a temporary file a trace of the shell commands executed by the completion system | +* Gotchas (things to watch out for) +Remember to include a #compdef line at the beginning of the file containing the completion function. + +Take care to use the correct type of quoting for specifications to _arguments or _regex_arguments: +use double quotes if there is a parameter that needs to be expanded in the specification, single quotes otherwise, +and make sure to use different quotes around item descriptions. + +Check that you have the correct number of :'s in the correct places for specifications for _arguments, +_alternative, _regex_arguments, etc. + +Remember to include an initial pattern to match the command word when using _regex_arguments (it does not need a matching action). + +Remember to put a null char $'\0' at the end of any PATTERN argument for _regex_arguments +* Tips +Sometimes you have a situation where there is just one option that can come after a subcommand, and zsh will complete this +automatically when tab is pressed after the subcommand. If instead you want it listed with its description before completing +you can add another empty option (i.e. \:) to the ACTION like this ':TAG:DESCRIPTION:((opt1\:"description for opt1" \:))' +Note this only applies to utility functions that use ACTIONs in their specification arguments (_arguments, _regex_arguments, etc.) + +* Other resources +[[http://wikimatze.de/writing-zsh-completion-for-padrino.html][Here]] is a nicely formatted short tutorial showing basic usage of the _arguments function, +and [[http://www.linux-mag.com/id/1106/][here]] is a slightly more advanced tutorial using the _arguments function. +[[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][Here]] is the zshcompsys man page. diff --git a/.zprezto/modules/completion/external/zsh-completions.plugin.zsh b/.zprezto/modules/completion/external/zsh-completions.plugin.zsh new file mode 100644 index 0000000..f8be8e7 --- /dev/null +++ b/.zprezto/modules/completion/external/zsh-completions.plugin.zsh @@ -0,0 +1 @@ +fpath+="`dirname $0`/src" diff --git a/.zprezto/modules/completion/init.zsh b/.zprezto/modules/completion/init.zsh new file mode 100644 index 0000000..023a90e --- /dev/null +++ b/.zprezto/modules/completion/init.zsh @@ -0,0 +1,148 @@ +# +# Sets completion options. +# +# Authors: +# Robby Russell +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$TERM" == 'dumb' ]]; then + return 1 +fi + +# Add zsh-completions to $fpath. +fpath=("${0:h}/external/src" $fpath) + +# Load and initialize the completion system ignoring insecure directories. +autoload -Uz compinit && compinit -i + +# +# Options +# + +setopt COMPLETE_IN_WORD # Complete from both ends of a word. +setopt ALWAYS_TO_END # Move cursor to the end of a completed word. +setopt PATH_DIRS # Perform path search even on command names with slashes. +setopt AUTO_MENU # Show completion menu on a successive tab press. +setopt AUTO_LIST # Automatically list choices on ambiguous completion. +setopt AUTO_PARAM_SLASH # If completed parameter is a directory, add a trailing slash. +unsetopt MENU_COMPLETE # Do not autoselect the first completion entry. +unsetopt FLOW_CONTROL # Disable start/stop characters in shell editor. + +# +# Styles +# + +# Use caching to make completion for commands such as dpkg and apt usable. +zstyle ':completion::complete:*' use-cache on +zstyle ':completion::complete:*' cache-path "${ZDOTDIR:-$HOME}/.zcompcache" + +# Case-insensitive (all), partial-word, and then substring completion. +if zstyle -t ':prezto:module:completion:*' case-sensitive; then + zstyle ':completion:*' matcher-list 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + setopt CASE_GLOB +else + zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + unsetopt CASE_GLOB +fi + +# Group matches and describe. +zstyle ':completion:*:*:*:*:*' menu select +zstyle ':completion:*:matches' group 'yes' +zstyle ':completion:*:options' description 'yes' +zstyle ':completion:*:options' auto-description '%d' +zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f' +zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f' +zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f' +zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f' +zstyle ':completion:*:default' list-prompt '%S%M matches%s' +zstyle ':completion:*' format ' %F{yellow}-- %d --%f' +zstyle ':completion:*' group-name '' +zstyle ':completion:*' verbose yes + +# Fuzzy match mistyped completions. +zstyle ':completion:*' completer _complete _match _approximate +zstyle ':completion:*:match:*' original only +zstyle ':completion:*:approximate:*' max-errors 1 numeric + +# Increase the number of errors based on the length of the typed word. +zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)' + +# Don't complete unavailable commands. +zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))' + +# Array completion element sorting. +zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters + +# Directories +zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories +zstyle ':completion:*:*:cd:*:directory-stack' menu yes select +zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand' +zstyle ':completion:*' squeeze-slashes true + +# History +zstyle ':completion:*:history-words' stop yes +zstyle ':completion:*:history-words' remove-all-dups yes +zstyle ':completion:*:history-words' list false +zstyle ':completion:*:history-words' menu yes + +# Environmental Variables +zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-} + +# Populate hostname completion. +zstyle -e ':completion:*:hosts' hosts 'reply=( + ${=${=${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ } + ${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2>/dev/null))"}%%\#*} + ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}} +)' + +# Don't complete uninteresting users... +zstyle ':completion:*:*:*:users' ignored-patterns \ + adm amanda apache avahi beaglidx bin cacti canna clamav daemon \ + dbus distcache dovecot fax ftp games gdm gkrellmd gopher \ + hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \ + mailman mailnull mldonkey mysql nagios \ + named netdump news nfsnobody nobody nscd ntp nut nx openvpn \ + operator pcap postfix postgres privoxy pulse pvm quagga radvd \ + rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*' + +# ... unless we really want to. +zstyle '*' single-ignored show + +# Ignore multiple entries. +zstyle ':completion:*:(rm|kill|diff):*' ignore-line other +zstyle ':completion:*:rm:*' file-patterns '*:all-files' + +# Kill +zstyle ':completion:*:*:*:*:processes' command 'ps -u $LOGNAME -o pid,user,command -w' +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;36=0=01' +zstyle ':completion:*:*:kill:*' menu yes select +zstyle ':completion:*:*:kill:*' force-list always +zstyle ':completion:*:*:kill:*' insert-ids single + +# Man +zstyle ':completion:*:manuals' separate-sections true +zstyle ':completion:*:manuals.(^1*)' insert-sections true + +# Media Players +zstyle ':completion:*:*:mpg123:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories' +zstyle ':completion:*:*:mpg321:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories' +zstyle ':completion:*:*:ogg123:*' file-patterns '*.(ogg|OGG|flac):ogg\ files *(-/):directories' +zstyle ':completion:*:*:mocp:*' file-patterns '*.(wav|WAV|mp3|MP3|ogg|OGG|flac):ogg\ files *(-/):directories' + +# Mutt +if [[ -s "$HOME/.mutt/aliases" ]]; then + zstyle ':completion:*:*:mutt:*' menu yes select + zstyle ':completion:*:mutt:*' users ${${${(f)"$(<"$HOME/.mutt/aliases")"}#alias[[:space:]]}%%[[:space:]]*} +fi + +# SSH/SCP/RSYNC +zstyle ':completion:*:(scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *' +zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr +zstyle ':completion:*:ssh:*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *' +zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*' +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*' diff --git a/.zprezto/modules/directory/README.md b/.zprezto/modules/directory/README.md new file mode 100644 index 0000000..47c1bc2 --- /dev/null +++ b/.zprezto/modules/directory/README.md @@ -0,0 +1,35 @@ +Directory +========= + +Sets directory options and defines directory aliases. + +Options +------- + + - `AUTO_CD` auto changes to a directory without typing `cd`. + - `AUTO_PUSHD` pushes the old directory onto the stack on `cd`. + - `PUSHD_IGNORE_DUPS` does not store duplicates in the stack. + - `PUSHD_SILENT` does not print the directory stack after `pushd` or `popd`. + - `PUSHD_TO_HOME` pushes to the home directory when no argument is given. + - `CDABLE_VARS` changes directory to a path stored in a variable. + - `AUTO_NAME_DIRS` auto adds variable-stored paths to `~` list. + - `MULTIOS` writes to multiple descriptors. + - `EXTENDED_GLOB` uses extended globbing syntax. + - `CLOBBER` does not overwrite existing files with `>` and `>>`. Use `>!` and + `>>!` to bypass. + +Aliases +------- + + - `d` prints the contents of the directory stack. + - `1 ... 9` changes the directory to the **n** previous one. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [James Cox](https://github.com/imajes) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/directory/init.zsh b/.zprezto/modules/directory/init.zsh new file mode 100644 index 0000000..47191df --- /dev/null +++ b/.zprezto/modules/directory/init.zsh @@ -0,0 +1,30 @@ +# +# Sets directory options and defines directory aliases. +# +# Authors: +# James Cox +# Sorin Ionescu +# + +# +# Options +# + +setopt AUTO_CD # Auto changes to a directory without typing cd. +setopt AUTO_PUSHD # Push the old directory onto the stack on cd. +setopt PUSHD_IGNORE_DUPS # Do not store duplicates in the stack. +setopt PUSHD_SILENT # Do not print the directory stack after pushd or popd. +setopt PUSHD_TO_HOME # Push to home directory when no argument is given. +setopt CDABLE_VARS # Change directory to a path stored in a variable. +setopt AUTO_NAME_DIRS # Auto add variable-stored paths to ~ list. +setopt MULTIOS # Write to multiple descriptors. +setopt EXTENDED_GLOB # Use extended globbing syntax. +unsetopt CLOBBER # Do not overwrite existing files with > and >>. + # Use >! and >>! to bypass. + +# +# Aliases +# + +alias d='dirs -v' +for index ({1..9}) alias "$index"="cd +${index}"; unset index diff --git a/.zprezto/modules/dnf/README.md b/.zprezto/modules/dnf/README.md new file mode 100644 index 0000000..bbf1c92 --- /dev/null +++ b/.zprezto/modules/dnf/README.md @@ -0,0 +1,29 @@ +DNF +=== + +Defines [dnf][1] aliases. + +Aliases +------- + + - `dnfc` removes package(s) and leaves. + - `dnfi` installs package(s). + - `dnfh` displays history. + - `dnfl` lists packages. + - `dnfL` lists installed packages. + - `dnfq` displays package information. + - `dnfr` removes package(s). + - `dnfs` searches for a package. + - `dnfu` updates packages. + - `dnfU` upgrades packages. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://fedoraproject.org/wiki/Features/DNF +[2]: https://github.com/sorin-ionescu/prezto/issues + diff --git a/.zprezto/modules/dnf/init.zsh b/.zprezto/modules/dnf/init.zsh new file mode 100644 index 0000000..7a40142 --- /dev/null +++ b/.zprezto/modules/dnf/init.zsh @@ -0,0 +1,28 @@ +# +# Defines dnf aliases. +# +# Authors: +# FireWave +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[dnf] )); then + return 1 +fi + +# +# Aliases +# + +alias dnfc='sudo dnf clean all' # Cleans the cache. +alias dnfh='dnf history' # Displays history. +alias dnfi='sudo dnf install' # Installs package(s). +alias dnfl='dnf list' # Lists packages. +alias dnfL='dnf list installed' # Lists installed packages. +alias dnfq='dnf info' # Displays package information. +alias dnfr='sudo dnf remove' # Removes package(s). +alias dnfs='dnf search' # Searches for a package. +alias dnfu='sudo dnf update' # Updates packages. +alias dnfU='sudo dnf upgrade' # Upgrades packages. + diff --git a/.zprezto/modules/dpkg/README.md b/.zprezto/modules/dpkg/README.md new file mode 100644 index 0000000..6290c05 --- /dev/null +++ b/.zprezto/modules/dpkg/README.md @@ -0,0 +1,41 @@ +Dpkg +==== + +Defines [dpkg][1] aliases and functions. + +Aliases +------- + +- `debc` cleans the cache. +- `debf` displays a file's package. +- `debi` installs packages from repositories. +- `debI` installs packages from files. +- `debq` displays package information. +- `debu` updates the package lists. +- `debU` upgrades outdated packages. +- `debx` removes packages. +- `debX` removes packages, their configuration, and unneeded dependencies. +- `debs` searches for packages. +- `deb-build` creates a basic deb package. +- `deb-kclean` removes all kernel images and headers, except for the ones in + use. + +Functions +--------- + +- `deb-clone` generates a script that can be used to duplicate a dpkg-based + system. +- `deb-history` displays dpkg history. +- `deb-kbuild` makes a dpkg Linux kernel package. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Daniel Bolton](https://github.com/dbb) + - [Benjamin Boudreau](https://github.com/dreur) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://wiki.debian.org/Teams/Dpkg +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/dpkg/functions/deb-clone b/.zprezto/modules/dpkg/functions/deb-clone new file mode 100644 index 0000000..a284c96 --- /dev/null +++ b/.zprezto/modules/dpkg/functions/deb-clone @@ -0,0 +1,25 @@ +# +# Generates a script that can be used to duplicate a dpkg-based system. +# +# Authors: +# Daniel Bolton +# Sorin Ionescu +# + +local clone_script="${0}.sh" +local package_list=$( + perl \ + -m 'AptPkg::Cache' \ + -e ' + $c=AptPkg::Cache->new; + for (keys %$c) { + push @a, $_ if $c->{$_}->{'CurrentState'} eq 'Installed'; + } + print "$_ " for sort @a; + ' +) + +rm "$clone_script" +print '#!/bin/sh\n' > "$clone_script" +print "aptitude install ${package_list}\n" >> "$clone_script" +chmod +x "$clone_script" diff --git a/.zprezto/modules/dpkg/functions/deb-history b/.zprezto/modules/dpkg/functions/deb-history new file mode 100644 index 0000000..3737679 --- /dev/null +++ b/.zprezto/modules/dpkg/functions/deb-history @@ -0,0 +1,36 @@ +# +# Displays dpkg history. +# +# Authors: +# Peter Leung +# Benjamin Boudreau +# Sorin Ionescu +# + +case "$1" in + (install) + zgrep --no-filename 'install ' $(ls -rt /var/log/dpkg*) + ;; + (upgrade|remove) + zgrep --no-filename "$1" $(ls -rt /var/log/dpkg*) + ;; + (rollback) + zgrep --no-filename upgrade $(ls -rt /var/log/dpkg*) \ + | grep "$2" -A10000000 \ + | grep "$3" -B10000000 \ + | awk '{print $4"="$5}' + ;; + (list) + zcat $(ls -rt /var/log/dpkg*) + ;; + (*) + cat >&2 < +# Sorin Ionescu +# + +make-kpkg clean +MAKEFLAGS='' time fakeroot make-kpkg \ + --append-to-version '-custom' \ + --revision "$(date +"%Y%m%d")" \ + kernel_image \ + kernel_headers diff --git a/.zprezto/modules/dpkg/init.zsh b/.zprezto/modules/dpkg/init.zsh new file mode 100644 index 0000000..e1f479b --- /dev/null +++ b/.zprezto/modules/dpkg/init.zsh @@ -0,0 +1,57 @@ +# +# Defines dpkg aliases. +# +# Authors: +# Daniel Bolton +# Benjamin Boudreau +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[dpkg] && ! $+commands[apt-get] )); then + return 1 +fi + +# +# Aliases +# + +# Cleans the cache. +alias debc='sudo apt-get clean && sudo apt-get autoclean' + +# Displays a file's package. +alias debf='apt-file search --regexp' + +# Installs packages from repositories. +alias debi='sudo apt-get install' + +# Installs packages from files. +alias debI='sudo dpkg -i' + +# Displays package information. +alias debq='apt-cache show' + +# Updates the package lists. +alias debu='sudo apt-get update' + +# Upgrades outdated packages. +alias debU='sudo apt-get update && sudo apt-get dist-upgrade' + +# Removes packages. +alias debx='sudo apt-get remove' + +# Removes packages, their configuration, and unneeded dependencies. +alias debX='sudo apt-get remove --purge && sudo apt-get autoremove --purge' + +# Searches for packages. +if (( $+commands[aptitude] )); then + alias debs='aptitude -F "* %p -> %d \n(%v/%V)" --no-gui --disable-columns search' +else + alias debs='apt-cache search' +fi + +# Creates a basic deb package. +alias deb-build='time dpkg-buildpackage -rfakeroot -us -uc' + +# Removes all kernel images and headers, except for the ones in use. +alias deb-kclean='sudo aptitude remove -P "?and(~i~nlinux-(ima|hea) ?not(~n`uname -r`))"' diff --git a/.zprezto/modules/editor/README.md b/.zprezto/modules/editor/README.md new file mode 100644 index 0000000..da0185f --- /dev/null +++ b/.zprezto/modules/editor/README.md @@ -0,0 +1,61 @@ +Editor +====== + +Sets key bindings. + +Settings +-------- + +### Key bindings + +To enable key bindings, add the following to *zpreztorc*, and replace 'bindings' +with 'emacs' or 'vi'. + + zstyle ':prezto:module:editor' key-bindings 'bindings' + +### Dot Expansion + +To enable the auto conversion of .... to ../.., add the following to +*zpreztorc*. + + zstyle ':prezto:module:editor' dot-expansion 'yes' + +Theming +------- + +To indicate when the editor is in the primary keymap (emacs or viins), add +the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary' format '>>>' + +To indicate when the editor is in the primary keymap (emacs or viins) insert +mode, add the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I' + +To indicate when the editor is in the primary keymap (emacs or viins) overwrite +mode, add the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O' + +To indicate when the editor is in the alternate keymap (vicmd), add the +following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<' + +To indicate when the editor is completing, add the following to your +`theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:completing' format '...' + +Then add `$editor_info[context]`, where context is *keymap*, *insert*, or +*overwrite*, to `$PROMPT` or `$RPROMPT`. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/oh-my-zsh/issues diff --git a/.zprezto/modules/editor/init.zsh b/.zprezto/modules/editor/init.zsh new file mode 100644 index 0000000..9aa64d6 --- /dev/null +++ b/.zprezto/modules/editor/init.zsh @@ -0,0 +1,329 @@ +# +# Sets key bindings. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$TERM" == 'dumb' ]]; then + return 1 +fi + +# +# Options +# + +# Beep on error in line editor. +setopt BEEP + +# +# Variables +# + +# Treat these characters as part of a word. +WORDCHARS='*?_-.[]~&;!#$%^(){}<>' + +# Use human-friendly identifiers. +zmodload zsh/terminfo +typeset -gA key_info +key_info=( + 'Control' '\C-' + 'ControlLeft' '\e[1;5D \e[5D \e\e[D \eOd' + 'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc' + 'Escape' '\e' + 'Meta' '\M-' + 'Backspace' "^?" + 'Delete' "^[[3~" + 'F1' "$terminfo[kf1]" + 'F2' "$terminfo[kf2]" + 'F3' "$terminfo[kf3]" + 'F4' "$terminfo[kf4]" + 'F5' "$terminfo[kf5]" + 'F6' "$terminfo[kf6]" + 'F7' "$terminfo[kf7]" + 'F8' "$terminfo[kf8]" + 'F9' "$terminfo[kf9]" + 'F10' "$terminfo[kf10]" + 'F11' "$terminfo[kf11]" + 'F12' "$terminfo[kf12]" + 'Insert' "$terminfo[kich1]" + 'Home' "$terminfo[khome]" + 'PageUp' "$terminfo[kpp]" + 'End' "$terminfo[kend]" + 'PageDown' "$terminfo[knp]" + 'Up' "$terminfo[kcuu1]" + 'Left' "$terminfo[kcub1]" + 'Down' "$terminfo[kcud1]" + 'Right' "$terminfo[kcuf1]" + 'BackTab' "$terminfo[kcbt]" +) + +# Set empty $key_info values to an invalid UTF-8 sequence to induce silent +# bindkey failure. +for key in "${(k)key_info[@]}"; do + if [[ -z "$key_info[$key]" ]]; then + key_info[$key]='�' + fi +done + +# +# External Editor +# + +# Allow command line editing in an external editor. +autoload -Uz edit-command-line +zle -N edit-command-line + +# +# Functions +# + +# Exposes information about the Zsh Line Editor via the $editor_info associative +# array. +function editor-info { + # Clean up previous $editor_info. + unset editor_info + typeset -gA editor_info + + if [[ "$KEYMAP" == 'vicmd' ]]; then + zstyle -s ':prezto:module:editor:info:keymap:alternate' format 'REPLY' + editor_info[keymap]="$REPLY" + else + zstyle -s ':prezto:module:editor:info:keymap:primary' format 'REPLY' + editor_info[keymap]="$REPLY" + + if [[ "$ZLE_STATE" == *overwrite* ]]; then + zstyle -s ':prezto:module:editor:info:keymap:primary:overwrite' format 'REPLY' + editor_info[overwrite]="$REPLY" + else + zstyle -s ':prezto:module:editor:info:keymap:primary:insert' format 'REPLY' + editor_info[overwrite]="$REPLY" + fi + fi + + unset REPLY + + zle reset-prompt + zle -R +} +zle -N editor-info + +# Updates editor information when the keymap changes. +function zle-keymap-select { + zle editor-info +} +zle -N zle-keymap-select + +# Enables terminal application mode and updates editor information. +function zle-line-init { + # The terminal must be in application mode when ZLE is active for $terminfo + # values to be valid. + if (( $+terminfo[smkx] )); then + # Enable terminal application mode. + echoti smkx + fi + + # Update editor information. + zle editor-info +} +zle -N zle-line-init + +# Disables terminal application mode and updates editor information. +function zle-line-finish { + # The terminal must be in application mode when ZLE is active for $terminfo + # values to be valid. + if (( $+terminfo[rmkx] )); then + # Disable terminal application mode. + echoti rmkx + fi + + # Update editor information. + zle editor-info +} +zle -N zle-line-finish + +# Toggles emacs overwrite mode and updates editor information. +function overwrite-mode { + zle .overwrite-mode + zle editor-info +} +zle -N overwrite-mode + +# Enters vi insert mode and updates editor information. +function vi-insert { + zle .vi-insert + zle editor-info +} +zle -N vi-insert + +# Moves to the first non-blank character then enters vi insert mode and updates +# editor information. +function vi-insert-bol { + zle .vi-insert-bol + zle editor-info +} +zle -N vi-insert-bol + +# Enters vi replace mode and updates editor information. +function vi-replace { + zle .vi-replace + zle editor-info +} +zle -N vi-replace + +# Expands .... to ../.. +function expand-dot-to-parent-directory-path { + if [[ $LBUFFER = *.. ]]; then + LBUFFER+='/..' + else + LBUFFER+='.' + fi +} +zle -N expand-dot-to-parent-directory-path + +# Displays an indicator when completing. +function expand-or-complete-with-indicator { + local indicator + zstyle -s ':prezto:module:editor:info:completing' format 'indicator' + print -Pn "$indicator" + zle expand-or-complete + zle redisplay +} +zle -N expand-or-complete-with-indicator + +# Inserts 'sudo ' at the beginning of the line. +function prepend-sudo { + if [[ "$BUFFER" != su(do|)\ * ]]; then + BUFFER="sudo $BUFFER" + (( CURSOR += 5 )) + fi +} +zle -N prepend-sudo + +# Reset to default key bindings. +bindkey -d + +# +# Emacs Key Bindings +# + +for key in "$key_info[Escape]"{B,b} "${(s: :)key_info[ControlLeft]}" + bindkey -M emacs "$key" emacs-backward-word +for key in "$key_info[Escape]"{F,f} "${(s: :)key_info[ControlRight]}" + bindkey -M emacs "$key" emacs-forward-word + +# Kill to the beginning of the line. +for key in "$key_info[Escape]"{K,k} + bindkey -M emacs "$key" backward-kill-line + +# Redo. +bindkey -M emacs "$key_info[Escape]_" redo + +# Search previous character. +bindkey -M emacs "$key_info[Control]X$key_info[Control]B" vi-find-prev-char + +# Match bracket. +bindkey -M emacs "$key_info[Control]X$key_info[Control]]" vi-match-bracket + +# Edit command in an external editor. +bindkey -M emacs "$key_info[Control]X$key_info[Control]E" edit-command-line + +if (( $+widgets[history-incremental-pattern-search-backward] )); then + bindkey -M emacs "$key_info[Control]R" \ + history-incremental-pattern-search-backward + bindkey -M emacs "$key_info[Control]S" \ + history-incremental-pattern-search-forward +fi + +# +# Vi Key Bindings +# + +# Edit command in an external editor. +bindkey -M vicmd "v" edit-command-line + +# Undo/Redo +bindkey -M vicmd "u" undo +bindkey -M vicmd "$key_info[Control]R" redo + +if (( $+widgets[history-incremental-pattern-search-backward] )); then + bindkey -M vicmd "?" history-incremental-pattern-search-backward + bindkey -M vicmd "/" history-incremental-pattern-search-forward +else + bindkey -M vicmd "?" history-incremental-search-backward + bindkey -M vicmd "/" history-incremental-search-forward +fi + +# +# Emacs and Vi Key Bindings +# + +for keymap in 'emacs' 'viins'; do + bindkey -M "$keymap" "$key_info[Home]" beginning-of-line + bindkey -M "$keymap" "$key_info[End]" end-of-line + + bindkey -M "$keymap" "$key_info[Insert]" overwrite-mode + bindkey -M "$keymap" "$key_info[Delete]" delete-char + bindkey -M "$keymap" "$key_info[Backspace]" backward-delete-char + + bindkey -M "$keymap" "$key_info[Left]" backward-char + bindkey -M "$keymap" "$key_info[Right]" forward-char + + # Expand history on space. + bindkey -M "$keymap" ' ' magic-space + + # Clear screen. + bindkey -M "$keymap" "$key_info[Control]L" clear-screen + + # Expand command name to full path. + for key in "$key_info[Escape]"{E,e} + bindkey -M "$keymap" "$key" expand-cmd-path + + # Duplicate the previous word. + for key in "$key_info[Escape]"{M,m} + bindkey -M "$keymap" "$key" copy-prev-shell-word + + # Use a more flexible push-line. + for key in "$key_info[Control]Q" "$key_info[Escape]"{q,Q} + bindkey -M "$keymap" "$key" push-line-or-edit + + # Bind Shift + Tab to go to the previous menu item. + bindkey -M "$keymap" "$key_info[BackTab]" reverse-menu-complete + + # Complete in the middle of word. + bindkey -M "$keymap" "$key_info[Control]I" expand-or-complete + + # Expand .... to ../.. + if zstyle -t ':prezto:module:editor' dot-expansion; then + bindkey -M "$keymap" "." expand-dot-to-parent-directory-path + fi + + # Display an indicator when completing. + bindkey -M "$keymap" "$key_info[Control]I" \ + expand-or-complete-with-indicator + + # Insert 'sudo ' at the beginning of the line. + bindkey -M "$keymap" "$key_info[Control]X$key_info[Control]S" prepend-sudo +done + +# Do not expand .... to ../.. during incremental search. +if zstyle -t ':prezto:module:editor' dot-expansion; then + bindkey -M isearch . self-insert 2> /dev/null +fi + +# +# Layout +# + +# Set the key layout. +zstyle -s ':prezto:module:editor' key-bindings 'key_bindings' +if [[ "$key_bindings" == (emacs|) ]]; then + bindkey -e +elif [[ "$key_bindings" == vi ]]; then + bindkey -v +else + print "prezto: editor: invalid key bindings: $key_bindings" >&2 +fi + +unset key{,map,bindings} diff --git a/.zprezto/modules/emacs/README.md b/.zprezto/modules/emacs/README.md new file mode 100644 index 0000000..fa9a514 --- /dev/null +++ b/.zprezto/modules/emacs/README.md @@ -0,0 +1,33 @@ +Emacs +===== + +Enables Emacs dependency management. + +Dependency management +--------------------- + +[Carton][1] installs and manages Emacs packages for Emacs package development +and Emacs configuration. + +This module prepends the Carton directory to the path variable to enable the +execution of `carton`. + +Aliases +------- + +### Carton + + - `cai` installs dependencies. + - `cau` updates dependencies. + - `caI` initializes the current directory for dependency management. + - `cae` executes a command which correct dependencies. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: https://github.com/rejeep/carton +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/emacs/init.zsh b/.zprezto/modules/emacs/init.zsh new file mode 100644 index 0000000..3acc965 --- /dev/null +++ b/.zprezto/modules/emacs/init.zsh @@ -0,0 +1,25 @@ +# +# Configures Emacs dependency management. +# +# Authors: Sebastian Wiesner +# + +# Return if requirements are not found. +if [[ ! -d "$HOME/.cask" ]]; then + return 1 +fi + +# Prepend Cask bin directory. +path=($HOME/.cask/bin $path) + +# Load Carton completion +source "$HOME/.cask/etc/cask_completion.zsh" 2> /dev/null + +# +# Aliases +# + +alias cai='cask install' +alias cau='cask update' +alias caI='cask init' +alias cae='cask exec' diff --git a/.zprezto/modules/environment/README.md b/.zprezto/modules/environment/README.md new file mode 100644 index 0000000..b86cbc5 --- /dev/null +++ b/.zprezto/modules/environment/README.md @@ -0,0 +1,25 @@ +Environment +=========== + +Sets general shell options and defines environment variables. + +This module must be loaded first. + +Environment Variables +--------------------- + +Contributors +------------ + +This module **MUST NOT** rely on any command not built in Zsh. + +Non-interactive environment variables should be defined in *zshenv*. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/environment/init.zsh b/.zprezto/modules/environment/init.zsh new file mode 100644 index 0000000..76655a6 --- /dev/null +++ b/.zprezto/modules/environment/init.zsh @@ -0,0 +1,48 @@ +# +# Sets general shell options and defines environment variables. +# +# Authors: +# Sorin Ionescu +# + +# +# Smart URLs +# + +autoload -Uz url-quote-magic +zle -N self-insert url-quote-magic + +# +# General +# + +setopt BRACE_CCL # Allow brace character class list expansion. +setopt COMBINING_CHARS # Combine zero-length punctuation characters (accents) + # with the base character. +setopt RC_QUOTES # Allow 'Henry''s Garage' instead of 'Henry'\''s Garage'. +unsetopt MAIL_WARNING # Don't print a warning message if a mail file has been accessed. + +# +# Jobs +# + +setopt LONG_LIST_JOBS # List jobs in the long format by default. +setopt AUTO_RESUME # Attempt to resume existing job before creating a new process. +setopt NOTIFY # Report status of background jobs immediately. +unsetopt BG_NICE # Don't run all background jobs at a lower priority. +unsetopt HUP # Don't kill jobs on shell exit. +unsetopt CHECK_JOBS # Don't report on jobs when shell exit. + +# +# Termcap +# + +if zstyle -t ':prezto:environment:termcap' color; then + export LESS_TERMCAP_mb=$'\E[01;31m' # Begins blinking. + export LESS_TERMCAP_md=$'\E[01;31m' # Begins bold. + export LESS_TERMCAP_me=$'\E[0m' # Ends mode. + export LESS_TERMCAP_se=$'\E[0m' # Ends standout-mode. + export LESS_TERMCAP_so=$'\E[00;47;30m' # Begins standout-mode. + export LESS_TERMCAP_ue=$'\E[0m' # Ends underline. + export LESS_TERMCAP_us=$'\E[01;32m' # Begins underline. +fi diff --git a/.zprezto/modules/fasd/README.md b/.zprezto/modules/fasd/README.md new file mode 100644 index 0000000..7d22626 --- /dev/null +++ b/.zprezto/modules/fasd/README.md @@ -0,0 +1,38 @@ +Fasd +==== + +[Fasd][1] is a command-line productivity booster, inspired by tools like +[autojump][2], [z][3] and [v][4], it offers quick access to files and +directories by keeping track of files and directories that were previously +accessed. + +For completion to work, this module must be loaded **after** the *completion* +module. + +The Prezto Fasd configuration differs from the default. The default aliases have +been disabled. + +Aliases +------- + + - `j` changes the current working directory interactively. + +Completion +---------- + +Type `,`, `f,`, `d,` in front of a comma-separated query or type `,,`, `,,f`, +`,,d` at the end of a comma-separated query then hit tab. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][5].* + + - [Wei Dai](https://github.com/clvv) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/clvv/fasd +[2]: https://github.com/joelthelion/autojump +[3]: https://github.com/rupa/z +[4]: https://github.com/rupa/v +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/fasd/init.zsh b/.zprezto/modules/fasd/init.zsh new file mode 100644 index 0000000..fc21425 --- /dev/null +++ b/.zprezto/modules/fasd/init.zsh @@ -0,0 +1,53 @@ +# +# Maintains a frequently used file and directory list for fast access. +# +# Authors: +# Wei Dai +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# Return if requirements are not found. +if (( ! $+commands[fasd] )); then + return 1 +fi + +# +# Initialization +# + +cache_file="${0:h}/cache.zsh" +if [[ "${commands[fasd]}" -nt "$cache_file" || ! -s "$cache_file" ]]; then + # Set the base init arguments. + init_args=(zsh-hook) + + # Set fasd completion init arguments, if applicable. + if zstyle -t ':prezto:module:completion' loaded; then + init_args+=(zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install) + fi + + # Cache init code. + fasd --init "$init_args[@]" >! "$cache_file" 2> /dev/null +fi + +source "$cache_file" + +unset cache_file init_args + +function fasd_cd { + local fasd_ret="$(fasd -d "$@")" + if [[ -d "$fasd_ret" ]]; then + cd "$fasd_ret" + else + print "$fasd_ret" + fi +} + +# +# Aliases +# + +# Changes the current working directory interactively. +alias j='fasd_cd -i' diff --git a/.zprezto/modules/git/README.md b/.zprezto/modules/git/README.md new file mode 100644 index 0000000..c2d0449 --- /dev/null +++ b/.zprezto/modules/git/README.md @@ -0,0 +1,334 @@ +Git +=== + +Enhances the [Git][1] distributed version control system by providing aliases, +functions and by exposing repository status information to prompts. + +Git **1.7.2** is the [minimum required version][7]. + +Settings +-------- + +### Log + +The format of the [git-log][8] output is configurable via the following style, +where context is *brief*, *oneline*, and *medium*, which will be passed to the +`--pretty=format:` switch. + + zstyle ':prezto:module:git:log:context' format '' + +### Status + +Retrieving the status of a repository with submodules can take a long time. +Submodules may be ignored when they are *dirty*, *untracked*, *all*, or *none*. + + zstyle ':prezto:module:git:status:ignore' submodules 'all' + +This setting affects all aliases and functions that call `git-status`. + +Aliases +------- + +### Git + + - `g` is short for `git`. + +### Branch + + - `gb` lists, creates, renames, and deletes branches. + - `gbc` creates a new branch. + - `gbl` lists branches and their commits. + - `gbL` lists local and remote branches and their commits. + - `gbs` lists branches and their commits with ancestry graphs. + - `gbS` lists local and remote branches and their commits with ancestry + graphs. + - `gbx` deletes a branch. + - `gbX` deletes a branch irrespective of its merged status. + - `gbm` renames a branch. + - `gbM` renames a branch even if the new branch name already exists. + + +### Commit + + - `gc` records changes to the repository. + - `gca` stages all modified and deleted files. + - `gcm` records changes to the repository with the given message. + - `gco` checks out a branch or paths to work tree. + - `gcO` checks out hunks from the index or the tree interactively. + - `gcf` amends the tip of the current branch using the same log message as + *HEAD*. + - `gcF` amends the tip of the current branch. + - `gcp` applies changes introduced by existing commits. + - `gcP` applies changes introduced by existing commits without committing. + - `gcr` reverts existing commits by reverting patches and recording new + commits. + - `gcR` removes the *HEAD* commit. + - `gcs` displays various types of objects. + - `gcl` lists lost commits. + +### Conflict + + - `gCl` lists unmerged files. + - `gCa` adds unmerged file contents to the index. + - `gCe` executes merge-tool on all unmerged file. + - `gCo` checks out our changes for unmerged paths. + - `gCO` checks out our changes for all unmerged paths. + - `gCt` checks out their changes for unmerged paths. + - `gCT` checks out their changes for all unmerged paths. + +### Data + + - `gd` displays information about files in the index and the work tree. + - `gdc` lists cached files. + - `gdx` lists deleted files. + - `gdm` lists modified files. + - `gdu` lists untracked files. + - `gdk` lists killed files. + - `gdi` lists ignored files. + +### Fetch + + - `gf` downloads objects and references from another repository. + - `gfc` clones a repository into a new directory. + - `gfm` fetches from and merges with another repository or local branch. + - `gfr` fetches from and rebases on another repository or local branch. + +### Grep + + - `gg` displays lines matching a pattern. + - `ggi` displays lines matching a pattern ignoring case. + - `ggl` lists files matching a pattern. + - `ggL` lists files that are not matching a pattern. + - `ggv` displays lines not matching a pattern. + - `ggw` displays lines matching a pattern at word boundary. + +### Index + + - `gia` adds file contents to the index. + - `giA` adds file contents to the index interactively. + - `giu` adds file contents to the index (updates only known files). + - `gid` displays changes between the index and a named commit (diff). + - `giD` displays changes between the index and a named commit (word diff). + - `gir` resets the current HEAD to the specified state. + - `giR` resets the current index interactively. + - `gix` removes files/directories from the index (recursively). + - `giX` removes files/directories from the index (recursively and forced). + +### Log + + - `gl` displays the log. + - `gls` displays the stats log. + - `gld` displays the diff log. + - `glo` displays the one line log. + - `glg` displays the graph log. + - `glb` displays the brief commit log. + - `glc` displays the commit count for each contributor in descending order. + +### Merge + + - `gm` joins two or more development histories together. + - `gmC` joins two or more development histories together but does not commit. + - `gmF` joins two or more development histories together but does not commit + generating a merge commit even if the merge resolved as a fast-forward. + - `gma` aborts the conflict resolution, and reconstructs the pre-merge state. + - `gmt` runs the merge conflict resolution tools to resolve conflicts. + +### Push + + - `gp` updates remote refs along with associated objects. + - `gpf` forcefully updates remote refs along with associated objects. + - `gpa` updates remote branches along with associated objects. + - `gpA` updates remote branches and tags along with associated objects. + - `gpt` updates remote tags along with associated objects. + - `gpc` updates remote refs along with associated objects and adds *origin* + as an upstream reference for the current branch. + - `gpp` pulls and pushes from origin to origin. + +### Rebase + + - `gr` forward-ports local commits to the updated upstream head. + - `gra` aborts the rebase. + - `grc` continues the rebase after merge conflicts are resolved. + - `gri` makes a list of commits to be rebased and opens the editor. + - `grs` skips the current patch. + +### Remote + + - `gR` manages tracked repositories. + - `gRl` lists remote names and their URLs. + - `gRa` adds a new remote. + - `gRx` removes a remote. + - `gRm` renames a remote. + - `gRu` fetches remotes updates. + - `gRp` prunes all stale remote tracking branches. + - `gRs` displays information about a given remote. + - `gRb` opens a remote on [GitHub][3] in the default browser. + +### Stash + + - `gs` stashes the changes of the dirty working directory. + - `gsa` applies the changes recorded in a stash to the working directory. + - `gsx` drops a stashed state. + - `gsX` drops all the stashed states. + - `gsl` lists stashed states. + - `gsL` lists dropped stashed states. + - `gsd` displays changes between the stash and its original parent. + - `gsp` removes and applies a single stashed state from the stash list. + - `gsr` recovers a given stashed state. + - `gss` stashes the changes of the dirty working directory, including untracked. + - `gsS` stashes the changes of the dirty working directory interactively. + - `gsw` stashes the changes of the dirty working directory retaining the index. + +### Submodule + + - `gS` initializes, updates, or inspects submodules. + - `gSa` adds given a repository as a submodule. + - `gSf` evaluates a shell command in each of checked out submodules. + - `gSi` initializes submodules. + - `gSI` initializes and clones submodules recursively. + - `gSl` lists the commits of all submodules. + - `gSm` moves a submodule. + - `gSs` synchronizes submodules' remote URL to the value specified in + .gitmodules. + - `gSu` fetches and merges the latest changes for all submodule. + - `gSx` removes a submodule. + +### Working directory + + - `gws` displays working-tree status in the short format. + - `gwS` displays working-tree status. + - `gwd` displays changes between the working tree and the index (diff). + - `gwD` displays changes between the working tree and the index (word diff). + - `gwr` resets the current HEAD to the specified state, does not touch the + index nor the working tree. + - `gwR` resets the current HEAD, index and working tree to the specified state. + - `gwc` removes untracked files from the working tree (dry-run). + - `gwC` removes untracked files from the working tree. + - `gwx` removes files from the working tree and from the index recursively. + - `gwX` removes files from the working tree and from the index recursively and + forcefully. + +### Shadows + +The following aliases may shadow system commands: + + - `gpt` shadows the [GUID partition table maintenance utility][4]. + - `gs` shadows the [Ghostscript][5]. + +If you frequently use the above commands, you may wish to remove said aliases +from this module or to disable them at the bottom of the zshrc with `unalias`. + +You can temporarily bypass an alias by prefixing it with a backward slash: +`\gpt`. + +Functions +--------- + + - `git-branch-current` displays the current branch. + - `git-commit-lost` lists lost commits. + - `git-dir` displays the path to the Git directory. + - `git-hub-browse` opens the [GitHub][3] repository in the default browser. + - `git-hub-shorten-url` shortens GitHub URLs. + - `git-info` exposes repository information via the `$git_info` associative + array. + - `git-root` displays the path to the working tree root. + - `git-stash-clear-interactive` asks for confirmation before clearing the stash. + - `git-stash-dropped` lists dropped stashed states. + - `git-stash-recover` recovers given dropped stashed states. + - `git-submodule-move` moves a submodule. + - `git-submodule-remove` removes a submodule. + +Theming +------- + +To display information about the current repository in a prompt, define the +following styles in the `prompt_name_setup` function, where the syntax for +setting a style is as follows. + + zstyle ':prezto:module:git:info:context:subcontext' format 'string' + +### Main Contexts + +| Name | Format Code | Description +| --------- | :---------: | --------------------------------------------------- +| action | %s | Special action name +| ahead | %A | Commits ahead of remote count +| behind | %B | Commits behind of remote count +| branch | %b | Branch name +| commit | %c | Commit hash +| position | %p | Commits from the nearest tag count +| remote | %R | Remote name +| stashed | %S | Stashed states count + +### Concise Contexts + +| Name | Format Code | Description +| --------- | :---------: | --------------------------------------------------- +| clean | %C | Clean state +| dirty | %D | Dirty files count +| indexed | %i | Indexed files count +| unindexed | %I | Unindexed files count +| untracked | %u | Untracked files count + +The following contexts must be enabled with the following zstyle: + + zstyle ':prezto:module:git:info' verbose 'yes' + +### Verbose Contexts + +| Name | Format Code | Description +| --------- | :---------: | --------------------------------------------------- +| added | %a | Added files count +| clean | %C | Clean state +| deleted | %d | Deleted files count +| dirty | %D | Dirty files count +| modified | %m | Modified files count +| renamed | %r | Renamed files count +| unmerged | %U | Unmerged files count +| untracked | %u | Untracked files count + +### Special Action Contexts + +| Name | Format | Description +| -------------------- | :---------: | ----------------------------------------- +| apply | value | Applying patches +| bisect | value | Binary searching for changes +| cherry-pick | value | Cherry picking +| cherry-pick-sequence | value | Cherry picking sequence +| merge | value | Merging +| rebase | value | Rebasing +| rebase-interactive | value | Rebasing interactively +| rebase-merge | value | Rebasing merge + +First, format the repository state attributes. For example, to format the branch +and remote names, define the following styles. + + zstyle ':prezto:module:git:info:branch' format 'branch:%b' + zstyle ':prezto:module:git:info:remote' format 'remote:%R' + +Second, format how the above attributes are displayed in prompts. + + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' ' git(%b)' \ + 'rprompt' '[%R]' + +Last, add `$git_info[prompt]` to `$PROMPT` and `$git_info[rprompt]` to +`$RPROMPT` respectively and call `git-info` in the `prompt_name_preexec` hook +function. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][6].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Colin Hebert](https://github.com/ColinHebert) + +[1]: http://www.git-scm.com +[2]: https://github.com/defunkt/hub +[3]: https://www.github.com +[4]: http://www.manpagez.com/man/8/gpt/ +[5]: http://linux.die.net/man/1/gs +[6]: https://github.com/sorin-ionescu/prezto/issues +[7]: https://github.com/sorin-ionescu/prezto/issues/219 +[8]: http://www.kernel.org/pub/software/scm/git/docs/git-log.html diff --git a/.zprezto/modules/git/alias.zsh b/.zprezto/modules/git/alias.zsh new file mode 100644 index 0000000..ffa854d --- /dev/null +++ b/.zprezto/modules/git/alias.zsh @@ -0,0 +1,181 @@ +# +# Defines Git aliases. +# +# Authors: +# Sorin Ionescu +# + +# +# Settings +# +# + +# Log +zstyle -s ':prezto:module:git:log:medium' format '_git_log_medium_format' \ + || _git_log_medium_format='%C(bold)Commit:%C(reset) %C(green)%H%C(red)%d%n%C(bold)Author:%C(reset) %C(cyan)%an <%ae>%n%C(bold)Date:%C(reset) %C(blue)%ai (%ar)%C(reset)%n%+B' +zstyle -s ':prezto:module:git:log:oneline' format '_git_log_oneline_format' \ + || _git_log_oneline_format='%C(green)%h%C(reset) %s%C(red)%d%C(reset)%n' +zstyle -s ':prezto:module:git:log:brief' format '_git_log_brief_format' \ + || _git_log_brief_format='%C(green)%h%C(reset) %s%n%C(blue)(%ar by %an)%C(red)%d%C(reset)%n' + +# Status +zstyle -s ':prezto:module:git:status:ignore' submodules '_git_status_ignore_submodules' \ + || _git_status_ignore_submodules='none' + +# +# Aliases +# + +# Git +alias g='git' + +# Branch (b) +alias gb='git branch' +alias gbc='git checkout -b' +alias gbl='git branch -v' +alias gbL='git branch -av' +alias gbx='git branch -d' +alias gbX='git branch -D' +alias gbm='git branch -m' +alias gbM='git branch -M' +alias gbs='git show-branch' +alias gbS='git show-branch -a' + +# Commit (c) +alias gc='git commit --verbose' +alias gca='git commit --verbose --all' +alias gcm='git commit --message' +alias gco='git checkout' +alias gcO='git checkout --patch' +alias gcf='git commit --amend --reuse-message HEAD' +alias gcF='git commit --verbose --amend' +alias gcp='git cherry-pick --ff' +alias gcP='git cherry-pick --no-commit' +alias gcr='git revert' +alias gcR='git reset "HEAD^"' +alias gcs='git show' +alias gcl='git-commit-lost' + +# Conflict (C) +alias gCl='git status | sed -n "s/^.*both [a-z]*ed: *//p"' +alias gCa='git add $(gCl)' +alias gCe='git mergetool $(gCl)' +alias gCo='git checkout --ours --' +alias gCO='gCo $(gCl)' +alias gCt='git checkout --theirs --' +alias gCT='gCt $(gCl)' + +# Data (d) +alias gd='git ls-files' +alias gdc='git ls-files --cached' +alias gdx='git ls-files --deleted' +alias gdm='git ls-files --modified' +alias gdu='git ls-files --other --exclude-standard' +alias gdk='git ls-files --killed' +alias gdi='git status --porcelain --short --ignored | sed -n "s/^!! //p"' + +# Fetch (f) +alias gf='git fetch' +alias gfc='git clone' +alias gfm='git pull' +alias gfr='git pull --rebase' + +# Grep (g) +alias gg='git grep' +alias ggi='git grep --ignore-case' +alias ggl='git grep --files-with-matches' +alias ggL='git grep --files-without-matches' +alias ggv='git grep --invert-match' +alias ggw='git grep --word-regexp' + +# Index (i) +alias gia='git add' +alias giA='git add --patch' +alias giu='git add --update' +alias gid='git diff --no-ext-diff --cached' +alias giD='git diff --no-ext-diff --cached --word-diff' +alias gir='git reset' +alias giR='git reset --patch' +alias gix='git rm -r --cached' +alias giX='git rm -rf --cached' + +# Log (l) +alias gl='git log --topo-order --pretty=format:"${_git_log_medium_format}"' +alias gls='git log --topo-order --stat --pretty=format:"${_git_log_medium_format}"' +alias gld='git log --topo-order --stat --patch --full-diff --pretty=format:"${_git_log_medium_format}"' +alias glo='git log --topo-order --pretty=format:"${_git_log_oneline_format}"' +alias glg='git log --topo-order --all --graph --pretty=format:"${_git_log_oneline_format}"' +alias glb='git log --topo-order --pretty=format:"${_git_log_brief_format}"' +alias glc='git shortlog --summary --numbered' + +# Merge (m) +alias gm='git merge' +alias gmC='git merge --no-commit' +alias gmF='git merge --no-ff' +alias gma='git merge --abort' +alias gmt='git mergetool' + +# Push (p) +alias gp='git push' +alias gpf='git push --force' +alias gpa='git push --all' +alias gpA='git push --all && git push --tags' +alias gpt='git push --tags' +alias gpc='git push --set-upstream origin "$(git-branch-current 2> /dev/null)"' +alias gpp='git pull origin "$(git-branch-current 2> /dev/null)" && git push origin "$(git-branch-current 2> /dev/null)"' + +# Rebase (r) +alias gr='git rebase' +alias gra='git rebase --abort' +alias grc='git rebase --continue' +alias gri='git rebase --interactive' +alias grs='git rebase --skip' + +# Remote (R) +alias gR='git remote' +alias gRl='git remote --verbose' +alias gRa='git remote add' +alias gRx='git remote rm' +alias gRm='git remote rename' +alias gRu='git remote update' +alias gRp='git remote prune' +alias gRs='git remote show' +alias gRb='git-hub-browse' + +# Stash (s) +alias gs='git stash' +alias gsa='git stash apply' +alias gsx='git stash drop' +alias gsX='git-stash-clear-interactive' +alias gsl='git stash list' +alias gsL='git-stash-dropped' +alias gsd='git stash show --patch --stat' +alias gsp='git stash pop' +alias gsr='git-stash-recover' +alias gss='git stash save --include-untracked' +alias gsS='git stash save --patch --no-keep-index' +alias gsw='git stash save --include-untracked --keep-index' + +# Submodule (S) +alias gS='git submodule' +alias gSa='git submodule add' +alias gSf='git submodule foreach' +alias gSi='git submodule init' +alias gSI='git submodule update --init --recursive' +alias gSl='git submodule status' +alias gSm='git-submodule-move' +alias gSs='git submodule sync' +alias gSu='git submodule foreach git pull origin master' +alias gSx='git-submodule-remove' + +# Working Copy (w) +alias gws='git status --ignore-submodules=${_git_status_ignore_submodules} --short' +alias gwS='git status --ignore-submodules=${_git_status_ignore_submodules}' +alias gwd='git diff --no-ext-diff' +alias gwD='git diff --no-ext-diff --word-diff' +alias gwr='git reset --soft' +alias gwR='git reset --hard' +alias gwc='git clean -n' +alias gwC='git clean -f' +alias gwx='git rm -r' +alias gwX='git rm -rf' diff --git a/.zprezto/modules/git/functions/_git-hub-browse b/.zprezto/modules/git/functions/_git-hub-browse new file mode 100644 index 0000000..54d223f --- /dev/null +++ b/.zprezto/modules/git/functions/_git-hub-browse @@ -0,0 +1,47 @@ +#compdef git-hub-browse +#autoload + +# +# Completes git-hub-browse. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local state expl remotes remote branches_or_tags branches tags files ret=1 + +_arguments -C -s -S \ + '1::args:->remote' \ + '2::args:->branch-or-tag' \ + '3::args:->file' && ret=0 + +case "$state" in + (remote) + remotes=($(git config --get-regexp 'remote.*.url' | cut -d. -f2)) + + _describe -t branch 'remotes' remotes && ret=0 + ;; + (branch-or-tag) + remote="$words[(($CURRENT - 1))]" + + branches_or_tags=($( + git ls-remote --heads --tags "$remote" 2>/dev/null | cut -f2 + )) + + branches=(HEAD ${${(M)branches_or_tags[@]##refs/heads/?##}##refs/heads/}) + tags=(${${(M)branches_or_tags[@]##refs/tags/?##}##refs/tags/}) + + _describe -t branch 'branches' branches && ret=0 + _describe -t tag 'tags' tags && ret=0 + ;; + (file) + files=(${(0)"$(_call_program files git ls-files -z --exclude-standard 2>/dev/null)"}) + _wanted file expl 'file' _multi_parts - / files && ret=0 + ;; +esac + +return $ret diff --git a/.zprezto/modules/git/functions/_git-hub-shorten-url b/.zprezto/modules/git/functions/_git-hub-shorten-url new file mode 100644 index 0000000..dcc7bb3 --- /dev/null +++ b/.zprezto/modules/git/functions/_git-hub-shorten-url @@ -0,0 +1,11 @@ +#compdef git-hub-shorten-url +#autoload + +# +# Completes git-hub-shorten-url. +# +# Authors: +# Sorin Ionescu +# + +_arguments '1:url:' && return 0 diff --git a/.zprezto/modules/git/functions/_git-info b/.zprezto/modules/git/functions/_git-info new file mode 100644 index 0000000..1e21bfe --- /dev/null +++ b/.zprezto/modules/git/functions/_git-info @@ -0,0 +1,18 @@ +#compdef git-info +#autoload + +# +# Completes git-info. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +_arguments "1:toggle:(( + on\:'enable in-prompt information for the current repository' + off\:'disable in-prompt information for the current repository' +))" && return 0 diff --git a/.zprezto/modules/git/functions/_git-submodule-move b/.zprezto/modules/git/functions/_git-submodule-move new file mode 100644 index 0000000..44eddb5 --- /dev/null +++ b/.zprezto/modules/git/functions/_git-submodule-move @@ -0,0 +1,40 @@ +#compdef git-submodule-move +#autoload + +# +# Completes git-submodule-move. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local state expl ret=1 +local -a submodules +local submodule + +_arguments -C -s -S \ + '1::args:->submodule' \ + '2::args:->directory' && ret=0 + +case "$state" in + (submodule) + while IFS=$'\n' read submodule; do + submodules+=("$submodule") + done < <( + git config --file "$(git-root)/.gitmodules" --list \ + | grep '.path=' \ + | cut -d= -f2- + ) + + _describe -t submodule 'submodules' submodules && ret=0 + ;; + (directory) + _wanted directories expl 'directory' _path_files -/ || _message 'directory' + ;; +esac + +return $ret diff --git a/.zprezto/modules/git/functions/_git-submodule-remove b/.zprezto/modules/git/functions/_git-submodule-remove new file mode 100644 index 0000000..87bd7cb --- /dev/null +++ b/.zprezto/modules/git/functions/_git-submodule-remove @@ -0,0 +1,26 @@ +#compdef git-submodule-remove +#autoload + +# +# Completes git-submodule-remove. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local -a submodules +local submodule + +while IFS=$'\n' read submodule; do + submodules+=("$submodule") +done < <( + git config --file "$(git-root)/.gitmodules" --list \ + | grep '.path=' \ + | cut -d= -f2- +) + +_describe -t submodule 'submodules' submodules && return 0 diff --git a/.zprezto/modules/git/functions/git-branch-current b/.zprezto/modules/git/functions/git-branch-current new file mode 100644 index 0000000..944ffe2 --- /dev/null +++ b/.zprezto/modules/git/functions/git-branch-current @@ -0,0 +1,20 @@ +# +# Displays the current Git branch. +# +# Authors: +# Sorin Ionescu +# + +if ! git rev-parse 2> /dev/null; then + print "$0: not a repository: $PWD" >&2 + return 1 +fi + +local ref="$(git symbolic-ref HEAD 2> /dev/null)" + +if [[ -n "$ref" ]]; then + print "${ref#refs/heads/}" + return 0 +else + return 1 +fi diff --git a/.zprezto/modules/git/functions/git-commit-lost b/.zprezto/modules/git/functions/git-commit-lost new file mode 100644 index 0000000..75ab571 --- /dev/null +++ b/.zprezto/modules/git/functions/git-commit-lost @@ -0,0 +1,20 @@ +# +# Lists lost Git commits. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +git fsck 2> /dev/null \ + | grep "^dangling commit" \ + | awk '{print $3}' \ + | git log \ + --date-order \ + --no-walk \ + --stdin \ + --pretty=format:${_git_log_oneline_format} diff --git a/.zprezto/modules/git/functions/git-dir b/.zprezto/modules/git/functions/git-dir new file mode 100644 index 0000000..7e16ca8 --- /dev/null +++ b/.zprezto/modules/git/functions/git-dir @@ -0,0 +1,16 @@ +# +# Displays the path to the Git directory. +# +# Authors: +# Sorin Ionescu +# + +local git_dir="${$(git rev-parse --git-dir):A}" + +if [[ -n "$git_dir" ]]; then + print "$git_dir" + return 0 +else + print "$0: not a repository: $PWD" >&2 + return 1 +fi diff --git a/.zprezto/modules/git/functions/git-hub-browse b/.zprezto/modules/git/functions/git-hub-browse new file mode 100644 index 0000000..549a544 --- /dev/null +++ b/.zprezto/modules/git/functions/git-hub-browse @@ -0,0 +1,58 @@ +# +# Opens a GitHub repository in the default browser. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local remotes remote references reference file url + +remote="${1:-origin}" +remotes=($(git config --get-regexp 'remote.*.url' | cut -d. -f2)) + +if (( $remotes[(i)$remote] == $#remotes + 1 )); then + print "$0: remote not found: $remote" >&2 + return 1 +fi + +url=$( + git config --get "remote.${remote}.url" \ + | sed -En "s/(git|https?)(@|:\/\/)github.com(:|\/)(.+)\/(.+).git/https:\/\/github.com\/\4\/\5/p" +) + +reference="${${2:-$(git-branch-current)}:-HEAD}" +references=( + HEAD + ${$(git ls-remote --heads --tags "$remote" | awk '{print $2}')##refs/(heads|tags)/} +) + +if (( $references[(i)$reference] == $#references + 1 )); then + print "$0: branch or tag not found: $reference" >&2 + return 1 +fi + +if [[ "$reference" == 'HEAD' ]]; then + reference="$(git rev-parse HEAD 2>/dev/null)" +fi + +file="$3" + +if [[ -n "$url" ]]; then + url="${url}/tree/${reference}/${file}" + + if (( $+commands[$BROWSER] )); then + "$BROWSER" "$url" + return 0 + else + print "$0: browser not set or set to a non-existent browser" >&2 + return 1 + fi +else + print "$0: not a Git repository or remote not set" >&2 + return 1 +fi diff --git a/.zprezto/modules/git/functions/git-hub-shorten-url b/.zprezto/modules/git/functions/git-hub-shorten-url new file mode 100644 index 0000000..77e4b0b --- /dev/null +++ b/.zprezto/modules/git/functions/git-hub-shorten-url @@ -0,0 +1,22 @@ +# +# Shortens GitHub URLs. +# +# Authors: +# Sorin Ionescu +# + +local url="$1" + +if [[ "$url" == '-' ]]; then + read url <&0 +fi + +if [[ -z "$url" ]]; then + print "usage: $0 [ url | - ]" >&2 +fi + +if (( $+commands[curl] )); then + curl -s -i 'http://git.io' -F "url=$url" | grep 'Location:' | sed 's/Location: //' +else + print "$0: command not found: curl" >&2 +fi diff --git a/.zprezto/modules/git/functions/git-info b/.zprezto/modules/git/functions/git-info new file mode 100644 index 0000000..8aaa4c3 --- /dev/null +++ b/.zprezto/modules/git/functions/git-info @@ -0,0 +1,423 @@ +# +# Exposes Git repository information via the $git_info associative array. +# +# Authors: +# Sorin Ionescu +# + +# Gets the Git special action (am, bisect, cherry, merge, rebase). +# Borrowed from vcs_info and edited. +function _git-action { + local action_dir + local git_dir="$(git-dir)" + local apply_formatted + local bisect_formatted + local cherry_pick_formatted + local cherry_pick_sequence_formatted + local merge_formatted + local rebase_formatted + local rebase_interactive_formatted + local rebase_merge_formatted + + for action_dir in \ + "${git_dir}/rebase-apply" \ + "${git_dir}/rebase" \ + "${git_dir}/../.dotest" + do + if [[ -d "$action_dir" ]] ; then + zstyle -s ':prezto:module:git:info:action:apply' format 'apply_formatted' || apply_formatted='apply' + zstyle -s ':prezto:module:git:info:action:rebase' format 'rebase_formatted' || rebase_formatted='rebase' + + if [[ -f "${action_dir}/rebasing" ]] ; then + print "$rebase_formatted" + elif [[ -f "${action_dir}/applying" ]] ; then + print "$apply_formatted" + else + print "${rebase_formatted}/${apply_formatted}" + fi + + return 0 + fi + done + + for action_dir in \ + "${git_dir}/rebase-merge/interactive" \ + "${git_dir}/.dotest-merge/interactive" + do + if [[ -f "$action_dir" ]]; then + zstyle -s ':prezto:module:git:info:action:rebase-interactive' format 'rebase_interactive_formatted' || rebase_interactive_formatted='rebase-interactive' + print "$rebase_interactive_formatted" + return 0 + fi + done + + for action_dir in \ + "${git_dir}/rebase-merge" \ + "${git_dir}/.dotest-merge" + do + if [[ -d "$action_dir" ]]; then + zstyle -s ':prezto:module:git:info:action:rebase-merge' format 'rebase_merge_formatted' || rebase_merge_formatted='rebase-merge' + print "$rebase_merge_formatted" + return 0 + fi + done + + if [[ -f "${git_dir}/MERGE_HEAD" ]]; then + zstyle -s ':prezto:module:git:info:action:merge' format 'merge_formatted' || merge_formatted='merge' + print "$merge_formatted" + return 0 + fi + + if [[ -f "${git_dir}/CHERRY_PICK_HEAD" ]]; then + if [[ -d "${git_dir}/sequencer" ]] ; then + zstyle -s ':prezto:module:git:info:action:cherry-pick-sequence' format 'cherry_pick_sequence_formatted' || cherry_pick_sequence_formatted='cherry-pick-sequence' + print "$cherry_pick_sequence_formatted" + else + zstyle -s ':prezto:module:git:info:action:cherry-pick' format 'cherry_pick_formatted' || cherry_pick_formatted='cherry-pick' + print "$cherry_pick_formatted" + fi + + return 0 + fi + + if [[ -f "${git_dir}/BISECT_LOG" ]]; then + zstyle -s ':prezto:module:git:info:action:bisect' format 'bisect_formatted' || bisect_formatted='bisect' + print "$bisect_formatted" + return 0 + fi + + return 1 +} + +# Gets the Git status information. +function git-info { + # Extended globbing is needed to parse repository status. + setopt LOCAL_OPTIONS + setopt EXTENDED_GLOB + + local action + local action_format + local action_formatted + local added=0 + local added_format + local added_formatted + local ahead=0 + local ahead_and_behind + local ahead_and_behind_cmd + local ahead_format + local ahead_formatted + local ahead_or_behind + local behind=0 + local behind_format + local behind_formatted + local branch + local branch_format + local branch_formatted + local branch_info + local clean + local clean_formatted + local commit + local commit_format + local commit_formatted + local deleted=0 + local deleted_format + local deleted_formatted + local dirty=0 + local dirty_format + local dirty_formatted + local ignore_submodules + local indexed=0 + local indexed_format + local indexed_formatted + local -A info_formats + local info_format + local modified=0 + local modified_format + local modified_formatted + local position + local position_format + local position_formatted + local remote + local remote_cmd + local remote_format + local remote_formatted + local renamed=0 + local renamed_format + local renamed_formatted + local stashed=0 + local stashed_format + local stashed_formatted + local status_cmd + local status_mode + local unindexed=0 + local unindexed_format + local unindexed_formatted + local unmerged=0 + local unmerged_format + local unmerged_formatted + local untracked=0 + local untracked_format + local untracked_formatted + + # Clean up previous $git_info. + unset git_info + typeset -gA git_info + + # Return if not inside a Git repository work tree. + if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 + fi + + if (( $# > 0 )); then + if [[ "$1" == [Oo][Nn] ]]; then + git config --bool prompt.showinfo true + elif [[ "$1" == [Oo][Ff][Ff] ]]; then + git config --bool prompt.showinfo false + else + print "usage: $0 [ on | off ]" >&2 + fi + return 0 + fi + + # Return if git-info is disabled. + if ! is-true "${$(git config --bool prompt.showinfo):-true}"; then + return 1 + fi + + # Ignore submodule status. + zstyle -s ':prezto:module:git:status:ignore' submodules 'ignore_submodules' + + # Format commit. + zstyle -s ':prezto:module:git:info:commit' format 'commit_format' + if [[ -n "$commit_format" ]]; then + commit="$(git rev-parse HEAD 2> /dev/null)" + if [[ -n "$commit" ]]; then + zformat -f commit_formatted "$commit_format" "c:$commit" + fi + fi + + # Format stashed. + zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' + if [[ -n "$stashed_format" && -f "$(git-dir)/refs/stash" ]]; then + stashed="$(git stash list 2> /dev/null | wc -l | awk '{print $1}')" + if [[ -n "$stashed" ]]; then + zformat -f stashed_formatted "$stashed_format" "S:$stashed" + fi + fi + + # Format action. + zstyle -s ':prezto:module:git:info:action' format 'action_format' + if [[ -n "$action_format" ]]; then + action="$(_git-action)" + if [[ -n "$action" ]]; then + zformat -f action_formatted "$action_format" "s:$action" + fi + fi + + # Get the branch. + branch="${$(git symbolic-ref HEAD 2> /dev/null)#refs/heads/}" + + # Format branch. + zstyle -s ':prezto:module:git:info:branch' format 'branch_format' + if [[ -n "$branch" && -n "$branch_format" ]]; then + zformat -f branch_formatted "$branch_format" "b:$branch" + fi + + # Format position. + zstyle -s ':prezto:module:git:info:position' format 'position_format' + if [[ -z "$branch" && -n "$position_format" ]]; then + position="$(git describe --contains --all HEAD 2> /dev/null)" + if [[ -n "$position" ]]; then + zformat -f position_formatted "$position_format" "p:$position" + fi + fi + + # Format remote. + zstyle -s ':prezto:module:git:info:remote' format 'remote_format' + if [[ -n "$branch" && -n "$remote_format" ]]; then + # Gets the remote name. + remote_cmd='git rev-parse --symbolic-full-name --verify HEAD@{upstream}' + remote="${$(${(z)remote_cmd} 2> /dev/null)##refs/remotes/}" + if [[ -n "$remote" ]]; then + zformat -f remote_formatted "$remote_format" "R:$remote" + fi + fi + + zstyle -s ':prezto:module:git:info:ahead' format 'ahead_format' + zstyle -s ':prezto:module:git:info:behind' format 'behind_format' + if [[ -n "$branch" && ( -n "$ahead_format" || -n "$behind_format" ) ]]; then + # Gets the commit difference counts between local and remote. + ahead_and_behind_cmd='git rev-list --count --left-right HEAD...@{upstream}' + + # Get ahead and behind counts. + ahead_and_behind="$(${(z)ahead_and_behind_cmd} 2> /dev/null)" + + # Format ahead. + if [[ -n "$ahead_format" ]]; then + ahead="$ahead_and_behind[(w)1]" + if (( ahead > 0 )); then + zformat -f ahead_formatted "$ahead_format" "A:$ahead" + fi + fi + + # Format behind. + if [[ -n "$behind_format" ]]; then + behind="$ahead_and_behind[(w)2]" + if (( behind > 0 )); then + zformat -f behind_formatted "$behind_format" "B:$behind" + fi + fi + fi + + # Get status type. + if ! zstyle -t ':prezto:module:git:info' verbose; then + # Format indexed. + zstyle -s ':prezto:module:git:info:indexed' format 'indexed_format' + if [[ -n "$indexed_format" ]]; then + (( + indexed+=$( + git diff-index \ + --no-ext-diff \ + --name-only \ + --cached \ + --ignore-submodules=${ignore_submodules:-none} \ + HEAD \ + 2> /dev/null \ + | wc -l + ) + )) + if (( indexed > 0 )); then + zformat -f indexed_formatted "$indexed_format" "i:$indexed" + fi + fi + + # Format unindexed. + zstyle -s ':prezto:module:git:info:unindexed' format 'unindexed_format' + if [[ -n "$unindexed_format" ]]; then + (( + unindexed+=$( + git diff-files \ + --no-ext-diff \ + --name-only \ + --ignore-submodules=${ignore_submodules:-none} \ + 2> /dev/null \ + | wc -l + ) + )) + if (( unindexed > 0 )); then + zformat -f unindexed_formatted "$unindexed_format" "I:$unindexed" + fi + fi + + # Format untracked. + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + if [[ -n "$untracked_format" ]]; then + (( + untracked+=$( + git ls-files \ + --other \ + --exclude-standard \ + 2> /dev/null \ + | wc -l + ) + )) + if (( untracked > 0 )); then + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi + fi + + (( dirty = indexed + unindexed + untracked )) + else + # Use porcelain status for easy parsing. + status_cmd="git status --porcelain --ignore-submodules=${ignore_submodules:-none}" + + # Get current status. + while IFS=$'\n' read line; do + # Count added, deleted, modified, renamed, unmerged, untracked, dirty. + # T (type change) is undocumented, see http://git.io/FnpMGw. + # For a table of scenarii, see http://i.imgur.com/2YLu1.png. + [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) + [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) + [[ "$line" == ?[MT]\ * ]] && (( modified++ )) + [[ "$line" == R?\ * ]] && (( renamed++ )) + [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) + [[ "$line" == \?\?\ * ]] && (( untracked++ )) + (( dirty++ )) + done < <(${(z)status_cmd} 2> /dev/null) + + # Format added. + if (( added > 0 )); then + zstyle -s ':prezto:module:git:info:added' format 'added_format' + zformat -f added_formatted "$added_format" "a:$added" + fi + + # Format deleted. + if (( deleted > 0 )); then + zstyle -s ':prezto:module:git:info:deleted' format 'deleted_format' + zformat -f deleted_formatted "$deleted_format" "d:$deleted" + fi + + # Format modified. + if (( modified > 0 )); then + zstyle -s ':prezto:module:git:info:modified' format 'modified_format' + zformat -f modified_formatted "$modified_format" "m:$modified" + fi + + # Format renamed. + if (( renamed > 0 )); then + zstyle -s ':prezto:module:git:info:renamed' format 'renamed_format' + zformat -f renamed_formatted "$renamed_format" "r:$renamed" + fi + + # Format unmerged. + if (( unmerged > 0 )); then + zstyle -s ':prezto:module:git:info:unmerged' format 'unmerged_format' + zformat -f unmerged_formatted "$unmerged_format" "U:$unmerged" + fi + + # Format untracked. + if (( untracked > 0 )); then + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi + fi + + # Format dirty and clean. + if (( dirty > 0 )); then + zstyle -s ':prezto:module:git:info:dirty' format 'dirty_format' + zformat -f dirty_formatted "$dirty_format" "D:$dirty" + else + zstyle -s ':prezto:module:git:info:clean' format 'clean_formatted' + fi + + # Format info. + zstyle -a ':prezto:module:git:info:keys' format 'info_formats' + for info_format in ${(k)info_formats}; do + zformat -f REPLY "$info_formats[$info_format]" \ + "a:$added_formatted" \ + "A:$ahead_formatted" \ + "B:$behind_formatted" \ + "b:$branch_formatted" \ + "C:$clean_formatted" \ + "c:$commit_formatted" \ + "d:$deleted_formatted" \ + "D:$dirty_formatted" \ + "i:$indexed_formatted" \ + "I:$unindexed_formatted" \ + "m:$modified_formatted" \ + "p:$position_formatted" \ + "R:$remote_formatted" \ + "r:$renamed_formatted" \ + "s:$action_formatted" \ + "S:$stashed_formatted" \ + "U:$unmerged_formatted" \ + "u:$untracked_formatted" + git_info[$info_format]="$REPLY" + done + + unset REPLY + + return 0 +} + +git-info "$@" diff --git a/.zprezto/modules/git/functions/git-root b/.zprezto/modules/git/functions/git-root new file mode 100644 index 0000000..712e4fe --- /dev/null +++ b/.zprezto/modules/git/functions/git-root @@ -0,0 +1,16 @@ +# +# Displays the path to the working tree root. +# +# Authors: +# Sorin Ionescu +# + +local root="$(git rev-parse --show-toplevel 2> /dev/null)" + +if [[ -n "$root" ]]; then + print "$root" + return 0 +else + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi diff --git a/.zprezto/modules/git/functions/git-stash-clear-interactive b/.zprezto/modules/git/functions/git-stash-clear-interactive new file mode 100644 index 0000000..e45165c --- /dev/null +++ b/.zprezto/modules/git/functions/git-stash-clear-interactive @@ -0,0 +1,22 @@ +# +# Asks for confirmation before clearing the Git stash. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local stashed + +if [[ -f "$(git-dir)/refs/stash" ]]; then + stashed="$(git stash list 2> /dev/null | wc -l | awk '{print $1}')" + if (( $stashed > 0 )); then + if read -q "?Clear $stashed stashed state(s) [y/N]? "; then + git stash clear + fi + fi +fi diff --git a/.zprezto/modules/git/functions/git-stash-dropped b/.zprezto/modules/git/functions/git-stash-dropped new file mode 100644 index 0000000..5158070 --- /dev/null +++ b/.zprezto/modules/git/functions/git-stash-dropped @@ -0,0 +1,22 @@ +# +# Lists dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +git fsck --unreachable 2> /dev/null \ + | grep 'commit' \ + | awk '{print $3}' \ + | git log \ + --pretty=format:${_git_log_oneline_format} \ + --extended-regexp \ + --grep="${1:-(WIP )?[Oo]n [^:]+:}" \ + --merges \ + --no-walk \ + --stdin diff --git a/.zprezto/modules/git/functions/git-stash-recover b/.zprezto/modules/git/functions/git-stash-recover new file mode 100644 index 0000000..6add26f --- /dev/null +++ b/.zprezto/modules/git/functions/git-stash-recover @@ -0,0 +1,18 @@ +# +# Recovers dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local commit + +for commit in "$@"; do + git update-ref \ + -m "$(git log -1 --pretty="format:%s" "$commit")" refs/stash "$commit" +done diff --git a/.zprezto/modules/git/functions/git-submodule-move b/.zprezto/modules/git/functions/git-submodule-move new file mode 100644 index 0000000..34c5e44 --- /dev/null +++ b/.zprezto/modules/git/functions/git-submodule-move @@ -0,0 +1,32 @@ +# +# Moves a Git submodule. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +elif [[ "$PWD" != "$(git-root)" ]]; then + print "$0: must be run from the root of the work tree" >&2 + return 1 +fi + +local src="$1" +local dst="$2" +local url + +url="$(git config --file "$(git-root)/.gitmodules" --get "submodule.${src}.url")" + +if [[ -z "$url" ]]; then + print "$0: submodule not found: $src" >&2 + return 1 +fi + +mkdir -p "${dst:h}" + +git-submodule-remove "$src" +git submodule add "$url" "$dst" + +return 0 diff --git a/.zprezto/modules/git/functions/git-submodule-remove b/.zprezto/modules/git/functions/git-submodule-remove new file mode 100644 index 0000000..852b9cd --- /dev/null +++ b/.zprezto/modules/git/functions/git-submodule-remove @@ -0,0 +1,27 @@ +# +# Removes a Git submodule. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +elif [[ "$PWD" != "$(git-root)" ]]; then + print "$0: must be run from the root of the work tree" >&2 + return 1 +elif ! git config --file .gitmodules --get "submodule.${1}.path" &>/dev/null; then + print "$0: submodule not found: $1" >&2 + return 1 +fi + +git config --file "$(git-dir)/config" --remove-section "submodule.${1}" &>/dev/null +git config --file "$(git-root)/.gitmodules" --remove-section "submodule.${1}" &>/dev/null +git add .gitmodules + +git rm --cached -rf "${1}" +rm -rf "${1}" +rm -rf "$(git-dir)/modules/${1}" + +return 0 diff --git a/.zprezto/modules/git/init.zsh b/.zprezto/modules/git/init.zsh new file mode 100644 index 0000000..ba54082 --- /dev/null +++ b/.zprezto/modules/git/init.zsh @@ -0,0 +1,17 @@ +# +# Provides Git aliases and functions. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[git] )); then + return 1 +fi + +# Load dependencies. +pmodload 'helper' + +# Source module files. +source "${0:h}/alias.zsh" diff --git a/.zprezto/modules/gnu-utility/README.md b/.zprezto/modules/gnu-utility/README.md new file mode 100644 index 0000000..34bc663 --- /dev/null +++ b/.zprezto/modules/gnu-utility/README.md @@ -0,0 +1,32 @@ +GNU Utility +=========== + +Provides for the interactive use of GNU utilities on BSD systems. + +Installing GNU utilities on non-GNU systems in `$PATH` without a prefix, i.e. +`ls` instead of `gls`, is not recommended since scripts that target other +utilities will be broken. + +This module wraps GNU utilities in functions without a prefix for interactive +use. + +This module must be loaded **before** the *utility* module. + +Settings +-------- + +### Prefix + +To use a different prefix, add the following to *zpreztorc*, and replace 'g' with +the desired prefix: + + zstyle ':prezto:module:gnu-utility' prefix 'g' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/gnu-utility/init.zsh b/.zprezto/modules/gnu-utility/init.zsh new file mode 100644 index 0000000..6556032 --- /dev/null +++ b/.zprezto/modules/gnu-utility/init.zsh @@ -0,0 +1,60 @@ +# +# Provides for the interactive use of GNU utilities on BSD systems. +# +# Authors: +# Sorin Ionescu +# + +# Get the prefix or use the default. +zstyle -s ':prezto:module:gnu-utility' prefix '_gnu_utility_p' || _gnu_utility_p='g' + +# Return if requirements are not found. +if (( ! ${+commands[${_gnu_utility_p}whoami]} )); then + return 1 +fi + +_gnu_utility_cmds=( + # Coreutils + '[' 'base64' 'basename' 'cat' 'chcon' 'chgrp' 'chmod' 'chown' + 'chroot' 'cksum' 'comm' 'cp' 'csplit' 'cut' 'date' 'dd' 'df' + 'dir' 'dircolors' 'dirname' 'du' 'echo' 'env' 'expand' 'expr' + 'factor' 'false' 'fmt' 'fold' 'groups' 'head' 'hostid' 'id' + 'install' 'join' 'kill' 'link' 'ln' 'logname' 'ls' 'md5sum' + 'mkdir' 'mkfifo' 'mknod' 'mktemp' 'mv' 'nice' 'nl' 'nohup' 'nproc' + 'od' 'paste' 'pathchk' 'pinee' 'pr' 'printenv' 'printf' 'ptx' + 'pwd' 'readlink' 'realpath' 'rm' 'rmdir' 'runcon' 'seq' 'sha1sum' + 'sha224sum' 'sha256sum' 'sha384sum' 'sha512sum' 'shred' 'shuf' + 'sleep' 'sort' 'split' 'stat' 'stty' 'sum' 'sync' 'tac' 'tail' + 'tee' 'test' 'timeout' 'touch' 'tr' 'true' 'truncate' 'tsort' + 'tty' 'uname' 'unexpand' 'uniq' 'unlink' 'uptime' 'users' 'vdir' + 'wc' 'who' 'whoami' 'yes' + + # The following utilities are not part of Coreutils but installed separately. + + # Binutils + 'addr2line' 'ar' 'c++filt' 'elfedit' 'nm' 'objcopy' 'objdump' + 'ranlib' 'readelf' 'size' 'strings' 'strip' + + # Findutils + 'find' 'locate' 'oldfind' 'updatedb' 'xargs' + + # Libtool + 'libtool' 'libtoolize' + + # Miscellaneous + 'getopt' 'grep' 'indent' 'sed' 'tar' 'time' 'units' 'which' +) + +# Wrap GNU utilities in functions. +for _gnu_utility_cmd in "${_gnu_utility_cmds[@]}"; do + _gnu_utility_pcmd="${_gnu_utility_p}${_gnu_utility_cmd}" + if (( ${+commands[${_gnu_utility_pcmd}]} )); then + eval " + function ${_gnu_utility_cmd} { + '${commands[${_gnu_utility_pcmd}]}' \"\$@\" + } + " + fi +done + +unset _gnu_utility_{p,cmds,cmd,pcmd} diff --git a/.zprezto/modules/gpg/README.md b/.zprezto/modules/gpg/README.md new file mode 100644 index 0000000..80e91d0 --- /dev/null +++ b/.zprezto/modules/gpg/README.md @@ -0,0 +1,26 @@ +GPG +=== + +Provides for an easier use of [GPG][1] by setting up [gpg-agent][2]. + +### SSH + +To enable OpenSSH Agent protocol emulation, and make `gpg-agent` a drop-in +replacement for `ssh-agent`, add the following line to +*~/.gnupg/gpg-agent.conf*: + + enable-ssh-support + +When OpenSSH Agent protocol emulation is enabled, this module will load the SSH +module for additional processing. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.gnupg.org +[2]: http://linux.die.net/man/1/gpg-agent +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/gpg/init.zsh b/.zprezto/modules/gpg/init.zsh new file mode 100644 index 0000000..b969c7a --- /dev/null +++ b/.zprezto/modules/gpg/init.zsh @@ -0,0 +1,55 @@ +# +# Provides for an easier use of GPG by setting up gpg-agent. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[gpg-agent] )); then + return 1 +fi + +# Set the default paths to gpg-agent files. +_gpg_agent_conf="${GNUPGHOME:-$HOME/.gnupg}/gpg-agent.conf" +_gpg_agent_env="${TMPDIR:-/tmp}/gpg-agent.env" + +# Start gpg-agent if not started. +if [[ -z "$GPG_AGENT_INFO" && ! -S "${GNUPGHOME:-$HOME/.gnupg}/S.gpg-agent" ]]; then + # Export environment variables. + source "$_gpg_agent_env" 2> /dev/null + + # Start gpg-agent if not started. + if ! ps -U "$LOGNAME" -o pid,ucomm | grep -q -- "${${${(s.:.)GPG_AGENT_INFO}[2]}:--1} gpg-agent"; then + eval "$(gpg-agent --daemon | tee "$_gpg_agent_env")" + fi +fi + +# Inform gpg-agent of the current TTY for user prompts. +export GPG_TTY="$(tty)" + +# Integrate with the SSH module. +if grep 'enable-ssh-support' "$_gpg_agent_conf" &> /dev/null; then + # Load required functions. + autoload -Uz add-zsh-hook + + # Override the ssh-agent environment file default path. + _ssh_agent_env="$_gpg_agent_env" + + # Load the SSH module for additional processing. + pmodload 'ssh' + + # Updates the GPG-Agent TTY before every command since SSH does not set it. + function _gpg-agent-update-tty { + gpg-connect-agent UPDATESTARTUPTTY /bye >/dev/null + } + add-zsh-hook preexec _gpg-agent-update-tty +fi + +# Clean up. +unset _gpg_agent_{conf,env} + +# Disable GUI prompts inside SSH. +if [[ -n "$SSH_CONNECTION" ]]; then + export PINENTRY_USER_DATA='USE_CURSES=1' +fi diff --git a/.zprezto/modules/haskell/README.md b/.zprezto/modules/haskell/README.md new file mode 100644 index 0000000..dcf144c --- /dev/null +++ b/.zprezto/modules/haskell/README.md @@ -0,0 +1,28 @@ +Haskell +======= + +Enables local Haskell package installation. + +Per-user Package Installation +----------------------------- + +[Cabal][1], the Haskell package manager, can install packages into per user +directories. + +This module prepends per user directories to the relevant path variables to +enable the execution of user installed executables and the reading of +documentation. + +### Usage + +Install packages into per user directories with `cabal install --user`. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: http://www.haskell.org/cabal/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/haskell/init.zsh b/.zprezto/modules/haskell/init.zsh new file mode 100644 index 0000000..c1c78ca --- /dev/null +++ b/.zprezto/modules/haskell/init.zsh @@ -0,0 +1,18 @@ +# +# Enables local Haskell package installation. +# +# Authors: +# Sebastian Wiesner +# + +# Return if requirements are not found. +if (( ! $+commands[ghc] )); then + return 1 +fi + +# Prepend Cabal per user directories to PATH. +if [[ "$OSTYPE" == darwin* && -d $HOME/Library/Haskell ]]; then + path=($HOME/Library/Haskell/bin(/N) $path) +else + path=($HOME/.cabal/bin(/N) $path) +fi diff --git a/.zprezto/modules/helper/README.md b/.zprezto/modules/helper/README.md new file mode 100644 index 0000000..9f10d6e --- /dev/null +++ b/.zprezto/modules/helper/README.md @@ -0,0 +1,24 @@ +Helper +====== + +Provides helper functions for developing modules. + +Functions +--------- + + - `add-zsh-trap` adds a function name to a list to be called when a trap is + triggered. + - `is-autoloadable` checks if a file can be autoloaded by trying to load it + in a subshell. + - `is-callable` checks if a name is a command, function, or alias. + - `is-true` checks a boolean variable for "true". + - `coalesce` prints the first non-empty string in the arguments array. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/helper/functions/add-zsh-trap b/.zprezto/modules/helper/functions/add-zsh-trap new file mode 100644 index 0000000..07663e9 --- /dev/null +++ b/.zprezto/modules/helper/functions/add-zsh-trap @@ -0,0 +1,41 @@ +# +# Provides for trapping UNIX signals and calling callback functions when a trap +# is triggered. +# +# Authors: +# Sorin Ionescu +# + +# Adds a function name to a list to be called when a trap is triggered. +function add-zsh-trap { + if (( $# < 2 )); then + print "usage: $0 type function" >&2 + return 1 + fi + + if [[ -z "$signals[(r)$1]" ]]; then + print "$0: unknown signal: $1" >&2 + return 1 + fi + + local trap_functions="TRAP${1}_FUNCTIONS" + if (( ! ${(P)+trap_functions} )); then + typeset -gaU "$trap_functions" + fi + eval "$trap_functions+="$2"" + + if (( ! $+functions[TRAP${1}] )); then + eval " + function TRAP${1} { + for trap_function in \"\$TRAP${1}_FUNCTIONS[@]\"; do + if (( \$+functions[\$trap_function] )); then + \"\$trap_function\" \"\$1\" + fi + done + return \$(( 128 + \$1 )) + } + " + fi +} + +add-zsh-trap "$@" diff --git a/.zprezto/modules/helper/init.zsh b/.zprezto/modules/helper/init.zsh new file mode 100644 index 0000000..9d79218 --- /dev/null +++ b/.zprezto/modules/helper/init.zsh @@ -0,0 +1,31 @@ +# +# Defines helper functions. +# +# Authors: +# Sorin Ionescu +# + +# Checks if a file can be autoloaded by trying to load it in a subshell. +function is-autoloadable { + ( unfunction $1 ; autoload -U +X $1 ) &> /dev/null +} + +# Checks if a name is a command, function, or alias. +function is-callable { + (( $+commands[$1] )) || (( $+functions[$1] )) || (( $+aliases[$1] )) +} + +# Checks a boolean variable for "true". +# Case insensitive: "1", "y", "yes", "t", "true", "o", and "on". +function is-true { + [[ -n "$1" && "$1" == (1|[Yy]([Ee][Ss]|)|[Tt]([Rr][Uu][Ee]|)|[Oo]([Nn]|)) ]] +} + +# Prints the first non-empty string in the arguments array. +function coalesce { + for arg in $argv; do + print "$arg" + return 0 + done + return 1 +} diff --git a/.zprezto/modules/history-substring-search/README.md b/.zprezto/modules/history-substring-search/README.md new file mode 100644 index 0000000..79714fa --- /dev/null +++ b/.zprezto/modules/history-substring-search/README.md @@ -0,0 +1,61 @@ +History Substring Search +======================== + +Integrates [zsh-history-substring-search][1] into Prezto, which implements +the [Fish shell][2]'s history search feature, where the user can type in any +part of a previously entered command and press up and down to cycle through +matching commands. + +If this module is used in conjuncture with the *syntax-highlighting* module, it +must be loaded **after** it. + +Contributors +------------ + +New features and bug fixes should be submitted to the +[zsh-history-substring-search][1] project according to its rules and +regulations. This module will be synchronized against it. + +Settings +-------- + +### Case Sensitivity + +To enable case-sensitivity for this module only, add the following line to +*zpreztorc*: + + zstyle ':prezto:module:history-substring-search' case-sensitive 'yes' + +### Highlighting + +If colors are enabled, *history-substring-search* will automatically highlight +positive results. + +To enable highlighting for this module only, add the following line to +*zpreztorc*: + + zstyle ':prezto:module:history-substring-search' color 'yes' + +To set the query found color, add the following line to *zpreztorc*: + + zstyle ':prezto:module:history-substring-search:color' found '' + +To set the query not found color, add the following line to *zpreztorc*: + + zstyle ':prezto:module:history-substring-search:color' not-found '' + +To set the search globbing flags, add the following line to *zpreztorc*: + + zstyle ':prezto:module:history-substring-search' globbing-flags '' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Suraj N. Kurapati](https://github.com/sunaku) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-history-substring-search +[2]: http://fishshell.com +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/history-substring-search/external/README.md b/.zprezto/modules/history-substring-search/external/README.md new file mode 100644 index 0000000..042714c --- /dev/null +++ b/.zprezto/modules/history-substring-search/external/README.md @@ -0,0 +1,127 @@ +zsh-history-substring-search +============================================================================== + +This is a clean-room implementation of the [Fish shell][1]'s history search +feature, where you can type in any part of any previously entered command +and press the UP and DOWN arrow keys to cycle through the matching commands. +You can also use K and J in VI mode or ^P and ^N in EMACS mode for the same. + +[1]: http://fishshell.com +[2]: http://www.zsh.org/mla/users/2009/msg00818.html +[3]: http://sourceforge.net/projects/fizsh/ +[4]: https://github.com/robbyrussell/oh-my-zsh/pull/215 +[5]: https://github.com/zsh-users/zsh-history-substring-search +[6]: https://github.com/zsh-users/zsh-syntax-highlighting + +------------------------------------------------------------------------------ +Requirements +------------------------------------------------------------------------------ + +* [ZSH](http://zsh.sourceforge.net) 4.3 or newer + +------------------------------------------------------------------------------ +Usage +------------------------------------------------------------------------------ + +1. Load this script into your interactive ZSH session: + + % source zsh-history-substring-search.zsh + + If you want to use [zsh-syntax-highlighting][6] along with this script, + then make sure that you load it *before* you load this script: + + % source zsh-syntax-highlighting.zsh + % source zsh-history-substring-search.zsh + +2. Bind keyboard shortcuts to this script's functions: + + # bind UP and DOWN arrow keys + zmodload zsh/terminfo + bindkey "$terminfo[kcuu1]" history-substring-search-up + bindkey "$terminfo[kcud1]" history-substring-search-down + + # bind UP and DOWN arrow keys (compatibility fallback + # for Ubuntu 12.04, Fedora 21, and MacOSX 10.9 users) + bindkey '^[[A' history-substring-search-up + bindkey '^[[B' history-substring-search-down + + # bind P and N for EMACS mode + bindkey -M emacs '^P' history-substring-search-up + bindkey -M emacs '^N' history-substring-search-down + + # bind k and j for VI mode + bindkey -M vicmd 'k' history-substring-search-up + bindkey -M vicmd 'j' history-substring-search-down + +3. Type any part of any previous command and then: + + * Press the UP arrow key to select the nearest command that (1) contains + your query and (2) is older than the current command in the command + history. + + * Press the DOWN arrow key to select the nearest command that (1) + contains your query and (2) is newer than the current command in the + command history. + + * Press ^U (the Control and U keys simultaneously) to abort the search. + +4. If a matching command spans more than one line of text, press the LEFT + arrow key to move the cursor away from the end of the command, and then: + + * Press the UP arrow key to move the cursor to the line above. When the + cursor reaches the first line of the command, pressing the UP arrow + key again will cause this script to perform another search. + + * Press the DOWN arrow key to move the cursor to the line below. When + the cursor reaches the last line of the command, pressing the DOWN + arrow key again will cause this script to perform another search. + +------------------------------------------------------------------------------ +Configuration +------------------------------------------------------------------------------ + +This script defines the following global variables. You may override their +default values only after having loaded this script into your ZSH session. + +* HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND is a global variable that defines + how the query should be highlighted inside a matching command. Its default + value causes this script to highlight using bold, white text on a magenta + background. See the "Character Highlighting" section in the zshzle(1) man + page to learn about the kinds of values you may assign to this variable. + +* HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND is a global variable that + defines how the query should be highlighted when no commands in the + history match it. Its default value causes this script to highlight using + bold, white text on a red background. See the "Character Highlighting" + section in the zshzle(1) man page to learn about the kinds of values you + may assign to this variable. + +* HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS is a global variable that defines + how the command history will be searched for your query. Its default value + causes this script to perform a case-insensitive search. See the "Globbing + Flags" section in the zshexpn(1) man page to learn about the kinds of + values you may assign to this variable. + +To always receive _unique_ search results, use `setopt HIST_IGNORE_ALL_DUPS`. +Alternatively, use `setopt HIST_FIND_NO_DUPS` which makes this plugin skip +duplicate _adjacent_ search results as you cycle through them---however, this +does not guarantee that search results are unique: if your search results were +"Dog", "Dog", "HotDog", "Dog", then cycling them gives "Dog", "HotDog", "Dog". +Notice that the "Dog" search result appeared twice as you cycled through them! +If you wish to avoid this limitation, then use `setopt HIST_IGNORE_ALL_DUPS`. + +------------------------------------------------------------------------------ +History +------------------------------------------------------------------------------ + +This script was originally written by [Peter Stephenson][2], who published it +to the ZSH users mailing list (thereby making it public domain) in September +2009. It was later revised by Guido van Steen and released under the BSD +license (see below) as part of [the fizsh project][3] in January 2011. + +It was later extracted from fizsh release 1.0.1, refactored heavily, and +repackaged as both an [oh-my-zsh plugin][4] and as an independently loadable +[ZSH script][5] by Suraj N. Kurapati in 2011. + +It was [further developed][4] by Guido van Steen, Suraj N. Kurapati, Sorin +Ionescu, and Vincent Guerci in 2011. diff --git a/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh new file mode 100644 index 0000000..b393f66 --- /dev/null +++ b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh @@ -0,0 +1,12 @@ +# This file integrates the zsh-history-substring-search script into oh-my-zsh. + +source "${0:r:r}.zsh" + +if test "$CASE_SENSITIVE" = true; then + unset HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS +fi + +if test "$DISABLE_COLOR" = true; then + unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND +fi diff --git a/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh new file mode 100644 index 0000000..ad316ac --- /dev/null +++ b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh @@ -0,0 +1,585 @@ +#!/usr/bin/env zsh +############################################################################## +# +# Copyright (c) 2009 Peter Stephenson +# Copyright (c) 2011 Guido van Steen +# Copyright (c) 2011 Suraj N. Kurapati +# Copyright (c) 2011 Sorin Ionescu +# Copyright (c) 2011 Vincent Guerci +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# * Neither the name of the FIZSH nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################## + +#----------------------------------------------------------------------------- +# configuration variables +#----------------------------------------------------------------------------- + +HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold' +HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold' +HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i' + +#----------------------------------------------------------------------------- +# the main ZLE widgets +#----------------------------------------------------------------------------- + +history-substring-search-up() { + _history-substring-search-begin + + _history-substring-search-up-history || + _history-substring-search-up-buffer || + _history-substring-search-up-search + + _history-substring-search-end +} + +history-substring-search-down() { + _history-substring-search-begin + + _history-substring-search-down-history || + _history-substring-search-down-buffer || + _history-substring-search-down-search + + _history-substring-search-end +} + +zle -N history-substring-search-up +zle -N history-substring-search-down + +#----------------------------------------------------------------------------- +# implementation details +#----------------------------------------------------------------------------- + +zmodload -F zsh/parameter + +# +# We have to "override" some keys and widgets if the +# zsh-syntax-highlighting plugin has not been loaded: +# +# https://github.com/nicoulaj/zsh-syntax-highlighting +# +if [[ $+functions[_zsh_highlight] -eq 0 ]]; then + # + # Dummy implementation of _zsh_highlight() that + # simply removes any existing highlights when the + # user inserts printable characters into $BUFFER. + # + _zsh_highlight() { + if [[ $KEYS == [[:print:]] ]]; then + region_highlight=() + fi + } + + # + # The following snippet was taken from the zsh-syntax-highlighting project: + # + # https://github.com/zsh-users/zsh-syntax-highlighting/blob/56b134f5d62ae3d4e66c7f52bd0cc2595f9b305b/zsh-syntax-highlighting.zsh#L126-161 + # + # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # + # * Redistributions in binary form must reproduce the above copyright + # notice, this list of conditions and the following disclaimer in the + # documentation and/or other materials provided with the distribution. + # + # * Neither the name of the zsh-syntax-highlighting contributors nor the + # names of its contributors may be used to endorse or promote products + # derived from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + #--------------8<-------------------8<-------------------8<----------------- + # Rebind all ZLE widgets to make them invoke _zsh_highlights. + _zsh_highlight_bind_widgets() + { + # Load ZSH module zsh/zleparameter, needed to override user defined widgets. + zmodload zsh/zleparameter 2>/dev/null || { + echo 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' >&2 + return 1 + } + + # Override ZLE widgets to make them invoke _zsh_highlight. + local cur_widget + for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep|yank*)}; do + case $widgets[$cur_widget] in + + # Already rebound event: do nothing. + user:$cur_widget|user:_zsh_highlight_widget_*);; + + # User defined widget: override and rebind old one with prefix "orig-". + user:*) eval "zle -N orig-$cur_widget ${widgets[$cur_widget]#*:}; \ + _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Completion widget: override and rebind old one with prefix "orig-". + completion:*) eval "zle -C orig-$cur_widget ${${widgets[$cur_widget]#*:}/:/ }; \ + _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Builtin widget: override and make it call the builtin ".widget". + builtin) eval "_zsh_highlight_widget_$cur_widget() { builtin zle .$cur_widget -- \"\$@\" && _zsh_highlight }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Default: unhandled case. + *) echo "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" >&2 ;; + esac + done + } + #-------------->8------------------->8------------------->8----------------- + + _zsh_highlight_bind_widgets +fi + +_history-substring-search-begin() { + setopt localoptions extendedglob + + _history_substring_search_refresh_display= + _history_substring_search_query_highlight= + + # + # Continue using the previous $_history_substring_search_result by default, + # unless the current query was cleared or a new/different query was entered. + # + if [[ -z $BUFFER || $BUFFER != $_history_substring_search_result ]]; then + # + # For the purpose of highlighting we will also keep + # a version without doubly-escaped meta characters. + # + _history_substring_search_query=$BUFFER + + # + # $BUFFER contains the text that is in the command-line currently. + # we put an extra "\\" before meta characters such as "\(" and "\)", + # so that they become "\\\(" and "\\\)". + # + _history_substring_search_query_escaped=${BUFFER//(#m)[\][()|\\*?#<>~^]/\\$MATCH} + + # + # Find all occurrences of the search query in the history file. + # + # (k) returns the "keys" (history index numbers) instead of the values + # (Oa) reverses the order, because (R) returns results reversed. + # + _history_substring_search_matches=(${(kOa)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)*${_history_substring_search_query_escaped}*]}) + + # + # Define the range of values that $_history_substring_search_match_index + # can take: [0, $_history_substring_search_matches_count_plus]. + # + _history_substring_search_matches_count=$#_history_substring_search_matches + _history_substring_search_matches_count_plus=$(( _history_substring_search_matches_count + 1 )) + _history_substring_search_matches_count_sans=$(( _history_substring_search_matches_count - 1 )) + + # + # If $_history_substring_search_match_index is equal to + # $_history_substring_search_matches_count_plus, this indicates that we + # are beyond the beginning of $_history_substring_search_matches. + # + # If $_history_substring_search_match_index is equal to 0, this indicates + # that we are beyond the end of $_history_substring_search_matches. + # + # If we have initially pressed "up" we have to initialize + # $_history_substring_search_match_index to + # $_history_substring_search_matches_count_plus so that it will be + # decreased to $_history_substring_search_matches_count. + # + # If we have initially pressed "down" we have to initialize + # $_history_substring_search_match_index to + # $_history_substring_search_matches_count so that it will be increased to + # $_history_substring_search_matches_count_plus. + # + if [[ $WIDGET == history-substring-search-down ]]; then + _history_substring_search_match_index=$_history_substring_search_matches_count + else + _history_substring_search_match_index=$_history_substring_search_matches_count_plus + fi + fi +} + +_history-substring-search-end() { + setopt localoptions extendedglob + + _history_substring_search_result=$BUFFER + + # the search was succesful so display the result properly by clearing away + # existing highlights and moving the cursor to the end of the result buffer + if [[ $_history_substring_search_refresh_display -eq 1 ]]; then + region_highlight=() + CURSOR=${#BUFFER} + fi + + # highlight command line using zsh-syntax-highlighting + _zsh_highlight + + # highlight the search query inside the command line + if [[ -n $_history_substring_search_query_highlight && -n $_history_substring_search_query ]]; then + # + # The following expression yields a variable $MBEGIN, which + # indicates the begin position + 1 of the first occurrence + # of _history_substring_search_query_escaped in $BUFFER. + # + : ${(S)BUFFER##(#m$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)($_history_substring_search_query##)} + local begin=$(( MBEGIN - 1 )) + local end=$(( begin + $#_history_substring_search_query )) + region_highlight+=("$begin $end $_history_substring_search_query_highlight") + fi + + # For debugging purposes: + # zle -R "mn: "$_history_substring_search_match_index" m#: "${#_history_substring_search_matches} + # read -k -t 200 && zle -U $REPLY + + # Exit successfully from the history-substring-search-* widgets. + return 0 +} + +_history-substring-search-up-buffer() { + # + # Check if the UP arrow was pressed to move the cursor within a multi-line + # buffer. This amounts to three tests: + # + # 1. $#buflines -gt 1. + # + # 2. $CURSOR -ne $#BUFFER. + # + # 3. Check if we are on the first line of the current multi-line buffer. + # If so, pressing UP would amount to leaving the multi-line buffer. + # + # We check this by adding an extra "x" to $LBUFFER, which makes + # sure that xlbuflines is always equal to the number of lines + # until $CURSOR (including the line with the cursor on it). + # + local buflines XLBUFFER xlbuflines + buflines=(${(f)BUFFER}) + XLBUFFER=$LBUFFER"x" + xlbuflines=(${(f)XLBUFFER}) + + if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xlbuflines -ne 1 ]]; then + zle up-line-or-history + return 0 + fi + + return 1 +} + +_history-substring-search-down-buffer() { + # + # Check if the DOWN arrow was pressed to move the cursor within a multi-line + # buffer. This amounts to three tests: + # + # 1. $#buflines -gt 1. + # + # 2. $CURSOR -ne $#BUFFER. + # + # 3. Check if we are on the last line of the current multi-line buffer. + # If so, pressing DOWN would amount to leaving the multi-line buffer. + # + # We check this by adding an extra "x" to $RBUFFER, which makes + # sure that xrbuflines is always equal to the number of lines + # from $CURSOR (including the line with the cursor on it). + # + local buflines XRBUFFER xrbuflines + buflines=(${(f)BUFFER}) + XRBUFFER="x"$RBUFFER + xrbuflines=(${(f)XRBUFFER}) + + if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xrbuflines -ne 1 ]]; then + zle down-line-or-history + return 0 + fi + + return 1 +} + +_history-substring-search-up-history() { + # + # Behave like up in ZSH, except clear the $BUFFER + # when beginning of history is reached like in Fish. + # + if [[ -z $_history_substring_search_query ]]; then + + # we have reached the absolute top of history + if [[ $HISTNO -eq 1 ]]; then + BUFFER= + + # going up from somewhere below the top of history + else + zle up-line-or-history + fi + + return 0 + fi + + return 1 +} + +_history-substring-search-down-history() { + # + # Behave like down-history in ZSH, except clear the + # $BUFFER when end of history is reached like in Fish. + # + if [[ -z $_history_substring_search_query ]]; then + + # going down from the absolute top of history + if [[ $HISTNO -eq 1 && -z $BUFFER ]]; then + BUFFER=${history[1]} + _history_substring_search_refresh_display=1 + + # going down from somewhere above the bottom of history + else + zle down-line-or-history + fi + + return 0 + fi + + return 1 +} + +_history-substring-search-not-found() { + # + # Nothing matched the search query, so put it back into the $BUFFER while + # highlighting it accordingly so the user can revise it and search again. + # + _history_substring_search_old_buffer=$BUFFER + BUFFER=$_history_substring_search_query + _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND +} + +_history-substring-search-up-search() { + _history_substring_search_refresh_display=1 + + # + # Highlight matches during history-substring-up-search: + # + # The following constants have been initialized in + # _history-substring-search-up/down-search(): + # + # $_history_substring_search_matches is the current list of matches + # $_history_substring_search_matches_count is the current number of matches + # $_history_substring_search_matches_count_plus is the current number of matches + 1 + # $_history_substring_search_matches_count_sans is the current number of matches - 1 + # $_history_substring_search_match_index is the index of the current match + # + # The range of values that $_history_substring_search_match_index can take + # is: [0, $_history_substring_search_matches_count_plus]. A value of 0 + # indicates that we are beyond the end of + # $_history_substring_search_matches. A value of + # $_history_substring_search_matches_count_plus indicates that we are beyond + # the beginning of $_history_substring_search_matches. + # + # In _history-substring-search-up-search() the initial value of + # $_history_substring_search_match_index is + # $_history_substring_search_matches_count_plus. This value is set in + # _history-substring-search-begin(). _history-substring-search-up-search() + # will initially decrease it to $_history_substring_search_matches_count. + # + if [[ $_history_substring_search_match_index -ge 2 ]]; then + # + # Highlight the next match: + # + # 1. Decrease the value of $_history_substring_search_match_index. + # + # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index-- )) + BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]] + _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + + elif [[ $_history_substring_search_match_index -eq 1 ]]; then + # + # We will move beyond the end of $_history_substring_search_matches: + # + # 1. Decrease the value of $_history_substring_search_match_index. + # + # 2. Save the current buffer in $_history_substring_search_old_buffer, + # so that it can be retrieved by + # _history-substring-search-down-search() later. + # + # 3. Make $BUFFER equal to $_history_substring_search_query. + # + # 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index-- )) + _history-substring-search-not-found + + elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count_plus ]]; then + # + # We were beyond the beginning of $_history_substring_search_matches but + # UP makes us move back to $_history_substring_search_matches: + # + # 1. Decrease the value of $_history_substring_search_match_index. + # + # 2. Restore $BUFFER from $_history_substring_search_old_buffer. + # + # 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index-- )) + BUFFER=$_history_substring_search_old_buffer + _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + + else + # + # We are at the beginning of history and there are no further matches. + # + _history-substring-search-not-found + return + fi + + # + # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from + # history should be matched, make sure the new and old results are different. + # But when HIST_IGNORE_ALL_DUPS is set, ZSH already ensures a unique history. + # + if [[ ! -o HIST_IGNORE_ALL_DUPS && -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then + # + # Repeat the current search so that a different (unique) match is found. + # + _history-substring-search-up-search + fi +} + +_history-substring-search-down-search() { + _history_substring_search_refresh_display=1 + + # + # Highlight matches during history-substring-up-search: + # + # The following constants have been initialized in + # _history-substring-search-up/down-search(): + # + # $_history_substring_search_matches is the current list of matches + # $_history_substring_search_matches_count is the current number of matches + # $_history_substring_search_matches_count_plus is the current number of matches + 1 + # $_history_substring_search_matches_count_sans is the current number of matches - 1 + # $_history_substring_search_match_index is the index of the current match + # + # The range of values that $_history_substring_search_match_index can take + # is: [0, $_history_substring_search_matches_count_plus]. A value of 0 + # indicates that we are beyond the end of + # $_history_substring_search_matches. A value of + # $_history_substring_search_matches_count_plus indicates that we are beyond + # the beginning of $_history_substring_search_matches. + # + # In _history-substring-search-down-search() the initial value of + # $_history_substring_search_match_index is + # $_history_substring_search_matches_count. This value is set in + # _history-substring-search-begin(). + # _history-substring-search-down-search() will initially increase it to + # $_history_substring_search_matches_count_plus. + # + if [[ $_history_substring_search_match_index -le $_history_substring_search_matches_count_sans ]]; then + # + # Highlight the next match: + # + # 1. Increase $_history_substring_search_match_index by 1. + # + # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index++ )) + BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]] + _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + + elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count ]]; then + # + # We will move beyond the beginning of $_history_substring_search_matches: + # + # 1. Increase $_history_substring_search_match_index by 1. + # + # 2. Save the current buffer in $_history_substring_search_old_buffer, so + # that it can be retrieved by _history-substring-search-up-search() + # later. + # + # 3. Make $BUFFER equal to $_history_substring_search_query. + # + # 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index++ )) + _history-substring-search-not-found + + elif [[ $_history_substring_search_match_index -eq 0 ]]; then + # + # We were beyond the end of $_history_substring_search_matches but DOWN + # makes us move back to the $_history_substring_search_matches: + # + # 1. Increase $_history_substring_search_match_index by 1. + # + # 2. Restore $BUFFER from $_history_substring_search_old_buffer. + # + # 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + # to highlight the current buffer. + # + (( _history_substring_search_match_index++ )) + BUFFER=$_history_substring_search_old_buffer + _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND + + else + # + # We are at the end of history and there are no further matches. + # + _history-substring-search-not-found + return + fi + + # + # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from + # history should be matched, make sure the new and old results are different. + # But when HIST_IGNORE_ALL_DUPS is set, ZSH already ensures a unique history. + # + if [[ ! -o HIST_IGNORE_ALL_DUPS && -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then + # + # Repeat the current search so that a different (unique) match is found. + # + _history-substring-search-down-search + fi +} + +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zprezto/modules/history-substring-search/init.zsh b/.zprezto/modules/history-substring-search/init.zsh new file mode 100644 index 0000000..67990a3 --- /dev/null +++ b/.zprezto/modules/history-substring-search/init.zsh @@ -0,0 +1,57 @@ +# +# Integrates history-substring-search into Prezto. +# +# Authors: +# Suraj N. Kurapati +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# Source module files. +source "${0:h}/external/zsh-history-substring-search.zsh" || return 1 + +# +# Search +# + +zstyle -s ':prezto:module:history-substring-search:color' found \ + 'HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND' \ + || HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold' + +zstyle -s ':prezto:module:history-substring-search:color' not-found \ + 'HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND' \ + || HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold' + +zstyle -s ':prezto:module:history-substring-search' globbing-flags \ + 'HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS' \ + || HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i' + +if zstyle -t ':prezto:module:history-substring-search' case-sensitive; then + HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS="${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS//i}" +fi + +if ! zstyle -t ':prezto:module:history-substring-search' color; then + unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_{FOUND,NOT_FOUND} +fi + +# +# Key Bindings +# + +if [[ -n "$key_info" ]]; then + # Emacs + bindkey -M emacs "$key_info[Control]P" history-substring-search-up + bindkey -M emacs "$key_info[Control]N" history-substring-search-down + + # Vi + bindkey -M vicmd "k" history-substring-search-up + bindkey -M vicmd "j" history-substring-search-down + + # Emacs and Vi + for keymap in 'emacs' 'viins'; do + bindkey -M "$keymap" "$key_info[Up]" history-substring-search-up + bindkey -M "$keymap" "$key_info[Down]" history-substring-search-down + done +fi diff --git a/.zprezto/modules/history/README.md b/.zprezto/modules/history/README.md new file mode 100644 index 0000000..3dc9a26 --- /dev/null +++ b/.zprezto/modules/history/README.md @@ -0,0 +1,43 @@ +History +======= + +Sets [history][1] options and defines history aliases. + +Variables +--------- + + - `HISTFILE` stores the path to the history file. + - `HISTSIZE` stores the maximum number of events to save in the internal history. + - `SAVEHIST` stores the maximum number of events to save in the history file. + +Options +------- + + - `BANG_HIST` treats the **!** character specially during expansion. + - `EXTENDED_HISTORY` writes the history file in the *:start:elapsed;command* format. + - `INC_APPEND_HISTORY` writes to the history file immediately, not when the shell exits. + - `SHARE_HISTORY` shares history between all sessions. + - `HIST_EXPIRE_DUPS_FIRST` expires a duplicate event first when trimming history. + - `HIST_IGNORE_DUPS` does not record an event that was just recorded again. + - `HIST_IGNORE_ALL_DUPS` deletes an old recorded event if a new event is a duplicate. + - `HIST_FIND_NO_DUPS` does not display a previously found event. + - `HIST_IGNORE_SPACE` does not record an event starting with a space. + - `HIST_SAVE_NO_DUPS` does not write a duplicate event to the history file. + - `HIST_VERIFY` does not execute immediately upon history expansion. + - `HIST_BEEP` beeps when accessing non-existent history. + +Aliases +------- + + - `history-stat` lists the ten most used commands + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Robby Russell](https://github.com/robbyrussell) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://zsh.sourceforge.net/Guide/zshguide02.html#l16 +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/history/init.zsh b/.zprezto/modules/history/init.zsh new file mode 100644 index 0000000..31db4c5 --- /dev/null +++ b/.zprezto/modules/history/init.zsh @@ -0,0 +1,39 @@ +# +# Sets history options and defines history aliases. +# +# Authors: +# Robby Russell +# Sorin Ionescu +# + +# +# Variables +# + +HISTFILE="${ZDOTDIR:-$HOME}/.zhistory" # The path to the history file. +HISTSIZE=10000 # The maximum number of events to save in the internal history. +SAVEHIST=10000 # The maximum number of events to save in the history file. + +# +# Options +# + +setopt BANG_HIST # Treat the '!' character specially during expansion. +setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. +setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits. +setopt SHARE_HISTORY # Share history between all sessions. +setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. +setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. +setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. +setopt HIST_FIND_NO_DUPS # Do not display a previously found event. +setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. +setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. +setopt HIST_VERIFY # Do not execute immediately upon history expansion. +setopt HIST_BEEP # Beep when accessing non-existent history. + +# +# Aliases +# + +# Lists the ten most used commands. +alias history-stat="history 0 | awk '{print \$2}' | sort | uniq -c | sort -n -r | head" diff --git a/.zprezto/modules/homebrew/README.md b/.zprezto/modules/homebrew/README.md new file mode 100644 index 0000000..84b4386 --- /dev/null +++ b/.zprezto/modules/homebrew/README.md @@ -0,0 +1,37 @@ +Homebrew +======== + +Defines Homebrew aliases. + +Aliases +------- + +### Homebrew + + - `brewc` cleans outdated brews and their cached archives. + - `brewC` cleans outdated brews, including keg-only, and their cached archives. + - `brewi` installs a formula. + - `brewl` lists installed formulae. + - `brews` searches for a formula. + - `brewu` updates Homebrew and formulae. + - `brewx` uninstalls a formula. + +### Homebrew Cask + + - `cask` is aliased to `brew cask`. + - `caskc` cleans up old cached downloads. + - `caskC` cleans up all cached downloads. + - `caski` installs a cask. + - `caskl` lists installed casks. + - `casks` searches for a cask. + - `caskx` uninstalls a cask. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Griffin Yourick](https://github.com/tough-griff) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/homebrew/init.zsh b/.zprezto/modules/homebrew/init.zsh new file mode 100644 index 0000000..1ebe793 --- /dev/null +++ b/.zprezto/modules/homebrew/init.zsh @@ -0,0 +1,33 @@ +# +# Defines Homebrew aliases. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$OSTYPE" != (darwin|linux)* ]]; then + return 1 +fi + +# +# Aliases +# + +# Homebrew +alias brewc='brew cleanup' +alias brewC='brew cleanup --force' +alias brewi='brew install' +alias brewl='brew list' +alias brews='brew search' +alias brewu='brew update && brew upgrade --all' +alias brewx='brew remove' + +# Homebrew Cask +alias cask='brew cask' +alias caskc='brew cask cleanup --outdated' +alias caskC='brew cask cleanup' +alias caski='brew cask install' +alias caskl='brew cask list' +alias casks='brew cask search' +alias caskx='brew cask uninstall' diff --git a/.zprezto/modules/macports/README.md b/.zprezto/modules/macports/README.md new file mode 100644 index 0000000..70e4b8b --- /dev/null +++ b/.zprezto/modules/macports/README.md @@ -0,0 +1,25 @@ +MacPorts +======== + +Defines MacPorts aliases and adds MacPorts directories to path variables. + +Aliases +------- + + - `portc` cleans the files used to build ports. + - `porti` installs a port. + - `ports` searches for a port. + - `portu` upgrades a port. + - `portU` upgrades MacPorts, the ports collection, and outdated ports. + - `portx` uninstalls a port. + - `portX` uninstalls inactive ports. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Matt Cable](https://github.com/curiousstranger) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/macports/init.zsh b/.zprezto/modules/macports/init.zsh new file mode 100644 index 0000000..d55744a --- /dev/null +++ b/.zprezto/modules/macports/init.zsh @@ -0,0 +1,34 @@ +# +# Defines MacPorts aliases and adds MacPorts directories to path variables. +# +# Authors: +# Matt Cable +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$OSTYPE" != darwin* ]]; then + return 1 +fi + +# +# Paths +# + +# Set the list of directories that Zsh searches for programs. +path=( + /opt/local/{bin,sbin} + $path +) + +# +# Aliases +# + +alias portc='sudo port clean --all installed' +alias porti='sudo port install' +alias ports='port search' +alias portU='sudo port selfupdate && sudo port upgrade outdated' +alias portu='sudo port upgrade' +alias portX='sudo port -u uninstall' +alias portx='sudo port uninstall' diff --git a/.zprezto/modules/node/README.md b/.zprezto/modules/node/README.md new file mode 100644 index 0000000..5f0c3ca --- /dev/null +++ b/.zprezto/modules/node/README.md @@ -0,0 +1,45 @@ +Node.js +======= + +Provides utility functions for [Node.js][1], loads the Node Version Manager, and +enables [npm][2] completion. + +nvm +--- + +[nvm][5] allows for managing multiple, isolated Node.js installations in the +home directory. + +Functions +--------- + + - `node-doc` opens the Node.js online [API documentation][3] in the default + browser. + - `node-info` exposes information about the Node.js environment via the + `$node_info` associative array. + +Theming +------- + +To display the version number of the current Node.js version, define the +following style inside the `prompt_name_setup` function. + + # %v - Node.js version. + zstyle ':prezto:module:node:info:version' format 'version:%v' + +Then add `$node_info[version]` to either `$PROMPT` or `$RPROMPT` and call +`node-info` in `prompt_name_preexec` hook function. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][4].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Zeh Rizzatti](https://github.com/zehrizzatti) + +[1]: http://nodejs.org +[2]: http://npmjs.org +[3]: http://nodejs.org/api +[4]: https://github.com/sorin-ionescu/prezto/issues +[5]: https://github.com/creationix/nvm diff --git a/.zprezto/modules/node/functions/node-doc b/.zprezto/modules/node/functions/node-doc new file mode 100644 index 0000000..24f5641 --- /dev/null +++ b/.zprezto/modules/node/functions/node-doc @@ -0,0 +1,14 @@ +# +# Opens the Node.js online API documentation in the default browser. +# +# Authors: +# Sorin Ionescu +# + +if [[ -z "$BROWSER" ]]; then + print "$0: no web browser defined" >&2 + return 1 +fi + +# TODO: Make the sections easier to use. +"$BROWSER" "http://nodejs.org/docs/$(node --version | sed 's/-.*//')/api/all.html#${1}" diff --git a/.zprezto/modules/node/functions/node-info b/.zprezto/modules/node/functions/node-info new file mode 100644 index 0000000..7742f90 --- /dev/null +++ b/.zprezto/modules/node/functions/node-info @@ -0,0 +1,24 @@ +# +# Exposes information about the Node.js environment via the $node_info +# associative array. +# +# Authors: +# Zeh Rizzatti +# + +local version +local version_format +local version_formatted + +unset node_info +typeset -gA node_info + +if (( $+functions[nvm_version] )); then + version="${$(nvm_version)#v}" +fi + +if [[ "$version" != (none|) ]]; then + zstyle -s ':prezto:module:node:info:version' format 'version_format' + zformat -f version_formatted "$version_format" "v:$version" + node_info[version]="$version_formatted" +fi diff --git a/.zprezto/modules/node/init.zsh b/.zprezto/modules/node/init.zsh new file mode 100644 index 0000000..6d60078 --- /dev/null +++ b/.zprezto/modules/node/init.zsh @@ -0,0 +1,34 @@ +# +# Loads the Node Version Manager and enables npm completion. +# +# Authors: +# Sorin Ionescu +# Zeh Rizzatti +# + +# Load manually installed NVM into the shell session. +if [[ -s "$HOME/.nvm/nvm.sh" ]]; then + source "$HOME/.nvm/nvm.sh" + +# Load package manager installed NVM into the shell session. +elif (( $+commands[brew] )) && [[ -d "$(brew --prefix nvm 2>/dev/null)" ]]; then + source $(brew --prefix nvm)/nvm.sh + +# Return if requirements are not found. +elif (( ! $+commands[node] )); then + return 1 +fi + +# Load NPM completion. +if (( $+commands[npm] )); then + cache_file="${0:h}/cache.zsh" + + if [[ "$commands[npm]" -nt "$cache_file" || ! -s "$cache_file" ]]; then + # npm is slow; cache its output. + npm completion >! "$cache_file" 2> /dev/null + fi + + source "$cache_file" + + unset cache_file +fi diff --git a/.zprezto/modules/ocaml/README.md b/.zprezto/modules/ocaml/README.md new file mode 100644 index 0000000..e170158 --- /dev/null +++ b/.zprezto/modules/ocaml/README.md @@ -0,0 +1,27 @@ +OCaml +===== + +Initializes [OCaml][1] package management. + +OPAM +---- + +[OPAM][2] is a package manager for OCaml. + +This module enables local package installation with OPAM by extending the +relevant path and OCaml variables. + +### Usage + +Install packages to your local package directory with `opam install`. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: http://ocaml.org/ +[2]: http://opam.ocamlpro.com/ +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/ocaml/init.zsh b/.zprezto/modules/ocaml/init.zsh new file mode 100644 index 0000000..b09c7eb --- /dev/null +++ b/.zprezto/modules/ocaml/init.zsh @@ -0,0 +1,14 @@ +# +# Initializes OCaml package management. +# +# Authors: +# Sebastian Wiesner +# + +# Return if requirements are not found. +if [[ ! -f "$HOME/.opam/opam-init/init.zsh" ]]; then + return 1 +fi + +# Initialize OPAM. +source "$HOME/.opam/opam-init/init.zsh" diff --git a/.zprezto/modules/osx/README.md b/.zprezto/modules/osx/README.md new file mode 100644 index 0000000..d8eff0f --- /dev/null +++ b/.zprezto/modules/osx/README.md @@ -0,0 +1,37 @@ +OSX +=== + +Defines [Mac OS X][1] aliases and functions. + +Aliases +------- + + - `cdf` changes the current working director to the current _Finder_ + directory. + - `pushdf` pushes the current working directory onto the directory queue and + changes the current working director to the current _Finder_ directory. + +Functions +--------- + + - `mand` opens _man_ pages in [_Dash.app_][2]. + - `manp` opens _man_ pages in _Preview.app_. + - `pfd` prints the current _Finder_ directory. + - `pfs` prints the current _Finder_ selection. + - `tab` creates a new tab (works in both _Terminal_ and [_iTerm_][3]). + - `ql` previews files in Quick Look. + - `osx-rm-dir-metadata` deletes .DS\_Store, \_\_MACOSX cruft. + - `osx-ls-download-history` displays the Mac OS X download history. + - `osx-rm-download-history` deletes the Mac OS X download history. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][4].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.apple.com/macosx/ +[2]: http://kapeli.com/dash +[3]: http://www.iterm2.com/ +[4]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/osx/functions/_manb_mand_manp b/.zprezto/modules/osx/functions/_manb_mand_manp new file mode 100644 index 0000000..8ea1e56 --- /dev/null +++ b/.zprezto/modules/osx/functions/_manb_mand_manp @@ -0,0 +1,11 @@ +#compdef mand manp +#autoload + +# +# Completes mand and manp. +# +# Authors: +# Sorin Ionescu +# + +_man diff --git a/.zprezto/modules/osx/functions/mand b/.zprezto/modules/osx/functions/mand new file mode 100644 index 0000000..7a9653a --- /dev/null +++ b/.zprezto/modules/osx/functions/mand @@ -0,0 +1,20 @@ +# +# Opens man pages in Dash.app. +# +# Authors: +# Sorin Ionescu +# + +function mand { + if (( $# > 0 )); then + open "dash://manpages:$1" 2>/dev/null + if (( $? != 0 )); then + print "$0: Dash is not installed" >&2 + break + fi + else + print 'What manual page do you want?' >&2 + fi +} + +mand "$@" diff --git a/.zprezto/modules/osx/functions/manp b/.zprezto/modules/osx/functions/manp new file mode 100644 index 0000000..fcb2a02 --- /dev/null +++ b/.zprezto/modules/osx/functions/manp @@ -0,0 +1,19 @@ +# +# Opens man pages in Preview.app. +# +# Authors: +# Sorin Ionescu +# + +function manp { + local page + if (( $# > 0 )); then + for page in "$@"; do + man -t "$page" | open -f -a Preview + done + else + print 'What manual page do you want?' >&2 + fi +} + +manp "$@" diff --git a/.zprezto/modules/osx/functions/osx-ls-download-history b/.zprezto/modules/osx/functions/osx-ls-download-history new file mode 100644 index 0000000..5727c1b --- /dev/null +++ b/.zprezto/modules/osx/functions/osx-ls-download-history @@ -0,0 +1,13 @@ +# +# Displays the Mac OS X download history. +# +# Authors: +# Sorin Ionescu +# + +local db +for db in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV*; do + if grep -q 'LSQuarantineEvent' < <(sqlite3 "$db" .tables); then + sqlite3 "$db" 'SELECT LSQuarantineDataURLString FROM LSQuarantineEvent' + fi +done diff --git a/.zprezto/modules/osx/functions/osx-rm-dir-metadata b/.zprezto/modules/osx/functions/osx-rm-dir-metadata new file mode 100644 index 0000000..0a91ced --- /dev/null +++ b/.zprezto/modules/osx/functions/osx-rm-dir-metadata @@ -0,0 +1,11 @@ +# +# Deletes .DS_Store and __MACOSX directories. +# +# Authors: +# Sorin Ionescu +# + +find "${@:-$PWD}" \( \ + -type f -name '.DS_Store' -o \ + -type d -name '__MACOSX' \ +\) -print0 | xargs -0 rm -rf diff --git a/.zprezto/modules/osx/functions/osx-rm-download-history b/.zprezto/modules/osx/functions/osx-rm-download-history new file mode 100644 index 0000000..3837709 --- /dev/null +++ b/.zprezto/modules/osx/functions/osx-rm-download-history @@ -0,0 +1,13 @@ +# +# Deletes the Mac OS X download history. +# +# Authors: +# Sorin Ionescu +# + +local db +for db in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV*; do + if grep -q 'LSQuarantineEvent' < <(sqlite3 "$db" .tables); then + sqlite3 "$db" 'DELETE FROM LSQuarantineEvent; VACUUM' + fi +done diff --git a/.zprezto/modules/osx/functions/pfd b/.zprezto/modules/osx/functions/pfd new file mode 100644 index 0000000..a4d4b68 --- /dev/null +++ b/.zprezto/modules/osx/functions/pfd @@ -0,0 +1,12 @@ +# +# Displays the current Finder.app directory. +# +# Authors: +# Sorin Ionescu +# + +osascript 2>/dev/null < +# + +osascript 2>&1 < +# + +if (( $# > 0 )); then + qlmanage -p "$@" &> /dev/null +fi diff --git a/.zprezto/modules/osx/functions/tab b/.zprezto/modules/osx/functions/tab new file mode 100644 index 0000000..e95afbf --- /dev/null +++ b/.zprezto/modules/osx/functions/tab @@ -0,0 +1,41 @@ +# +# Opens a new Terminal.app/iTerm.app tab in the current directory. +# +# Authors: +# Sorin Ionescu +# + +local command="cd \\\"$PWD\\\"" +(( $# > 0 )) && command="${command}; $*" + +the_app=$( + osascript 2>/dev/null </dev/null </dev/null < +# + +# Return if requirements are not found. +if [[ "$OSTYPE" != darwin* ]]; then + return 1 +fi + +# +# Aliases +# + +# Changes directory to the current Finder directory. +alias cdf='cd "$(pfd)"' + +# Pushes directory to the current Finder directory. +alias pushdf='pushd "$(pfd)"' diff --git a/.zprezto/modules/pacman/README.md b/.zprezto/modules/pacman/README.md new file mode 100644 index 0000000..fb07407 --- /dev/null +++ b/.zprezto/modules/pacman/README.md @@ -0,0 +1,65 @@ +Pacman +====== + +Provides aliases and functions for the [Pacman][1] package manager and +frontends. + +Settings +-------- + +To enable a Pacman frontend, for example, [Yaourt][2], add the following line to +*zpreztorc*: + + zstyle ':prezto:module:pacman' frontend 'yaourt' + +If you have enabled color globally in *zpreztorc*, you may disable it for certain +commands. + +To disable `yaourt` highlighting, add the following line to *zpreztorc*: + + zstyle ':prezto:module:pacman:yaourt' color 'no' + +Aliases +------- + +### Pacman + + - `pac` is short for `pacman`. + - `paci` installs packages from repositories. + - `pacI` installs packages from files. + - `pacx` removes packages and unneeded dependencies. + - `pacX` removes packages, their configuration, and unneeded dependencies. + - `pacq` displays information about a package from the repositories. + - `pacQ` displays information about a package from the local database. + - `pacs` searches for packages in the repositories. + - `pacS` searches for packages in the local database. + - `pacu` synchronizes the local package and Arch Build System (requires `abs`) + databases against the repositories. + - `pacU` synchronizes the local package database against the repositories then + upgrades outdated packages. + - `pacman-list-orphans` lists orphan packages. + - `pacman-remove-orphans` removes orphan packages. + +### Frontends + +#### Yaourt + + - `pacc` manages *.pac\** files. + +Functions +--------- + + - `pacman-list-explicit` lists explicitly installed pacman packages. + - `pacman-list-disowned` lists pacman disowned files. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Benjamin Boudreau](https://github.com/dreur) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.archlinux.org/pacman/ +[2]: http://archlinux.fr/yaourt-en +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/pacman/functions/pacman-list-disowned b/.zprezto/modules/pacman/functions/pacman-list-disowned new file mode 100644 index 0000000..a097c9d --- /dev/null +++ b/.zprezto/modules/pacman/functions/pacman-list-disowned @@ -0,0 +1,22 @@ +# +# Lists Pacman disowned files. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# + +local tmp="${TMPDIR:-/tmp}/pacman-disowned-$UID-$$" +local db="$tmp/db" +local fs="$tmp/fs" + +mkdir "$tmp" +trap 'rm -rf "$tmp"' EXIT + +pacman --quiet --query --list | sort --unique > "$db" + +find /bin /etc /lib /sbin /usr \ + ! -name lost+found \ + \( -type d -printf '%p/\n' -o -print \) | sort > "$fs" + +comm -23 "$fs" "$db" diff --git a/.zprezto/modules/pacman/functions/pacman-list-explicit b/.zprezto/modules/pacman/functions/pacman-list-explicit new file mode 100644 index 0000000..2967834 --- /dev/null +++ b/.zprezto/modules/pacman/functions/pacman-list-explicit @@ -0,0 +1,20 @@ +# +# Lists explicitly installed Pacman packages. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# + +pacman --query --explicit --info \ + | awk ' + BEGIN { + FS=":" + } + /^Name/ { + print $2 + } + /^Description/ { + print $2 + } + ' diff --git a/.zprezto/modules/pacman/init.zsh b/.zprezto/modules/pacman/init.zsh new file mode 100644 index 0000000..9d752a9 --- /dev/null +++ b/.zprezto/modules/pacman/init.zsh @@ -0,0 +1,84 @@ +# +# Defines Pacman aliases. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# +# Tips: +# https://wiki.archlinux.org/index.php/Pacman_Tips +# + +# Return if requirements are not found. +if (( ! $+commands[pacman] )); then + return 1 +fi + +# +# Frontend +# + +# Get the Pacman frontend. +zstyle -s ':prezto:module:pacman' frontend '_pacman_frontend' + +if (( $+commands[$_pacman_frontend] )); then + alias pacman="$_pacman_frontend" + + if [[ -s "${0:h}/${_pacman_frontend}.zsh" ]]; then + source "${0:h}/${_pacman_frontend}.zsh" + fi +else + _pacman_frontend='pacman' + _pacman_sudo='sudo ' +fi + +# +# Aliases +# + +# Pacman. +alias pac="${_pacman_frontend}" + +# Installs packages from repositories. +alias paci="${_pacman_sudo}${_pacman_frontend} --sync" + +# Installs packages from files. +alias pacI="${_pacman_sudo}${_pacman_frontend} --upgrade" + +# Removes packages and unneeded dependencies. +alias pacx="${_pacman_sudo}${_pacman_frontend} --remove" + +# Removes packages, their configuration, and unneeded dependencies. +alias pacX="${_pacman_sudo}${_pacman_frontend} --remove --nosave --recursive" + +# Displays information about a package from the repositories. +alias pacq="${_pacman_frontend} --sync --info" + +# Displays information about a package from the local database. +alias pacQ="${_pacman_frontend} --query --info" + +# Searches for packages in the repositories. +alias pacs="${_pacman_frontend} --sync --search" + +# Searches for packages in the local database. +alias pacS="${_pacman_frontend} --query --search" + +# Lists orphan packages. +alias pacman-list-orphans="${_pacman_sudo}${_pacman_frontend} --query --deps --unrequired" + +# Removes orphan packages. +alias pacman-remove-orphans="${_pacman_sudo}${_pacman_frontend} --remove --recursive \$(${_pacman_frontend} --quiet --query --deps --unrequired)" + +# Synchronizes the local package and Arch Build System databases against the +# repositories. +if (( $+commands[abs] )); then + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh && sudo abs" +else + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh" +fi + +# Synchronizes the local package database against the repositories then +# upgrades outdated packages. +alias pacU="${_pacman_sudo}${_pacman_frontend} --sync --refresh --sysupgrade" + +unset _pacman_{frontend,sudo} diff --git a/.zprezto/modules/pacman/yaourt.zsh b/.zprezto/modules/pacman/yaourt.zsh new file mode 100644 index 0000000..819fad1 --- /dev/null +++ b/.zprezto/modules/pacman/yaourt.zsh @@ -0,0 +1,18 @@ +# +# Defines Yaourt aliases. +# +# Authors: +# Sorin Ionescu +# + +# +# Aliases +# + +# Disable color. +if ! zstyle -t ':prezto:module:pacman:yaourt' color; then + alias pacman='yaourt --nocolor' +fi + +# Manages .pac* files. +alias pacc='yaourt -C' diff --git a/.zprezto/modules/perl/README.md b/.zprezto/modules/perl/README.md new file mode 100644 index 0000000..90af1eb --- /dev/null +++ b/.zprezto/modules/perl/README.md @@ -0,0 +1,63 @@ +Perl +==== + +Enables local [Perl][1] module installation on Mac OS X and defines aliases. + +Local Module Installation +------------------------- + +Perl versions older than 5.14 do not support the local installation of Perl +modules natively. This module allows for local installation of Perl modules on +Mac OS X in *~/Library/Perl/5.12* by altering the environment. + +### Usage + +For Perl versions older than 5.14, install *local::lib*. + + curl -L -C - -O http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.008004.tar.gz + tar xvf local-lib-1.008004.tar.gz + cd local-lib-1.008004 + perl Makefile.PL --bootstrap=$HOME/Library/Perl/5.12 + make && make test && make install + +Install *cpanminus*: + + curl -L http://cpanmin.us | perl - --self-upgrade + +Perlbrew +-------- + +An alternative to the above is to use [Perlbrew][2], which allows for the +management of multiple, isolated Perl installations in the home directory. + +Aliases +------- + +### General + + - `pl` is short for `perl`. + - `pld` looks up Perl documentation (`perldoc`). + - `ple` executes a one line program in a loop (`perl -wlne`). + +### Perlbrew + + - `plb` manages Perl environments. + - `plba` lists available Perl versions. + - `plbi` installs a Perl version. + - `plbl` lists installed Perl versions. + - `plbo` temporarily turns off Perlbrew. + - `plbO` turns off Perlbrew. + - `plbs` switches to a Perl version. + - `plbu` uninstalls a Perl version. + - `plbx` temporarily sets the Perl version to use. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.perl.org +[2]: http://perlbrew.pl +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/perl/init.zsh b/.zprezto/modules/perl/init.zsh new file mode 100644 index 0000000..a8d5603 --- /dev/null +++ b/.zprezto/modules/perl/init.zsh @@ -0,0 +1,52 @@ +# +# Enables local Perl module installation on Mac OS X and defines aliases. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[perl] )); then + return 1 +fi + +# +# Local Module Installation +# + +if [[ "$OSTYPE" == darwin* ]]; then + # Perl is slow; cache its output. + cache_file="${0:h}/cache.zsh" + perl_path="$HOME/Library/Perl/5.12" + + if [[ -f "$perl_path/lib/perl5/local/lib.pm" ]]; then + if [[ ! -s "$cache_file" ]]; then + perl -I$perl_path/lib/perl5 -Mlocal::lib=$perl_path >! "$cache_file" + fi + + source "$cache_file" + fi + + unset perl_path + unset cache_file +fi + +# +# Aliases +# + +# General +alias pl='perl' +alias pld='perldoc' +alias ple='perl -wlne' + +# Perlbrew +alias plb='perlbrew' +alias plba='perlbrew available' +alias plbi='perlbrew install' +alias plbl='perlbrew list' +alias plbo='perlbrew off' +alias plbO='perlbrew switch-off' +alias plbs='perlbrew switch' +alias plbu='perlbrew use' +alias plbx='perlbrew uninstall' diff --git a/.zprezto/modules/prompt/README.md b/.zprezto/modules/prompt/README.md new file mode 100644 index 0000000..dc02497 --- /dev/null +++ b/.zprezto/modules/prompt/README.md @@ -0,0 +1,111 @@ +Prompt +====== + +Loads prompt [themes][1]. + +Settings +-------- + +To select a prompt theme, add the following to *zpreztorc*, and replace **name** +with the name of the theme you wish to load. Setting it to **random** will load +a random theme. + + zstyle ':prezto:module:prompt' theme 'name' + +Theming +------- + +A prompt theme is an autoloadable function file with a special name, +`prompt_name_setup`, placed anywhere in `$fpath`, but for the purpose of this +project, themes **should** be placed in the *modules/prompt/functions* +directory. + +### Theme Functions + +There are three theme functions, a setup function, a help function, and +a preview function. The setup function **must** always be defined. The help +function and the preview functions are optional. + +#### prompt_name_setup + +This function is called by the `prompt` function to install the theme. This +function may define other functions as necessary to maintain the prompt, +including a function that displays help or a function used to preview it. + +**Do not call this function directly.** + +The most basic example of this function can be seen below. + + function prompt_name_setup { + PROMPT='%m%# ' + RPROMPT='' + } + +#### prompt_name_help + +If the `prompt_name_setup` function is customizable via parameters, a help +function **should** be defined. The user will access it via `prompt -h name`. + +The most basic example of this function can be seen below. + + function prompt_name_help { + cat <] [] + + where the color is for the left-hand prompt. + EOH + } + +#### prompt_name_preview + +If the `prompt_name_setup` function is customizable via parameters, a preview +function **should** be defined. The user will access it via `prompt -p name`. + +The most basic example of this function can be seen below. + + function prompt_name_preview { + if (( $# > 0 )); then + prompt_preview_theme theme "$@" + else + prompt_preview_theme theme red green blue + print + prompt_preview_theme theme yellow magenta black + fi + } + +### Hook Functions + +There are many Zsh [hook][2] functions, but mostly the *precmd* hook will be +used. + +#### prompt_name_precmd + +This hook is called before the prompt is displayed and is useful for getting +information to display in a prompt. + +When calling functions to get information to display in a prompt, do not assume +that all the dependencies have been loaded. Always check for the availability of +a function before you calling it. + +**Do not register hook functions. They will be registered by the `prompt` function.** + +The most basic example of this function can be seen below. + + function prompt_name_precmd { + if (( $+functions[git-info] )); then + git-info + fi + } + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Prompt-Themes +[2]: http://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/prompt/external/agnoster/README.md b/.zprezto/modules/prompt/external/agnoster/README.md new file mode 100644 index 0000000..a45667e --- /dev/null +++ b/.zprezto/modules/prompt/external/agnoster/README.md @@ -0,0 +1,40 @@ +# agnoster.zsh-theme + +A ZSH theme optimized for people who use: + +- Solarized +- Git +- Unicode-compatible fonts and terminals (I use iTerm2 + Menlo) + +For Mac users, I highly recommend iTerm 2 + Solarized Dark + +# Compatibility + +**NOTE:** In all likelihood, you will need to install a [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts) for this theme to render correctly. + +To test if your terminal and font support it, check that all the necessary characters are supported by copying the following command to your terminal: `echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"`. The result should look like this: + +![Character Example](https://gist.githubusercontent.com/agnoster/3712874/raw/characters.png) + +## What does it show? + +- If the previous command failed (✘) +- User @ Hostname (if user is not DEFAULT_USER, which can then be set in your profile) +- Git status + - Branch () or detached head (➦) + - Current branch / SHA1 in detached head state + - Dirty working directory (±, color change) +- Working directory +- Elevated (root) privileges (⚡) + +![Screenshot](https://gist.githubusercontent.com/agnoster/3712874/raw/screenshot.png) + +## Future Work + +I don't want to clutter it up too much, but I am toying with the idea of adding RVM (ruby version) and n (node.js version) display. + +It's currently hideously slow, especially inside a git repo. I guess it's not overly so for comparable themes, but it bugs me, and I'd love to hear ideas about how to improve the performance. + +Would be nice for the code to be a bit more sane and re-usable. Something to easily append a section with a given FG/BG, and add the correct opening and closing. + +Also the dependency on a powerline-patched font is regrettable, but there's really no way to get that effect without it. Ideally there would be a way to check for compatibility, or maybe even fall back to one of the similar unicode glyphs. diff --git a/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme b/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme new file mode 100644 index 0000000..9304556 --- /dev/null +++ b/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme @@ -0,0 +1,153 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 +# +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for ZSH +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://gist.github.com/1595572). +# +# In addition, I recommend the +# [Solarized theme](https://github.com/altercation/solarized/) and, if you're +# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app - +# it has significantly better color fidelity. +# +# # Goals +# +# The aim of this theme is to only show you *relevant* information. Like most +# prompts, it will only show git information when in a git working directory. +# However, it goes a step further: everything from the current user and +# hostname to whether the last call exited with an error to whether background +# jobs are running in this shell will all be displayed automatically when +# appropriate. + +### Segment drawing +# A few utility functions to make it easy and re-usable to draw segmented prompts + +CURRENT_BG='NONE' +PRIMARY_FG=black + +# Characters +SEGMENT_SEPARATOR="\ue0b0" +PLUSMINUS="\u00b1" +BRANCH="\ue0a0" +DETACHED="\u27a6" +CROSS="\u2718" +LIGHTNING="\u26a1" +GEAR="\u2699" + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + [[ -n $1 ]] && bg="%K{$1}" || bg="%k" + [[ -n $2 ]] && fg="%F{$2}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then + print -n "%{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%}" + else + print -n "%{$bg%}%{$fg%}" + fi + CURRENT_BG=$1 + [[ -n $3 ]] && print -n $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + print -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + print -n "%{%k%}" + fi + print -n "%{%f%}" + CURRENT_BG='' +} + +### Prompt components +# Each component will draw itself, and hide itself if no information needs to be shown + +# Context: user@hostname (who am I and where am I) +prompt_context() { + local user=`whoami` + + if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CONNECTION" ]]; then + prompt_segment $PRIMARY_FG default " %(!.%{%F{yellow}%}.)$user@%m " + fi +} + +# Git: branch/detached head, dirty status +prompt_git() { + local color ref + is_dirty() { + test -n "$(git status --porcelain --ignore-submodules)" + } + ref="$vcs_info_msg_0_" + if [[ -n "$ref" ]]; then + if is_dirty; then + color=yellow + ref="${ref} $PLUSMINUS" + else + color=green + ref="${ref} " + fi + if [[ "${ref/.../}" == "$ref" ]]; then + ref="$BRANCH $ref" + else + ref="$DETACHED ${ref/.../}" + fi + prompt_segment $color $PRIMARY_FG + print -Pn " $ref" + fi +} + +# Dir: current working directory +prompt_dir() { + prompt_segment blue $PRIMARY_FG ' %~ ' +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + local symbols + symbols=() + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS" + [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR" + + [[ -n "$symbols" ]] && prompt_segment $PRIMARY_FG default " $symbols " +} + +## Main prompt +prompt_agnoster_main() { + RETVAL=$? + CURRENT_BG='NONE' + prompt_status + prompt_context + prompt_dir + prompt_git + prompt_end +} + +prompt_agnoster_precmd() { + vcs_info + PROMPT='%{%f%b%k%}$(prompt_agnoster_main) ' +} + +prompt_agnoster_setup() { + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + prompt_opts=(cr subst percent) + + add-zsh-hook precmd prompt_agnoster_precmd + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:*' check-for-changes false + zstyle ':vcs_info:git*' formats '%b' + zstyle ':vcs_info:git*' actionformats '%b (%a)' +} + +prompt_agnoster_setup "$@" diff --git a/.zprezto/modules/prompt/external/agnoster/characters.png b/.zprezto/modules/prompt/external/agnoster/characters.png new file mode 100644 index 0000000000000000000000000000000000000000..22bb0cb709b54cfa3b17827d79238c34386b5cc2 GIT binary patch literal 15285 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 literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/external/agnoster/screenshot.png b/.zprezto/modules/prompt/external/agnoster/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28e2d9fe2e4d0a4fda0315ad97bdafa399425c GIT binary patch literal 82148 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

E@0=S0y9DFY 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 Kh*gOg1^*AH^cq$G literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/external/powerline/README.md b/.zprezto/modules/prompt/external/powerline/README.md new file mode 100644 index 0000000..8b2b6df --- /dev/null +++ b/.zprezto/modules/prompt/external/powerline/README.md @@ -0,0 +1,60 @@ +Powerline for [Prezto](http://github.com/sorin-ionescu/prezto) ZSH + + +## Features + +* Single line prompt +* Git branch info (current branch and modified states) +* Time since last commit +* RVM current ruby version / gemset + +![Example](https://raw.github.com/davidjrice/prezto_powerline/master/prompt.png) + +## Dependencies + +* [skwp/dotfiles](http://github.com/skwp/dotfiles) *(YADR)* +* [prezto](https://github.com/sorin-ionescu/prezto) (included by YADR) + +## Installation + + # Install YADR + git clone https://github.com/skwp/dotfiles ~/.yadr + cd ~/.yadr && rake install + + # Create a ~/.secrets file (required by YADR) + touch ~/.secrets + + # Install the prompt + curl https://raw.github.com/davidjrice/prezto_powerline/master/prompt_powerline_setup > ~/.zsh.prompts/prompt_powerline_setup + + # Install Solarized + git clone https://github.com/altercation/solarized + cd solarized + + # e.g. for iTerm + cd iterm2-colors-solarized/ + open Solarized\ Dark.itermcolors + # this should load the colours for iTerm, but they are not configured yet + + # in iTerm2 open preferences + # profiles > default > colours > load presets > Solarized Dark + # profiles > default > terminal > report terminal type > "xterm-256color" + + # Enable + echo "prompt powerline" > ~/.zsh.after/prompt.zsh + + +## Inspiration + +This prompt is inspired by: + +* [oh-my-zsh-powerline-theme](http://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme) +* [robbl oh-my-zsh theme](http://github.com/robbl/oh-my-zsh-config) +* [SKWP prezto theme](http://github.com/skwp/dotfiles/blob/master/zsh/prezto-themes/prompt_skwp_setup) + +## TODO + +* Moar configurable +* Extract functions to Prezto modules? +* Use better Prezto best practices...? +* Handle NVM version info? \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerline/prompt.png b/.zprezto/modules/prompt/external/powerline/prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..b62616d845f0a81e51fd3ae51dbf45d04d50153b GIT binary patch literal 142230 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 U6PUU80Qr-VP!unE_wmdB0n&&2@c;k- literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/external/powerline/prompt_powerline_setup b/.zprezto/modules/prompt/external/powerline/prompt_powerline_setup new file mode 100644 index 0000000..1f13956 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerline/prompt_powerline_setup @@ -0,0 +1,185 @@ +# +# A ZSH theme based on a combination of the skwp prezto theme and the robl ohmyzsh theme. +# * RVM info shown on the right +# * Git branch info on the left +# * Single line prompt +# * Time since last commit on the left +# * Time in place of user@hostname +# +# Authors: +# David Rice + +ZSH_THEME_REP_TIME_SINCE_COMMIT_SHORT="%{$fg[green]%}" +ZSH_THEME_REP_TIME_SINCE_COMMIT_MEDIUM="%{$fg[yellow]%}" +ZSH_THEME_REP_TIME_SINCE_COMMIT_LONG="%{$fg[red]%}" +ZSH_THEME_REP_TIME_SINCE_COMMIT_NEUTRAL="%{$fg[cyan]%}" + +# returns the time since last git commit +function git_time_details() { + # only proceed if there is actually a git repository + if `git rev-parse --git-dir > /dev/null 2>&1`; then + # only proceed if there is actually a commit + if [[ $(git log 2>&1 > /dev/null | grep -c "^fatal: bad default revision") == 0 ]]; then + # get the last commit hash + # lc_hash=`git log --pretty=format:'%h' -1 2> /dev/null` + # get the last commit time + lc_time=`git log --pretty=format:'%at' -1 2> /dev/null` + + now=`date +%s` + seconds_since_last_commit=$((now-lc_time)) + lc_time_since=`time_since_commit $seconds_since_last_commit` + + echo "$lc_time_since" + else + echo "" + fi + else + echo "" + fi +} + +# returns the time by given seconds +function time_since_commit() { + seconds_since_last_commit=$(($1 + 0)) + + # totals + MINUTES=$((seconds_since_last_commit / 60)) + HOURS=$((seconds_since_last_commit/3600)) + + # sub-hours and sub-minutes + DAYS=$((seconds_since_last_commit / 86400)) + SUB_HOURS=$((HOURS % 24)) + SUB_MINUTES=$((MINUTES % 60)) + + if [ "$HOURS" -gt 24 ]; then + echo "${DAYS}d${SUB_HOURS}h${SUB_MINUTES}m" + elif [ "$MINUTES" -gt 60 ]; then + echo "${HOURS}h${SUB_MINUTES}m" + else + echo "${MINUTES}m" + fi +} + +function rvm_info_for_prompt { + if [[ -d ~/.rvm/ ]]; then + local ruby_version=$(~/.rvm/bin/rvm-prompt) + if [ -n "$ruby_version" ]; then + echo "$ruby_version" + fi + else + echo "" + fi +} + +function prompt_powerline_precmd { + # Check for untracked files or updated submodules since vcs_info doesn't. + if [[ ! -z $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + fmt_branch="%b%u%c${__PROMPT_SKWP_COLORS[4]}●%f" + else + fmt_branch="%b%u%c" + fi + zstyle ':vcs_info:*:prompt:*' formats "${fmt_branch}" + + vcs_info 'prompt' + RVM_PRECMD_INFO=$(rvm_info_for_prompt) + + # zstyle ':prezto:module:ruby' rvm '%r' +} + +function prompt_powerline_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + add-zsh-hook precmd prompt_powerline_precmd + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + __PROMPT_SKWP_COLORS=( + "%F{81}" # turquoise + "%F{166}" # orange + "%F{135}" # purple + "%F{161}" # hotpink + "%F{118}" # limegreen + ) + else + __PROMPT_SKWP_COLORS=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Enable VCS systems you use. + zstyle ':vcs_info:*' enable bzr git hg svn + + # check-for-changes can be really slow. + # You should disable it if you work with large repositories. + zstyle ':vcs_info:*:prompt:*' check-for-changes true + + # Formats: + # %b - branchname + # %u - unstagedstr (see below) + # %c - stagedstr (see below) + # %a - action (e.g. rebase-i) + # %R - repository path + # %S - path in the repository + # %n - user + # %m - machine hostname + + # local fmt_branch="(${__PROMPT_SKWP_COLORS[1]}%b%f%u%c)" + local fmt_branch="${__PROMPT_SKWP_COLORS[2]}%b%f%u%c" + local fmt_action="${__PROMPT_SKWP_COLORS[5]}%a%f" + local fmt_unstaged="${__PROMPT_SKWP_COLORS[2]}●%f" + local fmt_staged="${__PROMPT_SKWP_COLORS[5]}●%f" + + zstyle ':vcs_info:*:prompt:*' unstagedstr "${fmt_unstaged}" + zstyle ':vcs_info:*:prompt:*' stagedstr "${fmt_staged}" + zstyle ':vcs_info:*:prompt:*' actionformats "${fmt_branch}${fmt_action}" + zstyle ':vcs_info:*:prompt:*' formats "${fmt_branch}" + zstyle ':vcs_info:*:prompt:*' nvcsformats "" + + # SPLIT RVM PROMPT INFO + # TODO: should assign this to local variable? somehow doesn't work correctly. + rvm_split=("${(s/@/)$(rvm_info_for_prompt)}") + + # if [ "$POWERLINE_RIGHT_B" = "" ]; then + # POWERLINE_RIGHT_B=%D{%H:%M:%S} + local powerline_right_b=$rvm_split[1] + # fi + + # if [ "$POWERLINE_RIGHT_A" = "" ]; then + local powerline_right_a=$rvm_split[2] + # fi + + # Setup powerline style colouring + POWERLINE_COLOR_BG_GRAY=%K{240} + POWERLINE_COLOR_BG_LIGHT_GRAY=%K{240} + POWERLINE_COLOR_BG_WHITE=%K{255} + + POWERLINE_COLOR_FG_GRAY=%F{240} + POWERLINE_COLOR_FG_LIGHT_GRAY=%F{240} + POWERLINE_COLOR_FG_WHITE=%F{255} + + POWERLINE_SEPARATOR=$'\u2b80' + POWERLINE_R_SEPARATOR=$'\u2b82' + + POWERLINE_LEFT_A="%K{green}%F{white} %~ %k%f%F{green}%K{blue}"$POWERLINE_SEPARATOR + POWERLINE_LEFT_B="%k%f%F{white}%K{blue} "'${vcs_info_msg_0_}'" %k%f%F{blue}%K{black}"$POWERLINE_SEPARATOR + POWERLINE_LEFT_C=" %k%f%F{white}%K{black}"'$(git_time_details)'" %k%f%F{black}"$POWERLINE_SEPARATOR"%f " + + PROMPT=$POWERLINE_LEFT_A$POWERLINE_LEFT_B$POWERLINE_LEFT_C + # RPROMPT=$POWERLINE_COLOR_FG_WHITE$POWERLINE_R_SEPARATOR"%f$POWERLINE_COLOR_BG_WHITE $POWERLINE_COLOR_FG_GRAY$powerline_right_b "$POWERLINE_R_SEPARATOR"%f%k$POWERLINE_COLOR_BG_GRAY$POWERLINE_COLOR_FG_WHITE $powerline_right_a %f%k" + # RPROMPT=$POWERLINE_COLOR_FG_WHITE$POWERLINE_R_SEPARATOR"%f$POWERLINE_COLOR_BG_WHITE $POWERLINE_COLOR_FG_GRAY"'$powerline_right_b'" "$POWERLINE_R_SEPARATOR"%f%k$POWERLINE_COLOR_BG_GRAY$POWERLINE_COLOR_FG_WHITE "'$powerline_right_a'" %f%k" + RPROMPT=$POWERLINE_COLOR_FG_WHITE$POWERLINE_R_SEPARATOR"%f$POWERLINE_COLOR_BG_WHITE $POWERLINE_COLOR_FG_GRAY"'$(rvm_info_for_prompt)'" " +} + +prompt_powerline_setup "$@" + + + diff --git a/.zprezto/modules/prompt/external/pure/.editorconfig b/.zprezto/modules/prompt/external/pure/.editorconfig new file mode 100644 index 0000000..86c8f59 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[package.json] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.zprezto/modules/prompt/external/pure/.gitattributes b/.zprezto/modules/prompt/external/pure/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.zprezto/modules/prompt/external/pure/arch/PKGBUILD b/.zprezto/modules/prompt/external/pure/arch/PKGBUILD new file mode 100644 index 0000000..18cdc92 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/arch/PKGBUILD @@ -0,0 +1,26 @@ +# Author: Sindre Sorhus +# Maintainer: Pat Brisbin +# Contributor: Emil Falk +pkgname=zsh-pure-prompt-git +pkgver=r61.7d3b317 +pkgrel=1 +pkgdesc='A minimal and pure prompt for zsh.' +arch=('any') +url='https://github.com/sindresorhus/pure' +license=('MIT') +depends=('zsh' 'git') +source=("$pkgname::git://github.com/sindresorhus/pure.git") +sha256sums=('SKIP') + +pkgver() { + cd $srcdir/$pkgname + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +package() { + cd $srcdir/$pkgname + install -Dm644 pure.zsh \ + "$pkgdir/usr/share/zsh/functions/Prompts/prompt_pure_setup" + install -Dm644 async.zsh \ + "$pkgdir/usr/share/zsh/functions/async" +} diff --git a/.zprezto/modules/prompt/external/pure/async.zsh b/.zprezto/modules/prompt/external/pure/async.zsh new file mode 100644 index 0000000..0a0f1b9 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/async.zsh @@ -0,0 +1,276 @@ +#!/usr/bin/env zsh + +# +# zsh-async +# +# version: 1.0.0 +# author: Mathias Fredriksson +# url: https://github.com/mafredri/zsh-async +# + +# Wrapper for jobs executed by the async worker, gives output in parseable format with execution time +_async_job() { + # Store start time as double precision (+E disables scientific notation) + float -F duration=$EPOCHREALTIME + + # Run the command + # + # What is happening here is that we are assigning stdout, stderr and ret to + # variables, and then we are printing out the variable assignment through + # typeset -p. This way when we run eval we get something along the lines of: + # eval " + # typeset stdout=' M async.test.sh\n M async.zsh' + # typeset ret=0 + # typeset stderr='' + # " + unset stdout stderr ret + eval "$( + { + stdout=$(eval "$@") + ret=$? + typeset -p stdout ret + } 2> >(stderr=$(cat); typeset -p stderr) + )" + + # Calculate duration + duration=$(( EPOCHREALTIME - duration )) + + # stip all null-characters from stdout and stderr + stdout="${stdout//$'\0'/}" + stderr="${stderr//$'\0'/}" + + # if ret is missing for some unknown reason, set it to -1 to indicate we + # have run into a bug + ret=${ret:--1} + + # Grab mutex lock + read -ep >/dev/null + + # return output ( ) + print -r -N -n -- "$1" "$ret" "$stdout" "$duration" "$stderr"$'\0' + + # Unlock mutex + print -p "t" +} + +# The background worker manages all tasks and runs them without interfering with other processes +_async_worker() { + local -A storage + local unique=0 + + # Process option parameters passed to worker + while getopts "np:u" opt; do + case "$opt" in + # Use SIGWINCH since many others seem to cause zsh to freeze, e.g. ALRM, INFO, etc. + n) trap 'kill -WINCH $ASYNC_WORKER_PARENT_PID' CHLD;; + p) ASYNC_WORKER_PARENT_PID=$OPTARG;; + u) unique=1;; + esac + done + + # Create a mutex for writing to the terminal through coproc + coproc cat + # Insert token into coproc + print -p "t" + + while read -r cmd; do + # Separate on spaces into an array + cmd=(${=cmd}) + local job=$cmd[1] + + # Check for non-job commands sent to worker + case "$job" in + _killjobs) + kill -KILL ${${(v)jobstates##*:*:}%\=*} &>/dev/null + continue + ;; + esac + + # If worker should perform unique jobs + if ((unique)); then + # Check if a previous job is still running, if yes, let it finnish + for pid in ${${(v)jobstates##*:*:}%\=*}; do + if [[ "${storage[$job]}" == "$pid" ]]; then + continue 2 + fi + done + fi + + # run task in background + _async_job $cmd & + # store pid because zsh job manager is extremely unflexible (show jobname as non-unique '$job')... + storage[$job]=$! + done +} + +# +# Get results from finnished jobs and pass it to the to callback function. This is the only way to reliably return the +# job name, return code, output and execution time and with minimal effort. +# +# usage: +# async_process_results +# +# callback_function is called with the following parameters: +# $1 = job name, e.g. the function passed to async_job +# $2 = return code +# $3 = resulting stdout from execution +# $4 = execution time, floating point e.g. 2.05 seconds +# $5 = resulting stderr from execution +# +async_process_results() { + integer count=0 + local worker=$1 + local callback=$2 + local -a items + local IFS=$'\0' + + typeset -gA ASYNC_PROCESS_BUFFER + # Read output from zpty and parse it if available + while zpty -rt "$worker" line 2>/dev/null; do + # Remove unwanted \r from output + ASYNC_PROCESS_BUFFER[$worker]+=${line//$'\r'$'\n'/$'\n'} + # Split buffer on null characters, preserve empty elements + items=("${(@)=ASYNC_PROCESS_BUFFER[$worker]}") + # Remove last element since it's due to the return string separator structure + items=("${(@)items[1,${#items}-1]}") + + # Continue until we receive all information + (( ${#items} % 5 )) && continue + + # Work through all results + while (( ${#items} > 0 )); do + "$callback" "${(@)=items[1,5]}" + shift 5 items + count+=1 + done + + # Empty the buffer + ASYNC_PROCESS_BUFFER[$worker]="" + done + + # If we processed any results, return success + (( $count )) && return 0 + + # No results were processed + return 1 +} + +# +# Start a new asynchronous job on specified worker, assumes the worker is running. +# +# usage: +# async_job [] +# +async_job() { + local worker=$1; shift + zpty -w "$worker" "$@" +} + +# This function traps notification signals and calls all registered callbacks +_async_notify_trap() { + for k in ${(k)ASYNC_CALLBACKS}; do + async_process_results "${k}" "${ASYNC_CALLBACKS[$k]}" + done +} + +# +# Register a callback for completed jobs. As soon as a job is finnished, async_process_results will be called with the +# specified callback function. This requires that a worker is initialized with the -n (notify) option. +# +# usage: +# async_register_callback +# +async_register_callback() { + typeset -gA ASYNC_CALLBACKS + local worker=$1; shift + + ASYNC_CALLBACKS[$worker]="$*" + + trap '_async_notify_trap' WINCH +} + +# +# Unregister the callback for a specific worker. +# +# usage: +# async_unregister_callback +# +async_unregister_callback() { + typeset -gA ASYNC_CALLBACKS + + unset "ASYNC_CALLBACKS[$1]" +} + +# +# Flush all current jobs running on a worker. This will terminate any and all running processes under the worker, use +# with caution. +# +# usage: +# async_flush_jobs +# +async_flush_jobs() { + local worker=$1; shift + + # Check if the worker exists + zpty -t "$worker" &>/dev/null || return 1 + + # Send kill command to worker + zpty -w "$worker" "_killjobs" + + # Clear all output buffers + while zpty -r "$worker" line; do true; done + + # Clear any partial buffers + typeset -gA ASYNC_PROCESS_BUFFER + ASYNC_PROCESS_BUFFER[$worker]="" +} + +# +# Start a new async worker with optional parameters, a worker can be told to only run unique tasks and to notify a +# process when tasks are complete. +# +# usage: +# async_start_worker [-u] [-n] [-p ] +# +# opts: +# -u unique (only unique job names can run) +# -n notify through SIGWINCH signal +# -p pid to notify (defaults to current pid) +# +async_start_worker() { + local worker=$1; shift + zpty -t "$worker" &>/dev/null || zpty -b "$worker" _async_worker -p $$ "$@" || async_stop_worker "$worker" +} + +# +# Stop one or multiple workers that are running, all unfetched and incomplete work will be lost. +# +# usage: +# async_stop_worker [] +# +async_stop_worker() { + local ret=0 + for worker in "$@"; do + async_unregister_callback "$worker" + zpty -d "$worker" 2>/dev/null || ret=$? + done + + return $ret +} + +# +# Initialize the required modules for zsh-async. To be called before using the zsh-async library. +# +# usage: +# async_init +# +async_init() { + zmodload zsh/zpty + zmodload zsh/datetime +} + +async() { + async_init +} + +async "$@" diff --git a/.zprezto/modules/prompt/external/pure/license b/.zprezto/modules/prompt/external/pure/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.zprezto/modules/prompt/external/pure/package.json b/.zprezto/modules/prompt/external/pure/package.json new file mode 100644 index 0000000..a96668f --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/package.json @@ -0,0 +1,43 @@ +{ + "name": "pure-prompt", + "version": "1.2.0", + "description": "Pretty, minimal and fast ZSH prompt", + "license": "MIT", + "repository": "sindresorhus/pure", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "maintainers": [ + { + "name": "Mathias Fredriksson", + "url": "github.com/mafredri" + } + ], + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "postinstall": "dest=/usr/local/share/zsh/site-functions/; mkdir -p $dest && ln -sf \"$PWD/pure.zsh\" $dest/prompt_pure_setup && ln -sf \"$PWD/async.zsh\" $dest/async || echo 'Could not automagically symlink the prompt. Check out the readme on how to do it manually: https://github.com/sindresorhus/pure#manually'" + }, + "files": [ + "pure.zsh", + "async.zsh" + ], + "keywords": [ + "zsh", + "zshell", + "sh", + "shell", + "bash", + "pure", + "prompt", + "theme", + "git", + "async", + "fast", + "minimal", + "pretty" + ] +} diff --git a/.zprezto/modules/prompt/external/pure/pure.plugin.zsh b/.zprezto/modules/prompt/external/pure/pure.plugin.zsh new file mode 120000 index 0000000..f5f60e7 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/pure.plugin.zsh @@ -0,0 +1 @@ +pure.zsh \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/pure/pure.zsh b/.zprezto/modules/prompt/external/pure/pure.zsh new file mode 100644 index 0000000..b7acaee --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/pure.zsh @@ -0,0 +1,348 @@ +# Pure +# by Sindre Sorhus +# https://github.com/sindresorhus/pure +# MIT License + +# For my own and others sanity +# git: +# %b => current branch +# %a => current action (rebase/merge) +# prompt: +# %F => color dict +# %f => reset color +# %~ => current path +# %* => time +# %n => username +# %m => shortname host +# %(?..) => prompt conditional - %(condition.true.false) +# terminal codes: +# \e7 => save cursor position +# \e[2A => move cursor 2 lines up +# \e[1G => go to position 1 in terminal +# \e8 => restore cursor position +# \e[K => clears everything after the cursor on the current line +# \e[2K => clear everything on the current line + + +# turns seconds into human readable time +# 165392 => 1d 21h 56m 32s +# https://github.com/sindresorhus/pretty-time-zsh +prompt_pure_human_time_to_var() { + local human=" " total_seconds=$1 var=$2 + local days=$(( total_seconds / 60 / 60 / 24 )) + local hours=$(( total_seconds / 60 / 60 % 24 )) + local minutes=$(( total_seconds / 60 % 60 )) + local seconds=$(( total_seconds % 60 )) + (( days > 0 )) && human+="${days}d " + (( hours > 0 )) && human+="${hours}h " + (( minutes > 0 )) && human+="${minutes}m " + human+="${seconds}s" + + # store human readable time in variable as specified by caller + typeset -g "${var}"="${human}" +} + +# stores (into prompt_pure_cmd_exec_time) the exec time of the last command if set threshold was exceeded +prompt_pure_check_cmd_exec_time() { + integer elapsed + (( elapsed = EPOCHSECONDS - ${prompt_pure_cmd_timestamp:-$EPOCHSECONDS} )) + prompt_pure_cmd_exec_time= + (( elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5} )) && { + prompt_pure_human_time_to_var $elapsed "prompt_pure_cmd_exec_time" + } +} + +prompt_pure_clear_screen() { + # enable output to terminal + zle -I + # clear screen and move cursor to (0, 0) + print -n '\e[2J\e[0;0H' + # print preprompt + prompt_pure_preprompt_render precmd +} + +prompt_pure_check_git_arrows() { + # reset git arrows + prompt_pure_git_arrows= + + # check if there is an upstream configured for this branch + command git rev-parse --abbrev-ref @'{u}' &>/dev/null || return + + local arrow_status + # check git left and right arrow_status + arrow_status="$(command git rev-list --left-right --count HEAD...@'{u}' 2>/dev/null)" + # exit if the command failed + (( !$? )) || return + + # left and right are tab-separated, split on tab and store as array + arrow_status=(${(ps:\t:)arrow_status}) + local arrows left=${arrow_status[1]} right=${arrow_status[2]} + + (( ${right:-0} > 0 )) && arrows+="${PURE_GIT_DOWN_ARROW:-⇣}" + (( ${left:-0} > 0 )) && arrows+="${PURE_GIT_UP_ARROW:-⇡}" + + [[ -n $arrows ]] && prompt_pure_git_arrows=" ${arrows}" +} + +prompt_pure_set_title() { + # tell the terminal we are setting the title + print -n '\e]0;' + # show hostname if connected through ssh + [[ -n $SSH_CONNECTION ]] && print -Pn '(%m) ' + case $1 in + expand-prompt) + print -Pn $2;; + ignore-escape) + print -rn $2;; + esac + # end set title + print -n '\a' +} + +prompt_pure_preexec() { + prompt_pure_cmd_timestamp=$EPOCHSECONDS + + # shows the current dir and executed command in the title while a process is active + prompt_pure_set_title 'ignore-escape' "$PWD:t: $2" +} + +# string length ignoring ansi escapes +prompt_pure_string_length_to_var() { + local str=$1 var=$2 length + # perform expansion on str and check length + length=$(( ${#${(S%%)str//(\%([KF1]|)\{*\}|\%[Bbkf])}} )) + + # store string length in variable as specified by caller + typeset -g "${var}"="${length}" +} + +prompt_pure_preprompt_render() { + # check that no command is currently running, the preprompt will otherwise be rendered in the wrong place + [[ -n ${prompt_pure_cmd_timestamp+x} && "$1" != "precmd" ]] && return + + # set color for git branch/dirty status, change color if dirty checking has been delayed + local git_color=242 + [[ -n ${prompt_pure_git_last_dirty_check_timestamp+x} ]] && git_color=red + + # construct preprompt, beginning with path + local preprompt="%F{blue}%~%f" + # git info + preprompt+="%F{$git_color}${vcs_info_msg_0_}${prompt_pure_git_dirty}%f" + # git pull/push arrows + preprompt+="%F{cyan}${prompt_pure_git_arrows}%f" + # username and machine if applicable + preprompt+=$prompt_pure_username + # execution time + preprompt+="%F{yellow}${prompt_pure_cmd_exec_time}%f" + + # if executing through precmd, do not perform fancy terminal editing + if [[ "$1" == "precmd" ]]; then + print -P "\n${preprompt}" + else + # only redraw if preprompt has changed + [[ "${prompt_pure_last_preprompt}" != "${preprompt}" ]] || return + + # calculate length of preprompt and store it locally in preprompt_length + integer preprompt_length lines + prompt_pure_string_length_to_var "${preprompt}" "preprompt_length" + + # calculate number of preprompt lines for redraw purposes + (( lines = ( preprompt_length - 1 ) / COLUMNS + 1 )) + + # calculate previous preprompt lines to figure out how the new preprompt should behave + integer last_preprompt_length last_lines + prompt_pure_string_length_to_var "${prompt_pure_last_preprompt}" "last_preprompt_length" + (( last_lines = ( last_preprompt_length - 1 ) / COLUMNS + 1 )) + + # clr_prev_preprompt erases visual artifacts from previous preprompt + local clr_prev_preprompt + if (( last_lines > lines )); then + # move cursor up by last_lines, clear the line and move it down by one line + clr_prev_preprompt="\e[${last_lines}A\e[2K\e[1B" + while (( last_lines - lines > 1 )); do + # clear the line and move cursor down by one + clr_prev_preprompt+='\e[2K\e[1B' + (( last_lines-- )) + done + + # move cursor into correct position for preprompt update + clr_prev_preprompt+="\e[${lines}B" + # create more space for preprompt if new preprompt has more lines than last + elif (( last_lines < lines )); then + # move cursor using newlines because ansi cursor movement can't push the cursor beyond the last line + printf $'\n'%.0s {1..$(( lines - last_lines ))} + + # redraw the prompt since it has been moved by print + zle && zle .reset-prompt + fi + + # disable clearing of line if last char of preprompt is last column of terminal + local clr='\e[K' + (( COLUMNS * lines == preprompt_length )) && clr= + + # modify previous preprompt + print -Pn "\e7${clr_prev_preprompt}\e[${lines}A\e[1G${preprompt}${clr}\e8" + fi + + # store previous preprompt for comparison + prompt_pure_last_preprompt=$preprompt +} + +prompt_pure_precmd() { + # check exec time and store it in a variable + prompt_pure_check_cmd_exec_time + + # by making sure that prompt_pure_cmd_timestamp is defined here the async functions are prevented from interfering + # with the initial preprompt rendering + prompt_pure_cmd_timestamp= + + # check for git arrows + prompt_pure_check_git_arrows + + # shows the full path in the title + prompt_pure_set_title 'expand-prompt' '%~' + + # get vcs info + vcs_info + + # preform async git dirty check and fetch + prompt_pure_async_tasks + + # print the preprompt + prompt_pure_preprompt_render "precmd" + + # remove the prompt_pure_cmd_timestamp, indicating that precmd has completed + unset prompt_pure_cmd_timestamp +} + +# fastest possible way to check if repo is dirty +prompt_pure_async_git_dirty() { + local untracked_dirty=$1; shift + + # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks + cd -q "$*" + + if [[ "$untracked_dirty" == "0" ]]; then + command git diff --no-ext-diff --quiet --exit-code + else + test -z "$(command git status --porcelain --ignore-submodules -unormal)" + fi + + (( $? )) && echo "*" +} + +prompt_pure_async_git_fetch() { + # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks + cd -q "$*" + + # set GIT_TERMINAL_PROMPT=0 to disable auth prompting for git fetch (git 2.3+) + GIT_TERMINAL_PROMPT=0 command git -c gc.auto=0 fetch +} + +prompt_pure_async_tasks() { + # initialize async worker + ((!${prompt_pure_async_init:-0})) && { + async_start_worker "prompt_pure" -u -n + async_register_callback "prompt_pure" prompt_pure_async_callback + prompt_pure_async_init=1 + } + + # store working_tree without the "x" prefix + local working_tree="${vcs_info_msg_1_#x}" + + # check if the working tree changed (prompt_pure_current_working_tree is prefixed by "x") + if [[ ${prompt_pure_current_working_tree#x} != $working_tree ]]; then + # stop any running async jobs + async_flush_jobs "prompt_pure" + + # reset git preprompt variables, switching working tree + unset prompt_pure_git_dirty + unset prompt_pure_git_last_dirty_check_timestamp + + # set the new working tree and prefix with "x" to prevent the creation of a named path by AUTO_NAME_DIRS + prompt_pure_current_working_tree="x${working_tree}" + fi + + # only perform tasks inside git working tree + [[ -n $working_tree ]] || return + + # do not preform git fetch if it is disabled or working_tree == HOME + if (( ${PURE_GIT_PULL:-1} )) && [[ $working_tree != $HOME ]]; then + # tell worker to do a git fetch + async_job "prompt_pure" prompt_pure_async_git_fetch "${working_tree}" + fi + + # if dirty checking is sufficiently fast, tell worker to check it again, or wait for timeout + integer time_since_last_dirty_check=$(( EPOCHSECONDS - ${prompt_pure_git_last_dirty_check_timestamp:-0} )) + if (( time_since_last_dirty_check > ${PURE_GIT_DELAY_DIRTY_CHECK:-1800} )); then + unset prompt_pure_git_last_dirty_check_timestamp + # check check if there is anything to pull + async_job "prompt_pure" prompt_pure_async_git_dirty "${PURE_GIT_UNTRACKED_DIRTY:-1}" "${working_tree}" + fi +} + +prompt_pure_async_callback() { + local job=$1 + local output=$3 + local exec_time=$4 + + case "${job}" in + prompt_pure_async_git_dirty) + prompt_pure_git_dirty=$output + prompt_pure_preprompt_render + + # When prompt_pure_git_last_dirty_check_timestamp is set, the git info is displayed in a different color. + # To distinguish between a "fresh" and a "cached" result, the preprompt is rendered before setting this + # variable. Thus, only upon next rendering of the preprompt will the result appear in a different color. + (( $exec_time > 2 )) && prompt_pure_git_last_dirty_check_timestamp=$EPOCHSECONDS + ;; + prompt_pure_async_git_fetch) + prompt_pure_check_git_arrows + prompt_pure_preprompt_render + ;; + esac +} + +prompt_pure_setup() { + # prevent percentage showing up + # if output doesn't end with a newline + export PROMPT_EOL_MARK='' + + prompt_opts=(subst percent) + + zmodload zsh/datetime + zmodload zsh/zle + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + autoload -Uz async && async + + add-zsh-hook precmd prompt_pure_precmd + add-zsh-hook preexec prompt_pure_preexec + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:*' use-simple true + # only export two msg variables from vcs_info + zstyle ':vcs_info:*' max-exports 2 + # vcs_info_msg_0_ = ' %b' (for branch) + # vcs_info_msg_1_ = 'x%R' git top level (%R), x-prefix prevents creation of a named path (AUTO_NAME_DIRS) + zstyle ':vcs_info:git*' formats ' %b' 'x%R' + zstyle ':vcs_info:git*' actionformats ' %b|%a' 'x%R' + + # if the user has not registered a custom zle widget for clear-screen, + # override the builtin one so that the preprompt is displayed correctly when + # ^L is issued. + if [[ $widgets[clear-screen] == 'builtin' ]]; then + zle -N clear-screen prompt_pure_clear_screen + fi + + # show username@host if logged in through SSH + [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username=' %F{242}%n@%m%f' + + # show username@host if root, with username in white + [[ $UID -eq 0 ]] && prompt_pure_username=' %F{white}%n%f%F{242}@%m%f' + + # prompt turns red if the previous command didn't exit with 0 + PROMPT="%(?.%F{magenta}.%F{red})${PURE_PROMPT_SYMBOL:-❯}%f " +} + +prompt_pure_setup "$@" diff --git a/.zprezto/modules/prompt/external/pure/readme.md b/.zprezto/modules/prompt/external/pure/readme.md new file mode 100644 index 0000000..326a397 --- /dev/null +++ b/.zprezto/modules/prompt/external/pure/readme.md @@ -0,0 +1,192 @@ +# Pure + +> Pretty, minimal and fast ZSH prompt + +![](screenshot.png) + + +## Overview + +Most prompts are cluttered, ugly and slow. I wanted something visually pleasing that stayed out of my way. + +### Why? + +- Comes with the perfect prompt character. + Author went through the whole Unicode range to find it. +- Shows `git` branch and whether it's dirty (with a `*`). +- Indicates when you have unpushed/unpulled `git` commits with up/down arrows. +- Prompt character turns red if the last command didn't exit with `0`. +- Command execution time will be displayed if it exceeds the set threshold. +- Username and host only displayed when in an SSH session. +- Shows the current path in the title and the [current folder & command](screenshot-title-cmd.png) when a process is running. +- Makes an excellent starting point for your own custom prompt. + + +## Install + +Can be installed with `npm` or manually. Requires git 2.0.0+ and ZSH 5.0.0+. + +### npm + +``` +$ npm install --global pure-prompt +``` + +That's it. Skip to [Getting started](#getting-started). + +### Manually + +1. Either… + - Clone this repo + - add it as a submodule, or + - just download `pure.zsh` + +2. Symlink `pure.zsh` to somewhere in [`$fpath`](http://www.refining-linux.org/archives/46/ZSH-Gem-12-Autoloading-functions/) with the name `prompt_pure_setup`. + +3. Symlink `async.zsh` in `$fpath` with the name `async`. + +#### Example + +``` +$ ln -s "$PWD/pure.zsh" /usr/local/share/zsh/site-functions/prompt_pure_setup +$ ln -s "$PWD/async.zsh" /usr/local/share/zsh/site-functions/async +``` +*Run `echo $fpath` to see possible locations.* + +For a user-specific installation (which would not require escalated privileges), simply add a directory to `$fpath` for that user: + +```sh +# .zshenv or .zshrc +fpath=( "$HOME/.zfunctions" $fpath ) +``` + +Then install the theme there: + +```sh +$ ln -s "$PWD/pure.zsh" "$HOME/.zfunctions/prompt_pure_setup" +$ ln -s "$PWD/async.zsh" "$HOME/.zfunctions/async" +``` + + +## Getting started + +Initialize the prompt system (if not so already) and choose `pure`: + +```sh +# .zshrc +autoload -U promptinit && promptinit +prompt pure +``` + + +## Options + +### `PURE_CMD_MAX_EXEC_TIME` + +The max execution time of a process before its run time is shown when it exits. Defaults to `5` seconds. + +### `PURE_GIT_PULL` + +Set `PURE_GIT_PULL=0` to prevent Pure from checking whether the current Git remote has been updated. + +### `PURE_GIT_UNTRACKED_DIRTY` + +Set `PURE_GIT_UNTRACKED_DIRTY=0` to not include untracked files in dirtiness check. Only really useful on extremely huge repos like the WebKit repo. + +### `PURE_GIT_DELAY_DIRTY_CHECK` + +Time in seconds to delay git dirty checking for large repositories (git status takes > 2 seconds). The check is performed asynchronously, this is to save CPU. Defaults to `1800` seconds. + +### `PURE_PROMPT_SYMBOL` + +Defines the prompt symbol. The default value is `❯`. + +### `PURE_GIT_DOWN_ARROW` + +Defines the git down arrow symbol. The default value is `⇣`. + +### `PURE_GIT_UP_ARROW` + +Defines the git up arrow symbol. The default value is `⇡`. + +## Example + +```sh +# .zshrc + +autoload -U promptinit && promptinit + +# optionally define some options +PURE_CMD_MAX_EXEC_TIME=10 + +prompt pure +``` + + +## Tips + +[Tomorrow Night Eighties](https://github.com/chriskempson/tomorrow-theme) theme with the [Droid Sans Mono](http://www.google.com/webfonts/specimen/Droid+Sans+Mono) font (15pt) is a beautiful combination, as seen in the screenshot above. Just make sure you have anti-aliasing enabled in your Terminal. + +To have commands colorized as seen in the screenshot install [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting). + + +## Integration + +### [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) + +1. Remove competing theme included in oh-my-zsh `~/.oh-my-zsh/themes/pure.zsh-theme` +2. Symlink (or copy) `pure.zsh` to `~/.oh-my-zsh/custom/pure.zsh-theme` +3. Symlink (or copy) `async.zsh` to `~/.oh-my-zsh/custom/async.zsh` +4. Add `ZSH_THEME="pure"` to your `.zshrc` file. + +### [prezto](https://github.com/sorin-ionescu/prezto) + +Set `zstyle ':prezto:module:prompt' theme 'pure'` in `~/.zpreztorc`. + +### [antigen](https://github.com/zsh-users/antigen) + +Update your `.zshrc` file with the following two lines (order matters). Do not use the `antigen theme` function. + +``` +antigen bundle mafredri/zsh-async +antigen bundle sindresorhus/pure +``` + +## FAQ + +### My preprompt is missing when I clear the screen with Ctrl+L + +Pure doesn't register its custom *clear-screen* widget if it has been previously modified. If you haven't registered your own zle widget with `zle -N clear-screen custom-clear-screen` it might have been done by third-party modules. For example `zsh-syntax-highlighting` and `zsh-history-substring-search` are known to do this and they should for that reason be **the very last thing** in your `.zshrc` (as pointed out in their documentation). + +To find out the culprit that is overriding your *clear-screen* widget, you can run the following command: `zle -l | grep clear-screen`. + +### I am stuck in a shell loop in my terminal that ask me to authenticate. What should I do ? + +[This is a known issue](https://github.com/sindresorhus/pure/issues/76). +Using `git pull` when you get the username prompt should help you to break the loop by giving you a real prompt for this. **[This has been fixed in git 2.3](https://github.com/sindresorhus/pure/commit/f43ab97e1cf4a276b7a6e33eac055ee16610be15)** + +### I am seeing the error `zpty: can't open pseudo terminal: bad file descriptor`. + +[This is a known issue](https://github.com/sindresorhus/pure/issues/117). `zsh/zpty` requires either legacy bsd ptys or access to `/dev/ptmx`. Here are some known solutions. + +#### Gentoo + +``` +sudo sh -c "echo 'SANDBOX_WRITE=\"/dev/ptmx\"' > /etc/sandbox.d/10zsh" +sudo emerge -1 zsh +``` + +#### FreeBSD 10.1 + +On a default setup, running the command `kldload pty` should do the trick. If you have a custom kernel, you might need to add `device pty` to the configuration file ([example](https://github.com/nbari/freebsd/blob/58646a9c3c4aaabf6f6467ff505f27f09e29dc75/kernels/xen.kernel#L188)). + +## Team + +[![Sindre Sorhus](https://avatars.githubusercontent.com/u/170270?v=3&s=100)](http://sindresorhus.com) | [![Mathias Fredriksson](https://avatars.githubusercontent.com/u/147409?v=3&s=100)](https://github.com/mafredri) +---|--- +[Sindre Sorhus](http://sindresorhus.com) | [Mathias Fredriksson](https://github.com/mafredri) + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/.zprezto/modules/prompt/external/pure/screenshot-title-cmd.png b/.zprezto/modules/prompt/external/pure/screenshot-title-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4b77c20d712f7f3a1d651ad1f53262f5d00987 GIT binary patch literal 24844 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 Zy{=138 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 literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/external/pure/screenshot.png b/.zprezto/modules/prompt/external/pure/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7db790d26640d51a018fcb5dcf7f127976b434 GIT binary patch literal 43921 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 OUs*w2zEsX4=>GsZc4OcG literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/functions/async b/.zprezto/modules/prompt/functions/async new file mode 120000 index 0000000..d4b591e --- /dev/null +++ b/.zprezto/modules/prompt/functions/async @@ -0,0 +1 @@ +../external/pure/async.zsh \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_abra_setup b/.zprezto/modules/prompt/functions/prompt_abra_setup new file mode 100644 index 0000000..f1be474 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_abra_setup @@ -0,0 +1,53 @@ +pmodload 'helper' + +function prompt_abra_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi +} + +function prompt_abra_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_abra_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}......%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%(?:%F{green}➜%f:%F{red}➜%f)%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ':%%B%F{yellow}%s%f%%b' + zstyle ':prezto:module:git:info:added' format ' %%B%F{green}✚%f%%b' + zstyle ':prezto:module:git:info:ahead' format ' %%B%F{yellow}⬆%f%%b' + zstyle ':prezto:module:git:info:behind' format ' %%B%F{yellow}⬇%f%%b' + zstyle ':prezto:module:git:info:branch' format ':%F{green}%b%f' + zstyle ':prezto:module:git:info:commit' format ':%F{green}%.7c%f' + zstyle ':prezto:module:git:info:deleted' format ' %%B%F{red}✖%f%%b' + zstyle ':prezto:module:git:info:modified' format ' %%B%F{blue}✱%f%%b' + zstyle ':prezto:module:git:info:position' format ':%F{red}%p%f' + zstyle ':prezto:module:git:info:renamed' format ' %%B%F{magenta}➜%f%%b' + zstyle ':prezto:module:git:info:stashed' format ' %%B%F{cyan}✭%f%%b' + zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{yellow}═%f%%b' + zstyle ':prezto:module:git:info:untracked' format ' %%B%F{white}◼%f%%b' + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' ' $(coalesce "%b" "%p" "%c")%s' \ + 'rprompt' '%A%B%S%a%d%m%r%U%u' + + + PROMPT='%F{cyan}%c%f${git_info:+${(e)git_info[prompt]}}%(!. %B%F{red}#%f%b.)${editor_info[keymap]} ' + RPROMPT='%(?::%F{red}%?%f )%B%F{green}%n@%m%f%b${git_info[rprompt]} %F{blue}%*%f' +} + +prompt_abra_setup "$@" + diff --git a/.zprezto/modules/prompt/functions/prompt_agnoster_setup b/.zprezto/modules/prompt/functions/prompt_agnoster_setup new file mode 120000 index 0000000..34d8bc6 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_agnoster_setup @@ -0,0 +1 @@ +../external/agnoster/agnoster.zsh-theme \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_cloud_setup b/.zprezto/modules/prompt/functions/prompt_cloud_setup new file mode 100644 index 0000000..3b048df --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_cloud_setup @@ -0,0 +1,121 @@ +# +# A minimal two-color theme. +# +# Authors: +# Kevin Laude +# +# Features: +# - One line, left aligned. +# - The prompt is prefixed by a character sequence of your choice. +# - Only displays the current directory instead of the full path. +# - Displays the current branch when in a git project (this requires loading +# the git module before prompt in ~/.zpreztorc). +# - Displays a character at the end of the prompt when in a git project with +# "dirty" files. +# +# Usage: +# This prompt's prefix symbol and colors are customizable: +# prompt cloud [] [] [] +# +# In ~/.zpreztorc: +# zstyle ':prezto:module:prompt' theme 'cloud' \ +# [''] \ +# [''] \ +# [''] +# +# If these options are not provided, the symbol defaults to "☁" with colors +# cyan and green. +# +# Screenshots: +# http://i.imgur.com/mJCZ8rE.png +# +# Note: +# This is a port of the oh-my-zsh cloud theme, originally written by Phillip +# Ridlen and Mark Drago +# + +# Load dependencies. +pmodload 'helper' + +function prompt_cloud_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi +} + +function prompt_cloud_help { + cat <] [] [] + +In ~/.zpreztorc: + zstyle ':prezto:module:prompt' theme 'cloud' [''] [''] [''] + +If these options are not provided, the symbol defaults to ☁ with colors cyan +and green. +EOT +} + +function prompt_cloud_preview { + if (( $# > 0 )); then + prompt_preview_theme 'cloud' "$@" + else + prompt_preview_theme 'cloud' + print + prompt_preview_theme 'cloud' "✯" + print + prompt_preview_theme 'cloud' ">" "yellow" "red" + fi +} + +function prompt_cloud_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Set the theme prefix to a cloud or to the user's given characters. + if [[ -n "$1" ]]; then + prefix="$1" + else + prefix='☁' + fi + + # Assign colors. + if [[ -n "$2" ]]; then + primary_color="$2" + else + primary_color='cyan' + fi + + if [[ -n "$3" ]]; then + secondary_color="$3" + else + secondary_color='green' + fi + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_cloud_precmd + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:dirty' format "%%B%F{$secondary_color}]%f%%b %F{yellow}⚡%f" + zstyle ':prezto:module:git:info:clean' format "%B%F{$secondary_color}]%f%b" + zstyle ':prezto:module:git:info:branch' format "%%B%F{$secondary_color}[%f%%b%%B%F{$primary_color}%b%f%%b" + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' '%b%C%D' \ + 'rprompt' '' + + # Define prompts. + PROMPT='%B%F{$primary_color}${prefix}%f%b %B%F{$secondary_color}%c%f%b ${git_info:+${(e)git_info[prompt]}} ' + RPROMPT='' +} + +prompt_cloud_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_damoekri_setup b/.zprezto/modules/prompt/functions/prompt_damoekri_setup new file mode 100644 index 0000000..58c4d35 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_damoekri_setup @@ -0,0 +1,76 @@ +# +# A simple theme inspired by the Sorin and PeepCode themes. +# +# Authors: +# Daniel Møller Kristensen +# +# Screenshots: +# http://i.imgur.com/AX9HnPF.png +# + +# Load dependencies. +pmodload 'helper' + +function prompt_damoekri_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_damoekri_pwd="$MATCH" + unset MATCH + else + _prompt_damoekri_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_damoekri_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_damoekri_pwd + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_damoekri_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info and ruby-info before each command. + add-zsh-hook precmd prompt_damoekri_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:keymap:primary' format ' %F{green}»%f' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ':%F{magenta}%s%f' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:clean' format ' %F{green}✔%f' + zstyle ':prezto:module:git:info:dirty' format ' %F{red}✗%f' + zstyle ':prezto:module:git:info:commit' format '%F{blue}%.7c%f' + zstyle ':prezto:module:git:info:position' format '%F{blue}%p%f' + zstyle ':prezto:module:git:info:keys' format \ + 'rprompt' ' $(coalesce "%b" "%p" "%c")%s%C%D' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format ' %F{yellow}%v%f' + + # Define prompts. + PROMPT='%F{cyan}${_prompt_damoekri_pwd}%f${editor_info[keymap]} ' + RPROMPT='${git_info:+${(e)git_info[rprompt]}}${ruby_info:+${ruby_info[version]}}' +} + +prompt_damoekri_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_giddie_setup b/.zprezto/modules/prompt/functions/prompt_giddie_setup new file mode 100644 index 0000000..5a14ffe --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_giddie_setup @@ -0,0 +1,76 @@ +# +# A colorful, friendly, multiline theme with some handy features. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# +# Features: +# - Simple VCS branch, staged, and unstaged indication. +# - Prompt character is different in a VCS repository. +# - Last command exit status is displayed when non-zero. +# +# Screenshots: +# http://i.imgur.com/rCo3S.png +# + +function +vi-set_novcs_prompt_symbol { + _prompt_giddie_symbol=')' +} + +function +vi-set_vcs_prompt_symbol { + _prompt_giddie_symbol='±' +} + +function +vi-git_precmd { + # Check for untracked files, since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + hook_com[unstaged]+='%F{green}?%f' + fi +} + +function prompt_giddie_precmd { + # Replace '/home/' with '~'. + _prompt_giddie_pwd="${PWD/#$HOME/~}" + vcs_info +} + +function prompt_giddie_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz vcs_info + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_giddie_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%F{green}...%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%F{yellow}--- COMMAND ---%f' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' formats ' on %F{magenta}%b%f%c%u' + zstyle ':vcs_info:*' actionformats ' on %F{magenta}%b%f%c%u %F{yellow}(%a)%f' + zstyle ':vcs_info:*' stagedstr '%F{green}+%f' + zstyle ':vcs_info:*' unstagedstr '%F{green}!%f' + + # Set vcs_info hooks. + # NOTE: Prior to Zsh v4.3.12, there are no static hooks, no vcs_info_hookadd + # function, and no 'no-vcs' hook. + zstyle ':vcs_info:*+start-up:*' hooks set_novcs_prompt_symbol + zstyle ':vcs_info:git*+set-message:*' hooks set_vcs_prompt_symbol git_precmd + zstyle ':vcs_info:*+set-message:*' hooks set_vcs_prompt_symbol + + # Define prompts. + PROMPT='%(?..%F{red}%B-> [%?]%b%f +)%F{magenta}%n%f@%F{yellow}%m%f|%F{green}${_prompt_giddie_pwd}%f${vcs_info_msg_0_} +%F{blue}${_prompt_giddie_symbol}%f ' + RPROMPT='${editor_info[keymap]}' + SPROMPT='zsh: correct %F{magenta}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_giddie_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_kylewest_setup b/.zprezto/modules/prompt/functions/prompt_kylewest_setup new file mode 100644 index 0000000..e4ee0c0 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_kylewest_setup @@ -0,0 +1,65 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Kyle West +# Sorin Ionescu +# +# Features: +# - Indicates dirty Git repository. +# - Indicates the Ruby version. +# - Indicates vi modes. +# +# Screenshots: +# http://i.imgur.com/dCwhynn.png +# + +function prompt_kylewest_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_kylewest_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_kylewest_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format "%B%F{green}❯%f%b" + zstyle ':prezto:module:editor:info:keymap:alternate' format "%B%F{magenta}❮%f%b" + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:branch' format '%F{yellow}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%B%F{red}!%f%b' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:keys' format 'prompt' '- %b%D ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{blue}[%v]%f' + + # Define prompts. + PROMPT='%F{cyan}%c%f ${git_info:+${(e)git_info[prompt]}}${editor_info[keymap]} ' + RPROMPT='${ruby_info[version]}' +} + +prompt_kylewest_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_minimal_setup b/.zprezto/modules/prompt/functions/prompt_minimal_setup new file mode 100644 index 0000000..8c07e70 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_minimal_setup @@ -0,0 +1,50 @@ +# +# A monochrome theme that displays basic information. +# +# Authors: +# Brian Tse +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/zLZNK.png +# + +function +vi-git_status { + # Check for untracked files or updated submodules since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + hook_com[unstaged]='%F{red}●%f' + fi +} + +function prompt_minimal_precmd { + vcs_info +} + +function prompt_minimal_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_minimal_precmd + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' stagedstr '%F{green}●%f' + zstyle ':vcs_info:*' unstagedstr '%F{yellow}●%f' + zstyle ':vcs_info:*' formats ' - [%b%c%u]' + zstyle ':vcs_info:*' actionformats " - [%b%c%u|%F{cyan}%a%f]" + zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b|%F{cyan}%r%f' + zstyle ':vcs_info:git*+set-message:*' hooks git_status + + # Define prompts. + PROMPT='%2~${vcs_info_msg_0_} » ' + RPROMPT='' +} + +prompt_minimal_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup b/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup new file mode 100644 index 0000000..241c8b6 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup @@ -0,0 +1,60 @@ +# +# A simple theme that displays only relevant information. +# +# Authors: +# Julien Nicoulaud +# Sorin Ionescu +# +# Features: +# - One line. +# - VCS information in the right prompt. +# - Only shows the path on the left prompt by default. +# - Crops the path to a defined length and only shows the path relative to +# the current VCS repository root. +# - Uses a different color depending on if the last command succeeded/failed. +# - Shows user@hostname if connected through SSH. +# - Shows if logged in as root or not. +# +# Screenshots: +# http://i.imgur.com/Xe1bu.png +# + +function prompt_nicoulaj_precmd { + vcs_info +} + +function prompt_nicoulaj_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_nicoulaj_precmd + + # Customizable parameters. + local max_path_chars=30 + local user_char='❯' + local root_char='❯❯❯' + local success_color='%F{071}' + local failure_color='%F{124}' + local vcs_info_color='%F{242}' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '!' + zstyle ':vcs_info:*' stagedstr '+' + zstyle ':vcs_info:*' actionformats "%S" "%r/%s/%b %u%c (%a)" + zstyle ':vcs_info:*' formats "%S" "%r/%s/%b %u%c" + zstyle ':vcs_info:*' nvcsformats "%~" "" + + # Define prompts. + PROMPT="%(?.${success_color}.${failure_color})${SSH_TTY:+[%n@%m]}%B%${max_path_chars}<...<"'${vcs_info_msg_0_%%.}'"%<<%(!.${root_char}.${user_char})%b%f " + RPROMPT="${vcs_info_color}"'${vcs_info_msg_1_}'"%f" +} + +prompt_nicoulaj_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_paradox_setup b/.zprezto/modules/prompt/functions/prompt_paradox_setup new file mode 100644 index 0000000..36ae40e --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_paradox_setup @@ -0,0 +1,154 @@ +# +# A two-line, Powerline-inspired theme that displays contextual information. +# +# This theme requires a patched Powerline font, get them from +# https://github.com/Lokaltog/powerline-fonts. +# +# Authors: +# Isaac Wolkerstorfer +# Jeff Sandberg +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/0XIWX.png +# + +# Load dependencies. +pmodload 'helper' + +# Define variables. +_prompt_paradox_current_bg='NONE' +_prompt_paradox_segment_separator='' +_prompt_paradox_start_time=$SECONDS + +function prompt_paradox_start_segment { + local bg fg + [[ -n "$1" ]] && bg="%K{$1}" || bg="%k" + [[ -n "$2" ]] && fg="%F{$2}" || fg="%f" + if [[ "$_prompt_paradox_current_bg" != 'NONE' && "$1" != "$_prompt_paradox_current_bg" ]]; then + print -n " $bg%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator$fg " + else + print -n "$bg$fg " + fi + _prompt_paradox_current_bg="$1" + [[ -n "$3" ]] && print -n "$3" +} + +function prompt_paradox_end_segment { + if [[ -n "$_prompt_paradox_current_bg" ]]; then + print -n " %k%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator" + else + print -n "%k" + fi + print -n "%f" + _prompt_paradox_current_bg='' +} + +function prompt_paradox_build_prompt { + prompt_paradox_start_segment black default '%(?::%F{red}✘ )%(!:%F{yellow}⚡ :)%(1j:%F{cyan}⚙ :)%F{blue}%n%F{red}@%F{green}%m%f' + prompt_paradox_start_segment blue black '$_prompt_paradox_pwd' + + if [[ -n "$git_info" ]]; then + prompt_paradox_start_segment green black '${(e)git_info[ref]}${(e)git_info[status]}' + fi + + prompt_paradox_end_segment +} + +function prompt_paradox_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_paradox_pwd="$MATCH" + unset MATCH + else + _prompt_paradox_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_paradox_print_elapsed_time { + local end_time=$(( SECONDS - _prompt_paradox_start_time )) + local hours minutes seconds remainder + + if (( end_time >= 3600 )); then + hours=$(( end_time / 3600 )) + remainder=$(( end_time % 3600 )) + minutes=$(( remainder / 60 )) + seconds=$(( remainder % 60 )) + print -P "%B%F{red}>>> elapsed time ${hours}h${minutes}m${seconds}s%b" + elif (( end_time >= 60 )); then + minutes=$(( end_time / 60 )) + seconds=$(( end_time % 60 )) + print -P "%B%F{yellow}>>> elapsed time ${minutes}m${seconds}s%b" + elif (( end_time > 10 )); then + print -P "%B%F{green}>>> elapsed time ${end_time}s%b" + fi +} + +function prompt_paradox_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_paradox_pwd + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Calculate and print the elapsed time. + prompt_paradox_print_elapsed_time +} + +function prompt_paradox_preexec { + _prompt_paradox_start_time="$SECONDS" +} + +function prompt_paradox_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook preexec prompt_paradox_preexec + add-zsh-hook precmd prompt_paradox_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ' ⁝ %s' + zstyle ':prezto:module:git:info:added' format ' ✚' + zstyle ':prezto:module:git:info:ahead' format ' ⬆' + zstyle ':prezto:module:git:info:behind' format ' ⬇' + zstyle ':prezto:module:git:info:branch' format ' %b' + zstyle ':prezto:module:git:info:commit' format '➦ %.7c' + zstyle ':prezto:module:git:info:deleted' format ' ✖' + zstyle ':prezto:module:git:info:dirty' format ' ⁝' + zstyle ':prezto:module:git:info:modified' format ' ✱' + zstyle ':prezto:module:git:info:position' format '%p' + zstyle ':prezto:module:git:info:renamed' format ' ➙' + zstyle ':prezto:module:git:info:stashed' format ' S' + zstyle ':prezto:module:git:info:unmerged' format ' ═' + zstyle ':prezto:module:git:info:untracked' format ' ?' + zstyle ':prezto:module:git:info:keys' format \ + 'ref' '$(coalesce "%b" "%p" "%c")' \ + 'status' '%s%D%A%B%S%a%d%m%r%U%u' + + # Define prompts. + PROMPT=' +${(e)$(prompt_paradox_build_prompt)} + ${editor_info[keymap]} ' + RPROMPT='%F{blue}[%F{green}%D{%H:%M:%S}%F{blue}]%f' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_paradox_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_peepcode_setup b/.zprezto/modules/prompt/functions/prompt_peepcode_setup new file mode 100644 index 0000000..c70fb9a --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_peepcode_setup @@ -0,0 +1,85 @@ +# +# A simple theme from PeepCode. +# http://peepcode.com/blog/2012/my-command-line-prompt +# +# Authors: +# Geoffrey Grosenbach +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/LhgmW.png +# + +function prompt_peepcode_precmd { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_peepcode_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add a hook for calling info functions before each command. + add-zsh-hook precmd prompt_peepcode_precmd + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:action' format ' +%s' + zstyle ':prezto:module:git:info:branch' format ' %F{8}%b%f' + zstyle ':prezto:module:git:info:commit' format ' %F{white}%.7c%f' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:dirty' format ' %F{8}✗%f' + zstyle ':prezto:module:git:info:keys' format 'rprompt' '%b%c%s%D' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format ' %F{white}%v%f' + + # Define prompts. + PROMPT=" +%~ +%(?.%F{green}${1:-☻ }%f.%F{red}${1:-☻ }%f) " +RPROMPT='${ruby_info[version]}${git_info[rprompt]}' + +} + +function prompt_peepcode_help { + cat <] + +If this option is not provided, the symbol defaults to ☻. +EOH +} + +function prompt_peepcode_preview { + local +h PROMPT='%# ' + local +h RPROMPT='' + local +h SPROMPT='' + + if (( $# > 0 )); then + prompt_preview_theme 'peepcode' "$@" + else + prompt_preview_theme 'peepcode' + print + prompt_preview_theme 'peepcode' "❯" + print + prompt_preview_theme 'peepcode' "$" + fi +} + +prompt_peepcode_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_powerline_setup b/.zprezto/modules/prompt/functions/prompt_powerline_setup new file mode 120000 index 0000000..3715d75 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_powerline_setup @@ -0,0 +1 @@ +../external/powerline/prompt_powerline_setup \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_pure_setup b/.zprezto/modules/prompt/functions/prompt_pure_setup new file mode 120000 index 0000000..1480fcf --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_pure_setup @@ -0,0 +1 @@ +../external/pure/pure.zsh \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_skwp_setup b/.zprezto/modules/prompt/functions/prompt_skwp_setup new file mode 100644 index 0000000..1c8f0a9 --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_skwp_setup @@ -0,0 +1,75 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Steve Losh +# Bart Trojanowski +# Brian Carper +# steeef +# Sorin Ionescu +# Yan Pritzker +# +# Screenshots: +# http://i.imgur.com/gLgVp6Y.png +# + +function prompt_skwp_precmd { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_skwp_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_skwp_precmd + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + _prompt_skwp_colors=( + "%F{81}" # Turquoise + "%F{166}" # Orange + "%F{135}" # Purple + "%F{161}" # Hotpink + "%F{118}" # Limegreen + ) + else + _prompt_skwp_colors=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format "${_prompt_skwp_colors[1]}%b%f" + zstyle ':prezto:module:git:info:added' format "${_prompt_skwp_colors[5]}●%f" + zstyle ':prezto:module:git:info:deleted' format "${_prompt_skwp_colors[2]}●%f" + zstyle ':prezto:module:git:info:modified' format "${_prompt_skwp_colors[4]}●%f" + zstyle ':prezto:module:git:info:untracked' format "${_prompt_skwp_colors[3]}●%f" + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%d%a%m%u)' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '[%v]' + + # Define prompts. + PROMPT="${_prompt_skwp_colors[3]}%n%f@${_prompt_skwp_colors[2]}%m%f ${_prompt_skwp_colors[5]}%~%f "'${git_info:+${(e)git_info[prompt]}}'"$ " + RPROMPT='%F{blue}${ruby_info[version]}' +} + +prompt_skwp_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_smiley_setup b/.zprezto/modules/prompt/functions/prompt_smiley_setup new file mode 100644 index 0000000..3066a2d --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_smiley_setup @@ -0,0 +1,65 @@ +# +# A simple theme that displays: +# - Python virtual environment. +# - Git branch. +# - Git state. +# - Last command exit state (smiley/X). +# +# Authors: +# Nadav Shatz +# +# Screenshots: +# http://i.imgur.com/ijycV6n.png +# + +# Load dependencies. +pmodload 'helper' + +function prompt_smiley_precmd { + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Python environment information. + if (( $+functions[python-info] )); then + python-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_smiley_setup { + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(percent subst) + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_smiley_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '%F{yellow}[%v]%f ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{yellow}[%v]%f ' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%%B%F{red} ±%f%%b' + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%D)' + + # Define prompts. + PROMPT='$python_info[virtualenv]$ruby_info[version]${git_info:+${(e)git_info[prompt]}} %B%c%b %(?:%F{green}ツ%f:%F{red}✖%f) ' + RPROMPT='${editor_info[overwrite]}${VIM:+" %B%F{green}V%f%b"}' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_smiley_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_sorin_setup b/.zprezto/modules/prompt/functions/prompt_sorin_setup new file mode 100644 index 0000000..e339dff --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_sorin_setup @@ -0,0 +1,148 @@ +# +# A simple theme that displays relevant, contextual information. +# +# Authors: +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/nrGV6pg.png +# + +# +# 16 Terminal Colors +# -- --------------- +# 0 black +# 1 red +# 2 green +# 3 yellow +# 4 blue +# 5 magenta +# 6 cyan +# 7 white +# 8 bright black +# 9 bright red +# 10 bright green +# 11 bright yellow +# 12 bright blue +# 13 bright magenta +# 14 bright cyan +# 15 bright white +# + +# Load dependencies. +pmodload 'helper' + +function prompt_sorin_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_sorin_pwd="$MATCH" + unset MATCH + else + _prompt_sorin_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_sorin_git_info { + if (( _prompt_sorin_precmd_async_pid > 0 )); then + # Append Git status. + if [[ -s "$_prompt_sorin_precmd_async_data" ]]; then + alias typeset='typeset -g' + source "$_prompt_sorin_precmd_async_data" + RPROMPT+='${git_info:+${(e)git_info[status]}}' + unalias typeset + fi + + # Reset PID. + _prompt_sorin_precmd_async_pid=0 + + # Redisplay prompt. + zle && zle reset-prompt + fi +} + +function prompt_sorin_precmd_async { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + typeset -p git_info >! "$_prompt_sorin_precmd_async_data" + fi + + # Signal completion to parent process. + kill -WINCH $$ +} + +function prompt_sorin_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_sorin_pwd + + # Define prompts. + RPROMPT='${editor_info[overwrite]}%(?:: %F{1}⏎%f)${VIM:+" %B%F{6}V%f%b"}' + + # Kill the old process of slow commands if it is still running. + if (( _prompt_sorin_precmd_async_pid > 0 )); then + kill -KILL "$_prompt_sorin_precmd_async_pid" &>/dev/null + fi + + # Compute slow commands in the background. + trap prompt_sorin_git_info WINCH + prompt_sorin_precmd_async &! + _prompt_sorin_precmd_async_pid=$! +} + +function prompt_sorin_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + _prompt_sorin_precmd_async_pid=0 + _prompt_sorin_precmd_async_data="${TMPPREFIX}-prompt_sorin_data" + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_sorin_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b' + zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b' + zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b' + zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b' + zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b' + zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b' + zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b' + zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b' + zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b' + zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b' + zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b' + zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b' + zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b' + zstyle ':prezto:module:git:info:keys' format \ + 'status' '$(coalesce "%b" "%p" "%c")%s%A%B%S%a%d%m%r%U%u' + + # Define prompts. + PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} ' + RPROMPT='' + SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? ' +} + +function prompt_sorin_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2>/dev/null + prompt_preview_theme 'sorin' +} + +prompt_sorin_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_steeef_setup b/.zprezto/modules/prompt/functions/prompt_steeef_setup new file mode 100644 index 0000000..996331f --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_steeef_setup @@ -0,0 +1,94 @@ +# +# A theme based on Steve Losh's Extravagant Prompt with vcs_info integration. +# +# Authors: +# Steve Losh +# Bart Trojanowski +# Brian Carper +# steeef +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/HyRvv.png +# + +function prompt_steeef_precmd { + # Check for untracked files or updated submodules since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c${_prompt_steeef_colors[4]}●%f)" + else + branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c)" + fi + + zstyle ':vcs_info:*:prompt:*' formats "${branch_format}" + + vcs_info 'prompt' + + if (( $+functions[python-info] )); then + python-info + fi +} + +function prompt_steeef_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_steeef_precmd + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + _prompt_steeef_colors=( + "%F{81}" # Turquoise + "%F{166}" # Orange + "%F{135}" # Purple + "%F{161}" # Hotpink + "%F{118}" # Limegreen + ) + else + _prompt_steeef_colors=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Formats: + # %b - branchname + # %u - unstagedstr (see below) + # %c - stagedstr (see below) + # %a - action (e.g. rebase-i) + # %R - repository path + # %S - path in the repository + local branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c)" + local action_format="(${_prompt_steeef_colors[5]}%a%f)" + local unstaged_format="${_prompt_steeef_colors[2]}●%f" + local staged_format="${_prompt_steeef_colors[5]}●%f" + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*:prompt:*' check-for-changes true + zstyle ':vcs_info:*:prompt:*' unstagedstr "${unstaged_format}" + zstyle ':vcs_info:*:prompt:*' stagedstr "${staged_format}" + zstyle ':vcs_info:*:prompt:*' actionformats "${branch_format}${action_format}" + zstyle ':vcs_info:*:prompt:*' formats "${branch_format}" + zstyle ':vcs_info:*:prompt:*' nvcsformats "" + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '(%v)' + + # Define prompts. + PROMPT=" +${_prompt_steeef_colors[3]}%n%f at ${_prompt_steeef_colors[2]}%m%f in ${_prompt_steeef_colors[5]}%~%f "'${vcs_info_msg_0_}'" +"'$python_info[virtualenv]'"$ " + RPROMPT='' +} + +prompt_steeef_setup "$@" diff --git a/.zprezto/modules/prompt/init.zsh b/.zprezto/modules/prompt/init.zsh new file mode 100644 index 0000000..0ec007c --- /dev/null +++ b/.zprezto/modules/prompt/init.zsh @@ -0,0 +1,18 @@ +# +# Loads prompt themes. +# +# Authors: +# Sorin Ionescu +# + +# Load and execute the prompt theming system. +autoload -Uz promptinit && promptinit + +# Load the prompt theme. +zstyle -a ':prezto:module:prompt' theme 'prompt_argv' +if [[ "$TERM" == (dumb|linux|*bsd*) ]] || (( $#prompt_argv < 1 )); then + prompt 'off' +else + prompt "$prompt_argv[@]" +fi +unset prompt_argv diff --git a/.zprezto/modules/python/README.md b/.zprezto/modules/python/README.md new file mode 100644 index 0000000..d9497d6 --- /dev/null +++ b/.zprezto/modules/python/README.md @@ -0,0 +1,99 @@ +Python +====== + +Enables local Python and local Python package installation. + +Local Python Installation +------------------------- + +[pyenv][4] builds and installs multiple Python versions locally in the home +directory. + +This module prepends the pyenv directory to the path variable to enable the +execution of `pyenv`. + +### Usage + +Install Python versions with `pyenv install` into *~/.pyenv/versions*. + +Local Package Installation +-------------------------- + +Since version 2.6, Python supports per user package installation, as defined in +[PEP 370][1]. + +This module prepends per user site directories to the relevant path variables +to enable the execution of user installed scripts and the reading of +documentation. + +### Usage + +Install packages into the per user site directory with `easy_install --user` or +`pip install --user`. + +virtualenvwrapper +----------------- + +[virtualenvwrapper][2] is a frontend to the popular [virtualenv][3] utility. + +virtualenv creates isolated Python environments and virtualenvwrapper provides +convenient shell functions to create, switch, and manage them. + +### Usage + +Install virtualenvwrapper. + +Virtual environments are stored in *~/.virtualenvs*. + +There are configuration variables that have to be set to enable certain features. +If you wish to use these features, export the variables in *~/.zshenv* + +The variable `$PROJECT_HOME` tells virtualenvwrapper where to place project +working directories. It must be set and the directory created before `mkproject` +is used. Replace *Developer* with your projects directory. + + export PROJECT_HOME="$HOME/Developer" + +The variable `$VIRTUALENVWRAPPER_VIRTUALENV_ARGS` tells virtualenvwrapper what +arguments to pass to `virtualenv`. For example, set the value to +*--no-site-packages* to ensure that all new environments are isolated from the +system site-packages directory. + + export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' + +Aliases +------- + + - `py` is short for `python`. + +Functions +--------- + + - `python-info` exposes information about the Python environment via the + `$python_info` associative array. + +Theming +------- + +To display the name of the current virtual enviroment in a prompt, define the +following style in the `prompt_name_setup` function. + + # %v - virtualenv name. + zstyle ':prezto:module:python:info:virtualenv' format 'virtualenv:%v' + +Then add `$python_info[virtualenv]` to `$PROMPT` or `$RPROMPT` and call +`python-info` in the `prompt_name_preexec` hook function. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][5].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: http://www.python.org/dev/peps/pep-0370/ +[2]: http://www.doughellmann.com/projects/virtualenvwrapper/ +[3]: http://pypi.python.org/pypi/virtualenv +[4]: https://github.com/yyuu/pyenv +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/python/functions/python-info b/.zprezto/modules/python/functions/python-info new file mode 100644 index 0000000..6a8c758 --- /dev/null +++ b/.zprezto/modules/python/functions/python-info @@ -0,0 +1,21 @@ +# +# Exposes information about the Python environment via the $python_info +# associative array. +# +# Authors: +# Sorin Ionescu +# + +local virtualenv_format +local virtualenv_formatted + +# Clean up previous $python_info. +unset python_info +typeset -gA python_info + +# Format virtualenv. +if [[ -n "$VIRTUAL_ENV" ]]; then + zstyle -s ':prezto:module:python:info:virtualenv' format 'virtualenv_format' + zformat -f virtualenv_formatted "$virtualenv_format" "v:${VIRTUAL_ENV:t}" + python_info[virtualenv]="$virtualenv_formatted" +fi diff --git a/.zprezto/modules/python/init.zsh b/.zprezto/modules/python/init.zsh new file mode 100644 index 0000000..da78ea7 --- /dev/null +++ b/.zprezto/modules/python/init.zsh @@ -0,0 +1,52 @@ +# +# Enables local Python package installation. +# +# Authors: +# Sorin Ionescu +# Sebastian Wiesner +# + +# Load manually installed pyenv into the shell session. +if [[ -s "$HOME/.pyenv/bin/pyenv" ]]; then + path=("$HOME/.pyenv/bin" $path) + eval "$(pyenv init -)" + +# Load package manager installed pyenv into the shell session. +elif (( $+commands[pyenv] )); then + eval "$(pyenv init -)" + +# Prepend PEP 370 per user site packages directory, which defaults to +# ~/Library/Python on Mac OS X and ~/.local elsewhere, to PATH. The +# path can be overridden using PYTHONUSERBASE. +else + if [[ -n "$PYTHONUSERBASE" ]]; then + path=($PYTHONUSERBASE/bin $path) + elif [[ "$OSTYPE" == darwin* ]]; then + path=($HOME/Library/Python/*/bin(N) $path) + else + # This is subject to change. + path=($HOME/.local/bin $path) + fi +fi + +# Return if requirements are not found. +if (( ! $+commands[python] && ! $+commands[pyenv] )); then + return 1 +fi + +# Load virtualenvwrapper into the shell session. +if (( $+commands[virtualenvwrapper.sh] )); then + # Set the directory where virtual environments are stored. + export WORKON_HOME="$HOME/.virtualenvs" + + # Disable the virtualenv prompt. + VIRTUAL_ENV_DISABLE_PROMPT=1 + + source "$commands[virtualenvwrapper.sh]" +fi + +# +# Aliases +# + +alias py='python' diff --git a/.zprezto/modules/rails/README.md b/.zprezto/modules/rails/README.md new file mode 100644 index 0000000..19bea1d --- /dev/null +++ b/.zprezto/modules/rails/README.md @@ -0,0 +1,34 @@ +Ruby on Rails +============= + +Defines [Ruby on Rails][1] aliases. + +Aliases +------- + + - `ror` is short for `rails`. + - `rorc` starts the Rails console. + - `rordc` starts the Rails console connected to the database. + - `rordm` migrates the database. + - `rordM` migrates the database and recreates the test database. + - `rordr` rolls the database schema back to the previous version. + - `rorg` generates new code. + - `rorl` displays the log. + - `rorlc` truncates logs to zero bytes. + - `rorp` installs a plugin. + - `rorr` runs code in the application environment. + - `rors` starts the Rails server. + - `rorsd` starts the Rails server with the debugger. + - `rorx` destroys newly generated code. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Robby Russell](https://github.com/robbyrussell) + - [Jake Bell](https://github.com/theunraveler) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://rubyonrails.org +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/rails/init.zsh b/.zprezto/modules/rails/init.zsh new file mode 100644 index 0000000..44b53e9 --- /dev/null +++ b/.zprezto/modules/rails/init.zsh @@ -0,0 +1,35 @@ +# +# Defines Ruby on Rails aliases. +# +# Authors: +# Robby Russell +# Jake Bell +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'ruby' + +# Return if requirements are not found. +if (( ! $+commands[bundle] )); then + return 1 +fi + +# +# Aliases +# + +alias ror='bundle exec rails' +alias rorc='bundle exec rails console' +alias rordc='bundle exec rails dbconsole' +alias rordm='bundle exec rake db:migrate' +alias rordM='bundle exec rake db:migrate db:test:clone' +alias rordr='bundle exec rake db:rollback' +alias rorg='bundle exec rails generate' +alias rorl='tail -f "$(ruby-app-root)/log/development.log"' +alias rorlc='bundle exec rake log:clear' +alias rorp='bundle exec rails plugin' +alias rorr='bundle exec rails runner' +alias rors='bundle exec rails server' +alias rorsd='bundle exec rails server --debugger' +alias rorx='bundle exec rails destroy' diff --git a/.zprezto/modules/rsync/README.md b/.zprezto/modules/rsync/README.md new file mode 100644 index 0000000..951e3c6 --- /dev/null +++ b/.zprezto/modules/rsync/README.md @@ -0,0 +1,27 @@ +Rsync +===== + +Defines [rsync][1] aliases. + +Mac OS X users are encouraged to use [Bombich's rsync][2], which has HFS+ +enhancements. + +Aliases +------- + + - `rsync-copy` copies files and directories from *source* to *destination*. + - `rsync-move` moves files and directories from *source* to *destination*. + - `rsync-update` updates files and directories on *destination*. + - `rsync-synchronize` synchronizes files and directories between *source* and + *destination*. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://rsync.samba.org +[2]: http://help.bombich.com/kb/overview/credits#opensource +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/rsync/init.zsh b/.zprezto/modules/rsync/init.zsh new file mode 100644 index 0000000..3afebdb --- /dev/null +++ b/.zprezto/modules/rsync/init.zsh @@ -0,0 +1,34 @@ +# +# Defines Rsync aliases. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[rsync] )); then + return 1 +fi + +# +# Aliases +# + +_rsync_cmd='rsync --verbose --progress --human-readable --compress --archive --hard-links --one-file-system' + +if grep -q 'xattrs' <(rsync --help 2>&1); then + _rsync_cmd="${_rsync_cmd} --acls --xattrs" +fi + +# Mac OS X and HFS+ Enhancements +# http://help.bombich.com/kb/overview/credits#opensource +if [[ "$OSTYPE" == darwin* ]] && grep -q 'file-flags' <(rsync --help 2>&1); then + _rsync_cmd="${_rsync_cmd} --crtimes --fileflags --protect-decmpfs --force-change" +fi + +alias rsync-copy="${_rsync_cmd}" +alias rsync-move="${_rsync_cmd} --remove-source-files" +alias rsync-update="${_rsync_cmd} --update" +alias rsync-synchronize="${_rsync_cmd} --update --delete" + +unset _rsync_cmd diff --git a/.zprezto/modules/ruby/README.md b/.zprezto/modules/ruby/README.md new file mode 100644 index 0000000..1c955f5 --- /dev/null +++ b/.zprezto/modules/ruby/README.md @@ -0,0 +1,108 @@ +Ruby +==== + +Configures [Ruby][1] local gem installation, loads version managers, and defines +aliases. + +Local Gem Installation +---------------------- + +When a Ruby version manager is not detected, local gems are installed in +*~/.gems*; otherwise, they are installed according to the manager. + +RVM +--- + +An alternative to the above is to use [The Ruby Version Manager (RVM)][2], which +allows for managing multiple, isolated Ruby installations and gem sets in the +home directory. + +Since RVM is loaded into the shell and is known to override shell commands, it +may conflict with shell scripts. + +Load this module as late as possible when using RVM since RVM will complain if +it is not first in `$PATH`. + +rbenv +----- + +An alternative RVM is to use [rbenv][3], which allows for switching between +multiple, isolated Ruby installations in the home directory. + +While it is not as feature rich as RVM, it is not loaded into the shell and is +not known to cause conflicts with shell scripts. + +chruby +------ + +Yet another alternative is [chruby][6], which is simpler than both RVM and +rbenv. + +### Settings + +#### Auto-Switch + +To enable auto switching the Ruby version on directory change based on the +.ruby-version file, add the following line to *zpreztorc*: + + zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' + +Bundler +------- + +Manage gems that are not meant to be used as commands, such as application +dependencies, with [Bundler][4]. + +Aliases +------- + +### General + + - `rb` is short for `ruby`. + +### Bundler + + - `rbb` manages ruby dependencies (`bundle`). + - `rbbe` executes a script in the context of the current bundle. + - `rbbi` installs the gems specified in the *Gemfile* in *vendor/bundle*. + - `rbbI` installs the following: + - gems specified in the *Gemfile* in *vendor/bundle*. + - packages the gems into *vendor/cache*. + - appends bundler directories to *.gitignore*. + - `rbbl` lists all gems in the current bundle. + - `rbbo` opens an installed gem in the editor. + - `rbbp` packages gem files into *vendor/cache*. + - `rbbu` updates gems to their latest version. + +Functions +--------- + + - `ruby-app-root` displays the path to the Ruby application root directory. + - `ruby-info` exposes information about the Ruby environment via the + `$ruby_info` associative array. + +Theming +------- + +To display the name of the current Ruby version in a prompt, define the +following style in the `prompt_name_setup` function. + + # %v - ruby version. + zstyle ':prezto:module:ruby:info:version' format 'version:%v' + +Then add `$ruby_info[version]` to `$PROMPT` or `$RPROMPT` and call +`ruby-info` in the `prompt_name_preexec` hook function. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][5].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.ruby-lang.org +[2]: https://rvm.io +[3]: https://github.com/sstephenson/rbenv +[4]: http://gembundler.com +[5]: https://github.com/sorin-ionescu/prezto/issues +[6]: https://github.com/postmodern/chruby diff --git a/.zprezto/modules/ruby/functions/ruby-app-root b/.zprezto/modules/ruby/functions/ruby-app-root new file mode 100644 index 0000000..ea35be6 --- /dev/null +++ b/.zprezto/modules/ruby/functions/ruby-app-root @@ -0,0 +1,18 @@ +# +# Displays the path to the Ruby application root directory. +# +# Authors: +# Sorin Ionescu +# + +local root_dir="$PWD" + +while [[ "$root_dir" != '/' ]]; do + if [[ -f "$root_dir/Gemfile" ]]; then + print "$root_dir" + break + fi + root_dir="$root_dir:h" +done + +return 1 diff --git a/.zprezto/modules/ruby/functions/ruby-info b/.zprezto/modules/ruby/functions/ruby-info new file mode 100644 index 0000000..ebf0f7f --- /dev/null +++ b/.zprezto/modules/ruby/functions/ruby-info @@ -0,0 +1,30 @@ +# +# Exposes information about the Ruby environment via the $ruby_info associative +# array. +# +# Authors: +# Sorin Ionescu +# + +local version +local version_format +local version_formatted + +# Clean up previous $ruby_info. +unset ruby_info +typeset -gA ruby_info + +if (( $+commands[rvm-prompt] )); then + version="$(rvm-prompt)" +elif (( $+commands[rbenv] )); then + version="$(rbenv version-name)" +elif (( $+commands[ruby] )); then + version="${${$(ruby --version)[(w)1,(w)2]}/ /-}" +fi + +# Format version. +if [[ -n "$version" ]]; then + zstyle -s ':prezto:module:ruby:info:version' format 'version_format' + zformat -f version_formatted "$version_format" "v:$version" + ruby_info[version]="$version_formatted" +fi diff --git a/.zprezto/modules/ruby/init.zsh b/.zprezto/modules/ruby/init.zsh new file mode 100644 index 0000000..fd707d0 --- /dev/null +++ b/.zprezto/modules/ruby/init.zsh @@ -0,0 +1,68 @@ +# +# Configures Ruby local gem installation, loads version managers, and defines +# aliases. +# +# Authors: Sorin Ionescu +# + +# Load RVM into the shell session. +if [[ -s "$HOME/.rvm/scripts/rvm" ]]; then + # Unset AUTO_NAME_DIRS since auto adding variable-stored paths to ~ list + # conflicts with RVM. + unsetopt AUTO_NAME_DIRS + + # Source RVM. + source "$HOME/.rvm/scripts/rvm" + +# Load manually installed rbenv into the shell session. +elif [[ -s "$HOME/.rbenv/bin/rbenv" ]]; then + path=("$HOME/.rbenv/bin" $path) + eval "$(rbenv init - --no-rehash zsh)" + +# Load package manager installed rbenv into the shell session. +elif (( $+commands[rbenv] )); then + eval "$(rbenv init - --no-rehash zsh)" + +# Load package manager installed chruby into the shell session. +elif (( $+commands[chruby-exec] )); then + source "${commands[chruby-exec]:h:h}/share/chruby/chruby.sh" + if zstyle -t ':prezto:module:ruby:chruby' auto-switch; then + source "${commands[chruby-exec]:h:h}/share/chruby/auto.sh" + + # If a default Ruby is set, switch to it. + chruby_auto + fi + +# Prepend local gems bin directories to PATH. +else + path=($HOME/.gem/ruby/*/bin(N) $path) +fi + +# Return if requirements are not found. +if (( ! $+commands[ruby] && ! ( $+commands[rvm] || $+commands[rbenv] ) )); then + return 1 +fi + +# +# Aliases +# + +# General +alias rb='ruby' + +# Bundler +if (( $+commands[bundle] )); then + alias rbb='bundle' + alias rbbe='bundle exec' + alias rbbi='bundle install --path vendor/bundle' + alias rbbl='bundle list' + alias rbbo='bundle open' + alias rbbp='bundle package' + alias rbbu='bundle update' + alias rbbI='rbbi \ + && bundle package \ + && print .bundle >>! .gitignore \ + && print vendor/assets >>! .gitignore \ + && print vendor/bundle >>! .gitignore \ + && print vendor/cache >>! .gitignore' +fi diff --git a/.zprezto/modules/screen/README.md b/.zprezto/modules/screen/README.md new file mode 100644 index 0000000..ef96404 --- /dev/null +++ b/.zprezto/modules/screen/README.md @@ -0,0 +1,40 @@ +GNU Screen +========== + +Defines [GNU Screen][1] aliases and provides for auto launching it at start-up. + +Settings +-------- + +### Auto-Start + +Starts a GNU Screen session automatically when Zsh is launched. + +To enable this feature when launching Zsh in a local terminal, add the +following line to *zpreztorc*: + + zstyle ':prezto:module:screen:auto-start' local 'yes' + +To enable this feature when launching Zsh in a SSH connection, add the +following line to *zpreztorc*: + + zstyle ':prezto:module:screen:auto-start' remote 'yes' + +Aliases +------- + + - `scr` is short for `screen`. + - `scrl` lists sessions/socket directory. + - `scrn` starts a new session. + - `scrr` attaches to a session if one exists or start a new one. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Georges Discry](https://github.com/gdiscry) + +[1]: http://www.gnu.org/software/screen/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/screen/init.zsh b/.zprezto/modules/screen/init.zsh new file mode 100644 index 0000000..0dee1c9 --- /dev/null +++ b/.zprezto/modules/screen/init.zsh @@ -0,0 +1,42 @@ +# +# Defines GNU Screen aliases and provides for auto launching it at start-up. +# +# Authors: +# Sorin Ionescu +# Georges Discry +# + +# Return if requirements are not found. +if (( ! $+commands[screen] )); then + return 1 +fi + +# +# Auto Start +# + +if [[ -z "$STY" && -z "$EMACS" && -z "$VIM" ]] && ( \ + ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:screen:auto-start' remote ) || + ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:screen:auto-start' local ) \ +); then + session="$( + screen -list 2> /dev/null \ + | sed '1d;$d' \ + | awk '{print $1}' \ + | head -1)" + + if [[ -n "$session" ]]; then + exec screen -x "$session" + else + exec screen -a -A -U -D -R -m "$SHELL" -l + fi +fi + +# +# Aliases +# + +alias scr='screen' +alias scrl='screen -list' +alias scrn='screen -U -S' +alias scrr='screen -a -A -U -D -R' diff --git a/.zprezto/modules/spectrum/README.md b/.zprezto/modules/spectrum/README.md new file mode 100644 index 0000000..66abcb2 --- /dev/null +++ b/.zprezto/modules/spectrum/README.md @@ -0,0 +1,91 @@ +Spectrum +======== + +Provides for easier use of 256 colors and effects. + +To learn more about text formatting, read [A Guide to 256 Color Codes][1]. + +Variables +--------- + + - `BG` provides background colors. + - `FG` provides foreground colors. + - `FX` provides effects. + +### Background and Foreground + +Terminals support 8, 16, 88, and 256 colors. Check if a terminal supports 256 +colors with `tput colors` before use. + +The following colors are supported. + +- 0 to 255 +- black +- red +- green +- yellow +- blue +- magenta +- cyan +- white + +### Effects + +Though there are many effects, most terminals support at least bold formatting. + +**Not all effects work on all terminals; use them sparingly.** + +| Enable | Disable | +| ------------------------- | ---------------------------- | +| | none | +| | normal | +| bold | no-bold | +| faint | no-faint | +| standout | no-standout | +| underline | no-underline | +| blink | no-blink | +| fast-blink | no-fast-blink | +| reverse | no-reverse | +| conceal | no-conceal | +| strikethrough | no-strikethrough | +| gothic | no-gothic | +| double-underline | no-double-underline | +| proportional | no-proportional | +| overline | no-overline | +| | | +| | no-border | +| border-rectangle | no-border-rectangle | +| border-circle | no-border-circle | +| | | +| | no-ideogram-marking | +| underline-or-right | no-underline-or-right | +| double-underline-or-right | no-double-underline-or-right | +| overline-or-left | no-overline-or-left | +| double-overline-or-left | no-double-overline-or-left | +| stress | no-stress | +| | | +| | font-default | +| font-first | no-font-first | +| font-second | no-font-second | +| font-third | no-font-third | +| font-fourth | no-font-fourth | +| font-fifth | no-font-fifth | +| font-sixth | no-font-sixth | +| font-seventh | no-font-seventh | +| font-eigth | no-font-eigth | +| font-ninth | no-font-ninth | + +### Plain Text + +Use `$BG[none]`, `$FG[none]`, or `$FX[none]` to turn off formatting. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [P.C. Shyamshankar](https://github.com/sykora) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://lucentbeing.com/writing/archives/a-guide-to-256-color-codes/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/spectrum/init.zsh b/.zprezto/modules/spectrum/init.zsh new file mode 100644 index 0000000..61e2262 --- /dev/null +++ b/.zprezto/modules/spectrum/init.zsh @@ -0,0 +1,69 @@ +# +# Provides for easier use of 256 colors and effects. +# +# Authors: +# P.C. Shyamshankar +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$TERM" == 'dumb' ]]; then + return 1 +fi + +typeset -gA FX FG BG + +FX=( + none "\e[00m" + normal "\e[22m" + bold "\e[01m" no-bold "\e[22m" + faint "\e[02m" no-faint "\e[22m" + standout "\e[03m" no-standout "\e[23m" + underline "\e[04m" no-underline "\e[24m" + blink "\e[05m" no-blink "\e[25m" + fast-blink "\e[06m" no-fast-blink "\e[25m" + reverse "\e[07m" no-reverse "\e[27m" + conceal "\e[08m" no-conceal "\e[28m" + strikethrough "\e[09m" no-strikethrough "\e[29m" + gothic "\e[20m" no-gothic "\e[22m" + double-underline "\e[21m" no-double-underline "\e[22m" + proportional "\e[26m" no-proportional "\e[50m" + overline "\e[53m" no-overline "\e[55m" + + no-border "\e[54m" + border-rectangle "\e[51m" no-border-rectangle "\e[54m" + border-circle "\e[52m" no-border-circle "\e[54m" + + no-ideogram-marking "\e[65m" + underline-or-right "\e[60m" no-underline-or-right "\e[65m" + double-underline-or-right "\e[61m" no-double-underline-or-right "\e[65m" + overline-or-left "\e[62m" no-overline-or-left "\e[65m" + double-overline-or-left "\e[63m" no-double-overline-or-left "\e[65m" + stress "\e[64m" no-stress "\e[65m" + + font-default "\e[10m" + font-first "\e[11m" no-font-first "\e[10m" + font-second "\e[12m" no-font-second "\e[10m" + font-third "\e[13m" no-font-third "\e[10m" + font-fourth "\e[14m" no-font-fourth "\e[10m" + font-fifth "\e[15m" no-font-fifth "\e[10m" + font-sixth "\e[16m" no-font-sixth "\e[10m" + font-seventh "\e[17m" no-font-seventh "\e[10m" + font-eigth "\e[18m" no-font-eigth "\e[10m" + font-ninth "\e[19m" no-font-ninth "\e[10m" +) + +FG[none]="$FX[none]" +BG[none]="$FX[none]" +colors=(black red green yellow blue magenta cyan white) +for color in {0..255}; do + if (( $color >= 0 )) && (( $color < $#colors )); then + index=$(( $color + 1 )) + FG[$colors[$index]]="\e[38;5;${color}m" + BG[$colors[$index]]="\e[48;5;${color}m" + fi + + FG[$color]="\e[38;5;${color}m" + BG[$color]="\e[48;5;${color}m" +done +unset color{s,} index diff --git a/.zprezto/modules/ssh/README.md b/.zprezto/modules/ssh/README.md new file mode 100644 index 0000000..7324ae9 --- /dev/null +++ b/.zprezto/modules/ssh/README.md @@ -0,0 +1,28 @@ +SSH +=== + +Provides for an easier use of [SSH][1] by setting up [ssh-agent][2]. + +This module is disabled on Mac OS X due to custom Apple SSH support rendering it +unnecessary. Use `ssh-add -K` to store identities in Keychain; they will be +added to `ssh-agent` automatically and persist between reboots. + +Settings +-------- + +### Identities + +To load multiple identities, add the following line to *zpreztorc*: + + zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_dsa' 'id_github' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.openssh.com +[2]: http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent&sektion=1 +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/ssh/init.zsh b/.zprezto/modules/ssh/init.zsh new file mode 100644 index 0000000..efc45b5 --- /dev/null +++ b/.zprezto/modules/ssh/init.zsh @@ -0,0 +1,52 @@ +# +# Provides for an easier use of SSH by setting up ssh-agent. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$OSTYPE" == darwin* ]] || (( ! $+commands[ssh-agent] )); then + return 1 +fi + +# Set the path to the SSH directory. +_ssh_dir="$HOME/.ssh" + +# Set the path to the environment file if not set by another module. +_ssh_agent_env="${_ssh_agent_env:-${TMPDIR:-/tmp}/ssh-agent.env}" + +# Set the path to the persistent authentication socket. +_ssh_agent_sock="${TMPDIR:-/tmp}/ssh-agent.sock" + +# Start ssh-agent if not started. +if [[ ! -S "$SSH_AUTH_SOCK" ]]; then + # Export environment variables. + source "$_ssh_agent_env" 2> /dev/null + + # Start ssh-agent if not started. + if [[ -z $SSH_CLIENT ]]; then + if ! ps -U "$LOGNAME" -o pid,ucomm | grep -q -- "${SSH_AGENT_PID:--1} ssh-agent"; then + eval "$(ssh-agent | sed '/^echo /d' | tee "$_ssh_agent_env")" + fi + fi +fi + +# Create a persistent SSH authentication socket. +if [[ -S "$SSH_AUTH_SOCK" && "$SSH_AUTH_SOCK" != "$_ssh_agent_sock" ]]; then + ln -sf "$SSH_AUTH_SOCK" "$_ssh_agent_sock" + export SSH_AUTH_SOCK="$_ssh_agent_sock" +fi + +# Load identities. +if ssh-add -l 2>&1 | grep -q 'The agent has no identities'; then + zstyle -a ':prezto:module:ssh:load' identities '_ssh_identities' + if (( ${#_ssh_identities} > 0 )); then + ssh-add "$_ssh_dir/${^_ssh_identities[@]}" 2> /dev/null + else + ssh-add 2> /dev/null + fi +fi + +# Clean up. +unset _ssh_{dir,identities} _ssh_agent_{env,sock} diff --git a/.zprezto/modules/syntax-highlighting/README.md b/.zprezto/modules/syntax-highlighting/README.md new file mode 100644 index 0000000..87f85be --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/README.md @@ -0,0 +1,62 @@ +Syntax Highlighting +=================== + +Integrates [zsh-syntax-highlighting][1] into Prezto. + +This module should be loaded *second to last*, where last is the *prompt* +module, unless used in conjuncture with the *history-substring-search* module +where it must be loaded **before** it. + +Contributors +------------ + +New features and bug fixes should be submitted to the +[zsh-syntax-highlighting][1] project according to its rules and regulations. +This module will be synchronized against it. + +Settings +-------- + +### Highlighting + +To enable highlighting for this module only, add the following line to +*zpreztorc*: + + zstyle ':prezto:module:syntax-highlighting' color 'yes' + +### Highlighters + +Syntax highlighting is accomplished by pluggable [highlighters][2]. This module +only enables the *main* highlighter by default. + +To enable all highlighters, add the following to *zpreztorc*: + + zstyle ':prezto:module:syntax-highlighting' highlighters \ + 'main' \ + 'brackets' \ + 'pattern' \ + 'cursor' \ + 'root' + +### Highlighting Styles + +Each syntax highlighter defines styles used to highlight tokens. + +To highlight, for example, builtins, commands, and functions in blue instead of +green, add the following to *zpreztorc*: + + zstyle ':prezto:module:syntax-highlighting' styles \ + 'builtin' 'bg=blue' \ + 'command' 'bg=blue' \ + 'function' 'bg=blue' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-syntax-highlighting +[2]: https://github.com/zsh-users/zsh-syntax-highlighting/tree/master/highlighters +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/syntax-highlighting/external/.gitattributes b/.zprezto/modules/syntax-highlighting/external/.gitattributes new file mode 100644 index 0000000..715e624 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/.gitattributes @@ -0,0 +1 @@ +.revision-hash export-subst diff --git a/.zprezto/modules/syntax-highlighting/external/.gitignore b/.zprezto/modules/syntax-highlighting/external/.gitignore new file mode 100644 index 0000000..fb2e708 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/.gitignore @@ -0,0 +1,2 @@ +*.zwc* +.pc/ diff --git a/.zprezto/modules/syntax-highlighting/external/.revision-hash b/.zprezto/modules/syntax-highlighting/external/.revision-hash new file mode 100644 index 0000000..6828f88 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/.revision-hash @@ -0,0 +1 @@ +$Format:%H$ diff --git a/.zprezto/modules/syntax-highlighting/external/.version b/.zprezto/modules/syntax-highlighting/external/.version new file mode 100644 index 0000000..746bd19 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/.version @@ -0,0 +1 @@ +0.3.1-dev diff --git a/.zprezto/modules/syntax-highlighting/external/COPYING.md b/.zprezto/modules/syntax-highlighting/external/COPYING.md new file mode 100644 index 0000000..5512a0a --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/COPYING.md @@ -0,0 +1,23 @@ +Copyright (c) 2010-2015 zsh-syntax-highlighting contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of + conditions and the following disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors + may be used to endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.zprezto/modules/syntax-highlighting/external/Makefile b/.zprezto/modules/syntax-highlighting/external/Makefile new file mode 100644 index 0000000..e4fa163 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/Makefile @@ -0,0 +1,43 @@ +NAME=zsh-syntax-highlighting + +INSTALL?=install -c +PREFIX?=/usr/local +SHARE_DIR=$(DESTDIR)$(PREFIX)/share/$(NAME) +ZSH?=zsh # zsh binary to run tests with + +# Have the default target do nothing. +all: + @ : + +install: + $(INSTALL) -d $(SHARE_DIR) + cp -r .version zsh-syntax-highlighting.zsh highlighters $(SHARE_DIR) + if [ x"true" = x"`git rev-parse --is-inside-work-tree 2>/dev/null`" ]; then \ + git rev-parse HEAD; \ + else \ + cat .revision-hash; \ + fi > $(SHARE_DIR)/.revision-hash + +test: + @result=0; \ + for test in highlighters/*; do \ + if [ -d $$test/test-data ]; then \ + echo "Running test $${test##*/}"; \ + $(ZSH) -f tests/test-highlighting.zsh "$${test##*/}"; \ + : $$(( result |= $$? )); \ + fi \ + done; \ + exit $$result + +perf: + @result=0; \ + for test in highlighters/*; do \ + if [ -d $$test/test-data ]; then \ + echo "Running test $${test##*/}"; \ + $(ZSH) -f tests/test-perfs.zsh "$${test##*/}"; \ + : $$(( result |= $$? )); \ + fi \ + done; \ + exit $$result + +.PHONY: all install test diff --git a/.zprezto/modules/syntax-highlighting/external/README.md b/.zprezto/modules/syntax-highlighting/external/README.md new file mode 100644 index 0000000..d7fc4ad --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/README.md @@ -0,0 +1,89 @@ +zsh-syntax-highlighting +======================= + +**[Fish shell](http://www.fishshell.com) like syntax highlighting for [Zsh](http://www.zsh.org).** + +*Requirements: zsh 4.3.17+.* + +This package provides syntax highlighing for the shell zsh. It enables +highlighing of commands whilst they are typed at a zsh prompt into an +interactive terminal. This helps in reviewing commands before running +them, particularly in catching syntax errors. + +[![Screenshot](images/preview-smaller.png)](images/preview.png) + + +How to install +-------------- + +### Using packages + +* Arch Linux: [community/zsh-syntax-highlighting](https://www.archlinux.org/packages/zsh-syntax-highlighting) / [AUR/zsh-syntax-highlighting-git](https://aur.archlinux.org/packages/zsh-syntax-highlighting-git) +* Gentoo: [mv overlay](http://gpo.zugaina.org/app-shells/zsh-syntax-highlighting) +* Mac OS X / Homebrew: [brew install zsh-syntax-highlighting](https://github.com/Homebrew/homebrew/blob/master/Library/Formula/zsh-syntax-highlighting.rb) + +### In your ~/.zshrc + +* Clone this repository: + + git clone git://github.com/zsh-users/zsh-syntax-highlighting.git + + (or [download a snapshot](https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz)) + +* Source the script **at the end** of `~/.zshrc`: + + source /path/to/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + +* Source `~/.zshrc` to take changes into account: + + source ~/.zshrc + + +### With oh-my-zsh + +* Download the script or clone this repository in [oh-my-zsh](http://github.com/robbyrussell/oh-my-zsh) plugins directory: + + git clone git://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting + +* Activate the plugin in `~/.zshrc`: + + plugins=( [plugins...] zsh-syntax-highlighting) + +* Source `~/.zshrc` to take changes into account: + + source ~/.zshrc + +Note that `zsh-syntax-highlighting` must be the last plugin sourced, +so make it the last element of the `$plugins` array. + +### System-wide installation + +Either of the above methods is suitable for a single-user installation, which requires +no special privileges. If, however, you desire to install zsh-syntax-highlighting +system-wide, you may do so by running `make install` and directing your users to +add `source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh` +in their `.zshrc`s. + + +FAQ +--- + +### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file? + +`zsh-syntax-highlighting.zsh` wraps ZLE widgets. It must be sourced after all +custom widgets have been created (i.e., after all `zle -N` calls and after +running `compinit`). Widgets created later will work, but will not update the +syntax highlighting. + +### How are new releases announced? + +There is currently no "push" announcements channel. However, the following alternatives exist: + +- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom +- An anitya entry: https://release-monitoring.org/project/7552/ + +How to tweak +------------ + +Syntax highlighting is done by pluggable highlighter scripts, see the [highlighters directory](highlighters) +for documentation and configuration settings. diff --git a/.zprezto/modules/syntax-highlighting/external/changelog.md b/.zprezto/modules/syntax-highlighting/external/changelog.md new file mode 100644 index 0000000..dbffcde --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/changelog.md @@ -0,0 +1,212 @@ +up to c0dafd1d850e582291b41d693369794d1ea31343 + + + + +# Changes in version 0.3.1 + + +## Added highlighting of: + +- incomplete sudo commands + (a3047a912100, 2f05620b19ae) + + sudo; + sudo -u; + +- command words following reserved words + (#207, #222, b397b12ac139 et seq, 6fbd2aa9579b et seq, 8b4adbd991b0) + + if ls; then ls; else ls; fi + repeat 10 do ls; done + + (The `ls` are now highlighted as a command.) + +- comments (when `INTERACTIVE_COMMENTS` is set) + (#163, #167, 693de99a9030) + + echo Hello # comment + +- closing brackets of arithmetic expansion, subshells, and blocks + (#226, a59f442d2d34, et seq) + + (( foo )) + ( foo ) + { foo } + + +## Fixed highlighting of: + +- precommand modifiers at non-command-word position + (#209, 2c9f8c8c95fa) + + ls command foo + +- sudo commands with infix redirections + (#221, be006aded590, 86e924970911) + + sudo -u >/tmp/foo.out user ls + +- subshells; anonymous functions + (#166, #194, 0d1bfbcbfa67, 9e178f9f3948) + + (true) + () { true } + +- parameter assignment statements with no command + (#205, 01d7eeb3c713) + + A=1; + + (The semicolon used to be highlighted as a mistake) + + +## Removed features: + +- Removed highlighting of approximate paths (`path_approx`). + (#187, 98aee7f8b9a3) + + +## Other changes: + +- main highlighter refactored to use states rather than booleans. + (2080a441ac49, et seq) + +- Fix initialization when sourcing `zsh-syntax-highlighting.zsh` via a symlink + (083c47b00707) + +- docs: Add screenshot. + (57624bb9f64b) + +- widgets wrapping: Don't add '--' when invoking widgets. + (c808d2187a73) + +- Refresh highlighting upon `accept-*` widgets (`accept-line` et al). + (59fbdda64c21) + +- Stop leaking match/mbegin/mend to global scope (thanks to upstream + `WARN_CREATE_GLOBAL` improvements). + (d3deffbf46a4) + + +## Developer-visible changes: + +- Test harness converted to [TAP](http://testanything.org/tap-specification.html) format + (d99aa58aaaef, et seq) + +- Run each test in a separate subprocess, isolating them from each other + (d99aa58aaaef, et seq) + +- Fix test failure with nonexisting $HOME + (#216, b2ac98b98150) + +- Test output is now colorized. + (4d3da30f8b72, 6fe07c096109) + +- Document `make install` + (a18a7427fd2c) + +- tests: Allow specifying the zsh binary to use. + (557bb7e0c6a0) + +- tests: Add 'make perf' target + (4513eaea71d7) + + + +# Changes in version 0.3.0 + + +## Added highlighting of: + +- suffix aliases (requires zsh 5.1.1 or newer): + + alias -s png=display + foo.png + +- prefix redirections: + + foo.txt + +- arithmetic evaluations: + + (( 42 )) + +- $'' strings, including \x/\octal/\u/\U escapes + + : $'foo\u0040bar' + +- multiline strings: + + % echo "line 1 + line 2" + +- string literals that haven't been finished: + + % echo "Hello, world + +- command words that involve tilde expansion: + + % ~/bin/foo + + +## Fixed highlighting of: + +- quoted command words: + + % \ls + +- backslash escapes in "" strings: + + % echo "\x41" + +- noglob after command separator: + + % :; noglob echo * + +- glob after command separator, when the first command starts with 'noglob': + + % noglob true; echo * + +- the region (vi visual mode / set-mark-command) (issue #165) + +- redirection and command separators that would be highlighted as `path_approx` + + % echo foo;‸ + % echo <‸ + + (where `‸` represents the cursor location) + +- escaped globbing (outside quotes) + + % echo \* + + +## Other changes: + +- implemented compatibility with zsh's paste highlighting (issue #175) + +- `$?` propagated correctly to wrapped widgets + +- don't leak $REPLY into global scope + + +## Developer-visible changes: + +- added makefile with `install` and `test` targets + +- set `warn_create_global` internally + +- document release process + + + + +# Version 0.2.1 + +(Start of changelog.) + diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/README.md new file mode 100644 index 0000000..987cc83 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/README.md @@ -0,0 +1,50 @@ +zsh-syntax-highlighting / highlighters +====================================== + +Syntax highlighting is done by pluggable highlighters: + +* [***main***](main) - the base highlighter, and the only one active by default. +* [***brackets***](brackets) - matches brackets and parenthesis. +* [***pattern***](pattern) - matches user-defined patterns. +* [***cursor***](cursor) - matches the cursor position. +* [***root***](root) - triggered if the current user is root. +* [***line***](line) - applied to the whole command line + + +How to activate highlighters +---------------------------- + +To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in `~/.zshrc`, for example: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) + + +How to tweak highlighters +------------------------- + +Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` array. Navigate into each highlighter directory to see what styles it defines and how to configure it. + + +How to implement a new highlighter +---------------------------------- + +To create your own ***myhighlighter*** highlighter: + +* Create your script at **highlighters/*myhighlighter*/*myhighlighter*-highlighter.zsh**. +* Implement the `_zsh_highlight_myhighlighter_highlighter_predicate` function. This function must return 0 when the highlighter needs to be called, for example: + + _zsh_highlight_myhighlighter_highlighter_predicate() { + # Call this highlighter in SVN repositories + [[ -d .svn ]] + } + +* Implement the `_zsh_highlight_myhighlighter_highlighter` function. This function does the actual syntax highlighting, by modifying `region_highlight`, for example: + + _zsh_highlight_myhighlighter_highlighter() { + # Colorize the whole buffer with blue background + region_highlight+=(0 $#BUFFER bg=blue) + } + +* Activate your highlighter in `~/.zshrc`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS+=(myhighlighter) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md new file mode 100644 index 0000000..9fd4f96 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md @@ -0,0 +1,30 @@ +zsh-syntax-highlighting / highlighters / brackets +================================================= + +This is the ***brackets*** highlighter, that highlights brackets, parenthesis and matches them. + + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] brackets) + + +How to tweak it +--------------- +This highlighter defines the following styles: + +* `bracket-error` - unmatched brackets +* `bracket-level-N` - brackets with nest level N +* `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`: + + # To define styles for nested brackets up to level 4 + ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' + ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' + ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' + ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' + +The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/brackets-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/brackets-highlighter.zsh new file mode 100644 index 0000000..2b87a3e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/brackets-highlighter.zsh @@ -0,0 +1,110 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[bracket-error]:=fg=red,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-1]:=fg=blue,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-2]:=fg=green,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-3]:=fg=magenta,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-4]:=fg=yellow,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-5]:=fg=cyan,bold} +: ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout} + +# Whether the brackets highlighter should be called or not. +_zsh_highlight_brackets_highlighter_predicate() +{ + _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified +} + +# Brackets highlighting function. +_zsh_highlight_brackets_highlighter() +{ + local level=0 pos + local -A levelpos lastoflevel matching typepos + region_highlight=() + + # Find all brackets and remember which one is matching + for (( pos = 0; $pos < ${#BUFFER}; pos++ )) ; do + local char="$BUFFER[pos+1]" + case $char in + ["([{"]) + levelpos[$pos]=$((++level)) + lastoflevel[$level]=$pos + _zsh_highlight_brackets_highlighter_brackettype "$char" + ;; + [")]}"]) + matching[$lastoflevel[$level]]=$pos + matching[$pos]=$lastoflevel[$level] + levelpos[$pos]=$((level--)) + _zsh_highlight_brackets_highlighter_brackettype "$char" + ;; + ['"'\']) + # Skip everything inside quotes + local quotetype=$char + while (( $pos < ${#BUFFER} )) ; do + (( pos++ )) + [[ $BUFFER[$pos+1] == $quotetype ]] && break + done + ;; + esac + done + + # Now highlight all found brackets + for pos in ${(k)levelpos}; do + if [[ -n $matching[$pos] ]] && [[ $typepos[$pos] == $typepos[$matching[$pos]] ]]; then + local bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} + local bracket_color_level=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 )) + local style=$ZSH_HIGHLIGHT_STYLES[$bracket_color_level] + region_highlight+=("$pos $((pos + 1)) $style") + else + local style=$ZSH_HIGHLIGHT_STYLES[bracket-error] + region_highlight+=("$pos $((pos + 1)) $style") + fi + done + + # If cursor is on a bracket, then highlight corresponding bracket, if any + pos=$CURSOR + if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then + local otherpos=$matching[$pos] + local style=$ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket] + region_highlight+=("$otherpos $((otherpos + 1)) $style") + fi +} + +# Helper function to differentiate type +_zsh_highlight_brackets_highlighter_brackettype() +{ + case $1 in + ["()"]) typepos[$pos]=round;; + ["[]"]) typepos[$pos]=bracket;; + ["{}"]) typepos[$pos]=curly;; + *) ;; + esac +} diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/mismatch-patentheses.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/mismatch-patentheses.zsh new file mode 100644 index 0000000..5671079 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/mismatch-patentheses.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo ({x}]' + +expected_region_highlight=( + "6 6 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # ( + "7 7 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # { + "9 9 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # } + "10 10 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # ) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/nested-parentheses.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/nested-parentheses.zsh new file mode 100644 index 0000000..291f8f4 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/nested-parentheses.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo $(echo ${(z)array})' + +expected_region_highlight=( + "7 7 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # ( + "14 14 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # { + "15 15 $ZSH_HIGHLIGHT_STYLES[bracket-level-3]" # ( + "17 17 $ZSH_HIGHLIGHT_STYLES[bracket-level-3]" # ) + "23 23 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # } + "24 24 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # ) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/quoted-patentheses.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/quoted-patentheses.zsh new file mode 100644 index 0000000..a2c52c4 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/quoted-patentheses.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "foo ( bar"' + +expected_region_highlight=( +"1 16 $ZSH_HIGHLIGHT_STYLES[none]" # We expect the brackets highlighter to do nothing +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/simple-parentheses.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/simple-parentheses.zsh new file mode 100644 index 0000000..893145f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/simple-parentheses.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo ({x})' + +expected_region_highlight=( + "6 6 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # ( + "7 7 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # { + "9 9 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # } + "10 10 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # ) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses.zsh new file mode 100644 index 0000000..c36ba36 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo ({x}' + +expected_region_highlight=( + "6 6 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # ( + "7 7 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # { + "9 9 $ZSH_HIGHLIGHT_STYLES[bracket-level-2]" # } +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses2.zsh new file mode 100644 index 0000000..04c246b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/test-data/unclosed-patentheses2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo {x})' + +expected_region_highlight=( + "6 6 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # { + "8 8 $ZSH_HIGHLIGHT_STYLES[bracket-level-1]" # } + "9 9 $ZSH_HIGHLIGHT_STYLES[bracket-error]" # ) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md new file mode 100644 index 0000000..d28ac19 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / cursor +================================================= + +This is the ***cursor*** highlighter, that highlights the cursor. + + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] cursor) + + +How to tweak it +--------------- +This highlighter defines the following styles: + +* `cursor` - the style for the current cursor position + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`: + + ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' + +The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/cursor-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/cursor-highlighter.zsh new file mode 100644 index 0000000..d315c62 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/cursor-highlighter.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout} + +# Whether the cursor highlighter should be called or not. +_zsh_highlight_cursor_highlighter_predicate() +{ + _zsh_highlight_cursor_moved +} + +# Cursor highlighting function. +_zsh_highlight_cursor_highlighter() +{ + region_highlight+=("$CURSOR $(( $CURSOR + 1 )) $ZSH_HIGHLIGHT_STYLES[cursor]") +} diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md new file mode 100644 index 0000000..2be32a2 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / line +================================================= + +This is the ***line*** highlighter, that highlights the whole line. + + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] line) + + +How to tweak it +--------------- +This highlighter defines the following styles: + +* `line` - the style for the whole line + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`: + + ZSH_HIGHLIGHT_STYLES[line]='bold' + +The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/line/line-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/line/line-highlighter.zsh new file mode 100644 index 0000000..68308cc --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/line/line-highlighter.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[line]:=} + +# Whether the root highlighter should be called or not. +_zsh_highlight_line_highlighter_predicate() +{ + _zsh_highlight_buffer_modified +} + +# root highlighting function. +_zsh_highlight_line_highlighter() +{ + region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[line]") +} diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md new file mode 100644 index 0000000..c748248 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md @@ -0,0 +1,68 @@ +zsh-syntax-highlighting / highlighters / main +============================================= + +This is the ***main*** highlighter, that highlights: + +* Commands +* Options +* Arguments +* Paths +* Strings + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] main) + +This highlighter is active by default. + + +How to tweak it +--------------- +This highlighter defines the following styles: + +* `unknown-token` - unknown tokens / errors +* `reserved-word` - shell reserved words +* `alias` - aliases +* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer) +* `builtin` - shell builtin commands +* `function` - functions +* `command` - commands +* `precommand` - precommands (i.e. exec, builtin, ...) +* `commandseparator` - command separation tokens +* `hashed-command` - hashed commands +* `path` - paths +* `path_prefix` - path prefixes +* `globbing` - globbing expressions (`*.txt`) +* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`) +* `single-hyphen-option` - single hyphen options (-o) +* `double-hyphen-option` - double hyphen options (--option) +* `back-quoted-argument` - backquoted expressions (`` `foo` ``) +* `single-quoted-argument` - single quoted arguments (`` 'foo' ``) +* `double-quoted-argument` - double quoted arguments (`` "foo" ``) +* `dollar-quoted-argument` - dollar quoted arguments (`` $'foo' ``) +* `dollar-double-quoted-argument` - dollar double quoted arguments ($foo inside "") +* `back-double-quoted-argument` - back double quoted arguments (\x inside "") +* `back-dollar-quoted-argument` - back dollar quoted arguments (\x inside $'') +* `assign` - variable assignments +* `redirection` - redirection operators (`<`, `>`, etc) +* `comment` - interactive comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) +* `default` - parts of the buffer that do not match anything + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`: + + # Declare the variable + typeset -A ZSH_HIGHLIGHT_STYLES + + # To differentiate aliases from other command types + ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold' + + # To have paths colored instead of underlined + ZSH_HIGHLIGHT_STYLES[path]='fg=cyan' + + # To disable highlighting of globbing expressions + ZSH_HIGHLIGHT_STYLES[globbing]='none' + +The syntax for declaring styles is documented in [the `zshzle(1)` manual +page](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh new file mode 100644 index 0000000..64a2032 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh @@ -0,0 +1,494 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[default]:=none} +: ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} +: ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[alias]:=fg=green} +: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline} +: ${ZSH_HIGHLIGHT_STYLES[builtin]:=fg=green} +: ${ZSH_HIGHLIGHT_STYLES[function]:=fg=green} +: ${ZSH_HIGHLIGHT_STYLES[command]:=fg=green} +: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline} +: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none} +: ${ZSH_HIGHLIGHT_STYLES[hashed-command]:=fg=green} +: ${ZSH_HIGHLIGHT_STYLES[path]:=underline} +: ${ZSH_HIGHLIGHT_STYLES[path_prefix]:=underline} +: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue} +: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue} +: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none} +: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none} +: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none} +: ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[assign]:=none} +: ${ZSH_HIGHLIGHT_STYLES[redirection]:=none} +: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold} + +# Whether the highlighter should be called or not. +_zsh_highlight_main_highlighter_predicate() +{ + # accept-* may trigger removal of path_prefix highlighting + [[ $WIDGET == accept-* ]] || + _zsh_highlight_buffer_modified +} + +# Helper to deal with tokens crossing line boundaries. +_zsh_highlight_main_add_region_highlight() { + integer start=$1 end=$2 + local style=$3 + + # The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is + # relative to $BUFFER. + (( start -= $#PREBUFFER )) + (( end -= $#PREBUFFER )) + + (( end < 0 )) && return # having end<0 would be a bug + (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings + region_highlight+=("$start $end $style") +} + +# Main syntax highlighting function. +_zsh_highlight_main_highlighter() +{ + if [[ -o interactive_comments ]]; then + local interactive_comments= # set to empty + fi + emulate -L zsh + setopt localoptions extendedglob bareglobqual + local start_pos=0 end_pos highlight_glob=true arg style + typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR + typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS + typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW + local buf="$PREBUFFER$BUFFER" + region_highlight=() + + ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=( + '|' '||' ';' '&' '&&' + ) + ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS=( + 'builtin' 'command' 'exec' 'nocorrect' 'noglob' + ) + + # Tokens that, at (naively-determined) "command position", are followed by + # a de jure command position. All of these are reserved words. + ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=( + $'\x7b' # block + $'\x28' # subshell + '()' # anonymous function + 'while' + 'until' + 'if' + 'then' + 'elif' + 'else' + 'do' + 'time' + 'coproc' + '!' # reserved word; unrelated to $histchars[1] + ) + + # State machine + # + # The states are: + # - :start: Command word + # - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i") + # - :sudo_arg: The argument to a sudo leading-dash option that takes one, + # when given as a separate word; i.e., "foo" in "-u foo" (two + # words) but not in "-ufoo" (one word). + # - :regular: "Not a command word". + # Mainly used to detect premature termination of commands. + # + # When the kind of a word is not yet known, $this_word / $next_word may contain + # multiple states. For example, after "sudo -i", the next word may be either + # another --flag or a command name, hence the state would include both :start: + # and :sudo_opt:. + # + # The tokens are always added with both leading and trailing colons to serve as + # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} + # will DTRT regardless of how many elements or repetitions $x has.. + # + # Handling of redirections: upon seeing a redirection token, we must stall + # the current state --- that is, the value of $this_word --- for two iterations + # (one for the redirection operator, one for the word following it representing + # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a + # redirection operator, decrement it each iteration, and stall the current state + # when it is non-zero. Thus, upon reaching the next word (the one that follows + # the redirection operator and target), $this_word will still contain values + # appropriate for the word immediately following the word that preceded the + # redirection operator. + # + # The "the previous word was a redirection operator" state is not communicated + # to the next iteration via $next_word/$this_word as usual, but via + # $in_redirection. The value of $next_word from the iteration that processed + # the operator is discarded. + # + local this_word=':start:' next_word + integer in_redirection + for arg in ${interactive_comments-${(z)buf}} \ + ${interactive_comments+${(zZ+c+)buf}}; do + if (( in_redirection )); then + (( --in_redirection )) + fi + if (( in_redirection == 0 )); then + next_word=':regular:' + fi + # $already_added is set to 1 to disable adding an entry to region_highlight + # for this iteration. Currently, that is done for "" and $'' strings, + # which add the entry early so escape sequences within the string override + # the string's color. + integer already_added=0 + local style_override="" + if [[ $this_word == *':start:'* ]] && [[ $arg = 'noglob' ]]; then + highlight_glob=false + fi + + # advance $start_pos, skipping over whitespace in $buf. + if [[ $arg == ';' ]] ; then + # We're looking for either a semicolon or a newline, whichever comes + # first. Both of these are rendered as a ";" (SEPER) by the ${(z)..} + # flag. + # + # We can't use the (Z+n+) flag because that elides the end-of-command + # token altogether, so 'echo foo\necho bar' (two commands) becomes + # indistinguishable from 'echo foo echo bar' (one command with three + # words for arguments). + local needle=$'[;\n]' + integer offset=${${buf[start_pos+1,-1]}[(i)$needle]} + (( start_pos += offset - 1 )) + (( end_pos = start_pos + $#arg )) + else + ((start_pos+=${#buf[$start_pos+1,-1]}-${#${buf[$start_pos+1,-1]##([[:space:]]|\\[[:space:]])#}})) + ((end_pos=$start_pos+${#arg})) + fi + + if [[ -n ${interactive_comments+'set'} && $arg[1] == $histchars[3] ]]; then + if [[ $this_word == *(':regular:'|':start:')* ]]; then + style=$ZSH_HIGHLIGHT_STYLES[comment] + else + style=$ZSH_HIGHLIGHT_STYLES[unknown-token] # prematurely terminated + fi + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + already_added=1 + continue + fi + + # Parse the sudo command line + if (( ! in_redirection )); then + if [[ $this_word == *':sudo_opt:'* ]]; then + case "$arg" in + # Flag that requires an argument + '-'[Cgprtu]) this_word=${this_word//:start:/}; + next_word=':sudo_arg:';; + # This prevents misbehavior with sudo -u -otherargument + '-'*) this_word=${this_word//:start:/}; + next_word+=':start:'; + next_word+=':sudo_opt:';; + *) ;; + esac + elif [[ $this_word == *':sudo_arg:'* ]]; then + next_word+=':sudo_opt:' + next_word+=':start:' + fi + fi + + if [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then + style=$ZSH_HIGHLIGHT_STYLES[precommand] + elif [[ "$arg" = "sudo" ]]; then + style=$ZSH_HIGHLIGHT_STYLES[precommand] + next_word=${next_word//:regular:/} + next_word+=':sudo_opt:' + next_word+=':start:' + else + _zsh_highlight_main_highlighter_expand_path $arg + local expanded_arg="$REPLY" + local res="$(LC_ALL=C builtin type -w -- ${expanded_arg} 2>/dev/null)" + case $res in + *': reserved') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; + *': suffix alias') + style=$ZSH_HIGHLIGHT_STYLES[suffix-alias] + ;; + *': alias') style=$ZSH_HIGHLIGHT_STYLES[alias] + local aliased_command="${"$(alias -- $arg)"#*=}" + [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$aliased_command"} && -z ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg) + ;; + *': builtin') style=$ZSH_HIGHLIGHT_STYLES[builtin];; + *': function') style=$ZSH_HIGHLIGHT_STYLES[function];; + *': command') style=$ZSH_HIGHLIGHT_STYLES[command];; + *': hashed') style=$ZSH_HIGHLIGHT_STYLES[hashed-command];; + *) if _zsh_highlight_main_highlighter_check_assign; then + style=$ZSH_HIGHLIGHT_STYLES[assign] + if [[ $arg[-1] != '(' ]]; then + # assignment to a scalar parameter. + # (For array assignments, the command doesn't start until the ")" token.) + next_word+=':start:' + fi + elif [[ $arg[0,1] == $histchars[0,1] || $arg[0,1] == $histchars[2,2] ]]; then + style=$ZSH_HIGHLIGHT_STYLES[history-expansion] + elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]] && + [[ $this_word == *':regular:'* ]]; then + # This highlights empty commands (semicolon follows nothing) as an error. + # Zsh accepts them, though. + style=$ZSH_HIGHLIGHT_STYLES[commandseparator] + elif [[ $arg[1] == '<' || $arg[1] == '>' ]]; then + style=$ZSH_HIGHLIGHT_STYLES[redirection] + (( in_redirection=2 )) + elif [[ $arg[1,2] == '((' ]]; then + # Arithmetic evaluation. + # + # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} + # splitter would only output the '((' token if the matching '))' had + # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" + # would be highlighted as an error until the matching "))" are typed. + # + # We highlight just the opening parentheses, as a reserved word; this + # is how [[ ... ]] is highlighted, too. + style=$ZSH_HIGHLIGHT_STYLES[reserved-word] + _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) $style + already_added=1 + if [[ $arg[-2,-1] == '))' ]]; then + _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos $style + already_added=1 + fi + elif [[ $arg == '()' || $arg == $'\x28' ]]; then + # anonymous function + # subshell + style=$ZSH_HIGHLIGHT_STYLES[reserved-word] + else + if _zsh_highlight_main_highlighter_check_path; then + style=$ZSH_HIGHLIGHT_STYLES[path] + else + style=$ZSH_HIGHLIGHT_STYLES[unknown-token] + fi + fi + ;; + esac + fi + else # $arg is a non-command word + case $arg in + $'\x29') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; # subshell + $'\x7d') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; # block + '--'*) style=$ZSH_HIGHLIGHT_STYLES[double-hyphen-option];; + '-'*) style=$ZSH_HIGHLIGHT_STYLES[single-hyphen-option];; + "'"*) style=$ZSH_HIGHLIGHT_STYLES[single-quoted-argument];; + '"'*) style=$ZSH_HIGHLIGHT_STYLES[double-quoted-argument] + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + _zsh_highlight_main_highlighter_highlight_string + already_added=1 + ;; + \$\'*) style=$ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument] + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + _zsh_highlight_main_highlighter_highlight_dollar_string + already_added=1 + ;; + '`'*) style=$ZSH_HIGHLIGHT_STYLES[back-quoted-argument];; + [*?]*|*[^\\][*?]*) + $highlight_glob && style=$ZSH_HIGHLIGHT_STYLES[globbing] || style=$ZSH_HIGHLIGHT_STYLES[default];; + *) if false; then + elif [[ $arg[0,1] = $histchars[0,1] ]]; then + style=$ZSH_HIGHLIGHT_STYLES[history-expansion] + elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + if [[ $this_word == *':regular:'* ]]; then + style=$ZSH_HIGHLIGHT_STYLES[commandseparator] + else + style=$ZSH_HIGHLIGHT_STYLES[unknown-token] + fi + elif [[ $arg[1] == '<' || $arg[1] == '>' ]]; then + style=$ZSH_HIGHLIGHT_STYLES[redirection] + (( in_redirection=2 )) + else + if _zsh_highlight_main_highlighter_check_path; then + style=$ZSH_HIGHLIGHT_STYLES[path] + else + style=$ZSH_HIGHLIGHT_STYLES[default] + fi + fi + ;; + esac + fi + # if a style_override was set (eg in _zsh_highlight_main_highlighter_check_path), use it + [[ -n $style_override ]] && style=$ZSH_HIGHLIGHT_STYLES[$style_override] + (( already_added )) || _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + next_word=':start:' + elif + [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} && $this_word == *':start:' ]] || + [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} && $this_word == *':start:' ]]; then + next_word=':start:' + elif [[ $arg == "repeat" && $this_word == *':start:'* ]]; then + # skip the repeat-count word + in_redirection=2 + # The redirection mechanism assumes $this_word describes the word + # following the redirection. Make it so. + # + # The repeat-count word will be handled like a redirection target. + this_word=':start:' + fi + [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]] && highlight_glob=true + start_pos=$end_pos + (( in_redirection == 0 )) && this_word=$next_word + done +} + +# Check if $arg is variable assignment +_zsh_highlight_main_highlighter_check_assign() +{ + setopt localoptions extended_glob + [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] +} + +# Check if $arg is a path. +_zsh_highlight_main_highlighter_check_path() +{ + _zsh_highlight_main_highlighter_expand_path $arg; + local expanded_path="$REPLY" + + [[ -z $expanded_path ]] && return 1 + [[ -e $expanded_path ]] && return 0 + + # Search the path in CDPATH + local cdpath_dir + for cdpath_dir in $cdpath ; do + [[ -e "$cdpath_dir/$expanded_path" ]] && return 0 + done + + # If dirname($arg) doesn't exist, neither does $arg. + [[ ! -e ${expanded_path:h} ]] && return 1 + + # If this word ends the buffer, check if it's the prefix of a valid path. + if [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos ]] && + [[ $WIDGET != accept-* ]]; then + local -a tmp + tmp=( ${expanded_path}*(N) ) + (( $#tmp > 0 )) && style_override=path_prefix && return 0 + fi + + # It's not a path. + return 1 +} + +# Highlight special chars inside double-quoted strings +_zsh_highlight_main_highlighter_highlight_string() +{ + setopt localoptions noksharrays + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local i j k style + # Starting quote is at 1, so start parsing at offset 2 in the string. + for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + '$' ) style=$ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument] + # Look for an alphanumeric parameter name. + if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then + (( k += $#MATCH )) # highlight the parameter name + (( i += $#MATCH )) # skip past it + else + continue + fi + ;; + "\\") style=$ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument] + if [[ \\\`\"\$ == *$arg[$i+1]* ]]; then + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + else + continue + fi + ;; + *) continue ;; + + esac + _zsh_highlight_main_add_region_highlight $j $k $style + done +} + +# Highlight special chars inside dollar-quoted strings +_zsh_highlight_main_highlighter_highlight_dollar_string() +{ + setopt localoptions noksharrays + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local i j k style + local AA + integer c + # Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string. + for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + "\\") style=$ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument] + for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do + [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break + done + AA=$arg[$i+1,$c-1] + # Matching for HEX and OCT values like \0xA6, \xA6 or \012 + if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}" + || "$AA" =~ "^[0-7]{1,3}" + || "$AA" =~ "^u[0-9a-fA-F]{1,4}" + || "$AA" =~ "^U[0-9a-fA-F]{1,8}" + ]]; then + (( k += $#MATCH )) + (( i += $#MATCH )) + else + if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then + # \x not followed by hex digits is probably an error + style=$ZSH_HIGHLIGHT_STYLES[unknown-token] + fi + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + fi + ;; + *) continue ;; + + esac + _zsh_highlight_main_add_region_highlight $j $k $style + done +} + +# Called with a single positional argument. +# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value. +# +# Does not perform filename generation (globbing). +_zsh_highlight_main_highlighter_expand_path() +{ + (( $# == 1 )) || echo "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument" >&2 + + # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}. + setopt localoptions nonomatch + unset REPLY + : ${REPLY:=${(Q)~1}} +} diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh new file mode 100644 index 0000000..aa84a58 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh @@ -0,0 +1,51 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias alias1="unused expansion" +alias -s alias2="echo" +alias1() {} # to check that it's highlighted as an alias, not as a function + +ZSH_HIGHLIGHT_STYLES[alias]=$unused_highlight +BUFFER='x.alias2; alias1' + +# Set expected_region_highlight as a function of zsh version. +# +# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126, +# and commit 36403 to zsh itself. Therefore, check if the requisite zsh +# functionality is present, and skip verifying suffix-alias highlighting +# if it isn't. +expected_region_highlight=() +if [[ "$(type -w x.alias2)" == *suffix* ]]; then + expected_region_highlight+=( + "1 8 $ZSH_HIGHLIGHT_STYLES[suffix-alias]" # x.alias2 + ) +fi +expected_region_highlight+=( + "11 16 $ZSH_HIGHLIGHT_STYLES[alias]" # alias1 +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/anonymous-function.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/anonymous-function.zsh new file mode 100644 index 0000000..62714ed --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/anonymous-function.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='() echo hello; () { echo world }' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # () + "4 7 $ZSH_HIGHLIGHT_STYLES[command]" # echo + "9 13 $ZSH_HIGHLIGHT_STYLES[default]" # hello + "14 14 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "16 17 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # () + "19 19 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # { + "21 24 $ZSH_HIGHLIGHT_STYLES[command]" # echo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/arithmetic-evaluation.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/arithmetic-evaluation.zsh new file mode 100644 index 0000000..9287e91 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/arithmetic-evaluation.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Must be at command word, since the word following 'if' isn't currently considered +# a command word (issue #207). +# +# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf +# or newer, only (issue #188). +BUFFER='(( x == 42 ))' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # (( + "12 13 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # )) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-append.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-append.zsh new file mode 100644 index 0000000..a38cd86 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-append.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[assign]=$unused_highlight +BUFFER='a+=(lorem ipsum)' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[assign]" # a+=( +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-semicolon.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-semicolon.zsh new file mode 100644 index 0000000..c3692d4 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-semicolon.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[commandseparator]=$unused_highlight +BUFFER='A=1; echo hello world' + +expected_region_highlight=( + "4 4 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "6 9 $ZSH_HIGHLIGHT_STYLES[command]" # echo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh new file mode 100644 index 0000000..ef38668 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[assign]=$unused_highlight +BUFFER='A=1 b=("foo" bar)' + +expected_region_highlight=( + "1 3 $ZSH_HIGHLIGHT_STYLES[assign]" # A=1 + "8 12 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-argument.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-argument.zsh new file mode 100644 index 0000000..6dfba71 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-argument.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=$unused_highlight +BUFFER='echo `echo 42`' + +expected_region_highlight=( + "6 14 $ZSH_HIGHLIGHT_STYLES[back-quoted-argument]" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-continuation.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-continuation.zsh new file mode 100644 index 0000000..9fbd916 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-continuation.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo \\\n' +BUFFER='noglob' + +expected_region_highlight=( + "1 6 none" # 'noglob' highlighted as a string, not as a precomand +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commandseparator.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commandseparator.zsh new file mode 100644 index 0000000..383bd47 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commandseparator.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[commandseparator]=$unused_highlight + +BUFFER=':; pwd' + +expected_region_highlight=( + "2 2 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "4 6 $ZSH_HIGHLIGHT_STYLES[builtin]" # pwd +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-leading.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-leading.zsh new file mode 100644 index 0000000..a30af8b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-leading.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt interactive_comments + +BUFFER='# echo foo' + +expected_region_highlight=( + "1 1 ${(q-)ZSH_HIGHLIGHT_STYLES[comment]}" # # + "2 10 ${(q-)ZSH_HIGHLIGHT_STYLES[comment]}" # " echo foo" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-off.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-off.zsh new file mode 100644 index 0000000..5aa16af --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comment-off.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsetopt interactive_comments + +BUFFER='# echo foo' + +expected_region_highlight=( + "1 1 ${(q-)ZSH_HIGHLIGHT_STYLES[unknown-token]}" # # + "3 6 ${(q-)ZSH_HIGHLIGHT_STYLES[default]}" # " echo foo" + "8 10 ${(q-)ZSH_HIGHLIGHT_STYLES[default]}" # " echo foo" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comments.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comments.zsh new file mode 100644 index 0000000..4b9c974 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/comments.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt interactive_comments + +BUFFER='echo "foo #bar" #baz # quux' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[command]" # echo + "6 15 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo #bar" + "17 27 ${(q-)ZSH_HIGHLIGHT_STYLES[comment]}" # #baz # quux +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/control-flow.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/control-flow.zsh new file mode 100644 index 0000000..3107f50 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/control-flow.zsh @@ -0,0 +1,51 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[alias]=$unused_highlight +BUFFER='while if echo Hello; then ls /; else ls; fi; do stat "x"; done; repeat 10 ls' + +expected_region_highlight+=( + "1 5 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # while + "7 8 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # if + "10 13 $ZSH_HIGHLIGHT_STYLES[builtin]" # echo + "15 19 $ZSH_HIGHLIGHT_STYLES[default]" # Hello + "22 25 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # then + "27 28 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "30 30 $ZSH_HIGHLIGHT_STYLES[path]" # / + "31 31 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "33 36 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # else + "38 39 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "42 43 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # fi + "46 47 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # do + "49 52 $ZSH_HIGHLIGHT_STYLES[command]" # stat + "54 56 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "x" + "59 62 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # done + "65 70 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # repeat + "75 76 $ZSH_HIGHLIGHT_STYLES[command]" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted.zsh new file mode 100644 index 0000000..ea12f9f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]=$unused_highlight +BUFFER=": \$'*' 'foo'" + +expected_region_highlight=( + "3 6 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # $'*' - not a glob + "8 12 $ZSH_HIGHLIGHT_STYLES[single-quoted-argument]" # 'foo' +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted2.zsh new file mode 100644 index 0000000..1ce9bb4 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted2.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=$unused_highlight +BUFFER=": \$'foo\xbar\udeadbeef\uzzzz'" + +expected_region_highlight=( + "3 7 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # $'foo + "8 11 $ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]" # \xba + "12 12 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # r + "13 18 $ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]" # \dead + "19 22 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # beef + "23 24 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # \u + "25 29 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # zzzz' +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted3.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted3.zsh new file mode 100644 index 0000000..53ee171 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-quoted3.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Similar to double-quoted2.zsh +ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=$unused_highlight +# This test checks that the '1' gets highlighted correctly. Do not append to the BUFFER. +BUFFER=": \$'\xa1" + +expected_region_highlight=( + "3 4 $ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]" # $' + "5 8 $ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]" # \xa1 +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-hyphen-option.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-hyphen-option.zsh new file mode 100644 index 0000000..b87ebe8 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-hyphen-option.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=$unused_highlight +BUFFER='hello --world' + +expected_region_highlight=( + "7 13 $ZSH_HIGHLIGHT_STYLES[double-hyphen-option]" # --world +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted.zsh new file mode 100644 index 0000000..3f80f9e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted.zsh @@ -0,0 +1,45 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "foo$bar:\`:\":\$:' +BUFFER+=\\\\:\" + +expected_region_highlight=( + "3 6 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo + "7 10 $ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]" # $bar + "11 11 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # : + "12 13 $ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]" # \` + "14 14 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # : + "15 16 $ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]" # \$ + "17 17 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # : + "18 19 $ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]" # \" + "20 20 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # : + "21 22 $ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]" # \\ + "23 24 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # :" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted2.zsh new file mode 100644 index 0000000..d3facb2 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted2.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Similar to dollar-quoted3.zsh +# This test checks that the 'r' gets highlighted correctly. Do not append to the BUFFER. +BUFFER=': "foo$bar' + +expected_region_highlight=( + "3 6 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo + "7 10 $ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]" # $bar +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted3.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted3.zsh new file mode 100644 index 0000000..6b9001c --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/double-quoted3.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "$" "$42foo"' +BUFFER+=\ \"\\\'\\x\" + +expected_region_highlight=( + "3 5 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "$" + "7 7 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # " + "8 10 $ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]" # $42 + "11 14 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # foo" + "16 21 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "\'\x" - \' and \x are not escape sequences +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-command.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-command.zsh new file mode 100644 index 0000000..9e4b13f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-command.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo; ;' + +expected_region_highlight=( + "5 5 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "7 7 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # ; +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function.zsh new file mode 100644 index 0000000..3e579ab --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function.zsh @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[function]=$unused_highlight +cd() { + builtin cd "$@" +} +ls() { + command ls "$@" +} +BUFFER='cd;ls' + +# Use $unused_highlight to see that function highlighting has precedence over command and builtin + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[function]" # cd + "4 5 $ZSH_HIGHLIGHT_STYLES[function]" # ls +) + +# don't 'unfunction cd ls', since cd() and ls() should still be a functions +# when _zsh_highlight runs. Leaving the wrapper functions is harmless. diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/glob.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/glob.zsh new file mode 100644 index 0000000..d808e2b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/glob.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': foo* bar? *baz qux\?' + +expected_region_highlight=( + "1 1 $ZSH_HIGHLIGHT_STYLES[builtin]" # : + "3 6 $ZSH_HIGHLIGHT_STYLES[globbing]" # foo* + "8 11 $ZSH_HIGHLIGHT_STYLES[globbing]" # bar? + "13 16 $ZSH_HIGHLIGHT_STYLES[globbing]" # *baz + "18 22 $ZSH_HIGHLIGHT_STYLES[default]" # qux\? +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/hashed-command.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/hashed-command.zsh new file mode 100644 index 0000000..ce41b45 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/hashed-command.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash zsh_syntax_highlighting_hash=/doesnotexist +ZSH_HIGHLIGHT_STYLES[hashed-command]=$unused_highlight +BUFFER='zsh_syntax_highlighting_hash' + +expected_region_highlight=( + "1 28 $ZSH_HIGHLIGHT_STYLES[hashed-command]" +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion.zsh new file mode 100644 index 0000000..c670312 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='!foo bar !baz' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[history-expansion]" # !foo + "6 8 $ZSH_HIGHLIGHT_STYLES[default]" # bar + "10 13 $ZSH_HIGHLIGHT_STYLES[history-expansion]" # !baz +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion2.zsh new file mode 100644 index 0000000..45af624 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/history-expansion2.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='^foo^bar' + +expected_region_highlight=( + "1 8 $ZSH_HIGHLIGHT_STYLES[history-expansion]" # ^foo^bar +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string.zsh new file mode 100644 index 0000000..987dd20 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo "foo1\n' +BUFFER='foo2" ./' + +expected_region_highlight=( + "1 5 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # 'foo2"' + "7 8 $ZSH_HIGHLIGHT_STYLES[path]" # './' +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string2.zsh new file mode 100644 index 0000000..9753e5d --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiline-string2.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=$unused_highlight +BUFFER=$'echo "foo1\n' + +expected_region_highlight=( + "6 10 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # 'foo2"' +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiple-redirections.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiple-redirections.zsh new file mode 100644 index 0000000..374de8a --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/multiple-redirections.zsh @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ps aux | grep java | sort | uniq | tail | head' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ps + "4 6 $ZSH_HIGHLIGHT_STYLES[default]" # aux + "8 8 $ZSH_HIGHLIGHT_STYLES[default]" # | + "10 13 $ZSH_HIGHLIGHT_STYLES[command]" # grep + "15 18 $ZSH_HIGHLIGHT_STYLES[default]" # java + "20 20 $ZSH_HIGHLIGHT_STYLES[default]" # | + "22 25 $ZSH_HIGHLIGHT_STYLES[command]" # sort + "27 27 $ZSH_HIGHLIGHT_STYLES[default]" # | + "29 32 $ZSH_HIGHLIGHT_STYLES[command]" # uniq + "34 34 $ZSH_HIGHLIGHT_STYLES[default]" # | + "36 39 $ZSH_HIGHLIGHT_STYLES[command]" # tail + "41 41 $ZSH_HIGHLIGHT_STYLES[default]" # | + "43 46 $ZSH_HIGHLIGHT_STYLES[command]" # head +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-alias.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-alias.zsh new file mode 100644 index 0000000..44d253a --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-alias.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x=command +BUFFER='x ls' + +expected_region_highlight=( + "3 4 $ZSH_HIGHLIGHT_STYLES[command]" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob1.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob1.zsh new file mode 100644 index 0000000..d9bc69b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob1.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=':; noglob echo *' + +expected_region_highlight=( + "16 16 $ZSH_HIGHLIGHT_STYLES[default]" # * +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob2.zsh new file mode 100644 index 0000000..2c19250 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob2.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='noglob echo *; echo *' + +expected_region_highlight=( + "13 13 $ZSH_HIGHLIGHT_STYLES[default]" # * + "21 21 $ZSH_HIGHLIGHT_STYLES[globbing]" # * +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-space- .zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-space- .zsh new file mode 100644 index 0000000..f6b889e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-space- .zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls highlighters/main/test-data/path-space-\ .zsh' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 48 $ZSH_HIGHLIGHT_STYLES[path]" # highlighters/main/test-data/path-space-\ .zsh +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home.zsh new file mode 100644 index 0000000..31ad1e9 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +HOME="." +BUFFER='ls ~' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 4 $ZSH_HIGHLIGHT_STYLES[path]" # ~ +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home2.zsh new file mode 100644 index 0000000..18dd17b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-home2.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +HOME="/nonexistent" +BUFFER='ls ~' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 4 $ZSH_HIGHLIGHT_STYLES[default]" # ~ +) + diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-named.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-named.zsh new file mode 100644 index 0000000..be5bb5a --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-tilde-named.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash -d D=highlighters/main/test-data + +BUFFER='ls ~D/path-tilde-named.zsh' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 26 $ZSH_HIGHLIGHT_STYLES[path]" # ~D/path-tilde-named.zsh +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path.zsh new file mode 100644 index 0000000..3688b9b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls highlighters/main/test-data/path.zsh' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 39 $ZSH_HIGHLIGHT_STYLES[path]" # highlighters/main/test-data/path.zsh +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix.zsh new file mode 100644 index 0000000..17cd26c --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Assumes that '/bin/sh' exists and '/bin/s' does not exist. +# Related to path_prefix2.zsh + +ZSH_HIGHLIGHT_STYLES[path_prefix]=$unused_highlight +BUFFER='ls /bin/s' + +expected_region_highlight=( + "4 9 $ZSH_HIGHLIGHT_STYLES[path_prefix]" # /bin/s +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix2.zsh new file mode 100644 index 0000000..a1974eb --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path_prefix2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Assumes that '/bin/sh' exists and '/bin/s' does not exist. +# Related to path_prefix.zsh + +ZSH_HIGHLIGHT_STYLES[path_prefix]=$unused_highlight +BUFFER='ls /bin/s' +WIDGET=accept-line + +expected_region_highlight=( + "4 9 $ZSH_HIGHLIGHT_STYLES[default]" # /bin/s +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand.zsh new file mode 100644 index 0000000..156b72d --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[assign]=$unused_highlight +BUFFER=': command zzzzzz' + +expected_region_highlight=( + "1 1 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "3 9 $ZSH_HIGHLIGHT_STYLES[default]" # not precommand + "11 16 $ZSH_HIGHLIGHT_STYLES[default]" # not unknown-token (since 'zzzzzz' is not a command) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/prefix-redirection.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/prefix-redirection.zsh new file mode 100644 index 0000000..0eddf0f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/prefix-redirection.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='>/tmp >/tmp sudo echo >/tmp foo' + +expected_region_highlight=( + "2 5 $ZSH_HIGHLIGHT_STYLES[path]" # /tmp + "8 11 $ZSH_HIGHLIGHT_STYLES[path]" # /tmp + "13 16 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "18 21 $ZSH_HIGHLIGHT_STYLES[builtin]" # echo + "24 27 $ZSH_HIGHLIGHT_STYLES[path]" # /tmp + "29 31 $ZSH_HIGHLIGHT_STYLES[default]" # foo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/redirection.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/redirection.zsh new file mode 100644 index 0000000..7515352 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/redirection.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Redirection before and after the command word are implemented differently; test both. +ZSH_HIGHLIGHT_STYLES[redirection]=$unused_highlight +BUFFER='<<>&!bar' + +expected_region_highlight=( + "1 3 $ZSH_HIGHLIGHT_STYLES[redirection]" # <<< + "13 16 $ZSH_HIGHLIGHT_STYLES[redirection]" # >>&! +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/reserved-word.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/reserved-word.zsh new file mode 100644 index 0000000..2f62103 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/reserved-word.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[reserved-word]=$unused_highlight +BUFFER='repeat "1" do done' + +expected_region_highlight=( + "1 6 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # repeat + "8 10 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "1" + "12 13 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # do + "15 18 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # done +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-command.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-command.zsh new file mode 100644 index 0000000..51dd9a9 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-command.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-redirection.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-redirection.zsh new file mode 100644 index 0000000..191c67e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/simple-redirection.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ps aux | grep java' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ps + "4 6 $ZSH_HIGHLIGHT_STYLES[default]" # aux + "8 8 $ZSH_HIGHLIGHT_STYLES[default]" # | + "10 13 $ZSH_HIGHLIGHT_STYLES[command]" # grep + "15 18 $ZSH_HIGHLIGHT_STYLES[default]" # java +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/subshell.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/subshell.zsh new file mode 100644 index 0000000..3e98476 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/subshell.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='tar cf - * | (cd /target; tar xfp -) | { cat }' + +expected_region_highlight=( + "1 3 $ZSH_HIGHLIGHT_STYLES[command]" # tar + "14 14 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # ( + "15 16 $ZSH_HIGHLIGHT_STYLES[command]" # cd + "27 29 $ZSH_HIGHLIGHT_STYLES[command]" # tar + "36 36 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # ) + "40 40 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # { + "42 44 $ZSH_HIGHLIGHT_STYLES[command]" # cat + "46 46 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # } +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-command.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-command.zsh new file mode 100644 index 0000000..ec1ccff --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-command.zsh @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=$unused_highlight +# Tests three codepaths: +# * -i (no argument) +# * -C3 (pasted argument) +# * -u otheruser (non-pasted argument) +BUFFER='sudo -C3 -u otheruser -i ls /; sudo ; sudo -u ;' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "6 8 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -C3 + "10 11 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -u + "13 21 $ZSH_HIGHLIGHT_STYLES[default]" # otheruser + "23 24 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -i + "26 27 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "29 29 $ZSH_HIGHLIGHT_STYLES[path]" # / + "37 37 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # ;, error because empty command + "47 47 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # ;, error because incomplete command +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-comment.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-comment.zsh new file mode 100644 index 0000000..8a70ae3 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-comment.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=$unused_highlight +setopt interactive_comments +BUFFER='sudo -u # comment' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "6 7 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -u + "9 17 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # "# comment" - error because argument missed +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection.zsh new file mode 100644 index 0000000..e31ce6e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection.zsh @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='sudo -u >/tmp otheruser ls; sudo ls; sudo -i ls' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "6 7 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -u + "9 9 $ZSH_HIGHLIGHT_STYLES[redirection]" # > + "10 13 $ZSH_HIGHLIGHT_STYLES[path]" # /tmp + "15 23 $ZSH_HIGHLIGHT_STYLES[default]" # otheruser + "25 26 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "27 27 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "29 32 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "34 35 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "36 36 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # ; + "38 41 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "43 44 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -i + "46 47 $ZSH_HIGHLIGHT_STYLES[command]" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection2.zsh new file mode 100644 index 0000000..f806178 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/sudo-redirection2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='sudo >/tmp -u otheruser ls' + +expected_region_highlight=( + "1 4 $ZSH_HIGHLIGHT_STYLES[precommand]" # sudo + "6 6 $ZSH_HIGHLIGHT_STYLES[redirection]" # > + "7 10 $ZSH_HIGHLIGHT_STYLES[path]" # /tmp + "12 13 $ZSH_HIGHLIGHT_STYLES[single-hyphen-option]" # -u + "15 23 $ZSH_HIGHLIGHT_STYLES[default]" # otheruser + "25 26 $ZSH_HIGHLIGHT_STYLES[command]" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/tilde-command-word.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/tilde-command-word.zsh new file mode 100644 index 0000000..e66db8e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/tilde-command-word.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash -d D=/usr/bin + +BUFFER='~D/env foo' + +expected_region_highlight=( + "1 6 $ZSH_HIGHLIGHT_STYLES[command]" # ~D/env [= /usr/bin/env] + "8 10 $ZSH_HIGHLIGHT_STYLES[default]" # foo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unbackslash.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unbackslash.zsh new file mode 100644 index 0000000..b96c055 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unbackslash.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_STYLES[command]=$unused_highlight +BUFFER='\sh' + +expected_region_highlight=( + "1 3 $ZSH_HIGHLIGHT_STYLES[command]" # \sh (runs 'sh', bypassing aliases) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unknown-command.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unknown-command.zsh new file mode 100644 index 0000000..9b9e8d3 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/unknown-command.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='azertyuiop' + +expected_region_highlight=( + "1 10 $ZSH_HIGHLIGHT_STYLES[unknown-token]" # azertyuiop +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/vanilla-newline.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/vanilla-newline.zsh new file mode 100644 index 0000000..7fa9ba2 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/vanilla-newline.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo foo; echo bar\n\n\n' +BUFFER=' echo baz; echo qux' + +expected_region_highlight=( + "2 5 $ZSH_HIGHLIGHT_STYLES[builtin]" # echo + "7 9 $ZSH_HIGHLIGHT_STYLES[default]" # baz + "10 10 $ZSH_HIGHLIGHT_STYLES[commandseparator]" # semicolon + "12 15 $ZSH_HIGHLIGHT_STYLES[builtin]" # echo + "17 19 $ZSH_HIGHLIGHT_STYLES[default]" # qux +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md new file mode 100644 index 0000000..82a7c65 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md @@ -0,0 +1,21 @@ +zsh-syntax-highlighting / highlighters / pattern +================================================ + +This is the ***pattern*** highlighter, that highlights user defined patterns. + + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] pattern) + + +How to tweak it +--------------- +To use this highlighter, associate patterns with styles in the `ZSH_HIGHLIGHT_PATTERNS` array, for example in `~/.zshrc`: + + # To have commands starting with `rm -rf` in red: + ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') + +The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/pattern-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/pattern-highlighter.zsh new file mode 100644 index 0000000..4e2eabd --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/pattern-highlighter.zsh @@ -0,0 +1,60 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# List of keyword and color pairs. +typeset -gA ZSH_HIGHLIGHT_PATTERNS + +# Whether the pattern highlighter should be called or not. +_zsh_highlight_pattern_highlighter_predicate() +{ + _zsh_highlight_buffer_modified +} + +# Pattern syntax highlighting function. +_zsh_highlight_pattern_highlighter() +{ + setopt localoptions extendedglob + local pattern + for pattern in ${(k)ZSH_HIGHLIGHT_PATTERNS}; do + _zsh_highlight_pattern_highlighter_loop "$BUFFER" "$pattern" + done +} + +_zsh_highlight_pattern_highlighter_loop() +{ + # This does *not* do its job syntactically, sorry. + local buf="$1" pat="$2" + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + if [[ "$buf" == (#b)(*)(${~pat})* ]]; then + region_highlight+=("$((mbegin[2] - 1)) $mend[2] $ZSH_HIGHLIGHT_PATTERNS[$pat]") + "$0" "$match[1]" "$pat"; return $? + fi +} diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md new file mode 100644 index 0000000..53c871b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / root +================================================= + +This is the ***root*** highlighter, that highlights the whole line if the current user is root. + + +How to activate it +------------------ +To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`: + + ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] root) + + +How to tweak it +--------------- +This highlighter defines the following styles: + +* `root` - the style for the whole line if the current user is root. + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`: + + ZSH_HIGHLIGHT_STYLES[root]='bg=red' + +The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135). diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/root/root-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/root/root-highlighter.zsh new file mode 100644 index 0000000..4362379 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/root/root-highlighter.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[root]:=standout} + +# Whether the root highlighter should be called or not. +_zsh_highlight_root_highlighter_predicate() +{ + _zsh_highlight_buffer_modified +} + +# root highlighting function. +_zsh_highlight_root_highlighter() +{ + if [[ $(command id -u) -eq 0 ]] { region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[root]") } +} diff --git a/.zprezto/modules/syntax-highlighting/external/images/preview-smaller.png b/.zprezto/modules/syntax-highlighting/external/images/preview-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb84d18e545b56beef047eea45d7b03f9e50c05 GIT binary patch literal 5982 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 F{{y@A$L;_C literal 0 HcmV?d00001 diff --git a/.zprezto/modules/syntax-highlighting/external/images/preview.png b/.zprezto/modules/syntax-highlighting/external/images/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..545cc511abf0cc90fc9020cf6665f5aad2062eec GIT binary patch literal 14650 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

-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 literal 0 HcmV?d00001 diff --git a/.zprezto/modules/syntax-highlighting/external/release.md b/.zprezto/modules/syntax-highlighting/external/release.md new file mode 100644 index 0000000..a38d677 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/release.md @@ -0,0 +1,15 @@ +# Release procedure (for developers): + +- Check open issues and outstanding pull requests +- Confirm `make test` passes + - check with multiple zsh versions +- Update changelog.md +- Remove `-dev` suffix from `./.version`; + Commit that; + Tag it using `git tag $(<.version)`; + Increment `./.version` and restore the `-dev` suffix; + Commit that. +- Push with `git push --tags` +- Notify downstreams (OS packages) + - anitya should autodetect the tag +- Update /topic on IRC diff --git a/.zprezto/modules/syntax-highlighting/external/tests/README.md b/.zprezto/modules/syntax-highlighting/external/tests/README.md new file mode 100644 index 0000000..e82a64b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/tests/README.md @@ -0,0 +1,38 @@ +zsh-syntax-highlighting / tests +=============================== + +Utility scripts for testing zsh-syntax-highlighting highlighters. + +The tests expect the highlighter directory to contain a `test-data` directory with test data files. See the [main highlighter](../highlighters/main/test-data) for examples. + +Each test should define the array parameter `$expected_region_highlight`. +The value of that parameter is a list of `"$i $j $style [$todo]"` strings. +Each string specifies the highlighting that `$BUFFER[$i,$j]` should have; +that is, `$i` and `$j` specify a range, 1-indexed, inclusive of both endpoints. +If `$todo` exists, the test point is marked as TODO (the failure of that test point will not fail the test), and `$todo` is used as the explanation. + +_Note_: `$region_highlight` uses the same `"$i $j $style"` syntax but interprets the indexes differently. + + +highlighting test +----------------- +[`test-highlighting.zsh`](tests/test-highlighting.zsh) tests the correctness of the highlighting. Usage: + + zsh test-highlighting.zsh + +All tests may be run with + + make test + +which will run all highlighting tests and report results in [TAP](http://testanything.org/) format. + + +performance test +---------------- +[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the highlighting. Usage: + + zsh test-perfs.zsh + +All tests may be run with + + make perf diff --git a/.zprezto/modules/syntax-highlighting/external/tests/tap-colorizer.zsh b/.zprezto/modules/syntax-highlighting/external/tests/tap-colorizer.zsh new file mode 100755 index 0000000..cb645c6 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/tests/tap-colorizer.zsh @@ -0,0 +1,67 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# This is a stdin-to-stdout filter that takes TAP output (such as 'make test') +# on stdin and passes it, colorized, to stdout. + +emulate -LR zsh + +if [[ ! -t 1 ]] ; then + exec cat +fi + +while read -r line; +do + case $line in + # comment (filename header) or plan + (#* | <->..<->) + print -nP %F{blue} + ;; + # XPASS + (ok*# TODO*) + print -nP %F{red} + ;; + # XFAIL + (not ok*# TODO*) + print -nP %F{yellow} + ;; + # FAIL + (not ok*) + print -nP %F{red} + ;; + # PASS + (ok*) + print -nP %F{green} + ;; + esac + print -nr - "$line" + print -nP %f + echo "" # newline +done diff --git a/.zprezto/modules/syntax-highlighting/external/tests/test-highlighting.zsh b/.zprezto/modules/syntax-highlighting/external/tests/test-highlighting.zsh new file mode 100755 index 0000000..1eed974 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/tests/test-highlighting.zsh @@ -0,0 +1,118 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Check an highlighter was given as argument. +[[ -n "$1" ]] || { + echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." + exit 2 +} + +# Check the highlighter is valid. +[[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || { + echo >&2 "Bail out! Could not find highlighter '$1'." + exit 2 +} + +# Check the highlighter has test data. +[[ -d ${0:h:h}/highlighters/$1/test-data ]] || { + echo >&2 "Bail out! Highlighter '$1' has no test data." + exit 2 +} + +# Load the main script. +. ${0:h:h}/zsh-syntax-highlighting.zsh + +# Activate the highlighter. +ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) + +# Runs a highlighting test +# $1: data file +run_test() { + local -a highlight_zone + local unused_highlight='bg=red,underline' # a style unused by anything else, for tests to use + + echo "# ${1:t:r}" + + # Load the data and prepare checking it. + PREBUFFER= BUFFER= ; + . "$1" + + # Check the data declares $PREBUFFER or $BUFFER. + [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; } + # Check the data declares $expected_region_highlight. + (( ${#expected_region_highlight} == 0 )) && { echo >&2 "Bail out! 'expected_region_highlight' is not declared or empty."; return 1; } + + # Process the data. + region_highlight=() + _zsh_highlight + + # Overlapping regions can be declared in region_highlight, so we first build an array of the + # observed highlighting. + local -A observed_result + for ((i=1; i<=${#region_highlight}; i++)); do + highlight_zone=${(z)region_highlight[$i]} + integer start=$highlight_zone[1] end=$highlight_zone[2] + if (( start < end )) # region_highlight ranges are half-open + then + (( --end )) # convert to closed range, like expected_region_highlight + (( ++start, ++end )) # region_highlight is 0-indexed; expected_region_highlight is 1-indexed + for j in {$start..$end}; do + observed_result[$j]=$highlight_zone[3] + done + else + # noop range; ignore. + fi + done + + # Then we compare the observed result with the expected one. + echo "1..${#expected_region_highlight}" + for ((i=1; i<=${#expected_region_highlight}; i++)); do + local todo= + highlight_zone=${(z)expected_region_highlight[$i]} + [[ -n "$highlight_zone[4]" ]] && todo=" # TODO $highlight_zone[4]" + for j in {$highlight_zone[1]..$highlight_zone[2]}; do + if [[ "$observed_result[$j]" != "$highlight_zone[3]" ]]; then + echo "not ok $i '$BUFFER[$highlight_zone[1],$highlight_zone[2]]' [$highlight_zone[1],$highlight_zone[2]]: expected '$highlight_zone[3]', observed '$observed_result[$j]'.$todo" + continue 2 + fi + done + echo "ok $i$todo" + done +} + +# Process each test data file in test data directory. +integer something_failed=0 +for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do + (run_test "$data_file") | tee >(${0:A:h}/tap-colorizer.zsh) | grep -v '^not ok.*# TODO' | grep -q '^not ok\|^ok.*# TODO' && (( something_failed=1 )) + (( $pipestatus[1] )) && exit 2 +done + +exit $something_failed diff --git a/.zprezto/modules/syntax-highlighting/external/tests/test-perfs.zsh b/.zprezto/modules/syntax-highlighting/external/tests/test-perfs.zsh new file mode 100755 index 0000000..0d4adc3 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/tests/test-perfs.zsh @@ -0,0 +1,75 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Check an highlighter was given as argument. +[[ -n "$1" ]] || { + echo "You must provide the name of a valid highlighter as argument." >&2 + exit 1 +} + +# Check the highlighter is valid. +[[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || { + echo "Could not find highlighter '$1'." >&2 + exit 1 +} + +# Check the highlighter has test data. +[[ -d ${0:h:h}/highlighters/$1/test-data ]] || { + echo "Highlighter '$1' has no test data." >&2 + exit 1 +} + +# Load the main script. +. ${0:h:h}/zsh-syntax-highlighting.zsh + +# Activate the highlighter. +ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) + +# Process each test data file in test data directory. +for data_file in ${0:h:h}/highlighters/$1/test-data/*; do + + # Load the data and prepare checking it. + BUFFER= + echo -n "* ${data_file:t:r}: " + . $data_file + + # Check the data declares $BUFFER. + if [[ ${#BUFFER} -eq 0 ]]; then + echo "KO\n - 'BUFFER' is not declared or blank." + else + + # Measure the time taken by _zsh_highlight. + TIMEFMT="%*Es" + time ( BUFFER="$BUFFER" && _zsh_highlight) + + fi + +done diff --git a/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.plugin.zsh b/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.plugin.zsh new file mode 120000 index 0000000..cc95cd4 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.plugin.zsh @@ -0,0 +1 @@ +zsh-syntax-highlighting.zsh \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh b/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh new file mode 100644 index 0000000..1d63dbf --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh @@ -0,0 +1,281 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +if [[ -o function_argzero ]]; then + # $0 is reliable + ZSH_HIGHLIGHT_VERSION=$(<"$0:A:h"/.version) + ZSH_HIGHLIGHT_REVISION=$(<"$0:A:h"/.revision-hash) + if [[ $ZSH_HIGHLIGHT_REVISION == \$Format:* ]]; then + # When running from a source tree without 'make install', $ZSH_HIGHLIGHT_REVISION + # would be set to '$Format:%H$' literally. That's an invalid value, and obtaining + # the valid value (via `git rev-parse HEAD`, as Makefile does) might be costly, so: + unset ZSH_HIGHLIGHT_REVISION + fi +else + # $0 is unreliable, so the call to _zsh_highlight_load_highlighters will fail. + # TODO: If 'zmodload zsh/parameter' is available, ${funcsourcetrace[1]%:*} might serve as a substitute? + # TODO: also check POSIX_ARGZERO, but not it's not available in older zsh + echo "zsh-syntax-highlighting: error: not compatible with FUNCTION_ARGZERO" >&2 + return 1 +fi + +# ------------------------------------------------------------------------------------------------- +# Core highlighting update system +# ------------------------------------------------------------------------------------------------- + +# Array declaring active highlighters names. +typeset -ga ZSH_HIGHLIGHT_HIGHLIGHTERS + +# Update ZLE buffer syntax highlighting. +# +# Invokes each highlighter that needs updating. +# This function is supposed to be called whenever the ZLE state changes. +_zsh_highlight() +{ + # Store the previous command return code to restore it whatever happens. + local ret=$? + + setopt localoptions warncreateglobal + local REPLY # don't leak $REPLY into global scope + + # Do not highlight if there are more than 300 chars in the buffer. It's most + # likely a pasted command or a huge list of files in that case.. + [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret + + # Do not highlight if there are pending inputs (copy/paste). + [[ $PENDING -gt 0 ]] && return $ret + + # Reset region highlight to build it from scratch + typeset -ga region_highlight + region_highlight=(); + + { + local cache_place + local -a region_highlight_copy + + # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked. + local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do + + # eval cache place for current highlighter and prepare it + cache_place="_zsh_highlight_${highlighter}_highlighter_cache" + typeset -ga ${cache_place} + + # If highlighter needs to be invoked + if "_zsh_highlight_${highlighter}_highlighter_predicate"; then + + # save a copy, and cleanup region_highlight + region_highlight_copy=("${region_highlight[@]}") + region_highlight=() + + # Execute highlighter and save result + { + "_zsh_highlight_${highlighter}_highlighter" + } always { + eval "${cache_place}=(\"\${region_highlight[@]}\")" + } + + # Restore saved region_highlight + region_highlight=("${region_highlight_copy[@]}") + + fi + + # Use value form cache if any cached + eval "region_highlight+=(\"\${${cache_place}[@]}\")" + + done + + # Re-apply zle_highlight settings + () { + if (( REGION_ACTIVE )) ; then + # zle_highlight[region] defaults to 'standout' if unspecified + local region="${${zle_highlight[(r)region:*]#region:}:-standout}" + integer start end + if (( MARK > CURSOR )) ; then + start=$CURSOR end=$MARK + else + start=$MARK end=$CURSOR + fi + region_highlight+=("$start $end $region") + fi + } + # YANK_ACTIVE is only available in zsh-5.1.1 and newer + (( $+YANK_ACTIVE )) && () { + if (( YANK_ACTIVE )) ; then + # zle_highlight[paste] defaults to 'standout' if unspecified + local paste="${${zle_highlight[(r)paste:*]#paste:}:-standout}" + integer start end + if (( YANK_END > YANK_START )) ; then + start=$YANK_START end=$YANK_END + else + start=$YANK_END end=$YANK_START + fi + region_highlight+=("$start $end $paste") + fi + } + + return $ret + + + } always { + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER" + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR + } +} + + +# ------------------------------------------------------------------------------------------------- +# API/utility functions for highlighters +# ------------------------------------------------------------------------------------------------- + +# Array used by highlighters to declare user overridable styles. +typeset -gA ZSH_HIGHLIGHT_STYLES + +# Whether the command line buffer has been modified or not. +# +# Returns 0 if the buffer has changed since _zsh_highlight was last called. +_zsh_highlight_buffer_modified() +{ + [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]] +} + +# Whether the cursor has moved or not. +# +# Returns 0 if the cursor has moved since _zsh_highlight was last called. +_zsh_highlight_cursor_moved() +{ + [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR)) +} + + +# ------------------------------------------------------------------------------------------------- +# Setup functions +# ------------------------------------------------------------------------------------------------- + +# Helper for _zsh_highlight_bind_widgets +# $1 is name of widget to call +_zsh_highlight_call_widget() +{ + builtin zle "$@" && + _zsh_highlight +} + +# Rebind all ZLE widgets to make them invoke _zsh_highlights. +_zsh_highlight_bind_widgets() +{ + # Load ZSH module zsh/zleparameter, needed to override user defined widgets. + zmodload zsh/zleparameter 2>/dev/null || { + echo 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' >&2 + return 1 + } + + # Override ZLE widgets to make them invoke _zsh_highlight. + local cur_widget + for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep|set-local-history|yank)}; do + case $widgets[$cur_widget] in + + # Already rebound event: do nothing. + user:$cur_widget|user:_zsh_highlight_widget_*);; + + # User defined widget: override and rebind old one with prefix "orig-". + user:*) eval "zle -N orig-$cur_widget ${widgets[$cur_widget]#*:}; \ + _zsh_highlight_widget_$cur_widget() { _zsh_highlight_call_widget orig-$cur_widget \"\$@\" }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Completion widget: override and rebind old one with prefix "orig-". + completion:*) eval "zle -C orig-$cur_widget ${${widgets[$cur_widget]#*:}/:/ }; \ + _zsh_highlight_widget_$cur_widget() { _zsh_highlight_call_widget orig-$cur_widget \"\$@\" }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Builtin widget: override and make it call the builtin ".widget". + builtin) eval "_zsh_highlight_widget_$cur_widget() { _zsh_highlight_call_widget .$cur_widget \"\$@\" }; \ + zle -N $cur_widget _zsh_highlight_widget_$cur_widget";; + + # Default: unhandled case. + *) echo "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" >&2 ;; + esac + done +} + +# Load highlighters from directory. +# +# Arguments: +# 1) Path to the highlighters directory. +_zsh_highlight_load_highlighters() +{ + # Check the directory exists. + [[ -d "$1" ]] || { + echo "zsh-syntax-highlighting: highlighters directory '$1' not found." >&2 + return 1 + } + + # Load highlighters from highlighters directory and check they define required functions. + local highlighter highlighter_dir + for highlighter_dir ($1/*/); do + highlighter="${highlighter_dir:t}" + [[ -f "$highlighter_dir/${highlighter}-highlighter.zsh" ]] && { + . "$highlighter_dir/${highlighter}-highlighter.zsh" + type "_zsh_highlight_${highlighter}_highlighter" &> /dev/null && + type "_zsh_highlight_${highlighter}_highlighter_predicate" &> /dev/null || { + echo "zsh-syntax-highlighting: '${highlighter}' highlighter should define both required functions '_zsh_highlight_${highlighter}_highlighter' and '_zsh_highlight_${highlighter}_highlighter_predicate' in '${highlighter_dir}/${highlighter}-highlighter.zsh'." >&2 + } + } + done +} + + +# ------------------------------------------------------------------------------------------------- +# Setup +# ------------------------------------------------------------------------------------------------- + +# Try binding widgets. +_zsh_highlight_bind_widgets || { + echo 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.' >&2 + return 1 +} + +# Resolve highlighters directory location. +_zsh_highlight_load_highlighters "${ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR:-${${0:A}:h}/highlighters}" || { + echo 'zsh-syntax-highlighting: failed loading highlighters, exiting.' >&2 + return 1 +} + +# Reset scratch variables when commandline is done. +_zsh_highlight_preexec_hook() +{ + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER= + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR= +} +autoload -U add-zsh-hook +add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { + echo 'zsh-syntax-highlighting: failed loading add-zsh-hook.' >&2 + } + +# Initialize the array of active highlighters if needed. +[[ $#ZSH_HIGHLIGHT_HIGHLIGHTERS -eq 0 ]] && ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) || true diff --git a/.zprezto/modules/syntax-highlighting/init.zsh b/.zprezto/modules/syntax-highlighting/init.zsh new file mode 100644 index 0000000..25cd96b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/init.zsh @@ -0,0 +1,28 @@ +# +# Integrates zsh-syntax-highlighting into Prezto. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if ! zstyle -t ':prezto:module:syntax-highlighting' color; then + return 1 +fi + +# Source module files. +source "${0:h}/external/zsh-syntax-highlighting.zsh" || return 1 + +# Set highlighters. +zstyle -a ':prezto:module:syntax-highlighting' highlighters 'ZSH_HIGHLIGHT_HIGHLIGHTERS' +if (( ${#ZSH_HIGHLIGHT_HIGHLIGHTERS[@]} == 0 )); then + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) +fi + +# Set highlighting styles. +typeset -A syntax_highlighting_styles +zstyle -a ':prezto:module:syntax-highlighting' styles 'syntax_highlighting_styles' +for syntax_highlighting_style in "${(k)syntax_highlighting_styles[@]}"; do + ZSH_HIGHLIGHT_STYLES[$syntax_highlighting_style]="$syntax_highlighting_styles[$syntax_highlighting_style]" +done +unset syntax_highlighting_style{s,} diff --git a/.zprezto/modules/terminal/README.md b/.zprezto/modules/terminal/README.md new file mode 100644 index 0000000..58f81be --- /dev/null +++ b/.zprezto/modules/terminal/README.md @@ -0,0 +1,44 @@ +Terminal +======== + +Sets terminal window and tab titles. + +Settings +-------- + +### Auto-Title + +To auto set the terminal window and tab titles with the current command or +directory, add the following to *zpreztorc*: + + zstyle ':prezto:module:terminal' auto-title 'yes' + +Auto titling is disabled inside terminal multiplexers, except inside dvtm, since +it interferes with window names defined in configuration files and profile +managers. + +To format terminal window and tab titles, add the following to *zpreztorc*: + + zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +`%s` will be replaced with the current working directory path or the currently +executing program name. + +For a list of sequences, see [Expansion of Prompt Sequences][1]. + +Functions +--------- + +- `set-tab-title` sets the terminal tab title. +- `set-window-title` sets the terminal or terminal multiplexer window title. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Expansion-of-Prompt-Sequences +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/terminal/init.zsh b/.zprezto/modules/terminal/init.zsh new file mode 100644 index 0000000..b0be502 --- /dev/null +++ b/.zprezto/modules/terminal/init.zsh @@ -0,0 +1,121 @@ +# +# Sets terminal window and tab titles. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$TERM" == (dumb|linux|*bsd*|eterm*) ]]; then + return 1 +fi + +# Sets the terminal or terminal multiplexer window title. +function set-window-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:window-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + + if [[ "$TERM" == screen* ]]; then + title_format="\ek%s\e\\" + else + title_format="\e]2;%s\a" + fi + + printf "$title_format" "${(V%)title_formatted}" +} + +# Sets the terminal tab title. +function set-tab-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:tab-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + + printf "\e]1;%s\a" ${(V%)title_formatted} +} + +# Sets the tab and window titles with a given command. +function _terminal-set-titles-with-command { + emulate -L zsh + setopt EXTENDED_GLOB + + # Get the command name that is under job control. + if [[ "${2[(w)1]}" == (fg|%*)(\;|) ]]; then + # Get the job name, and, if missing, set it to the default %+. + local job_name="${${2[(wr)%*(\;|)]}:-%+}" + + # Make a local copy for use in the subshell. + local -A jobtexts_from_parent_shell + jobtexts_from_parent_shell=(${(kv)jobtexts}) + + jobs "$job_name" 2>/dev/null > >( + read index discarded + # The index is already surrounded by brackets: [1]. + _terminal-set-titles-with-command "${(e):-\$jobtexts_from_parent_shell$index}" + ) + else + # Set the command name, or in the case of sudo or ssh, the next command. + local cmd="${${2[(wr)^(*=*|sudo|ssh|-*)]}:t}" + local truncated_cmd="${cmd/(#m)?(#c15,)/${MATCH[1,12]}...}" + unset MATCH + + set-window-title "$cmd" + set-tab-title "$truncated_cmd" + fi +} + +# Sets the tab and window titles with a given path. +function _terminal-set-titles-with-path { + emulate -L zsh + setopt EXTENDED_GLOB + + local absolute_path="${${1:a}:-$PWD}" + local abbreviated_path="${absolute_path/#$HOME/~}" + local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}" + unset MATCH + + set-window-title "$abbreviated_path" + set-tab-title "$truncated_path" +} + +# Do not override precmd/preexec; append to the hook array. +autoload -Uz add-zsh-hook + +# Set up the Apple Terminal. +if [[ "$TERM_PROGRAM" == 'Apple_Terminal' ]] \ + && ( ! [[ -n "$STY" || -n "$TMUX" || -n "$DVTM" ]] ) +then + # Sets the Terminal.app current working directory before the prompt is + # displayed. + function _terminal-set-terminal-app-proxy-icon { + printf '\e]7;%s\a' "file://${HOST}${PWD// /%20}" + } + add-zsh-hook precmd _terminal-set-terminal-app-proxy-icon + + # Unsets the Terminal.app current working directory when a terminal + # multiplexer or remote connection is started since it can no longer be + # updated, and it becomes confusing when the directory displayed in the title + # bar is no longer synchronized with real current working directory. + function _terminal-unset-terminal-app-proxy-icon { + if [[ "${2[(w)1]:t}" == (screen|tmux|dvtm|ssh|mosh) ]]; then + print '\e]7;\a' + fi + } + add-zsh-hook preexec _terminal-unset-terminal-app-proxy-icon + + # Do not set the tab and window titles in Terminal.app since it sets the tab + # title to the currently running process by default and the current working + # directory is set separately. + return +fi + +# Set up non-Apple terminals. +if zstyle -t ':prezto:module:terminal' auto-title \ + && ( ! [[ -n "$STY" || -n "$TMUX" ]] ) +then + # Sets the tab and window titles before the prompt is displayed. + add-zsh-hook precmd _terminal-set-titles-with-path + + # Sets the tab and window titles before command execution. + add-zsh-hook preexec _terminal-set-titles-with-command +fi diff --git a/.zprezto/modules/tmux/README.md b/.zprezto/modules/tmux/README.md new file mode 100644 index 0000000..11c8a08 --- /dev/null +++ b/.zprezto/modules/tmux/README.md @@ -0,0 +1,77 @@ +Tmux +==== + +Defines [tmux][1] aliases and provides for auto launching it at start-up. + +Settings +-------- + +### Auto-Start + +Starts a tmux session automatically when Zsh is launched. + +To enable this feature when launching Zsh in a local terminal, add the +following line to *zpreztorc*: + + zstyle ':prezto:module:tmux:auto-start' local 'yes' + +To enable this feature when launching Zsh in a SSH connection, add the +following line to *zpreztorc*: + + zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +In both cases, it will create a background session named _prezto_ if the tmux +server is not started. + +With `auto-start` enabled, you may want to control how multiple sessions are +managed. The `destroy-unattached` option of tmux controls if the unattached +sessions must be kept alive, making sessions available for later use, configured +in *tmux.conf*: + + set-option -g destroy-unattached [on | off] + +#### iTerm2 Integration + +[iTerm2][6] offers significant integration with tmux. This can be enabled by +adding the following line to *zpreztorc*: + + zstyle ':prezto:module:tmux:iterm' integrate 'yes' + +Read [iTerm2 and tmux Integration][7] for more information. + +Aliases +------- + + - `tmuxa` attaches or switches to a tmux session. + - `tmuxl` lists sessions managed by the tmux server. + +Caveats +------- + +On Mac OS X, launching tmux can cause the error **launch_msg(...): Socket is not +connected** to be displayed, which can be fixed by installing +[reattach-to-user-namespace][3], available in [Homebrew][4], and adding the +following to *tmux.conf*: + + set-option -g default-command "reattach-to-user-namespace -l $SHELL -l" + +Furthermore, tmux is known to cause **kernel panics** on Mac OS X. A discussion +about this and Prezto has already been [opened][2]. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][5].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + - [Colin Hebert](https://github.com/ColinHebert) + - [Georges Discry](https://github.com/gdiscry) + - [Xavier Cambar](https://github.com/xcambar) + +[1]: http://tmux.sourceforge.net +[2]: https://github.com/sorin-ionescu/prezto/issues/62 +[3]: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard +[4]: https://github.com/mxcl/homebrew +[5]: https://github.com/sorin-ionescu/prezto/issues +[6]: http://iterm2.com +[7]: https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration diff --git a/.zprezto/modules/tmux/init.zsh b/.zprezto/modules/tmux/init.zsh new file mode 100644 index 0000000..070abca --- /dev/null +++ b/.zprezto/modules/tmux/init.zsh @@ -0,0 +1,49 @@ +# +# Defines tmux aliases and provides for auto launching it at start-up. +# +# Authors: +# Sorin Ionescu +# Colin Hebert +# Georges Discry +# Xavier Cambar +# + +# Return if requirements are not found. +if (( ! $+commands[tmux] )); then + return 1 +fi + +# +# Auto Start +# + +if ([[ "$TERM_PROGRAM" = 'iTerm.app' ]] && \ + zstyle -t ':prezto:module:tmux:iterm' integrate \ +); then + _tmux_iterm_integration='-CC' +fi + +if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" ]] && ( \ + ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' remote ) || + ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' local ) \ +); then + tmux start-server + + # Create a 'prezto' session if no session has been defined in tmux.conf. + if ! tmux has-session 2> /dev/null; then + tmux_session='prezto' + tmux \ + new-session -d -s "$tmux_session" \; \ + set-option -t "$tmux_session" destroy-unattached off &> /dev/null + fi + + # Attach to the 'prezto' session or to the last session used. + exec tmux $_tmux_iterm_integration attach-session +fi + +# +# Aliases +# + +alias tmuxa="tmux $_tmux_iterm_integration new-session -A" +alias tmuxl='tmux list-sessions' diff --git a/.zprezto/modules/utility/README.md b/.zprezto/modules/utility/README.md new file mode 100644 index 0000000..5e7919e --- /dev/null +++ b/.zprezto/modules/utility/README.md @@ -0,0 +1,158 @@ +Utility +======= + +Defines general aliases and functions. + +Settings +-------- + +### Highlighting + +If you have enabled color globally in *zpreztorc*, you may disable it for certain +commands. + +To disable `ls` color, add the following line to *zpreztorc*; when coloring is +disabled, type indicators (\*, /, =>, @, =, |, %) will be appended to entries. + + zstyle ':prezto:module:utility:ls' color 'no' + +To disable `diff` highlighting, add the following line to *zpreztorc*: + + zstyle ':prezto:module:utility:diff' color 'no' + +To disable `wdiff` highlighting, add the following line to *zpreztorc*: + + zstyle ':prezto:module:utility:wdiff' color 'no' + +To disable `make` highlighting, add the following line to *zpreztorc*: + + zstyle ':prezto:module:utility:make' color 'no' + +Aliases +------- + +### Disabled Spelling Correction + + - `ack` + - `cd` + - `cp` + - `ebuild` + - `gcc` + - `gist` + - `grep` + - `heroku` + - `ln` + - `man` + - `mkdir` + - `mv` + - `mysql` + - `rm` + +### Disabled File Globbing + + - `bower` + - `fc` + - `find` + - `ftp` + - `history` + - `locate` + - `rake` + - `rsync` + - `scp` + - `sftp` + +### General + + - `_` executes a command as another user (`sudo`). + - `b` opens the default web browser. + - `cp` copies files and directories interactively. + - `e` opens the default editor. + - `ln` links files and directories interactively. + - `mkdir` creates directories, including intermediary directories. + - `mv` moves files and directories interactively. + - `p` opens the default pager. + - `po` removes a directory from the stack and changes to it (`popd`). + - `pu` changes the directory and pushes the old directory onto the stack + (`pushd`). + - `rm` removes files and directories interactively. + - `type` displays all the attribute values of a shell parameter. + +### Files and Directories + + - `ls` lists with directories grouped first (GNU only). + - `l` lists in one column, hidden files. + - `ll` lists human readable sizes. + - `lr` lists human readable sizes, recursively. + - `la` lists human readable sizes, hidden files. + - `lm` lists human readable sizes, hidden files through pager. + - `lx` lists sorted by extension (GNU only). + - `lk` lists sorted by size, largest last. + - `lt` lists sorted by date, most recent last. + - `lc` lists sorted by date, most recent last, shows change time. + - `lu` lists sorted by date, most recent last, shows access time. + - `sl` lists directory contents (`ls`). + +### Mac OS X Everywhere + + - `o` opens files and directories (`open` or `xdg-open`). + - `get` downloads files (`curl` or `wget`). + - `pbcopy` copies to the pasteboard (`pbcopy`, `xclip` or `xsel`). + - `pbpaste` pastes from the pasteboard (`pbcopy`, `xclip` or `xsel`). + - `pbc` copies to the pasteboard (`pbcopy`). + - `pbp` pastes from the pasteboard (`pbpaste`). + +### Resource Usage + + - `df` displays free disk space using human readable units. + - `du` displays disk usage using human readable units. + - `top` displays information about processes (aliased to `htop`, if installed). + - `topc` displays information about processes sorted by CPU usage (`htop` not + installed). + - `topm` displays information about processes sorted by RAM usage (`htop` not + installed). + +### Miscellaneous + + - `http-serve` serves a directory via HTTP. + +Functions +--------- + +### General + + - `slit` prints columns *1, 2, 3 ... n*. + +### Files and Directories + + - `cdls` changes to a directory and lists its contents. + - `dut` displays the grand total disk usage using human readable units. + - `find-exec` finds files and executes a command on them. + - `mkdcd` makes a directory and changes to it. + - `popdls` pops an entry off the directory stack and lists its contents. + - `pushdls` pushes an entry onto the directory stack and lists its contents. + +### Developer + + - `diff` highlights diff output (requires `colordiff` or `Git`). + - `make` highlights make output (requires `colormake`). + - `wdiff` highlights wdiff output (requires `wdiff `or `Git`). + +### Resource usage + + - `psu` displays user owned processes status. + +### Search and Replace + + - `prep` provides a grep-like pattern search. + - `psub` provides a sed-like pattern substitution. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Robby Russell](https://github.com/robbyrussell) + - [Suraj N. Kurapati](https://github.com/sunaku) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/utility/functions/_cdls_popdls_pushdls b/.zprezto/modules/utility/functions/_cdls_popdls_pushdls new file mode 100644 index 0000000..5f0fe60 --- /dev/null +++ b/.zprezto/modules/utility/functions/_cdls_popdls_pushdls @@ -0,0 +1,11 @@ +#compdef cdls popdls pushdls +#autoload + +# +# Completes cdls, popdls, and pushdls. +# +# Authors: +# Sorin Ionescu +# + +_cd diff --git a/.zprezto/modules/utility/functions/_dut b/.zprezto/modules/utility/functions/_dut new file mode 100644 index 0000000..180dde7 --- /dev/null +++ b/.zprezto/modules/utility/functions/_dut @@ -0,0 +1,11 @@ +#compdef dut +#autoload + +# +# Completes dut. +# +# Authors: +# Sorin Ionescu +# + +_du diff --git a/.zprezto/modules/utility/functions/_mkdcd b/.zprezto/modules/utility/functions/_mkdcd new file mode 100644 index 0000000..5273651 --- /dev/null +++ b/.zprezto/modules/utility/functions/_mkdcd @@ -0,0 +1,13 @@ +#compdef mkdcd +#autoload + +# +# Completes mkdcd. +# +# Authors: +# Sorin Ionescu +# + +local expl + +_wanted directories expl 'directory' _path_files -/ || _message 'directory' diff --git a/.zprezto/modules/utility/functions/_prep b/.zprezto/modules/utility/functions/_prep new file mode 100644 index 0000000..c9d6eda --- /dev/null +++ b/.zprezto/modules/utility/functions/_prep @@ -0,0 +1,18 @@ +#compdef prep +#autoload + +# +# Completes prep. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '-i[ignore case]' \ + '-m[^ and $ match the start and the end of a line]' \ + '-s[. matches newline]' \ + '-v[invert match]' \ + '-x[ignore whitespace and comments]' \ + '1::pattern:' \ + '2::files:_files' && return 0 diff --git a/.zprezto/modules/utility/functions/_psub b/.zprezto/modules/utility/functions/_psub new file mode 100644 index 0000000..c79899e --- /dev/null +++ b/.zprezto/modules/utility/functions/_psub @@ -0,0 +1,19 @@ +#compdef psub +#autoload + +# +# Completes psub. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '-g[match globally]' \ + '-i[ignore case]' \ + '-m[^ and $ match the start and the end of a line]' \ + '-s[. matches newline]' \ + '-x[ignore whitespace and comments]' \ + '1::pattern:' \ + '2::replacement:' \ + '3::files:_files' && return 0 diff --git a/.zprezto/modules/utility/functions/diff b/.zprezto/modules/utility/functions/diff new file mode 100644 index 0000000..8347899 --- /dev/null +++ b/.zprezto/modules/utility/functions/diff @@ -0,0 +1,22 @@ +# +# Highlights diff output. +# +# Authors: +# Sorin Ionescu +# + +function diff { + if zstyle -t ':prezto:module:utility:diff' color; then + if (( $+commands[colordiff] )); then + command diff --unified "$@" | colordiff --difftype diffu + elif (( $+commands[git] )); then + git --no-pager diff --color=auto --no-ext-diff --no-index "$@" + else + command diff --unified "$@" + fi + else + command diff --unified "$@" + fi +} + +diff "$@" diff --git a/.zprezto/modules/utility/functions/dut b/.zprezto/modules/utility/functions/dut new file mode 100644 index 0000000..6592280 --- /dev/null +++ b/.zprezto/modules/utility/functions/dut @@ -0,0 +1,27 @@ +# +# Displays the grand total disk usage using human readable units. +# +# Authors: +# Suraj N. Kurapati +# Sorin Ionescu +# + +function dut { + (( $# == 0 )) && set -- * + + if grep -q -i 'GNU' < <(du --version 2>&1); then + du -khsc "$@" | sort -h -r + else + local line size name + local -a record + + while IFS=$'\n' read line; do + record=(${(z)line}) + size="$(($record[1] / 1024.0))" + name="$record[2,-1]" + printf "%9.1LfM %s\n" "$size" "$name" + done < <(du -kcs "$@") | sort -n -r + fi +} + +dut "$@" diff --git a/.zprezto/modules/utility/functions/make b/.zprezto/modules/utility/functions/make new file mode 100644 index 0000000..5ebab05 --- /dev/null +++ b/.zprezto/modules/utility/functions/make @@ -0,0 +1,20 @@ +# +# Highlights make output. +# +# Authors: +# Sorin Ionescu +# + +function make { + if zstyle -t ':prezto:module:utility:make' color; then + if (( $+commands[colormake] )); then + colormake "$@" + else + command make "$@" + fi + else + command make "$@" + fi +} + +make "$@" diff --git a/.zprezto/modules/utility/functions/prep b/.zprezto/modules/utility/functions/prep new file mode 100644 index 0000000..23028ec --- /dev/null +++ b/.zprezto/modules/utility/functions/prep @@ -0,0 +1,52 @@ +# +# Provides a grep-like pattern search. +# +# Authors: +# Sorin Ionescu +# + +local usage pattern modifiers invert + +usage="$( +cat <&2 + print "$usage" >&2 + return 1 + ;; + ([?]) + print "$0: unknown option: $OPTARG" >&2 + print "$usage" >&2 + return 1 + ;; + esac +done +shift $(( $OPTIND - 1 )) + +if (( $# < 1 )); then + print "$usage" >&2 + return 1 +fi + +pattern="$1" +shift + +perl -n -l -e "print if ${invert:+not} m/${pattern//\//\\/}/${modifiers}" "$@" diff --git a/.zprezto/modules/utility/functions/psub b/.zprezto/modules/utility/functions/psub new file mode 100644 index 0000000..ffc0108 --- /dev/null +++ b/.zprezto/modules/utility/functions/psub @@ -0,0 +1,53 @@ +# +# Provides a sed-like pattern substitution. +# +# Authors: +# Sorin Ionescu +# + +local usage pattern replacement modifiers + +usage="$( +cat <&2 + print "$usage" >&2 + return 1 + ;; + ([?]) + print "$0: unknown option: $OPTARG" >&2 + print "$usage" >&2 + return 1 + ;; + esac +done +shift $(( $OPTIND - 1 )) + +if (( $# < 2 )); then + print "$usage" >&2 + return 1 +fi + +pattern="$1" +replacement="$2" +repeat 2 shift + +perl -i'.orig' -n -l -e "s/${pattern//\//\\/}/${replacement//\//\\/}/${modifiers}; print" "$@" diff --git a/.zprezto/modules/utility/functions/wdiff b/.zprezto/modules/utility/functions/wdiff new file mode 100644 index 0000000..c93ead1 --- /dev/null +++ b/.zprezto/modules/utility/functions/wdiff @@ -0,0 +1,29 @@ +# +# Highlights wdiff output. +# +# Authors: +# Sorin Ionescu +# + +function wdiff { + if zstyle -t ':prezto:module:utility:wdiff' color; then + if (( $+commands[wdiff] )); then + command wdiff \ + --avoid-wraps \ + --start-delete="$(print -n $FG[red])" \ + --end-delete="$(print -n $FG[none])" \ + --start-insert="$(print -n $FG[green])" \ + --end-insert="$(print -n $FG[none])" \ + "$@" \ + | sed 's/^\(@@\( [+-][[:digit:]]*,[[:digit:]]*\)\{2\} @@\)$/;5;6m\10m/g' + elif (( $+commands[git] )); then + git --no-pager diff --color=auto --no-ext-diff --no-index --color-words "$@" + else + command wdiff "$@" + fi + else + command wdiff "$@" + fi +} + +wdiff "$@" diff --git a/.zprezto/modules/utility/init.zsh b/.zprezto/modules/utility/init.zsh new file mode 100644 index 0000000..2402a43 --- /dev/null +++ b/.zprezto/modules/utility/init.zsh @@ -0,0 +1,196 @@ +# +# Defines general aliases and functions. +# +# Authors: +# Robby Russell +# Suraj N. Kurapati +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'helper' 'spectrum' + +# Correct commands. +setopt CORRECT + +# +# Aliases +# + +# Disable correction. +alias ack='nocorrect ack' +alias cd='nocorrect cd' +alias cp='nocorrect cp' +alias ebuild='nocorrect ebuild' +alias gcc='nocorrect gcc' +alias gist='nocorrect gist' +alias grep='nocorrect grep' +alias heroku='nocorrect heroku' +alias ln='nocorrect ln' +alias man='nocorrect man' +alias mkdir='nocorrect mkdir' +alias mv='nocorrect mv' +alias mysql='nocorrect mysql' +alias rm='nocorrect rm' + +# Disable globbing. +alias bower='noglob bower' +alias fc='noglob fc' +alias find='noglob find' +alias ftp='noglob ftp' +alias history='noglob history' +alias locate='noglob locate' +alias rake='noglob rake' +alias rsync='noglob rsync' +alias scp='noglob scp' +alias sftp='noglob sftp' + +# Define general aliases. +alias _='sudo' +alias b='${(z)BROWSER}' +alias e='${(z)VISUAL:-${(z)EDITOR}}' +alias mkdir="${aliases[mkdir]:-mkdir} -p" +alias p='${(z)PAGER}' +alias po='popd' +alias pu='pushd' +alias type='type -a' + +# ls +if is-callable 'dircolors'; then + # GNU Core Utilities + alias ls='ls --group-directories-first' + + if zstyle -t ':prezto:module:utility:ls' color; then + if [[ -s "$HOME/.dir_colors" ]]; then + eval "$(dircolors --sh "$HOME/.dir_colors")" + else + eval "$(dircolors --sh)" + fi + + alias ls="${aliases[ls]:-ls} --color=auto" + else + alias ls="${aliases[ls]:-ls} -F" + fi +else + # BSD Core Utilities + if zstyle -t ':prezto:module:utility:ls' color; then + # Define colors for BSD ls. + export LSCOLORS='exfxcxdxbxGxDxabagacad' + + # Define colors for the completion system. + export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:' + + alias ls="${aliases[ls]:-ls} -G" + else + alias ls="${aliases[ls]:-ls} -F" + fi +fi + +alias l='ls -lAh' # Lists in one column, hidden files. +alias ll='ls -lh' # Lists human readable sizes. +alias lr='ll -R' # Lists human readable sizes, recursively. +alias la='ll -A' # Lists human readable sizes, hidden files. +alias lm='la | "$PAGER"' # Lists human readable sizes, hidden files through pager. +alias lx='ll -XB' # Lists sorted by extension (GNU only). +alias lk='ll -Sr' # Lists sorted by size, largest last. +alias lt='ll -tr' # Lists sorted by date, most recent last. +alias lc='lt -c' # Lists sorted by date, most recent last, shows change time. +alias lu='lt -u' # Lists sorted by date, most recent last, shows access time. +alias sl='ls' # I often screw this up. + +# Grep +if zstyle -t ':prezto:module:utility:grep' color; then + export GREP_COLOR='37;45' # BSD. + export GREP_COLORS="mt=$GREP_COLOR" # GNU. + + alias grep="${aliases[grep]:-grep} --color=auto" +fi + +# Mac OS X Everywhere +if [[ "$OSTYPE" == darwin* ]]; then + alias o='open' +elif [[ "$OSTYPE" == cygwin* ]]; then + alias o='cygstart' + alias pbcopy='tee > /dev/clipboard' + alias pbpaste='cat /dev/clipboard' +else + alias o='xdg-open' + + if (( $+commands[xclip] )); then + alias pbcopy='xclip -selection clipboard -in' + alias pbpaste='xclip -selection clipboard -out' + elif (( $+commands[xsel] )); then + alias pbcopy='xsel --clipboard --input' + alias pbpaste='xsel --clipboard --output' + fi +fi + +alias pbc='pbcopy' +alias pbp='pbpaste' + +# File Download +if (( $+commands[curl] )); then + alias get='curl --continue-at - --location --progress-bar --remote-name --remote-time' +elif (( $+commands[wget] )); then + alias get='wget --continue --progress=bar --timestamping' +fi + +# Resource Usage +alias df='df -kh' +alias du='du -kh' + +if (( $+commands[htop] )); then + alias top=htop +else + if [[ "$OSTYPE" == (darwin*|*bsd*) ]]; then + alias topc='top -o cpu' + alias topm='top -o vsize' + else + alias topc='top -o %CPU' + alias topm='top -o %MEM' + fi +fi + +# Miscellaneous + +# Serves a directory via HTTP. +alias http-serve='python -m SimpleHTTPServer' + +# +# Functions +# + +# Makes a directory and changes to it. +function mkdcd { + [[ -n "$1" ]] && mkdir -p "$1" && builtin cd "$1" +} + +# Changes to a directory and lists its contents. +function cdls { + builtin cd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Pushes an entry onto the directory stack and lists its contents. +function pushdls { + builtin pushd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Pops an entry off the directory stack and lists its contents. +function popdls { + builtin popd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Prints columns 1 2 3 ... n. +function slit { + awk "{ print ${(j:,:):-\$${^@}} }" +} + +# Finds files and executes a command on them. +function find-exec { + find . -type f -iname "*${1:-}*" -exec "${2:-file}" '{}' \; +} + +# Displays user owned processes status. +function psu { + ps -U "${1:-$LOGNAME}" -o 'pid,%cpu,%mem,command' "${(@)argv[2,-1]}" +} diff --git a/.zprezto/modules/wakeonlan/README.md b/.zprezto/modules/wakeonlan/README.md new file mode 100644 index 0000000..9bde199 --- /dev/null +++ b/.zprezto/modules/wakeonlan/README.md @@ -0,0 +1,36 @@ +Wake-on-LAN +=========== + +This module provides a wrapper around the [wakeonlan][1] tool. + +Usage +----- + +To use this wrapper, create the *~/.wakeonlan* directory, and place in it one +file for each device you would like to be able to wake. Give the file a name +that describes the device, such as its hostname. + +Each file should contain a line with the MAC address of the target device and +the network broadcast address. For instance, there might be a file +*~/.wakeonlan/leto* with the following contents: + + 00:11:22:33:44:55:66 192.168.0.255 + +To wake that device, use the following command: + + wake leto + +For more information on the configuration file format, read the +[wakeonlan man page][2]. + +Authors +------- + +*The authors of this module should be contacted via [issue tracker][3].* + + - [Paul Dann](https://github.com/giddie) + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://gsd.di.uminho.pt/jpo/software/wakeonlan/ +[2]: http://man.cx/wakeonlan +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/wakeonlan/functions/_wake b/.zprezto/modules/wakeonlan/functions/_wake new file mode 100644 index 0000000..87e1a36 --- /dev/null +++ b/.zprezto/modules/wakeonlan/functions/_wake @@ -0,0 +1,12 @@ +#compdef wake +#autoload + +# +# Completes wake. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# + +_arguments "1:device to wake:_files -W '$HOME/.wakeonlan'" && return 0 diff --git a/.zprezto/modules/wakeonlan/functions/wake b/.zprezto/modules/wakeonlan/functions/wake new file mode 100644 index 0000000..5259c95 --- /dev/null +++ b/.zprezto/modules/wakeonlan/functions/wake @@ -0,0 +1,20 @@ +# +# Wakes devices via wakeonlan. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# + +local config_file="$HOME/.wakeonlan/$1" +if [[ ! -s "$config_file" ]]; then + print "$0: invalid device file: $1" >&2 + return 1 +fi + +if (( ! $+commands[wakeonlan] )); then + print "$0: command not found: wakeonlan" >&2 + return 1 +fi + +wakeonlan -f "$config_file" diff --git a/.zprezto/modules/yum/README.md b/.zprezto/modules/yum/README.md new file mode 100644 index 0000000..fa944da --- /dev/null +++ b/.zprezto/modules/yum/README.md @@ -0,0 +1,28 @@ +Yum +=== + +Defines [yum][1] aliases. + +Aliases +------- + + - `yumc` removes package(s) and leaves. + - `yumi` installs package(s). + - `yumh` displays history. + - `yuml` lists packages. + - `yumL` lists installed packages. + - `yumq` displays package information. + - `yumr` removes package(s). + - `yums` searches for a package. + - `yumu` updates packages. + - `yumU` upgrades packages. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][2].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://yum.baseurl.org +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/modules/yum/init.zsh b/.zprezto/modules/yum/init.zsh new file mode 100644 index 0000000..2f5427d --- /dev/null +++ b/.zprezto/modules/yum/init.zsh @@ -0,0 +1,27 @@ +# +# Defines yum aliases. +# +# Authors: +# Simon +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[yum] )); then + return 1 +fi + +# +# Aliases +# + +alias yumc='sudo yum clean all' # Cleans the cache. +alias yumh='yum history' # Displays history. +alias yumi='sudo yum install' # Installs package(s). +alias yuml='yum list' # Lists packages. +alias yumL='yum list installed' # Lists installed packages. +alias yumq='yum info' # Displays package information. +alias yumr='sudo yum remove' # Removes package(s). +alias yums='yum search' # Searches for a package. +alias yumu='sudo yum update' # Updates packages. +alias yumU='sudo yum upgrade' # Upgrades packages. diff --git a/.zprezto/runcoms/README.md b/.zprezto/runcoms/README.md new file mode 100644 index 0000000..9df890e --- /dev/null +++ b/.zprezto/runcoms/README.md @@ -0,0 +1,79 @@ +Configuration Files +=================== + +Zsh has several system-wide and user-local configuration files. + +Prezto has one user-local configuration file. + +System-wide configuration files are installation-dependent but are installed +in */etc* by default. + +User-local configuration files have the same name as their global counterparts +but are prefixed with a dot (hidden). Zsh looks for these files in the path +stored in the `$ZDOTDIR` environmental variable. However, if said variable is +not defined, Zsh will use the user's home directory. + +File Descriptions +----------------- + +The configuration files are read in the following order: + + 01. /etc/zshenv + 02. ~/.zshenv + 03. /etc/zprofile + 04. ~/.zprofile + 05. /etc/zshrc + 06. ~/.zshrc + 07. ~/.zpreztorc + 08. /etc/zlogin + 09. ~/.zlogin + 10. ~/.zlogout + 11. /etc/zlogout + +### zshenv + +This file is sourced by all instances of Zsh, and thus, it should be kept as +small as possible and should only define environment variables. + +### zprofile + +This file is similar to zlogin, but it is sourced before zshrc. It was added +for [KornShell][1] fans. See the description of zlogin below for what it may +contain. + +zprofile and zlogin are not meant to be used concurrently but can be done so. + +### zshrc + +This file is sourced by interactive shells. It should define aliases, +functions, shell options, and key bindings. + +### zpreztorc + +This file configures Prezto. + +### zlogin + +This file is sourced by login shells after zshrc, and thus, it should contain +commands that need to execute at login. It is usually used for messages such as +[fortune][2], [msgs][3], or for the creation of files. + +This is not the file to define aliases, functions, shell options, and key +bindings. It should not change the shell environment. + +### zlogout + +This file is sourced by login shells during logout. It should be used for +displaying messages and the deletion of files. + +Authors +------- + +*The authors of these files should be contacted via the [issue tracker][4].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.kornshell.com +[2]: http://en.wikipedia.org/wiki/Fortune_(Unix) +[3]: http://www.manpagez.com/man/1/msgs +[4]: https://github.com/sorin-ionescu/prezto/issues diff --git a/.zprezto/runcoms/zlogin b/.zprezto/runcoms/zlogin new file mode 100644 index 0000000..c914107 --- /dev/null +++ b/.zprezto/runcoms/zlogin @@ -0,0 +1,15 @@ +# +# Executes commands at login post-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# Execute code that does not affect the current session in the background. +{ + # Compile the completion dump to increase startup speed. + zcompdump="${ZDOTDIR:-$HOME}/.zcompdump" + if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then + zcompile "$zcompdump" + fi +} &! diff --git a/.zprezto/runcoms/zlogout b/.zprezto/runcoms/zlogout new file mode 100644 index 0000000..7c27e88 --- /dev/null +++ b/.zprezto/runcoms/zlogout @@ -0,0 +1,13 @@ +# +# Executes commands at logout. +# +# Authors: +# Sorin Ionescu +# + +# Print the message. +cat <<-EOF + +Thank you. Come again! + -- Dr. Apu Nahasapeemapetilon +EOF diff --git a/.zprezto/runcoms/zpreztorc b/.zprezto/runcoms/zpreztorc new file mode 100644 index 0000000..77b4272 --- /dev/null +++ b/.zprezto/runcoms/zpreztorc @@ -0,0 +1,174 @@ +# +# Sets Prezto options. +# +# Authors: +# Sorin Ionescu +# + +# +# General +# + +# Set case-sensitivity for completion, history lookup, etc. +# zstyle ':prezto:*:*' case-sensitive 'yes' + +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + +# Set the Zsh modules to load (man zshmodules). +# zstyle ':prezto:load' zmodule 'attr' 'stat' + +# Set the Zsh functions to load (man zshcontrib). +# zstyle ':prezto:load' zfunction 'zargs' 'zmv' + +# Set the Prezto modules to load (browse modules). +# The order matters. +zstyle ':prezto:load' pmodule \ + 'environment' \ + 'terminal' \ + 'editor' \ + 'history' \ + 'directory' \ + 'spectrum' \ + 'utility' \ + 'ssh' \ + 'completion' \ + 'homebrew' \ + 'osx' \ + 'ruby' \ + 'rails' \ + 'git' \ + 'syntax-highlighting' \ + 'history-substring-search' \ + 'prompt' + +# +# Autosuggestions +# + +# Set the query found color. +# zstyle ':prezto:module:autosuggestions:color' found '' + +# +# Editor +# + +# Set the key mapping style to 'emacs' or 'vi'. +zstyle ':prezto:module:editor' key-bindings 'emacs' + +# Auto convert .... to ../.. +# zstyle ':prezto:module:editor' dot-expansion 'yes' + +# +# Git +# + +# Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'. +# zstyle ':prezto:module:git:status:ignore' submodules 'all' + +# +# GNU Utility +# + +# Set the command prefix on non-GNU systems. +# zstyle ':prezto:module:gnu-utility' prefix 'g' + +# +# History Substring Search +# + +# Set the query found color. +# zstyle ':prezto:module:history-substring-search:color' found '' + +# Set the query not found color. +# zstyle ':prezto:module:history-substring-search:color' not-found '' + +# Set the search globbing flags. +# zstyle ':prezto:module:history-substring-search' globbing-flags '' + +# +# Pacman +# + +# Set the Pacman frontend. +# zstyle ':prezto:module:pacman' frontend 'yaourt' + +# +# Prompt +# + +# Set the prompt theme to load. +# Setting it to 'random' loads a random theme. +# Auto set to 'off' on dumb terminals. +#zstyle ':prezto:module:prompt' theme 'sorin' +zstyle ':prezto:module:prompt' theme 'abra' + +# +# Ruby +# + +# Auto switch the Ruby version on directory change. +# zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' + +# +# Screen +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:screen:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:screen:auto-start' remote 'yes' + +# +# SSH +# + +# Set the SSH identities to load into the agent. +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github' + +# +# Syntax Highlighting +# + +# Set syntax highlighters. +# By default, only the main highlighter is enabled. +# zstyle ':prezto:module:syntax-highlighting' highlighters \ +# 'main' \ +# 'brackets' \ +# 'pattern' \ +# 'line' \ +# 'cursor' \ +# 'root' +# +# Set syntax highlighting styles. +# zstyle ':prezto:module:syntax-highlighting' styles \ +# 'builtin' 'bg=blue' \ +# 'command' 'bg=blue' \ +# 'function' 'bg=blue' + +# +# Terminal +# + +# Auto set the tab and window titles. +# zstyle ':prezto:module:terminal' auto-title 'yes' + +# Set the window title format. +# zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + +# Set the tab title format. +# zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +# +# Tmux +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:tmux:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +# Integrate with iTerm2. +zstyle ':prezto:module:tmux:iterm' integrate 'yes' diff --git a/.zprezto/runcoms/zprofile b/.zprezto/runcoms/zprofile new file mode 100644 index 0000000..29c8030 --- /dev/null +++ b/.zprezto/runcoms/zprofile @@ -0,0 +1,79 @@ +# +# Executes commands at login pre-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# +# Browser +# + +if [[ "$OSTYPE" == darwin* ]]; then + export BROWSER='open' +fi + +# +# Editors +# + +export EDITOR='nano' +export VISUAL='nano' +export PAGER='less' + +# +# Language +# + +if [[ -z "$LANG" ]]; then + export LANG='en_US.UTF-8' +fi + +# +# Paths +# + +# Ensure path arrays do not contain duplicates. +typeset -gU cdpath fpath mailpath path + +# Set the the list of directories that cd searches. +# cdpath=( +# $cdpath +# ) + +# Set the list of directories that Zsh searches for programs. +path=( + /usr/local/{bin,sbin} + $path +) + +# +# Less +# + +# Set the default Less options. +# Mouse-wheel scrolling has been disabled by -X (disable screen clearing). +# Remove -X and -F (exit if the content fits on one screen) to enable it. +export LESS='-F -g -i -M -R -S -w -X -z-4' + +# Set the Less input preprocessor. +# Try both `lesspipe` and `lesspipe.sh` as either might exist on a system. +if (( $#commands[(i)lesspipe(|.sh)] )); then + export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" +fi + +# +# Temporary Files +# + +if [[ ! -d "$TMPDIR" ]]; then + export TMPDIR="/tmp/$LOGNAME" + mkdir -p -m 700 "$TMPDIR" +fi + +TMPPREFIX="${TMPDIR%/}/zsh" + +# Setting PATH for Python 3.5 +# The orginal version is saved in .zprofile.pysave +PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}" +export PATH diff --git a/.zprezto/runcoms/zshenv b/.zprezto/runcoms/zshenv new file mode 100644 index 0000000..2d97203 --- /dev/null +++ b/.zprezto/runcoms/zshenv @@ -0,0 +1,11 @@ +# +# Defines environment variables. +# +# Authors: +# Sorin Ionescu +# + +# Ensure that a non-login, non-interactive shell has a defined environment. +if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then + source "${ZDOTDIR:-$HOME}/.zprofile" +fi diff --git a/.zprezto/runcoms/zshrc b/.zprezto/runcoms/zshrc new file mode 100644 index 0000000..7dc76bd --- /dev/null +++ b/.zprezto/runcoms/zshrc @@ -0,0 +1,122 @@ +# Source Prezto. +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi + +unsetopt CORRECT +# Now we can pipe to multiple outputs! +setopt MULTIOS +# This makes cd=pushd +setopt AUTO_PUSHD +# This will use named dirs when possible +setopt AUTO_NAME_DIRS +# If we have a glob this will expand it +setopt GLOB_COMPLETE +# use magic (this is default, but it can't hurt!) +setopt ZLE +setopt NO_HUP +# setopt IGNORE_EOF +# If I could disable Ctrl-s completely I would! +setopt NO_FLOW_CONTROL +unsetopt normstarsilent + +## Keep echo "station" > station from clobbering station +#setopt NO_CLOBBER +setopt CLOBBER + +# No ! voodoo +unsetopt bang_hist + +# Case insensitive globbing +setopt NO_CASE_GLOB +# Be Reasonable! +setopt NUMERIC_GLOB_SORT +# I don't know why I never set this before. +setopt EXTENDED_GLOB +# hows about arrays be awesome? (that is, frew${cool}frew has frew surrounding all the variables, not just first and last +setopt RC_EXPAND_PARAM +# Who doesn't want home and end to work? +bindkey '\e[1~' beginning-of-line +bindkey '\e[4~' end-of-line + +bindkey "\eOH" beginning-of-line +bindkey "\eOF" end-of-line + + +# --------------------------------------- ALIASES -------------------------------------------------- + +# aliases +alias g="git" +alias a="git add --all :/" +alias b="git branch" +alias c="git commit -am" +alias ch="git checkout" +alias pull="git pull" +# alias m="git merge --no-ff" +alias rb="git reset HEAD --hard" +alias s="git status" +alias st="git stash" + +alias g5="git5" +alias e="git5 export" +alias m="git5 merge --no-ff" +alias ma="git5 mail -m" +alias push="git5 submit -xy" +# alias push="git submit -xy" +alias dc="a && c \"dummy comment\"" + +alias zshconfig="subl ~/.zshrc" +alias zshreload="exec zsh" + +alias tarc="tar cvzf" +alias rcp="rsync --partial --progress --append --rsh=ssh -r -h" +alias rmv="rsync --partial --progress --append --rsh=ssh -r -h --remove-sent-files" + +alias pythonserve="sudo python -m SimpleHTTPServer 80" + +# replace +alias sg='perl -0pe' + +alias clbin="curl -F 'clbin=<-' https://clbin.com" + +alias afs="unmount-abra0; mount-abra0;" + +alias dotgit='git --git-dir=$HOME/.dotgit/ --work-tree=$HOME' + +function dotgit-init() { + git init --bare $HOME/.dotgit + dotgit config --local status.showUntrackedFiles no +} + +function twitch() { + livestreamer "http://www.twitch.tv/$1" source &! +} + +function is_local() { + [[ $(hostname) == "abra0.local" ]] +} + +function make_user() { + if is_local; then + echo "You're local" + return 1 + fi + + adduser --system --shell /bin/zsh --disabled-password $1 || return 1 + + wget abra.me/.dotfiles.tar.gz -O /home/$1/.dotfiles.tar.gz + tar xf /home/$1/.dotfiles.tar.gz -C /home/$1 + chown $1:nogroup -R /home/$1/ +} + +fucntion hihi() { + cd a +} + +# ----------------------------------- END ALIASES -------------------------------------------------- +export EDITOR=/usr/bin/vim +export PATH=$PATH:$HOME/bin:$HOME/brew/bin + +# added by travis gem +[ -f /Users/abra/.travis/travis.sh ] && source /Users/abra/.travis/travis.sh + diff --git a/.zpreztorc b/.zpreztorc new file mode 120000 index 0000000..fb46b62 --- /dev/null +++ b/.zpreztorc @@ -0,0 +1 @@ +.zprezto/runcoms/zpreztorc \ No newline at end of file diff --git a/.zprofile b/.zprofile new file mode 120000 index 0000000..b085555 --- /dev/null +++ b/.zprofile @@ -0,0 +1 @@ +.zprezto/runcoms/zprofile \ No newline at end of file diff --git a/.zprofile.pysave b/.zprofile.pysave new file mode 100644 index 0000000..d87cb3b --- /dev/null +++ b/.zprofile.pysave @@ -0,0 +1,74 @@ +# +# Executes commands at login pre-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# +# Browser +# + +if [[ "$OSTYPE" == darwin* ]]; then + export BROWSER='open' +fi + +# +# Editors +# + +export EDITOR='nano' +export VISUAL='nano' +export PAGER='less' + +# +# Language +# + +if [[ -z "$LANG" ]]; then + export LANG='en_US.UTF-8' +fi + +# +# Paths +# + +# Ensure path arrays do not contain duplicates. +typeset -gU cdpath fpath mailpath path + +# Set the the list of directories that cd searches. +# cdpath=( +# $cdpath +# ) + +# Set the list of directories that Zsh searches for programs. +path=( + /usr/local/{bin,sbin} + $path +) + +# +# Less +# + +# Set the default Less options. +# Mouse-wheel scrolling has been disabled by -X (disable screen clearing). +# Remove -X and -F (exit if the content fits on one screen) to enable it. +export LESS='-F -g -i -M -R -S -w -X -z-4' + +# Set the Less input preprocessor. +# Try both `lesspipe` and `lesspipe.sh` as either might exist on a system. +if (( $#commands[(i)lesspipe(|.sh)] )); then + export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" +fi + +# +# Temporary Files +# + +if [[ ! -d "$TMPDIR" ]]; then + export TMPDIR="/tmp/$LOGNAME" + mkdir -p -m 700 "$TMPDIR" +fi + +TMPPREFIX="${TMPDIR%/}/zsh" diff --git a/.zshenv b/.zshenv new file mode 120000 index 0000000..2ffffef --- /dev/null +++ b/.zshenv @@ -0,0 +1 @@ +.zprezto/runcoms/zshenv \ No newline at end of file diff --git a/.zshrc b/.zshrc new file mode 120000 index 0000000..ff7ceae --- /dev/null +++ b/.zshrc @@ -0,0 +1 @@ +.zprezto/runcoms/zshrc \ No newline at end of file