From 2808949f261d136b87cb7c0aefe9ffa4b8b31d56 Mon Sep 17 00:00:00 2001 From: svxf Date: Sun, 18 Nov 2018 23:37:19 +0400 Subject: [PATCH] update prezto --- .zprezto/README.md | 15 +- .zprezto/modules/archive/README.md | 6 +- .zprezto/modules/autosuggestions/README.md | 5 - .zprezto/modules/command-not-found/README.md | 7 +- .zprezto/modules/completion/README.md | 13 + .../completion/external/CONTRIBUTING.md | 39 + .../modules/completion/external/README.md | 31 +- .../modules/completion/external/src/_afew | 42 +- .../modules/completion/external/src/_ansible | 18 +- .../completion/external/src/_ansible-galaxy | 2 +- .../completion/external/src/_ansible-playbook | 20 +- .../modules/completion/external/src/_bower | 107 +- .../completion/external/src/_caffeinate | 2 +- .../modules/completion/external/src/_ccache | 325 +++ .../modules/completion/external/src/_chromium | 211 ++ .../modules/completion/external/src/_cmake | 73 +- .../modules/completion/external/src/_conan | 626 ++++++ .../completion/external/src/_ecdsautil | 53 + .../modules/completion/external/src/_flutter | 442 ++++ .zprezto/modules/completion/external/src/_ghc | 6 +- .../modules/completion/external/src/_glances | 50 +- .zprezto/modules/completion/external/src/_go | 554 ----- .../modules/completion/external/src/_golang | 646 ++++++ .../modules/completion/external/src/_hledger | 286 +++ .../external/src/_include-what-you-use | 65 + .zprezto/modules/completion/external/src/_kak | 6 +- .../modules/completion/external/src/_node | 64 +- .../modules/completion/external/src/_paste | 58 - .../completion/external/src/_pgsql_utils | 3 +- .../modules/completion/external/src/_port | 5 +- .../modules/completion/external/src/_rclone | 119 - .../modules/completion/external/src/_rspec | 7 +- .zprezto/modules/completion/external/src/_scl | 81 - .../modules/completion/external/src/_scons | 72 + .../modules/completion/external/src/_sfdx | 935 ++++++++ .../completion/external/src/_ssh-copy-id | 34 - .../modules/completion/external/src/_stack | 88 +- .../modules/completion/external/src/_subl | 31 +- .../modules/completion/external/src/_tarsnap | 64 + .../modules/completion/external/src/_tmuxp | 133 ++ .zprezto/modules/completion/external/src/_tox | 61 + .../completion/external/src/_trash-list | 14 +- .../completion/external/src/_trash-put | 24 +- .../completion/external/src/_udisksctl | 97 +- .zprezto/modules/completion/external/src/_ufw | 59 +- .../modules/completion/external/src/_virsh | 278 --- .../modules/completion/external/src/_vnstat | 94 +- .../modules/completion/external/src/_vpnc | 6 +- .../modules/completion/external/src/_wg-quick | 25 + .../modules/completion/external/src/_yaourt | 130 +- .../modules/completion/external/src/_yarn | 22 +- .../completion/external/src/_zcash-cli | 43 +- .../external/zsh-completions-howto.org | 75 +- .zprezto/modules/completion/init.zsh | 2 +- .zprezto/modules/editor/README.md | 12 +- .zprezto/modules/environment/README.md | 36 +- .zprezto/modules/environment/init.zsh | 2 +- .zprezto/modules/git/functions/git-info | 15 +- .../external/README.md | 45 +- .../zsh-history-substring-search.plugin.zsh | 2 + .../external/zsh-history-substring-search.zsh | 102 +- .zprezto/modules/history/README.md | 14 +- .zprezto/modules/history/init.zsh | 16 +- .zprezto/modules/homebrew/README.md | 14 +- .zprezto/modules/homebrew/init.zsh | 31 +- .../prompt/external/agnoster/README.md | 47 + .../external/agnoster/agnoster.zsh-theme | 20 +- .../agnoster/agnoster_customization.gif | Bin 0 -> 1758977 bytes .../modules/prompt/external/async/README.md | 8 + .../modules/prompt/external/async/async.zsh | 91 +- .../prompt/external/async/async_test.zsh | 39 +- .../prompt/external/powerlevel9k/CHANGELOG.md | 18 + .../prompt/external/powerlevel9k/README.md | 32 +- .../prompt/external/powerlevel9k/TESTS.md | 44 +- .../powerlevel9k/debug/font-issues.zsh | 337 ++- .../powerlevel9k/docker/base-5.0.3/Dockerfile | 2 +- .../powerlevel9k/docker/base-5.1.1/Dockerfile | 2 +- .../powerlevel9k/docker/base-5.2/Dockerfile | 4 +- .../powerlevel9k/docker/base-5.3.1/Dockerfile | 40 + .../powerlevel9k/docker/base-5.4.2/Dockerfile | 35 + .../powerlevel9k/docker/base-5.5.1/Dockerfile | 35 + .../powerlevel9k/docker/prezto/install.zsh | 2 +- .../powerlevel9k/docker/zshing/Dockerfile | 7 + .../powerlevel9k/docker/zshing/install.zsh | 16 + .../powerlevel9k/functions/colors.zsh | 615 +++--- .../external/powerlevel9k/functions/icons.zsh | 108 +- .../powerlevel9k/functions/utilities.zsh | 4 +- .../powerlevel9k/powerlevel9k.zsh-theme | 251 ++- .../powerlevel9k/prompt_powerlevel9k_setup | 1913 +---------------- .../powerlevel9k/shunit2/CODE_OF_CONDUCT.md | 46 + .../external/powerlevel9k/shunit2/LICENSE | 201 ++ .../external/powerlevel9k/shunit2/README.md | 434 ++++ .../CHANGES-2.1.txt => doc/CHANGES-2.1.md} | 142 +- .../2.1 => }/doc/RELEASE_NOTES-2.1.0.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.1.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.2.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.3.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.4.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.5.txt | 0 .../2.1 => }/doc/RELEASE_NOTES-2.1.6.txt | 0 .../shunit2/doc/RELEASE_NOTES-2.1.7.md | 62 + .../shunit2/{source/2.1 => }/doc/TODO.txt | 0 .../powerlevel9k/shunit2/doc/contributors.md | 15 + .../{source/2.1 => }/doc/design_doc.txt | 0 .../shunit2/{source/2.1 => }/doc/shunit2.html | 2 +- .../shunit2/{source/2.1 => }/doc/shunit2.txt | 10 +- .../2.1 => }/examples/equality_test.sh | 7 +- .../shunit2/examples/lineno_test.sh | 15 + .../{source/2.1 => }/examples/math.inc | 0 .../{source/2.1 => }/examples/math_test.sh | 16 +- .../{source/2.1 => }/examples/mkdir_test.sh | 34 +- .../shunit2/examples/mock_file.sh | 80 + .../shunit2/examples/mock_file_test.sh | 33 + .../shunit2/examples/party_test.sh | 16 + .../shunit2/examples/suite_test.sh | 32 + .../powerlevel9k/shunit2/gen_test_report.sh | 88 + .../shunit2/{source/2.1 => }/lib/shflags | 518 +++-- .../shunit2/{source/2.1 => }/lib/shlib | 0 .../powerlevel9k/shunit2/lib/versions | 272 +++ .../shunit2/{source/2.1/src => }/shunit2 | 612 +++--- ...est_asserts.sh => shunit2_asserts_test.sh} | 63 +- ...t_failures.sh => shunit2_failures_test.sh} | 40 +- ..._test_macros.sh => shunit2_macros_test.sh} | 151 +- .../powerlevel9k/shunit2/shunit2_misc_test.sh | 262 +++ ...andalone.sh => shunit2_standalone_test.sh} | 39 +- .../{source/2.1/src => }/shunit2_test_helpers | 143 +- .../powerlevel9k/shunit2/source/2.0/Makefile | 89 - .../shunit2/source/2.0/bin/docbookPrep.sh | 97 - .../shunit2/source/2.0/bin/extractDocs.pl | 40 - .../powerlevel9k/shunit2/source/2.0/bin/which | 36 - .../shunit2/source/2.0/doc/CHANGES-2.0.txt | 68 - .../shunit2/source/2.0/doc/LGPL-2.1 | 504 ----- .../shunit2/source/2.0/doc/README.txt | 153 -- .../source/2.0/doc/RELEASE_NOTES-2.0.0.txt | 71 - .../source/2.0/doc/RELEASE_NOTES-2.0.1.txt | 73 - .../source/2.0/doc/RELEASE_NOTES-2.0.2.txt | 71 - .../source/2.0/doc/RELEASE_NOTES-2.0.3.txt | 60 - .../source/2.0/doc/RELEASE_NOTES-2.0.4.txt | 51 - .../shunit2/source/2.0/doc/TODO.txt | 5 - .../shunit2/source/2.0/doc/contributors.txt | 10 - .../shunit2/source/2.0/doc/design_doc.txt | 54 - .../shunit2/source/2.0/doc/shunit2.html | 218 -- .../shunit2/source/2.0/doc/style.css | 33 - .../shunit2/source/2.0/lib/sh/shlib | 23 - .../tldp-xsl/21MAR2004/fo/tldp-print.xsl | 26 - .../tldp-xsl/21MAR2004/html/tldp-common.xsl | 22 - .../tldp-xsl/21MAR2004/html/tldp-one-page.xsl | 13 - .../source/2.0/share/resources/shelldoc.xslt | 71 - .../source/2.0/src/docbook/functions.xml | 14 - .../source/2.0/src/docbook/introduction.xml | 50 - .../source/2.0/src/docbook/quickstart.xml | 86 - .../source/2.0/src/docbook/shunit2.xml | 85 - .../shunit2/source/2.0/src/shell/shunit2 | 799 ------- .../source/2.0/src/test/run-test-suite | 116 - .../source/2.0/src/test/test-functions.inc | 84 - .../shunit2/source/2.0/src/test/testAsserts | 242 --- .../shunit2/source/2.0/src/test/testFailures | 89 - .../source/2.0/src/test/testInternalFx | 23 - .../shunit2/source/2.0/src/test/testSuiteFx | 23 - .../source/2.1/bin/gen_test_results.flags | 12 - .../source/2.1/bin/gen_test_results.sh | 88 - .../powerlevel9k/shunit2/source/2.1/bin/which | 36 - .../shunit2/source/2.1/doc/README.txt | 212 -- .../source/2.1/doc/coding_standards.txt | 74 - .../shunit2/source/2.1/doc/contributors.txt | 14 - .../shunit2/source/2.1/doc/lgpl-2.1.txt | 502 ----- .../shunit2/source/2.1/doc/rst2html.css | 292 --- .../source/2.1/examples/lineno_test.sh | 16 - .../shunit2/source/2.1/examples/party_test.sh | 17 - .../shunit2/source/2.1/lib/versions | 239 -- .../shunit2/source/2.1/src/shunit2_test.sh | 124 -- .../source/2.1/src/shunit2_test_misc.sh | 160 -- .../external/powerlevel9k/shunit2/test_runner | 165 ++ .../powerlevel9k/shunit2/website/README.html | 23 - .../website/releases/shunit2-2.0.0.tgz.md5 | 1 - .../website/releases/shunit2-2.0.0.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.0.1.tgz.md5 | 1 - .../website/releases/shunit2-2.0.1.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.0.2.tgz.md5 | 1 - .../website/releases/shunit2-2.0.2.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.0.3.tgz.md5 | 1 - .../website/releases/shunit2-2.0.3.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.1.0.tgz.md5 | 1 - .../website/releases/shunit2-2.1.0.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.1.1.tgz.md5 | 1 - .../website/releases/shunit2-2.1.1.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.1.2.tgz.md5 | 1 - .../website/releases/shunit2-2.1.2.tgz.sig | Bin 65 -> 0 bytes .../website/releases/shunit2-2.1.3.tgz.md5 | 1 - .../website/releases/shunit2-2.1.3.tgz.sig | Bin 64 -> 0 bytes .../website/releases/shunit2-2.1.4.tgz.sig | Bin 72 -> 0 bytes .../website/releases/shunit2-2.1.5.tgz.sig | Bin 72 -> 0 bytes .../2.1.2/Linux-Ubuntu_Dapper-6.04.txt | 236 -- .../2.1.2/Linux-Ubuntu_Gutsy-7.10.txt | 278 --- .../testresults/2.1.2/Mac_OS_X-10.4.1.txt | 195 -- .../testresults/2.1.2/Solaris-10-U3-x86.txt | 196 -- .../website/testresults/2.1.3/Cygwin.txt | 180 -- .../2.1.3/Linux-Ubuntu_Hardy-8.04.txt | 278 --- .../testresults/2.1.3/Mac_OS_X-10.5.2.txt | 164 -- .../testresults/2.1.3/Solaris-11-x86.txt | 196 -- .../testresults/2.1.4/Cygwin-Windows_XP.txt | 295 --- .../2.1.4/Linux-Ubuntu_Dapper-6.06.txt | 295 --- .../2.1.4/Linux-Ubuntu_Hardy-8.04.txt | 350 --- .../testresults/2.1.4/Mac_OS_X-10.5.4.txt | 244 --- .../testresults/2.1.4/Solaris-9-U6-x86.txt | 266 --- .../testresults/2.1.4/Solaris-nv-77-x86.txt | 242 --- .../website/testresults/2.1.5/Cygwin-5.1.txt | 295 --- .../testresults/2.1.5/Linux-Ubuntu-6.06.txt | 294 --- .../testresults/2.1.5/Linux-Ubuntu-8.04.txt | 349 --- .../testresults/2.1.5/Mac_OS_X-10.5.5.txt | 239 -- .../website/testresults/2.1.5/Solaris-11.txt | 251 --- .../website/testresults/2.1.5/Solaris-9.txt | 276 --- .../testresults/2.1.6/Cygwin-1.7.9.txt | 416 ---- .../2.1.6/Linux-Ubuntu-10.04.2-LTS.txt | 416 ---- .../2.1.6/Linux-Ubuntu-6.06.2-LTS.txt | 416 ---- .../2.1.6/Linux-Ubuntu-8.04.4-LTS.txt | 416 ---- .../testresults/2.1.6/Mac_OS_X-10.6.7.txt | 284 --- .../testresults/2.1.6/OpenSolaris-2009.06.txt | 227 -- .../website/testresults/2.1.6/Solaris-8u7.txt | 321 --- .../website/testresults/2.1.6/Solaris-9u6.txt | 321 --- .../website/testresults/2.1.6/Solaris-9u8.txt | 321 --- .../2.1.7/Linux-Ubuntu-10.04.4-LTS.txt | 416 ---- .../2.1.7/Linux-Ubuntu-12.04.2-LTS.txt | 416 ---- .../2.1.7/Linux-Ubuntu-8.04.4-LTS.txt | 416 ---- .../2.1.7/OpenSolaris-2009.06(snv_111b).txt | 227 -- .../testresults/2.1.7/Solaris-10u10.txt | 296 --- .../external/powerlevel9k/test-in-docker | 75 +- .../test/core/color_overriding.spec | 62 + .../test/core/joining_segments.spec | 187 ++ .../powerlevel9k/test/core/prompt.spec | 104 + .../test/core/visual_identifier.spec | 60 + .../powerlevel9k/test/functions/colors.spec | 31 +- .../powerlevel9k/test/functions/icons.spec | 145 +- .../test/functions/utilities.spec | 2 +- .../powerlevel9k/test/powerlevel9k.spec | 71 +- .../powerlevel9k/test/segments/anaconda.spec | 69 + .../test/segments/aws_eb_env.spec | 61 + .../test/segments/background_jobs.spec | 78 + .../powerlevel9k/test/segments/battery.spec | 177 ++ .../test/segments/command_execution_time.spec | 96 +- .../powerlevel9k/test/segments/context.spec | 113 + .../powerlevel9k/test/segments/custom.spec | 86 + .../test/segments/detect_virt.spec | 83 + .../powerlevel9k/test/segments/dir.spec | 558 +++-- .../test/segments/disk_usage.spec | 131 ++ .../test/segments/go_version.spec | 52 +- .../powerlevel9k/test/segments/ip.spec | 231 ++ .../test/segments/kubecontext.spec | 34 +- .../test/segments/laravel_version.spec | 55 +- .../powerlevel9k/test/segments/load.spec | 149 ++ .../test/segments/node_version.spec | 41 + .../powerlevel9k/test/segments/nodeenv.spec | 99 + .../powerlevel9k/test/segments/nvm.spec | 72 + .../test/segments/php_version.spec | 42 + .../powerlevel9k/test/segments/public_ip.spec | 222 ++ .../powerlevel9k/test/segments/ram.spec | 66 + .../test/segments/rust_version.spec | 21 +- .../powerlevel9k/test/segments/ssh.spec | 80 + .../powerlevel9k/test/segments/status.spec | 113 + .../powerlevel9k/test/segments/swap.spec | 58 + .../test/segments/swift_version.spec | 57 + .../test/segments/symfony_version.spec | 117 + .../powerlevel9k/test/segments/todo.spec | 58 + .../powerlevel9k/test/segments/vcs-git.spec | 378 ++++ .../powerlevel9k/test/segments/vcs-hg.spec | 207 ++ .../powerlevel9k/test/segments/vcs.spec | 161 -- .../powerlevel9k/test/segments/vi_mode.spec | 48 + .../external/powerlevel9k/test/suite.spec | 17 + .../modules/prompt/external/pure/package.json | 2 +- .../prompt/external/pure/pure.plugin.zsh | 487 +---- .../modules/prompt/external/pure/pure.zsh | 235 +- .../modules/prompt/external/pure/readme.md | 62 +- .zprezto/modules/prompt/functions/async | 500 +---- .../prompt/functions/prompt_agnoster_setup | 166 +- .../prompt/functions/prompt_minimal_setup | 9 + .../functions/prompt_powerlevel9k_setup | 1913 +---------------- .../prompt/functions/prompt_powerline_setup | 186 +- .../prompt/functions/prompt_pure_setup | 487 +---- .../prompt/functions/prompt_sorin_setup | 7 +- .../prompt/functions/prompt_steeef_setup | 14 +- .zprezto/modules/python/README.md | 8 +- .zprezto/modules/python/init.zsh | 26 +- .zprezto/modules/rsync/init.zsh | 3 +- .../syntax-highlighting/external/INSTALL.md | 14 +- .../external/docs/highlighters/main.md | 10 + .../external/highlighters/brackets/README.md | 30 +- .../external/highlighters/cursor/README.md | 23 +- .../external/highlighters/line/README.md | 23 +- .../external/highlighters/main/README.md | 104 +- .../highlighters/main/main-highlighter.zsh | 949 +++++--- .../main/test-data/alias-comment1.zsh | 38 + .../main/test-data/alias-comment2.zsh | 38 + .../main/test-data/alias-complex.zsh | 39 + .../main/test-data/alias-empty.zsh | 38 + .../main/test-data/alias-loop.zsh | 41 + .../test-data/alias-nested-precommand.zsh | 44 + .../main/test-data/alias-nested.zsh | 41 + .../alias-precommand-option-argument1.zsh | 42 + .../alias-precommand-option-argument2.zsh | 43 + .../main/test-data/alias-quoted.zsh | 39 + .../main/test-data/alias-redirect.zsh | 39 + .../main/test-data/alias-self.zsh | 39 + .../main/test-data/alias-to-dir.zsh | 37 + .../highlighters/main/test-data/alias.zsh | 12 +- .../main/test-data/assign-argv.zsh | 3 + .../main/test-data/assign-array3.zsh | 1 + .../main/test-data/assign-not-array.zsh | 36 + .../main/test-data/assign-not-array2.zsh | 36 + .../main/test-data/assign-semicolon.zsh | 1 + .../main/test-data/assign-subshell.zsh | 1 + .../highlighters/main/test-data/assign.zsh | 1 + .../main/test-data/back-quoted-argument.zsh | 18 +- .../main/test-data/back-quoted-open.zsh | 41 + .../main/test-data/backslash-space.zsh | 39 + .../main/test-data/bang-assign-array.zsh | 40 + .../main/test-data/bang-assign-scalar.zsh | 38 + .../main/test-data/bang-pipeline.zsh | 39 + .../main/test-data/brackets-matching1.zsh | 38 + .../main/test-data/brackets-matching2.zsh | 38 + .../brackets-premature-termination.zsh | 40 + .../command-substitution-in-assignment.zsh | 42 + .../command-substitution-unclosed.zsh | 45 + .../main/test-data/commmand-parameter.zsh | 10 +- .../highlighters/main/test-data/cthulhu.zsh | 70 + .../main/test-data/dirs_blacklist.zsh | 6 +- .../main/test-data/dollar-paren.zsh | 17 +- .../main/test-data/empty-line.zsh | 36 + .../main/test-data/exec-redirection1.zsh | 4 +- .../main/test-data/function-altsyntax.zsh | 45 + .../main/test-data/noglob-alias.zsh | 1 + .../main/test-data/noglob-always.zsh | 44 + .../highlighters/main/test-data/noglob4.zsh | 45 + .../main/test-data/off-by-one.zsh | 7 +- .../main/test-data/path-dollared-word3.zsh | 6 +- .../test-data/precommand-unknown-option.zsh | 43 + .../main/test-data/precommand2.zsh | 4 +- .../main/test-data/precommand3.zsh | 41 + .../main/test-data/precommand4.zsh | 39 + ...substitution-redirection-isnt-globbing.zsh | 5 + .../main/test-data/process-substitution.zsh | 43 + .../main/test-data/process-substitution2.zsh | 51 + .../quoted-command-substitution-empty.zsh | 44 + .../test-data/redirection-in-cmdsubst.zsh | 5 + .../main/test-data/redirection2.zsh | 6 +- .../external/highlighters/pattern/README.md | 20 +- .../external/highlighters/regexp/README.md | 28 +- .../external/highlighters/root/README.md | 24 +- .../external/zsh-syntax-highlighting.zsh | 4 +- .zprezto/modules/utility/README.md | 13 +- .zprezto/modules/utility/init.zsh | 5 +- .zprezto/runcoms/README.md | 2 +- .zprezto/runcoms/zshenv | 2 - 352 files changed, 15169 insertions(+), 25328 deletions(-) create mode 100644 .zprezto/modules/completion/external/CONTRIBUTING.md create mode 100644 .zprezto/modules/completion/external/src/_ccache create mode 100644 .zprezto/modules/completion/external/src/_chromium create mode 100644 .zprezto/modules/completion/external/src/_conan create mode 100644 .zprezto/modules/completion/external/src/_ecdsautil create mode 100644 .zprezto/modules/completion/external/src/_flutter delete mode 100644 .zprezto/modules/completion/external/src/_go create mode 100644 .zprezto/modules/completion/external/src/_golang create mode 100644 .zprezto/modules/completion/external/src/_hledger create mode 100644 .zprezto/modules/completion/external/src/_include-what-you-use delete mode 100644 .zprezto/modules/completion/external/src/_paste delete mode 100644 .zprezto/modules/completion/external/src/_rclone delete mode 100644 .zprezto/modules/completion/external/src/_scl create mode 100644 .zprezto/modules/completion/external/src/_scons create mode 100644 .zprezto/modules/completion/external/src/_sfdx delete mode 100644 .zprezto/modules/completion/external/src/_ssh-copy-id create mode 100644 .zprezto/modules/completion/external/src/_tarsnap create mode 100644 .zprezto/modules/completion/external/src/_tmuxp create mode 100644 .zprezto/modules/completion/external/src/_tox delete mode 100644 .zprezto/modules/completion/external/src/_virsh create mode 100644 .zprezto/modules/completion/external/src/_wg-quick create mode 100644 .zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh create mode 100644 .zprezto/modules/prompt/external/agnoster/agnoster_customization.gif create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/docker/base-5.3.1/Dockerfile create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/docker/base-5.4.2/Dockerfile create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/docker/base-5.5.1/Dockerfile create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/docker/zshing/Dockerfile create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/docker/zshing/install.zsh mode change 100755 => 120000 .zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/CODE_OF_CONDUCT.md create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/LICENSE create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/README.md rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/doc/CHANGES-2.1.txt => doc/CHANGES-2.1.md} (56%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.0.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.1.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.2.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.3.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.4.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.5.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/RELEASE_NOTES-2.1.6.txt (100%) create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.7.md rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/TODO.txt (100%) create mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/contributors.md rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/design_doc.txt (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/shunit2.html (99%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/doc/shunit2.txt (98%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/examples/equality_test.sh (55%) create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/lineno_test.sh rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/examples/math.inc (100%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/examples/math_test.sh (64%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/examples/mkdir_test.sh (77%) create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file.sh create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file_test.sh create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/party_test.sh create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/suite_test.sh create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/gen_test_report.sh rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/lib/shflags (70%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1 => }/lib/shlib (100%) create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/versions rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src => }/shunit2 (60%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src/shunit2_test_asserts.sh => shunit2_asserts_test.sh} (88%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src/shunit2_test_failures.sh => shunit2_failures_test.sh} (83%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src/shunit2_test_macros.sh => shunit2_macros_test.sh} (60%) create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_misc_test.sh rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src/shunit2_test_standalone.sh => shunit2_standalone_test.sh} (53%) rename .zprezto/modules/prompt/external/powerlevel9k/shunit2/{source/2.1/src => }/shunit2_test_helpers (54%) delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/Makefile delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/docbookPrep.sh delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/extractDocs.pl delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/which delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/CHANGES-2.0.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/LGPL-2.1 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/README.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.0.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.1.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.2.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.3.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.4.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/TODO.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/contributors.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/design_doc.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/shunit2.html delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/style.css delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/lib/sh/shlib delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/fo/tldp-print.xsl delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-common.xsl delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-one-page.xsl delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/resources/shelldoc.xslt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/functions.xml delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/introduction.xml delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/quickstart.xml delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/shunit2.xml delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/shell/shunit2 delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/run-test-suite delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/test-functions.inc delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testAsserts delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testFailures delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testInternalFx delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testSuiteFx delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.flags delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.sh delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/which delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/README.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/coding_standards.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/contributors.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/lgpl-2.1.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/rst2html.css delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/lineno_test.sh delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/party_test.sh delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/versions delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test.sh delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_misc.sh create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/test_runner delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/README.html delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.md5 delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.4.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.5.tgz.sig delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.2/Linux-Ubuntu_Dapper-6.04.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.2/Linux-Ubuntu_Gutsy-7.10.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.2/Mac_OS_X-10.4.1.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.2/Solaris-10-U3-x86.txt delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.3/Cygwin.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.3/Linux-Ubuntu_Hardy-8.04.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.3/Mac_OS_X-10.5.2.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.3/Solaris-11-x86.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Cygwin-Windows_XP.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Linux-Ubuntu_Dapper-6.06.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Linux-Ubuntu_Hardy-8.04.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Mac_OS_X-10.5.4.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Solaris-9-U6-x86.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Solaris-nv-77-x86.txt delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Cygwin-5.1.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-6.06.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-8.04.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Mac_OS_X-10.5.5.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-11.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-9.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Cygwin-1.7.9.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-10.04.2-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-6.06.2-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-8.04.4-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Mac_OS_X-10.6.7.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/OpenSolaris-2009.06.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-8u7.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u6.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u8.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-10.04.4-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-12.04.2-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-8.04.4-LTS.txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/OpenSolaris-2009.06(snv_111b).txt delete mode 100644 .zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Solaris-10u10.txt create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/core/color_overriding.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/core/joining_segments.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/core/prompt.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/core/visual_identifier.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/anaconda.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/aws_eb_env.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/background_jobs.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/battery.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/context.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/custom.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/detect_virt.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/disk_usage.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/ip.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/load.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/node_version.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/nodeenv.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/nvm.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/php_version.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/public_ip.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/ram.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/ssh.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/status.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/swap.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/swift_version.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/symfony_version.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/todo.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-git.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-hg.spec delete mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/segments/vi_mode.spec create mode 100755 .zprezto/modules/prompt/external/powerlevel9k/test/suite.spec mode change 100644 => 120000 .zprezto/modules/prompt/external/pure/pure.plugin.zsh mode change 100644 => 120000 .zprezto/modules/prompt/functions/async mode change 100644 => 120000 .zprezto/modules/prompt/functions/prompt_agnoster_setup mode change 100755 => 120000 .zprezto/modules/prompt/functions/prompt_powerlevel9k_setup mode change 100644 => 120000 .zprezto/modules/prompt/functions/prompt_powerline_setup mode change 100644 => 120000 .zprezto/modules/prompt/functions/prompt_pure_setup mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/line/README.md mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/main/README.md create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment1.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-complex.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-empty.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-loop.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested-precommand.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument1.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-quoted.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-redirect.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-self.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-to-dir.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-open.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-space.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-array.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-scalar.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-pipeline.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching1.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-premature-termination.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-in-assignment.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-unclosed.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/cthulhu.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-line.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function-altsyntax.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-always.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob4.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand-unknown-option.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand3.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand4.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution2.zsh create mode 100644 .zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/quoted-command-substitution-empty.zsh mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md mode change 100644 => 120000 .zprezto/modules/syntax-highlighting/external/highlighters/root/README.md diff --git a/.zprezto/README.md b/.zprezto/README.md index 2f94cd6..552784b 100644 --- a/.zprezto/README.md +++ b/.zprezto/README.md @@ -33,10 +33,11 @@ version is 4.3.11. done ``` - Note: If you already have any of the given config files, ln will error. In - simple cases you can add `source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"` to - the bottom of your `.zshrc` to load prezto but keep your config intact. For - more complicated setups, it is recommended that you back up your original + Note: If you already have any of the given configuration files, `ln` will + cause error. In simple cases you can load prezto by adding the line + `source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"` to the bottom of your + `.zshrc` and keep the rest of your Zsh configuration intact. For more + complicated setups, it is recommended that you back up your original configs and replace them with the provided prezto runcoms. 4. Set Zsh as your default shell: @@ -89,6 +90,10 @@ accompanying README files to learn of what is available. window or tab. ![sorin theme][2] + Note that the 'git' module may be required for special symbols to appear, + such as those on the right of the above image. Add `'git'` to the `pmodule` + list (under `zstyle ':prezto:load' pmodule \` in your *~/.zpreztorc*) to + enable this module. ### External Modules @@ -99,7 +104,7 @@ accompanying README files to learn of what is available. Note that module names need to be unique or they will cause an error when loading. - ```console + ```sh zstyle ':prezto:load' pmodule-dirs $HOME/.zprezto-contrib ``` diff --git a/.zprezto/modules/archive/README.md b/.zprezto/modules/archive/README.md index 600ff15..c9806ea 100644 --- a/.zprezto/modules/archive/README.md +++ b/.zprezto/modules/archive/README.md @@ -31,9 +31,9 @@ installed: - *.7z* requires `7za`. - *.deb* requires `ar`, `tar`. -Additionally, if `pigz` and/or `pbzip2` are installed, `archive` will use them over -their traditional counterparts, `gzip` and `bzip2` respectively, to take full advantage -of all available CPU cores for compression. +Additionally, if `pigz` and/or `pbzip2` are installed, `archive` will use them +over their traditional counterparts, `gzip` and `bzip2` respectively, to take +full advantage of all available CPU cores for compression. Alternatives ------------ diff --git a/.zprezto/modules/autosuggestions/README.md b/.zprezto/modules/autosuggestions/README.md index c3e90a4..48f9852 100644 --- a/.zprezto/modules/autosuggestions/README.md +++ b/.zprezto/modules/autosuggestions/README.md @@ -1,8 +1,3 @@ -Autosuggestions ---------------- - -Integrates zsh-autosuggestions into Prezto. - Autosuggestions =============== diff --git a/.zprezto/modules/command-not-found/README.md b/.zprezto/modules/command-not-found/README.md index 7775c92..ee5a94d 100644 --- a/.zprezto/modules/command-not-found/README.md +++ b/.zprezto/modules/command-not-found/README.md @@ -3,11 +3,12 @@ Command-Not-Found When you try to use a command that is not available locally, searches the package manager for a package offering that command and suggests -the proper install command. +the proper install command. -Debian-based and Arch Linux-based distributions use the [`command-not-found`][1] tool. +Debian and Arch Linux based distributions use the [`command-not-found`][1] tool. -macOS uses Homebrew's [`command-not-found` clone][2]. Note that you also need to [follow the instructions to tap the `command-not-found` homebrew repository][3]. +macOS uses Homebrew's [`command-not-found` clone][2]. Note that you also need to +[follow the instructions][3] to tap the `command-not-found` homebrew repository. Authors diff --git a/.zprezto/modules/completion/README.md b/.zprezto/modules/completion/README.md index 7efb3d9..dc2b9b8 100644 --- a/.zprezto/modules/completion/README.md +++ b/.zprezto/modules/completion/README.md @@ -6,6 +6,19 @@ the [zsh-completions][1] project. This module must be loaded **after** the *utility* module. +Options +------- + + - `COMPLETE_IN_WORD` complete from both ends of a word. + - `ALWAYS_TO_END` move cursor to the end of a completed word. + - `PATH_DIRS` perform path search even on command names with slashes. + - `AUTO_MENU` show completion menu on a successive tab press. + - `AUTO_LIST` automatically list choices on ambiguous completion. + - `AUTO_PARAM_SLASH` if completed parameter is a directory, add a trailing slash. + - `EXTENDED_GLOB` needed for file modification glob modifiers with compinit. + - `MENU_COMPLETE` do not autoselect the first completion entry. + - `FLOW_CONTROL` disable start/stop characters in shell editor. + Settings -------- diff --git a/.zprezto/modules/completion/external/CONTRIBUTING.md b/.zprezto/modules/completion/external/CONTRIBUTING.md new file mode 100644 index 0000000..8002c56 --- /dev/null +++ b/.zprezto/modules/completion/external/CONTRIBUTING.md @@ -0,0 +1,39 @@ +# Contributing + +## How to Contribute to zsh-completions + +Contributions are welcome, just make sure you follow the guidelines: + + * Completions are not accepted when already available in zsh. + * Completions are not accepted when already available in their original project. + * Please do not just copy/paste someone else's completion, ask before. + * Partially implemented completions are not accepted. + * Please add a header containing authors, status and origin of the script and license header if you do not wish to use the Zsh license (example [here](src/_ack)). + * Any reasonable open source licence is acceptable but note that we recommend the use of the Zsh license and that you should use it if you hope for the function to migrate to zsh itself. + * Please try to follow the [Zsh completion style guide](https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide). + * Please send one separate pull request per file. + * Send a pull request or ask for committer access. + +## Contributing Completion Functions to Zsh + +The zsh project itself welcomes completion function contributions via +[github pull requests](https://github.com/zsh-users/zsh/), +[gitlab merge requests](https://gitlab.com/zsh-org/zsh/) or via patch +files sent to its mailing list, `zsh-workers@zsh.org`. + +Contributing to zsh has the advantage of reaching the most users. + +## Including Completion Functions in Upstream Projects + +Many upstream projects include zsh completions. + +If well maintained, this has the advantage that users get a completion +function that matches the installed version of their software. + +If you are the upstream maintainer this is a good choice. If the project +already includes completions for bash, fish, tcsh, etc then they are +likely open to including zsh's too. It can also be a good option for +completions handling commands that are system or distribution specific. + +Ideally, arrange for the project's build system to install the +completion function in `$prefix/share/zsh/site-functions`. diff --git a/.zprezto/modules/completion/external/README.md b/.zprezto/modules/completion/external/README.md index 57ba687..1265c4d 100644 --- a/.zprezto/modules/completion/external/README.md +++ b/.zprezto/modules/completion/external/README.md @@ -6,11 +6,6 @@ zsh-completions ![GitHub release](https://img.shields.io/github/release/zsh-user *This projects aims at gathering/developing new completion scripts that are not available in Zsh yet. The scripts may 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. - - ## Usage ### Using packages @@ -20,11 +15,14 @@ See [issues](https://github.com/zsh-users/zsh-completions/issues) for details on | Debian / Ubuntu | [zsh-completions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-completions&package=zsh-completions) | | Fedora / CentOS / RHEL / Scientific Linux | [zsh-completions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-completions&package=zsh-completions) | | OpenSUSE / SLE | [zsh-completions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-completions&package=zsh-completions) | -| Arch Linux | [zsh-completions](https://www.archlinux.org/packages/zsh-completions), [zsh-completions-git](https://aur.archlinux.org/packages/zsh-completions-git) | -| Gentoo | [app-shells/zsh-completions](http://packages.gentoo.org/package/app-shells/zsh-completions) | -| NixOS | [zsh-completions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/shells/zsh-completions/default.nix) | -| Void Linux | [zsh-completions](https://github.com/voidlinux/void-packages/tree/master/srcpkgs/zsh-completions) | -| Mac OS | [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-completions.rb) | +| Arch Linux / Manjaro / Antergos / Hyperbola | [zsh-completions](https://www.archlinux.org/packages/zsh-completions), [zsh-completions-git](https://aur.archlinux.org/packages/zsh-completions-git) | +| Gentoo / Funtoo | [app-shells/zsh-completions](http://packages.gentoo.org/package/app-shells/zsh-completions) | +| NixOS | [zsh-completions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/shells/zsh/zsh-completions/default.nix) | +| Void Linux | [zsh-completions](https://github.com/void-linux/void-packages/blob/master/srcpkgs/zsh-completions/template) | +| Slackware | [Slackbuilds](https://slackbuilds.org/repository/14.2/system/zsh-completions) | +| Mac OS | [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-completions.rb), [MacPorts](https://github.com/macports/macports-ports/blob/master/sysutils/zsh-completions/Portfile) | +| NetBSD | [pkgsrc](ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/zsh-completions/README.html) | + ### Using zsh frameworks @@ -59,18 +57,9 @@ Add `antigen bundle zsh-users/zsh-completions` to your `~/.zshrc`. ### Contributing -Contributions are welcome, just make sure you follow the guidelines: - - * Completions are not accepted when already available in zsh. - * 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, status and origin of the script and license header if you do not wish to use the Zsh license (example [here](src/_ack)). - * Please try to follow [Zsh completion style guide](https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide). - * Please send one separate pull request per file. - * Send a pull request or ask for committer access. +Contributions are welcome, see [CONTRIBUTING](https://github.com/zsh-users/zsh-completions/blob/master/CONTRIBUTING.md). ## License -Completions use the Zsh license, unless explicitely mentionned in the file header. +Completions use the Zsh license, unless explicitly mentioned in the file header. See [LICENSE](https://github.com/zsh-users/zsh-completions/blob/master/LICENSE) for more information. diff --git a/.zprezto/modules/completion/external/src/_afew b/.zprezto/modules/completion/external/src/_afew index 15a9ab7..c93dde7 100644 --- a/.zprezto/modules/completion/external/src/_afew +++ b/.zprezto/modules/completion/external/src/_afew @@ -38,30 +38,24 @@ # # ------------------------------------------------------------------------------ -_afew() { - - _arguments -C \ - '(- 1 *)'-h"[Show help and exit]" \ - "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -m --move-mails)"{-w,--watch}"[Continuously monitor the mailbox for new messages matching the given query]" \ - "(-c --classify -l --learn= -u --update -U --update-reference -m --move-mails -w --watch)"{-t,--tag}"[Run the tag filters]" \ - "(-c --classify -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-l,--learn=}"[Train category with the messages matching query]" \ - "(-c --classify -l --learn= -t --tag -U --update-reference -m --move-mails -w --watch)"{-u,--update}"[Update the categories (requires no query)]" \ - "(-c --classify -l --learn= -t --tag -u --update -m --move-mails -w --watch)"{-U,--update-reference}"[Update the reference category (takes quite some time) (requires no query)]" \ - "(-l --learn= -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-c,--classify}"[Classify each message matching the iven query]" \ - "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -w --watch)"{-m,--move-mails}"[Move mail files between maildir folders]" \ - "(-n --all)"{-a,--all}"[Operate on all email]" \ - "(-a --new)"{-n,--new}"[Operate on all new email]" \ - {-C,--notmuch-config=}"[Path to notmuch configuration file]:files:_files" \ - {-e,--enable-filters=}"[Flter classes to use]:filters" \ - {-d,--dry-run}"[Dont change the DB]" \ - {-R,--reference-set-size=}"[Size of the reference set (default: 1000)]:size:" \ - {-T,--reference-set-timeframe-days=}"[Do not use emails older than DAYS days (default: 30)]:days:" \ - {--verbose,-v}"[Be more verbose]" \ - '*:Query:' \ - -} - -_afew +_arguments \ + '(- 1 *)-h[display usage information]' \ + "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -m --move-mails)"{-w,--watch}"[continuously monitor the mailbox for new messages matching the given query]" \ + "(-c --classify -l --learn= -u --update -U --update-reference -m --move-mails -w --watch)"{-t,--tag}"[run the tag filters]" \ + "(-c --classify -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-l,--learn=}"[train category with the messages matching query]" \ + "(-c --classify -l --learn= -t --tag -U --update-reference -m --move-mails -w --watch)"{-u,--update}"[update the categories (requires no query)]" \ + "(-c --classify -l --learn= -t --tag -u --update -m --move-mails -w --watch)"{-U,--update-reference}"[update the reference category (takes quite some time) (requires no query)]" \ + "(-l --learn= -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-c,--classify}"[classify each message matching the iven query]" \ + "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -w --watch)"{-m,--move-mails}"[move mail files between maildir folders]" \ + "(-n --all)"{-a,--all}"[operate on all email]" \ + "(-a --new)"{-n,--new}"[operate on all new email]" \ + {-C,--notmuch-config=}"[specify path to notmuch configuration file]:files:_files" \ + {-e,--enable-filters=}"[specify filter classes to use]:filter" \ + {-d,--dry-run}"[don't change the DB]" \ + {-R,--reference-set-size=}"[specify size of the reference set]:size [1000]" \ + {-T,--reference-set-timeframe-days=}"[don't use emails older than specified age]:age (days) [30]" \ + {--verbose,-v}"[be more verbose]" \ + '*: :_guard "^-*" query' # Local Variables: # mode: Shell-Script diff --git a/.zprezto/modules/completion/external/src/_ansible b/.zprezto/modules/completion/external/src/_ansible index e3a1d0c..cf8b118 100644 --- a/.zprezto/modules/completion/external/src/_ansible +++ b/.zprezto/modules/completion/external/src/_ansible @@ -40,7 +40,7 @@ # ------------------------------------------------------------------------------ # # Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux -# (or /usr/local/etc/ansible/hosts on OSX) +# (or /usr/local/etc/ansible/hosts on macOS) # # Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git) # has some files to help improve the hostfile shell parsing @@ -416,8 +416,8 @@ _modules=( 'os_user:Manage OpenStack Identity Users' 'os_user_group:Associate OpenStack Identity users and groups' 'os_volume:Create/Delete Cinder Volumes' -'osx_defaults:osx_defaults allows users to read, write, and delete Mac OS X user defaults from Ansible' -'osx_say:Makes an OSX computer to speak.' +'osx_defaults:osx_defaults allows users to read, write, and delete macOS user defaults from Ansible' +'osx_say:Makes a macOS computer speak.' 'ovirt:oVirt/RHEV platform management' 'package:Generic OS package manager' 'pacman:Manage packages with *pacman*' @@ -643,7 +643,7 @@ _ansible () local curcontext="$curcontext" state line typeset -A opt_args - _arguments -C -W \ + _arguments -s -C -W \ '1:pattern:->pattern'\ "(-a --args)"{-a,--args}"[ARGS module arguments]:arguments:(ARG)"\ '--ask-become-pass[ask for privilege escalation password]'\ @@ -658,14 +658,14 @@ _ansible () "(-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}"[show differences when changing (small) files and templates]"\ - "(-e --extra-vars)"{-e,--extra-vars}"[set additional variables as key=value or YAML/JSON]"\ + "*"{-e,--extra-vars}"[set additional variables as key=value or YAML/JSON]"\ "(-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"\ + "*"{-i,--inventory,--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 -/"\ + "*"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\ '--new-vault-password-file[new vault password file for rekey]:new vault password file:_files'\ "(-o --one-line)"{-o,--one-line}"[condense output]"\ '--output[output file name for encrypt or decrypt; use - for stdout]:output file:_files'\ @@ -683,8 +683,8 @@ _ansible () "(-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)]"\ + "*--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\ + "*"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\ "--version[show program's version number and exit]"\ case $state in diff --git a/.zprezto/modules/completion/external/src/_ansible-galaxy b/.zprezto/modules/completion/external/src/_ansible-galaxy index 53b8c64..ddd94be 100644 --- a/.zprezto/modules/completion/external/src/_ansible-galaxy +++ b/.zprezto/modules/completion/external/src/_ansible-galaxy @@ -84,7 +84,7 @@ _ansible-galaxy () _arguments \ "(-h --help)"{-h,--help}"[help message]" \ "(-c --ignore-certs)"{-c,--ignore-certs}"[Ignore SSL certificate validation errors.]" \ - "(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \ + "*"{-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)" \ "(-v --verbose)"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]" \ "--version[show program's version number and exit]" \ diff --git a/.zprezto/modules/completion/external/src/_ansible-playbook b/.zprezto/modules/completion/external/src/_ansible-playbook index e7c6b6a..749a813 100644 --- a/.zprezto/modules/completion/external/src/_ansible-playbook +++ b/.zprezto/modules/completion/external/src/_ansible-playbook @@ -40,7 +40,7 @@ # ------------------------------------------------------------------------------ # # Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux -# (or /usr/local/etc/ansible/hosts on OSX) +# (or /usr/local/etc/ansible/hosts on macOS) # # Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git) # has some files to help improve the hostfile shell parsing @@ -126,8 +126,8 @@ _ansible-playbook () local curcontext="$curcontext" state line typeset -A opt_args - _arguments -C -W \ - "1:playbook yml file:_files -g '*.yml|*.yaml'"\ + _arguments -s -C -W \ + "*:playbook yml file:_files -g '*.yml|*.yaml'"\ '--ask-become-pass[ask for privilege escalation password]'\ "(-k --ask-pass)"{-k,--ask-pass}"[ask for connection password]"\ '--ask-su-pass[ask for su password (deprecated, use become)]'\ @@ -139,23 +139,23 @@ _ansible-playbook () "(-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)"\ + "*"{-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"\ + "*"{-i,--inventory,--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]'\ '--list-tags[list all available tags]'\ '--list-tasks[list all tasks that would be executed]'\ - "(-M --module-path)"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\ + "*"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\ '--new-vault-password-file[new vault password file for rekey]:new vault password file:_files'\ '--output[output file name for encrypt or decrypt; use - for stdout]:output file:_files'\ '--private-key[PRIVATE_KEY_FILE use this file to authenticate the connection]:private key file:_files'\ '--scp-extra-args[specify extra arguments to pass to scp only]'\ '--sftp-extra-args[specify extra arguments to pass to sftp only]'\ - "--skip-tags[SKIP_TAGS only run plays and tasks whose tags do not match these values]:skip tags:(SKIP_TAGS)"\ + "*--skip-tags[SKIP_TAGS only run plays and tasks whose tags do not match these values]:skip tags:(SKIP_TAGS)"\ '--ssh-common-args[specify common arguments to pass to sftp/scp/ssh]'\ '--ssh-extra-args[specify extra arguments to pass to ssh only]'\ "--start-at-task[START_AT start the playbook at the task matching this name]:name:(TASK_NAME)"\ @@ -165,11 +165,11 @@ _ansible-playbook () "(-s --sudo)"{-s,--sudo}"[run operations with sudo (nopasswd) (deprecated, use become)]"\ "(-U --sudo-user)"{-U,--sudo-user}"[SUDO_USER desired sudo user (default=root) (deprecated, use become)]: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,--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)]"\ + "*--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\ + "*"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\ "--version[show program's version number and exit]"\ case $state in diff --git a/.zprezto/modules/completion/external/src/_bower b/.zprezto/modules/completion/external/src/_bower index 0daa978..69197ea 100644 --- a/.zprezto/modules/completion/external/src/_bower +++ b/.zprezto/modules/completion/external/src/_bower @@ -39,9 +39,9 @@ # ------------------------------------------------------------------------------ -local curcontext="$curcontext" state line _packages _opts ret=1 +local curcontext="$curcontext" state line _opts ret=1 -_arguments -C -A "-v" -A "--version" \ +_arguments -C \ '(- 1 *)'{-v,--version}'[display version information]' \ '1: :->cmds' \ '*:: :->args' && ret=0 @@ -49,35 +49,34 @@ _arguments -C -A "-v" -A "--version" \ 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]" + "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]" && ret=0 _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 + '(--force)--force[make various commands more forceful]' \ + '(--json)--json[output consumable JSON]' \ + '(--log-level)--log-level[what level of logs to report]' \ + "(--offline)--offline[don't hit the network]" \ + '(--quiet)--quiet[only output important information]' \ + "(--silent)--silent[don't output anything, besides errors]" \ + '(--verbose)--verbose[make output more verbose]' \ + '(--allow-root)--allow-root[allow running commands as root]' \ + '(--version)--version[output Bower version]' \ + '(--no-color)--no-color[disable colors]' && ret=0 ;; args) case $line[1] in @@ -98,54 +97,46 @@ case $state in 'update' \ 'uninstall' \ 'unregister' \ - 'version' - ret=0 + 'version' && ret=0 ;; (home|info|init|link|lookup|prune|register|search|unregister) _arguments \ - '(--help)--help[Show help message]' - ret=0 + '(--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 + '(--force-latest)--force-latest[force latest version on conflict]' \ + '(--help)--help[show help message]' \ + "(--production)--production[don't 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 + '(--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 + '(--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 + '(--help)--help[show help message]' \ + "(--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 ;; 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 + '(--force-latest)--force-latest[force latest version on conflict]' \ + '(--help)--help[show help message]' \ + "(--production)--production[don't install project devDependencies]" && ret=0 ;; version) _arguments \ - '(--message)--message[Custom git commit and tag message]' - ret=0 + '(--message)--message[custom git commit and tag message]' && ret=0 ;; exec) _normal && ret=0 @@ -154,7 +145,7 @@ case $state in _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 + _values 'option' $_opts && ret=0 fi ;; esac diff --git a/.zprezto/modules/completion/external/src/_caffeinate b/.zprezto/modules/completion/external/src/_caffeinate index 5f1e6a7..afcd569 100644 --- a/.zprezto/modules/completion/external/src/_caffeinate +++ b/.zprezto/modules/completion/external/src/_caffeinate @@ -28,7 +28,7 @@ # Description # ----------- # -# Completion script for the OSX 'caffeinate' tool (man 8 caffeinate). +# Completion script for the macOS 'caffeinate' tool (man 8 caffeinate). # # ------------------------------------------------------------------------- # Authors diff --git a/.zprezto/modules/completion/external/src/_ccache b/.zprezto/modules/completion/external/src/_ccache new file mode 100644 index 0000000..8bb33a2 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ccache @@ -0,0 +1,325 @@ +#compdef ccache -P -value-,CCACHE_*,-default- + +# zsh completion script for ccache + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration. + +# 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 copyright holder 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. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization +# or submit itself to any jurisdiction. + +# allow users to define their better compilers +# inspired by _cmake_compilers +# users could override with +# +# _ccache_compilers() { +# local -a _ccache_compilers +# _ccache_compilers=(gcc g++ clang clang++) +# _wanted compilers expl "compiler" compadd -- $_ccache_compilers +# } +(( $+functions[_ccache_compilers] )) || +_ccache_compilers() { + _command_names -e +} + +_ccache_booleans() { + _message 'There are no "false" values, unset variable to disable' + local description; description=${1:-boolean} + local booleans; booleans=( + 'true' + 'yes' + ) + _describe -t booeans "$description" booleans +} + +(( $+functions[_ccache_compressionlevels] )) || +_ccache_compressionlevels() { + local -a one_nine + one_nine=(1 2 3 4 5 6 7 8 9) + _describe -t onetonine "compression level (if using compression)" one_nine +} + +(( $+functions[_ccache_sloppiness] )) || +_ccache_sloppiness() { + _values -s ',' \ + "file_macro[ignore __FILE__]" \ + "file_stat_matches[rely on mtimes and ctimes]" \ + "include_file_ctime[ignore headers' ctime too new]" \ + "include_file_mtime[ignore headers' mtime too new]" \ + "no_system_headers[exclude system headers from cache]" \ + "pch_defines[be sloppy about #defines in pch]" \ + "time_macros[ignore __date__ and __time__]" +} + +(( $+functions[_ccache_compilerchecks] )) || +_ccache_compilerchecks() { + local -a compiler_check_values + compiler_check_values=( + 'content: the actual compiler binary' + 'mtime: mtime and size of the compiler' + 'none: ignore compiler for hashing' + 'string\:: any hard coded string (pre-computed version)' + '%compiler%\ -v:any compiler invocation output' + ) + _describe -t compilerchecks "compiler information included in the hash" compiler_check_values +} + +(( $+functions[_ccache_dirlevels] )) || +_ccache_dirlevels() { + local -a one_eight + one_eight=(1 2 3 4 5 6 7 8) + _describe -t onetoeight "directory levels in the cache directory" one_eight +} + +if [[ "$service" = -value-* ]]; then + case $service in + *CCACHE_*DIR*) + # CCACHE_BASEDIR: relative to which top level paths are hashed + # CCACHE_DIR: where the cache and config are kept + # CCACHE_TEMPDIR: where temporary files are kept + # all: a single path + _path_files -/ + ;; + *CCACHE_NLEVELS*) + _ccache_dirlevels + ;; + *CCACHE_CC*) + _ccache_compilers + ;; + *CCACHE_COMPILERCHECK*) + _ccache_compilerchecks + ;; + *CCACHE_*COMPRESS*) + _ccache_booleans "write compressed cache" + ;; + *CCACHE_COMPRESSLEVEL*) + _ccache_compressionlevels + ;; + *CCACHE_EXTENSION*) + _alternative ':set extension for intermediate files: ' + ;; + *CCACHE_*DIRECT*) + _ccache_booleans "use direct mode" + ;; + *CCACHE_*DISABLE*) + _ccache_booleans "disable cache usage" + ;; + *CCACHE_EXTRAFILES*) + local sep=: + compset -P "*${sep}" + compset -S "${sep}*" || suf="$sep" + + _files "" -r "${sep}"' /\t\t\-' "$@" + ;; + *CCACHE_*HARDLINK*) + _ccache_booleans "create hard links rather than copies" + ;; + *CCACHE_*HASHDIR*) + _ccache_booleans "include the cwd in the hash" + ;; + *CCACHE_IGNOREHEADERS*) + _dir_list + ;; + *CCACHE_*COMMENTS*) + _ccache_booleans "consider comments in hashing" + ;; + *CCACHE_LIMIT_MULTIPLE*) + _alternative ":clean up down to level (e.g. 0.8): " + ;; + *CCACHE_LOGFILE*) + _path_files -g "*(/) *.log" + ;; + *CCACHE_MAXFILES*) + _alternative ":maximum number of files in the cache (0= no limit): " + ;; + *CCACHE_MAXSIZE*) + _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' + ;; + *CCACHE_PATH*) + _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' + ;; + *CCACHE_PREFIX*) + _alternative ':prefixes for compiler invokation: ' + ;; + *CCACHE_PREFIX_CPP*) + _alternative ':prefixes for preprocessor invokation: ' + ;; + *CCACHE_*READONLY*) + _ccache_booleans "treat cache as read-only" + ;; + *CCACHE_*READONLY_DIRECT*) + _ccache_booleans "retrieve from read-only cache in direct mode" + ;; + *CCACHE_*RECACHE*) + _ccache_booleans "use cache in write-only mode" + ;; + *CCACHE_*CPP2*) + _ccache_booleans "pass originial rather than preprocessed source code to compiler" + ;; + *CCACHE_SLOPPINESS*) + _ccache_sloppiness + ;; + *CCACHE_*STATS*) + _ccache_booleans "update statistics counters" + ;; + *CCACHE_UMASK*) + _alternative ":umask value (octal): " + ;; + *CCACHE_*UNIFY*) + _ccache_booleans "normalise sources prior to processing" + ;; + esac + + return +fi + +__ccache_config_keys() { + local -a keys + keys=( + 'compression:write compressed cache' + 'direct_mode:use direct mode' + 'disable:disable cache usage' + 'hard_link:create hard links rather than copies' + 'hash_dir:include the cwd in the hash' + 'keep_comments_cpp:consider comments in hashing' + 'read_only:treat cache as read-only' + 'read_only_direct:retrieve from read-only cache in direct mode' + 'recache:use cache in write-only mode' + 'run_second_cpp:pass originial rather than preprocessed source code to compiler' + 'stats:update statistics counters' + 'unify:normalise sources prior to processing' + 'base_dir:specify relative to which top level paths are hashed' + 'temporary_dir:specify where temporary files are kept' + 'cache_dir:specify where the cache is kept' + 'compiler:specify compiler' + 'cache_dir_levels:directory levels in the cache directory' + 'compiler_check:compiler information included in the hash' + 'compression_level:cache compression level' + 'cpp_extension:set extensions for intermediate files' + 'extra_files_to_hash:additional files to consider in hashing' + 'ignore_headers_in_manifest:set paths to headers to ignore in hashing' + 'limit_multiple:cleanup level' + 'log_file:specify a log file' + 'max_files:maximum number of files in the cache' + 'max_size:maximum size of the cache' + 'path:PATH for compiler lookup (instead of $PATH)' + 'prefix_command:prefixes for compiler invokation' + 'prefix_command_cpp:prefixes for preprocessor invokation' + 'sloppiness:hash files sloppy' + 'umask:set umask for ccache and child processes (e.g. for sharing cache)' + ) + _describe -t configkeys "configuration keys" keys -S '=' +} + +if compset -P '--set-config=*='; then + case $IPREFIX in + *=compression= | *=direct_mode= | *=disable= | *=hard_link= | *=hash_dir= | *=keep_comments_cpp= | *=read_only= | *=read_only_direct= | *=recache= | *=run_second_cpp= | *=stats= | *=unify= ) + local booleans; booleans=( + 'true' + 'false' + ) + _describe -t booleans 'boolean' booleans + ;; + *=base_dir= | *=temporary_dir= | *=cache_dir=) + _path_files -/ + ;; + *=compiler=) + _ccache_compilers + ;; + *=cache_dir_levels=) + _ccache_dirlevels + ;; + *=compiler_check=) + _ccache_compilerchecks + ;; + *=compression_level=) + _ccache_compressionlevels + ;; + *=cpp_extension=) + _alternative ':set extension for intermediate files: ' + ;; + *=extra_files_to_hash=) + local sep=: + compset -P "*${sep}" + compset -S "${sep}*" || suf="$sep" + + _files "" -r "${sep}"' /\t\t\-' "$@" + ;; + *=ignore_headers_in_manifest=) + _dir_list + ;; + *=limit_multiple=) + _alternative ":clean up down to level (e.g. 0.8): " + ;; + *=log_file=) + _path_files -g "*(/) *.log" + ;; + *=max_files=) + _alternative ":maximum number of files in the cache (0= no limit): " + ;; + *=max_size=) + _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' + ;; + *=path=) + _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' + ;; + *=prefix_command=) + _alternative ':prefixes for compiler invokation: ' + ;; + *=prefix_command_cpp=) + _alternative ':prefixes for preprocessor invokation: ' + ;; + *=sloppiness=) + _ccache_sloppiness + ;; + *=umask=) + _alternative ":umask value (octal): " + ;; + esac +elif [[ $words[2] == -* ]]; then + # if the first argument starts with -, we are in configure-ccache mode + _arguments \ + '*'{-o,--set-config=}"[set configuration key]:keys:__ccache_config_keys" \ + '(: -)'{-h,--help}'[show help message]' \ + '(: -)'{-V,--version}'[print version and copyright information]' \ + '(-z --zero-stats)'{-z,--zero-stats}'[zero statistics counters]' \ + '(-c --cleanup)'{-c,--cleanup}'[delete old files and recalculate size counters]' \ + '(-C --clear)'{-C,--clear}'[clear the cache completely (except configuration)]' \ + '(-p --print-config)'{-p,--print-config}'[print current configuration options]' \ + '(-s --show-stats)'{-s,--show-stats}'[show statistics summary]' \ + '(-F --max-files=)'{-F,--max-files=}'[set maximum number of files in cache]:number of files in cache: ' \ + '(-M --max-size=)'{-M,--max-size=}'[set maximum size of cache]:cache size: ' +elif [[ $CURRENT -eq 2 ]]; then + _ccache_compilers +else + # the command line already looks like 'ccache ...' + # forward to the completion function of the compiler + (( CURRENT-- )) + shift words + _normal +fi diff --git a/.zprezto/modules/completion/external/src/_chromium b/.zprezto/modules/completion/external/src/_chromium new file mode 100644 index 0000000..917739b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_chromium @@ -0,0 +1,211 @@ +#compdef chromium + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration + +# 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 CERN 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 +# OWNER 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. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization +# or submit itself to any jurisdiction. + +_arguments \ + "--user-data-dir=[Specify the directory that user data is kept in]:directory:_path_files -/" \ + "--app=[Runs URL in app mode]:url:_urls" \ + "--incognito[Open in incognito mode]" \ + "--new-window[open in new window]" \ + "(--no-proxy-server --proxy-auto-detect --proxy-pac-url --password-store)--proxy-server=[specify proxy server]:[\://][\:]:_chromium_proxyurls" \ + "--no-proxy-server[Disables the proxy server]" \ + "--proxy-auto-detect[Autodetect proxy configuration]" \ + "--proxy-pac-url=[Specify proxy autoconfiguration URL]:proxy autoconfiguration url:_urls" \ + "--password-store=[Set the password store to use]:password store: _wanted arguments expl 'wallet store' compadd -- basic gnome kwallet" \ + "--version[print version]" \ + "*:: :{ _alternative _urls _files }" + +# excerpt from the chromium help message: +# +# Specify the HTTP/SOCKS4/SOCKS5 proxy server to use for requests. This overrides any environment variables or settings picked via the options dialog. An individual proxy server is specified +# using the format: +# +# +# +# Where is the protocol of the proxy server, and is one of: +# +# "http", "socks", "socks4", "socks5". +# +# If the is omitted, it defaults to "http". Also note that "socks" is equivalent to "socks5". +# +# Examples: +# +# --proxy-server="foopy:99" +# Use the HTTP proxy "foopy:99" to load all URLs. +# +# --proxy-server="socks://foobar:1080" +# Use the SOCKS v5 proxy "foobar:1080" to load all URLs. +# +# --proxy-server="socks4://foobar:1080" +# Use the SOCKS v4 proxy "foobar:1080" to load all URLs. +# +# --proxy-server="socks5://foobar:66" +# Use the SOCKS v5 proxy "foobar:66" to load all URLs. +# +# It is also possible to specify a separate proxy server for different URL types, by prefixing the proxy server specifier with a URL specifier: +# +# Example: +# +# --proxy-server="https=proxy1:80;http=socks4://baz:1080" +# Load https://* URLs using the HTTP proxy "proxy1:80". And load http://* +# URLs using the SOCKS v4 proxy "baz:1080". +# + +_chromium_proxyurls () { + #TODO: semicolon separated urls not yet implemented + # mostly copied from _urls + local ipre scheme host user uhosts ret=1 expl match glob suf + local localhttp + zstyle -a ":completion:${curcontext}:urls" local localhttp + local localhttp_servername="$localhttp[1]" + local localhttp_documentroot="$localhttp[2]" + local localhttp_userdir="$localhttp[3]" + zstyle -a ":completion:${curcontext}:urls" urls urls + if [[ $#urls -gt 1 || ( $#urls -eq 1 && ! -d $urls[1] ) ]] + then + [[ $#urls -eq 1 && -f $urls[1] ]] && urls=($(< $urls[1])) + _wanted urls expl 'URL' compadd "$@" -a urls && return 0 + urls=() + fi + urls="$urls[1]" + glob=(-g '*(^/)') + zparseopts -D -K -E 'g:=glob' + ipre="$IPREFIX" + if ! compset -P '(#b)([-+.a-z0-9]#):' + then + _tags -C argument prefixes + while _tags + do + while _next_label prefixes expl 'URL prefix' -S '' "$@" + do + compset -S '[^:/]*' && compstate[to_end]='' + compadd "$expl[@]" http:// socks:// socks4:// socks5:// && ret=0 + done + (( ret )) || return 0 + done + return 1 + fi + scheme="$match[1]" + case "$scheme" in + (http(|s)|socks(|4|5)) if ! compset -P // + then + _wanted -C "$scheme" prefixes expl 'end of prefix' compadd -S '' "$@" // + return + fi ;; + (file) [[ -prefix //(127.0.0.1|localhost)/ ]] && compset -P '//(127.0.0.1|localhost)' + [[ -prefix /// ]] && compset -P // + if ! compset -P // + then + _tags -C file files + while _tags + do + while _next_label files expl 'local file' + do + if [[ -prefix / ]] + then + _path_files "$expl[@]" -S '' "${glob[@]}" && ret=0 + _path_files "$expl[@]" -S/ -r '/' -/ && ret=0 + elif [[ -z "$PREFIX" ]] + then + compadd -S '/' -r '/' "$expl[@]" "$@" - "${PWD%/}" && ret=0 + fi + done + (( ret )) || return 0 + done + return 1 + fi ;; + esac + if ! compset -P '(#b)([^:/]#)([:/])' + then + uhosts=($urls/$scheme/$PREFIX*$SUFFIX(/:t)) + _tags hosts + while _tags + do + while _next_label hosts expl host + do + compset -S '[:/]*' || suf="/" + (( $#uhosts )) || _hosts -S "$suf" -r '/:' "$expl[@]" && ret=0 + [[ "$scheme" = http ]] && uhosts=($uhosts $localhttp_servername) + compadd -S "$suf" -r '/:' "$expl[@]" -a uhosts && ret=0 + done + (( ret )) || return 0 + done + return 1 + fi + host="$match[1]" + [[ $match[2] = ':' ]] && ! compset -P '<->/' && _message -e ports 'port number' && return 0 + _tags remote-files files || return 1 + if [[ "$localhttp_servername" = "$host" ]] + then + if compset -P \~ + then + if ! compset -P '(#b)([^/]#)/' + then + _users -S/ "$@" + return + fi + user="$match[1]" + while _tags + do + while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W ~$user/$localhttp_userdir-/ && ret=0 + done + (( ret )) || return 0 + done + else + while _tags + do + while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W $localhttp_documentroot "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W $localhttp_documentroot -/ && ret=0 + done + (( ret )) || return 0 + done + fi + else + while _tags + do + (( $#urls )) && while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W $urls/$scheme/$host "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W $urls/$scheme/$host -/ && ret=0 + done + [[ $scheme = (scp|sftp) ]] && _requested remote-files && _remote_files -h $host -- ssh && ret=0 + (( ret )) || return 0 + done + fi + return $ret +} diff --git a/.zprezto/modules/completion/external/src/_cmake b/.zprezto/modules/completion/external/src/_cmake index 240c7ea..55efa73 100644 --- a/.zprezto/modules/completion/external/src/_cmake +++ b/.zprezto/modules/completion/external/src/_cmake @@ -1,6 +1,6 @@ #compdef cmake # ------------------------------------------------------------------------------ -# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -35,7 +35,7 @@ # ------- # # * Scott M. Kroll (initial version) -# * Paul Seyfert (handling of --build) +# * Paul Seyfert (handling of --build and updates) # # ------------------------------------------------------------------------- # Notes @@ -78,9 +78,15 @@ local cmake_build_options;cmake_build_options=( # ------------------------ # _cmake_generator_options +# +# arguments are $1: build working directory (top level Makefile or build.ninja file) +# $2: position of "--" in the command line # ------------------------ (( $+functions[_cmake_generator_options] )) || _cmake_generator_options() { + # pass only the part of the command line starting at "--" to the completion + shift (( $2 - 1 )) words + (( CURRENT = $CURRENT + 1 - $2 )) if [ -f $1/Makefile ] then $_comps[make] @@ -116,6 +122,10 @@ _cmake_targets() { _describe 'build targets' targets } +_cmake_suggest_builddirs() { + _alternative ':current directory:(.)' 'directory::_directories' && return 0 +} + _cmake_on_build() { local build_extras;build_extras=( '--[Native build tool options]' @@ -130,14 +140,14 @@ _cmake_on_build() { (( i++ )) done inbuild=false - nativemode=false + dashdashposition=-1 for ((i = (($CURRENT - 1)); i > 1 ; i--)); do if [[ $words[$i] == --build ]] ; then inbuild=true buildat=$i (( difference = $CURRENT - $i )) elif [[ $words[$i] == -- ]] ; then - nativemode=true + dashdashposition=$i fi done # check if build mode has been left @@ -149,18 +159,16 @@ _cmake_on_build() { if [[ $words[(($i - 1))] == --config ]] ; then continue ; fi outofbuild=true done - if [ "$nativemode" = true ] ; then - _cmake_generator_options $words[(($buildat + 1))] && return 0 + if (( $dashdashposition > 0 )) ; then + _cmake_generator_options $words[(($buildat + 1))] $dashdashposition && return 0 fi - if [ "$inbuild" = false ] ; then + if [[ "$inbuild" == false || "$difference" -eq 1 ]] ; then + # either there is no --build or completing the directory after --build _arguments -C -s \ - build_opts \ "$cmake_build_options[@]" \ - build_cmds \ "$cmake_suggest_build[@]" && return 0 - elif [ $difference -eq 1 ] ; then - # directly after --build comes the build directory - _alternative ':current directory:(.)' 'directory::_directories' && return 0 elif [[ $words[(($CURRENT - 1))] == --target ]] ; then # after --build --target, suggest targets _cmake_targets $words[(($buildat + 1))] && return 0 @@ -291,6 +299,9 @@ _cmake_define_lang_property_names() { "CMAKE_${cmake_lang}_FLAGS_RELEASE:${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" + "CMAKE_${cmake_lang}_STANDARD:${cmake_lang_desc} language standard" + "CMAKE_${cmake_lang}_STANDARD_REQUIRED:${cmake_lang_desc} language standard is required" + "CMAKE_${cmake_lang}_EXTENSIONS:${cmake_lang_desc} enable compiler specific extensions" ) _describe -t "${cmake_lang//:/-}-property-names" "${cmake_lang_desc} property name" properties $@[0,-3] && return 0 @@ -302,12 +313,15 @@ _cmake_define_lang_property_names() { (( $+functions[_cmake_define_common_property_names] )) || _cmake_define_common_property_names() { local properties; properties=( - 'CMAKE_MODULE_PATH:Search path for cmake modules' + 'CMAKE_MODULE_PATH:Search path for cmake modules (FindPROJECT.cmake)' + 'CMAKE_PREFIX_PATH:Search path for installations (PROJECTConfig.cmake)' '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' 'CMAKE_EXPORT_COMPILE_COMMANDS:Enable/disable output of compilation database during generation' + 'CMAKE_RULE_MESSAGES:Specify whether to report a message for each make rule' + 'CMAKE_VERBOSE_MAKEFILE:Enable verbose output from Makefile builds' ) _describe -t 'common-property-names' 'common property name' properties $@ @@ -322,12 +336,18 @@ _cmake_define_property_values() { setopt localoptions extendedglob case $@[-1] in (CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _cmake_build_types && ret=0;; + (CMAKE_CXX_STANDARD) _wanted cxx-standards expl 'cxx standard' _cmake_cxx_standars && ret=0;; + (CMAKE_C_STANDARD) _wanted c-standards expl 'c standard' _cmake_c_standars && 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_RULE_MESSAGES) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; + (CMAKE_VERBOSE_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; (CMAKE_INSTALL_PREFIX) _files -/ && ret=0;; (CMAKE_EXPORT_COMPILE_COMMANDS) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; (CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;; - (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && ret=0;; + (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && _dispatch $service -value-,CPPFLAGS,-default- && ret=0;; + (CMAKE_*_STANDARD_REQUIRED) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; + (CMAKE_*_EXTENSIONS) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;; (*) _files && ret=0;; esac @@ -348,6 +368,33 @@ _cmake_build_types() { _values 'build type' ${build_types[@]} } +# ------------------- +# _cmake_c_standars +# ------------------- +(( $+functions[_cmake_c_standars] )) || +_cmake_c_standars() { + local c_standards; c_standards=( + '90' + '99' + '11' + ) + _values 'c standard' ${c_standards[@]} +} + +# ------------------- +# _cmake_cxx_standars +# ------------------- +(( $+functions[_cmake_cxx_standars] )) || +_cmake_cxx_standars() { + local cxx_standards; cxx_standards=( + '98' + '11' + '14' + '17' + ) + _values 'cxx standard' ${cxx_standards[@]} +} + # ----------------- # _cmake_generators # ----------------- @@ -405,7 +452,7 @@ _cmake_command() { } local cmake_suggest_build;cmake_suggest_build=( - '--build[build]' + '--build[build]:build dir:_cmake_suggest_builddirs' ) if [ $CURRENT -eq 2 ] ; then diff --git a/.zprezto/modules/completion/external/src/_conan b/.zprezto/modules/completion/external/src/_conan new file mode 100644 index 0000000..dd56b87 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_conan @@ -0,0 +1,626 @@ +#compdef conan +# ------------------------------------------------------------------------------ +# Copyright (c) 2010-2017 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 conan 0.28.1 (https://www.conan.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_conan() { + + local context state state_descr line + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[display version information]' \ + '(-h --help)1: :_conan_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_${words[1]}_args] )) && _conan_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_commands] )) || +_conan_commands() { + local consumer_commands creator_commands package_development_commands misc_commands deprecated_commands + consumer_commands=( + 'install:installs the requirements specified in a "conanfile.py" or "conanfile.txt"' + 'config:manages conan configuration information' + 'get:gets a file or list a directory of a given reference or package' + 'info:prints information about a package recipe'\''s dependency graph' + 'search:search package recipes and binaries in the local cache or in a remote server' + ) + creator_commands=( + 'new:creates a new package recipe template with a '\''conanfile.py'\''' + 'create:export, build package and test it with a consumer project' + 'upload:uploads a package recipe and the generated binary packages to a specified remote' + 'export:copies the package recipe (conanfile.py and associated files) to your local cache' + 'export-pkg:exports a recipe & creates a package with given files calling '\''package'\''' + 'test:runs a test-folder/conanfile.py to test an existing package' + ) + package_development_commands=( + 'source:calls your conanfile.py "source()" method to configure the source directory' + 'build:utility command to run your current project "conanfile.py" build() method' + 'package:calls your conanfile.py "package" method for a specific package recipe' + ) + misc_commands=( + 'profile:list profiles in the ".conan/profiles" folder, or show profile details' + 'remote:handles the remote list and the package recipes associated to a remote' + 'user:update your cached user name (and auth token) to avoid it being requested later' + 'imports:execute the "imports" stage of a conanfile.txt or a conanfile.py' + 'copy:copy conan recipes and packages to another user/channel.' + 'remove:remove any package recipe or binary matching a pattern' + 'alias:creates and export an alias recipe' + ) + _describe -t 'consumer-commands' "consumer commands" consumer_commands + _describe -t 'creator-commands' "creator commands" creator_commands + _describe -t 'package-development-commands' "package development commands" package_development_commands + _describe -t 'misc-commands' "misc commands" misc_commands +} + +(( $+functions[_conan_alias_args] )) || +_conan_alias_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:alias reference:_conan_package_references' \ + '(-h --help)2:target reference:_conan_package_references' +} + +(( $+functions[_conan_build_args] )) || +_conan_build_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -f --file)"{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + "(-h --help -sf --source-folder)"{-sf,--source-folder}'[local folder containing the sources. Defaulted to the directory of the conanfile. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -bf --build-folder)"{-bf,--build-folder}'[build folder, working directory of the build process. Defaulted to the current directory. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -pf --package-folder)"{-pf,--package-folder}'[folder to install the package (when the build system or build() method does it). Defaulted to the '\''{build_folder}/package'\'' folder. A relative path can be specified, relative to the current folder. Also an absolute path is allowed.]: :_files -/' \ + "(-h --help -if --install-folder)"{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution). Defaulted to --build-folder]: :_files -/' \ + '(-h --help)1: :_conan_conanfiles' +} + +(( $+functions[_conan_config_args] )) || +_conan_config_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_config_${words[1]}_args] )) && _conan_config_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_config_commands] )) || +_conan_config_commands() { + local commands + commands=( + 'rm:rm an existing config element' + 'set:set/add value' + 'get:get the value of existing element' + 'install:install a full configuration from a zip file, local or remote' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_config_rm_args] )) || +_conan_config_rm_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_keys' +} + +(( $+functions[_conan_config_get_args] )) || +_conan_config_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_keys' +} + +(( $+functions[_conan_config_set_args] )) || +_conan_config_set_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_set_key_values' +} + +(( $+functions[_conan_config_set_key_values] )) || +_conan_config_set_key_values() { + local ret=1 + if compset -P '*='; then + _wanted property-values expl 'config value' _conan_config_values ${IPREFIX%=} && ret=0 + else + _wanted property-names expl 'config key' _conan_config_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_config_install_args] )) || +_conan_config_install_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:config file:_files' +} + +(( $+functions[_conan_copy_args] )) || +_conan_copy_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help --all -p --package)"{-p,--package}'[copy specified package ID]:package reference:_conan_package_references' \ + '(-h --help --all -p --package)--all[copy all packages from the specified package recipe]' \ + '(-h --help --force)--force[override destination packages and the package recipe]' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2: :_conan_user_channels' +} + +(( $+functions[_conan_export_args] )) || +_conan_export_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -p --path)'{-p,--path}'[folder with a conanfile.py (default current directory)]: :_files -/' \ + '(-h --help -k --keep-source)'{-k,--keep-source}'[do not remove the source folder in the local cache]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help)1: :_conan_channel_or_package_references' +} + +(( $+functions[_conan_get_args] )) || +_conan_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -p --package)"{-p,--package}'[package ID]: :_conan_package_references' \ + '(-h --help -r --remote)'{-r,--remote}'[get from this specific remote]: :_conan_remotes' \ + '(-h --help -raw --raw)'{-raw,--raw}'[do not decorate the text]' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2:file or directory path:_files' +} + +(( $+functions[_conan_imports_args] )) || +_conan_imports_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[use another filename]: :_conan_conanfiles' \ + '(-h --help -imf --import-folder)'{-imf,--import-folder}'[directory to copy the artifacts to. By default it will be the current directory]: :_files -/' \ + '(-h --help -if --install-folder)'{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution)]: :_files -/' \ + '(-h --help -u --undo)'{-u,--undo}'[undo imports (remove imported files)]' \ + '(-h --help)1: :_conan_directory_or_package_references' +} + +(( $+functions[_conan_info_args] )) || +_conan_info_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help -n --only)'{-n,--only}'[filter fields]: :_conan_info_only_values' \ + '(-h --help --paths)--paths[show package paths in local cache]' \ + '(-h --help --package-filter)--package-filter[print information only for packages that match the filtere.g., MyPackage/1.2@user/channel or MyPackage*]: :_conan_package_references' \ + '(-h --help -bo --build_order)'{-bo,--build_order}'[given a modified reference, return an ordered list to build (CI)]' \ + '(-h --help -j --json)'{-j,--json}'[only with --build_order option, return the information in a json]: :_files -g "*.json"' \ + '(-h --help -g --graph)'{-g,--graph}'[creates file with project dependencies graph]: :_files -g "*.(dot|html)"' \ + '(-h --help -u --update)'{-u,--update}'[check updates exist from upstream remotes]' \ + '(-h --help -sc --scope)'{-sc,--scope}'[use the specified scope in the install command]: :_conan_scopes' \ + '(-h --help -pr --profile)'{-pr,--profile}'[apply the specified profile to the install command]: :_conan_profiles' \ + '(-h --help -r --remote)'{-r,--remote}'[look in the specified remote server]: :_conan_remotes' \ + '(-h --help)'{-o,--options}'[options to build the package, overwriting the defaults. e.g., -o with_qt=true]: :_conan_options' \ + '(-h --help)'{-s,--settings}'[settings to build the package, overwriting the defaults. e.g., -s compiler=gcc]: :_conan_settings' \ + '(-h --help)'{-e,--env}'[environment variables that will be set during the package build, -e CXX=/usr/bin/clang++]: :_conan_environment_variables' \ + '(-h --help -b --build)'{-b,--build}'[given a build policy (same install command "build" parameter), return an ordered list of packages that would be built from sources in install command (simulation)]: :_conan_build_policies' \ + '(-h --help)1: :_conan_conanfile_or_package_references' +} + +(( $+functions[_conan_info_only_values] )) || +_conan_info_only_values() { + local values + values=( + 'id:show only "id"' + 'build_id:show only "build_id"' + 'remote:show only "remote"' + 'url:show only "url"' + 'license:show only "license"' + 'requires:show only "requires"' + 'update:show only "update"' + 'required:show only "required"' + 'date:show only "date"' + 'author:show only "author"' + 'export_folder:use with --paths' + 'build_folder:use with --paths' + 'package_folder:use with --paths' + 'source_folder:use with --paths' + 'None:show only references' + ) + _describe -t 'values' "value" values +} + +(( $+functions[_conan_install_args] )) || +_conan_install_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help -g --generator)'{-g,--generator}'[generators to use]: :_conan_generators' \ + '(-h --help --werror)--werror[error instead of warnings for graph inconsistencies]' \ + '(-h --help -if --install-folder)'{-if,--install-folder}'[Use this directory as the directory where to put the generatorfiles, conaninfo/conanbuildinfo.txt etc.]: :_files -/' \ + '(-h --help -m --manifests)'{-m,--manifests}'[install dependencies manifests in folder for later verify]: :_files -/' \ + '(-h --help -mi --manifests-interactive)'{-mi,--manifests-interactive}'[install dependencies dependencies manifests in folder for later verify]: :_files -/' \ + '(-h --help -v --verify)'{-v,--verify}'[verify dependencies manifests against stored ones]: :_files -/' \ + '(-h --help --no-imports)--no-imports[install specified packages but avoid running imports]' \ + '(-h --help -u --update)'{-u,--update}'[check updates exist from upstream remotes]' \ + '(-h --help -sc --scope)'{-sc,--scope}'[use the specified scope in the install command]: :_conan_scopes' \ + '(-h --help -pr --profile)'{-pr,--profile}'[apply the specified profile to the install command]: :_conan_profiles' \ + '(-h --help -r --remote)'{-r,--remote}'[look in the specified remote server]: :_conan_remotes' \ + '(-h --help)'{-o,--options}'[options to build the package, overwriting the defaults. e.g., -o with_qt=true]: :_conan_options' \ + '(-h --help)'{-s,--settings}'[settings to build the package, overwriting the defaults. e.g., -s compiler=gcc]: :_conan_settings' \ + '(-h --help)'{-e,--env}'[environment variables that will be set during the package build, -e CXX=/usr/bin/clang++]: :_conan_environment_variables' \ + '(-h --help -b --build)'{-b,--build}'[given a build policy (same install command "build" parameter), return an ordered list of packages that would be built from sources in install command (simulation)]: :_conan_build_policies' \ + '(-h --help)1: :_conan_conanfile' +} + +(( $+functions[_conan_new_args] )) || +_conan_new_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -t --test)'{-t,--test}'[create test_package skeleton to test package]' \ + '(-h --help -i --header)'{-i,--header}'[create a headers only package template]' \ + '(-h --help -c --pure_c)'{-c,--pure_c}'[create a C language package only package, deleting "self.settings.compiler.libcxx" setting in the configure method]' \ + '(-h --help -s --sources)'{-s,--sources}'[create a package with embedded sources in "src" folder, using "exports_sources" instead of retrieving external code with the "source()" method]' \ + '(-h --help -b --bare)'{-b,--bare}'[create the minimum package recipe, without build() or package() methods. Useful in combination with "package_files" command]' \ + '(-h --help -cis --ci_shared)'{-cis,--ci_shared}'[package will have a "shared" option to be used in CI]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -cilc --ci_travis_clang)'{-cilc,--ci_travis_clang}'[generate travis-ci files for linux clang]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -cio --ci_travis_osx)'{-cio,--ci_travis_osx}'[generate travis-ci files for OSX apple-clang]' \ + '(-h --help -ciw --ci_appveyor_win)'{-ciw,--ci_appveyor_win}'[generate appveyor files for Appveyor Visual Studio]' \ + '(-h --help -ciglg --ci_gitlab_gcc)'{-ciglg,--ci_gitlab_gcc}'[generate GitLab files for linux gcc]' \ + '(-h --help -ciglc --ci_gitlab_clang)'{-ciglc,--ci_gitlab_clang}'[generate GitLab files for linux clang]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -gi --gitignore)'{-gi,--gitignore}'[generate a .gitignore with the known patterns to excluded]' \ + '(-h --help -ciu --ci_upload_url)'{-ciu,--ci_upload_url}'[define URL of the repository to upload]: :_urls' \ + '(-h --help)1: :_conan_package_references' +} + +(( $+functions[_conan_package_args] )) || +_conan_package_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -sf --source-folder)"{-sf,--source-folder}'[local folder containing the sources. Defaulted to the directory of the conanfile. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -bf --build-folder)"{-bf,--build-folder}'[build folder, working directory of the build process. Defaulted to the current directory. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -pf --package-folder)"{-pf,--package-folder}'[folder to install the package (when the build system or build() method does it). Defaulted to the '\''{build_folder}/package'\'' folder. A relative path can be specified, relative to the current folder. Also an absolute path is allowed.]: :_files -/' \ + "(-h --help -if --install-folder)"{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution). Defaulted to --build-folder]: :_files -/' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2:package ID:' +} + +(( $+functions[_conan_profile_args] )) || +_conan_profile_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_profile_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_profile_${words[1]}_args] )) && _conan_profile_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_profile_commands] )) || +_conan_profile_commands() { + local commands + commands=( + 'list:list current profiles' + 'show:show the values defined for a profile' + 'new:creates a new empty profile' + 'update:update a profile' + 'get:get a profile key' + 'remove:remove a profile key' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_profile_list_args] )) || +_conan_profile_list_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_conan_profile_show_args] )) || +_conan_profile_show_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_profiles' +} + +(( $+functions[_conan_profile_new_args] )) || +_conan_profile_new_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)--detect[autodetect settings and fill \[settings\] section]' \ + '(-h --help)1:profile name:' +} + +(( $+functions[_conan_profile_update_args] )) || +_conan_profile_update_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_settings' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_profile_get_args] )) || +_conan_profile_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_setting_keys' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_profile_remove_args] )) || +_conan_profile_remove_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_setting_keys' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_remote_args] )) || +_conan_remote_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remote_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_remote_${words[1]}_args] )) && _conan_remote_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_remote_commands] )) || +_conan_remote_commands() { + local commands + commands=( + 'list:list current remotes' + 'add:add a remote' + 'remove:remove a remote' + 'update:update the remote url' + 'list_ref:list the package recipes and its associated remotes' + 'add_ref:associate a recipe'\''s reference to a remote' + 'remove_ref:dissociate a recipe'\''s reference and its remote' + 'update_ref:update the remote associated with a package recipe' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_remote_list_args] )) || +_conan_remote_list_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_conan_remote_add_args] )) || +_conan_remote_add_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:name of the remote:' \ + '(-h --help)2:url of the remote:_urls' \ + '(-h --help)3:verify SSL certificated:(True False)' +} + +(( $+functions[_conan_remote_remove_args] )) || +_conan_remote_remove_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remotes' +} + +(( $+functions[_conan_remote_update_args] )) || +_conan_remote_update_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remotes' \ + '(-h --help)2:url of the remote:_urls' \ + '(-h --help)3:verify SSL certificated:(True False)' +} + +(( $+functions[_conan_remote_list_ref_args] )) || +_conan_remote_list_ref_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +# TODO complete conan remote add_ref +# TODO complete conan remote remove_ref +# TODO complete conan remote update_ref +# TODO complete conan remove +# TODO complete conan search +# TODO complete conan source +# TODO complete conan upload +# TODO complete conan user +# TODO complete conan export-pkg +# TODO complete conan test + + +(( $+functions[_conan_conanfiles] )) || +_conan_conanfiles() { + _files -g '*.py' +} + +(( $+functions[_conan_directory_or_package_references] )) || +_conan_conanfile_or_package_references() { + _alternative \ + 'conanfile: :_conan_conanfiles' \ + 'package-references: :_conan_package_references' +} + +(( $+functions[_conan_directory_or_package_references] )) || +_conan_directory_or_package_references() { + _alternative \ + 'directory: :_files -/' \ + 'package-references: :_conan_package_references' +} + +(( $+functions[_conan_channel_or_package_references] )) || +_conan_channel_or_package_references() { + _alternative \ + 'package-references: :_conan_package_references' \ + 'user-channels: :_conan_user_channels' +} + +(( $+functions[_conan_package_references] )) || +_conan_package_references() { + _guard '[^\-]#' 'package reference' # TODO complete package references +} + +(( $+functions[_conan_user_channels] )) || +_conan_user_channels() { + _guard '[^\-]#' 'user channel' # TODO complete user channels +} + +(( $+functions[_conan_remotes] )) || +_conan_remotes() { + local remotes; remotes=(${(f)"$(_call_program remotes $service remote list)"}) + _describe -t remotes 'remote' remotes "$@" +} + +(( $+functions[_conan_scopes] )) || +_conan_scopes() { + _guard '[^\-]#' 'scope' # TODO complete scopes +} + +(( $+functions[_conan_build_policies] )) || +_conan_build_policies() { + _guard '[^\-]#' 'build policy' # TODO complete build policies +} + +(( $+functions[_conan_generators] )) || +_conan_generators() { + _guard '[^\-]#' 'generator' # TODO complete generators +} + +(( $+functions[_conan_profiles] )) || +_conan_profiles() { + local profiles; profiles=(${(f)"$(_call_program profiles $service profile list)"}) + _describe -t profiles 'profile' profiles "$@" +} + +(( $+functions[_conan_config_keys] )) || +_conan_config_keys() { + _guard '[^\-]#' 'config key' # TODO complete config keys +} + +(( $+functions[_conan_config_values] )) || +_conan_config_values() { + _guard '[^\-]#' 'config value' # TODO complete config values +} + +(( $+functions[_conan_options] )) || +_conan_options() { + local ret=1 + if compset -P '*='; then + _wanted option-values expl 'option value' _conan_option_values ${IPREFIX%=} && ret=0 + else + _wanted option-names expl 'option key' _conan_option_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_option_keys] )) || +_conan_option_keys() { + _guard '[^\-]#' 'option key' # TODO complete option keys +} + +(( $+functions[_conan_option_values] )) || +_conan_option_values() { + _guard '[^\-]#' 'option value' # TODO complete option values +} + +(( $+functions[_conan_settings] )) || +_conan_settings() { + local ret=1 + if compset -P '*='; then + _wanted setting-values expl 'setting value' _conan_setting_values ${IPREFIX%=} && ret=0 + else + _wanted setting-names expl 'setting key' _conan_setting_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_setting_keys] )) || +_conan_setting_keys() { + _guard '[^\-]#' 'setting key' # TODO complete setting keys +} + +(( $+functions[_conan_setting_values] )) || +_conan_setting_values() { + _guard '[^\-]#' 'setting value' # TODO complete setting values +} + +(( $+functions[_conan_environment_variables] )) || +_conan_environment_variables() { + local ret=1 + if compset -P '*='; then + _wanted environment_variable-values expl 'environment variable value' _conan_environment_variable_values ${IPREFIX%=} && ret=0 + else + _wanted environment_variable-names expl 'environment variable' _conan_environment_variable_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_environment_variable_keys] )) || +_conan_environment_variable_keys() { + _parameters -g "*export*" +} + +(( $+functions[_conan_environment_variable_values] )) || +_conan_environment_variable_values() { + _guard '[^\-]#' 'environment variable value' # TODO complete environment variable values +} + + +_conan "$@" + +# 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/_ecdsautil b/.zprezto/modules/completion/external/src/_ecdsautil new file mode 100644 index 0000000..5d0a6f3 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_ecdsautil @@ -0,0 +1,53 @@ +#compdef ecdsautil +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ecdsaultils v0.4.0 (https://github.com/tcatm/ecdsautils) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Robinhuett +# +# ------------------------------------------------------------------------------ + +_ecdsautil_args() { + case $words[1] in + (sign) + _arguments '1:somefile:_files' + ;; + (verify) + _arguments '-s[signature]:secret:_files' '-p[publickey]:pubkey:_files' +'-n[signaturecount]:signaturecount:""' ':file:_files' + ;; + esac +} + +_ecdsautil() { + local -a commands + + commands=( + "help:Show help" + "generate-key:generate a new secret on stdout" + "show-key:output public key of secret read from stdin" + "sign:sign file" + "verify:verify signature of file" + ) + + _arguments -C \ + '1:cmd:->cmds' \ + '*:: :->args' \ + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (*) + _ecdsautil_args + ;; + esac +} + +_ecdsautil "$@" diff --git a/.zprezto/modules/completion/external/src/_flutter b/.zprezto/modules/completion/external/src/_flutter new file mode 100644 index 0000000..c63a5d9 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_flutter @@ -0,0 +1,442 @@ +#compdef flutter +# ------------------------------------------------------------------------------ +#MIT License +# +#Copyright (c) 2018 Nickolay Simonov +# +#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 the Flutter.io sdk's cli tool (https://flutter.io) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nikolai Simonov (https://github.com/NiKoTron) +# +# ------------------------------------------------------------------------------ +_flutter() { + +typeset -A opt_args +local context state line + +local curcontext="$curcontext" + +local ret=1 + +_arguments -C -A "-*" \ +'(-h --help)'{-h,--help}'[Print this usage information.]' \ +'(-v --verbose)'{-v,--verbose}'[Noisy logging, including all shell commands executed.]' \ +'--quiet[Reduce the amount of output from some commands.]' \ +'(-d --device-id)'{-d,--device-id}'[Target device id or name (prefixes allowed).]' \ +'--version[Reports the version of this tool.]' \ +'--color[Whether to use terminal colors.]' \ +'--no-color[Whether to use terminal colors.]' \ +'--suppress-analytics[Suppress analytics reporting when this command runs.]' \ +'--bug-report[Captures a bug report file to submit to the Flutter team (contains local paths, device identifiers, and log snippets).]' \ +'--packages[Path to your ".packages" file. (required, since the current directory does not contain a ".packages" file)]' \ +'--flutter-root[The root directory of the Flutter repository (uses $FLUTTER_ROOT if set).]' \ +'1: :_root_commands' \ +'*::arg:->args' \ +&& ret=0 + + case "$state" in + (args) + case $words[1] in + (help) + _arguments -C \ + '1: :_root_commands' \ + && ret=0 + ;; + (analyze) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--flutter-repo[Include all the examples and tests from the Flutter repository.]' \ + '--no-flutter-repo[Include all the examples and tests from the Flutter repository.]' \ + '--current-package[Include the lib/main.dart file from the current directory, if any. (defaults to on)]' \ + '--no-current-package[Include the lib/main.dart file from the current directory, if any. (defaults to on)]' \ + '--watch[Run analysis continuously, watching the filesystem for changes.]' \ + '--preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--no-preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--write=[Also output the results to a file. This is useful with --watch if you want a file to always contain the latest results.]: :_files -/' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--congratulate[When analyzing the flutter repository, show output even when there are no errors, warnings, hints, or lints. (defaults to on)]' \ + '--no-congratulate[When analyzing the flutter repository, show output even when there are no errors, warnings, hints, or lints. (defaults to on)]' \ + '--preamble[When analyzing the flutter repository, display the number of files that will be analyzed. (defaults to on)]' \ + '--no-preamble[When analyzing the flutter repository, display the number of files that will be analyzed. (defaults to on)]' \ + && ret=0 + ;; + (build) + _arguments -C \ + '1: :_build_entities' \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (channel) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (clean) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (config) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--analytics[Enable or disable reporting anonymously tool usage statistics and crash reports.]' \ + '--no-analytics[Enable or disable reporting anonymously tool usage statistics and crash reports.]' \ + '--clear-ios-signing-cert[Clear the saved development certificate choice used to sign apps for iOS device deployment.]' \ + '--gradle-dir[The gradle install directory.]' \ + '--android-sdk[The Android SDK directory.]' \ + '--android-studio-dir[The Android Studio install directory.]' \ + && ret=0 + ;; + + (create) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--pub[Whether to run "flutter packages get" after the project has been created. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" after the project has been created. (defaults to on)]' \ + '--offline[When "flutter packages get" is run by the create command, this indicates whether to run it in offline mode or not. In offline mode, it will need to have all dependencies already available in the pub cache to succeed.]' \ + '--no-offline[When "flutter packages get" is run by the create command, this indicates whether to run it in offline mode or not. In offline mode, it will need to have all dependencies already available in the pub cache to succeed.]' \ + "--with-driver-test[Also add a fl:_root_commandsutter_driver dependency and generate a sample 'flutter drive' test.]" \ + "--no-with-driver-test[Also add a flutter_driver dependency and generate a sample 'flutter drive' test.]" \ + '(-t= --template=)'{-t=,--template=}'[Specify the type of project to create.]: :_project_templates' \ + "--description[The description to use for your new Flutter project. This string ends up in the pubspec.yaml file. (defaults to 'A new Flutter project.')]" \ + "--org[The organization responsible for your new Flutter project, in reverse domain name notation. This string is used in Java package names and as prefix in the iOS bundle identifier. (defaults to 'com.example')]" \ + '(-i= --ios-language)'{-i=,--ios-language}'[iOS project language]: :_ios_languages' \ + '(-a= --android-language)'{-a=,--android-language}'[Android project language]: :_droid_languages' \ + && ret=0 + ;; + + (daemon) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (devices) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (doctor) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + "--android-licenses[Run the Android SDK manager tool to accept the SDK's licenses.]" \ + && ret=0 + ;; + (drive) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '--flavor[Build a custom app flavor as defined by platform-specific build setup. Supports the use of product flavors in Android Gradle scripts. Supports the use of custom Xcode schemes.]' \ + '--trace-startup[Start tracing during startup.]' \ + '--route[Which route to load when running the app.]' \ + '--target-platform[Specify the target platform when building the app for an Android device. Ignored on iOS.]: :_target_platforms' \ + '(-t= --target=)'{-t=,-target=}'[The main entry-point file of the application, as run on the device. If the --target option is omitted, but a file name is provided on the command line, then that is used instead. (defaults to "lib/main.dart")]: :_files -g "*.dart"' \ + '--observatory-port[Listen to the given port for an observatory debugger connection. Specifying port 0 will find a random free port. Defaults to the first available port after 8100.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-keep-app-running[Will keep the Flutter application running when done testing. By default, "flutter drive" stops the application after tests are finished, and --keep-app-running overrides this. On the other hand, if --use-existing-app is specified, then "flutter drive" instead defaults to leaving the application running, and --no-keep-app-running overrides it.]' \ + '--keep-app-running[Will keep the Flutter application running when done testing. By default, "flutter drive" stops the application after tests are finished, and --keep-app-running overrides this. On the other hand, if --use-existing-app is specified, then "flutter drive" instead defaults to leaving the application running, and --no-keep-app-running overrides it.]' \ + '--use-existing-app=[Connect to an already running instance via the given observatory URL. If this option is given, the application will not be automatically started, and it will only be stopped if --no-keep-app-running is explicitly set.]' \ + '--driver=[The test file to run on the host (as opposed to the target file to run on the device). By default, this file has the same base name as the target file, but in the "test_driver/" directory instead, and with "_test" inserted just before the extension, so e.g. if the target is "lib/main.dart", the driver will be "test_driver/main_test.dart".]: :_files' \ + '--preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--no-preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + && ret=0 + ;; + (format) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (fuchsia_reload) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '(-a --address)'{-a,--address}'[Fuchsia device network name or address.]' \ + '(-b --build-dir)'{-b,--build-dir}'[Fuchsia build directory, e.g. out/release-x86-64.]' \ + '(-g --gn-target)'{-g,--gn-target}'[GN target of the application, e.g //path/to/app:app.]' \ + '(-i --isolate-number)'{-i,--isolate-number}'[To reload only one instance, specify the isolate number, e.g. the number in foo$main-###### given by --list.]' \ + '(-l --list)'{-l,--list}'[Lists the running modules.]' \ + '(-l --no-list)'{-l,--no-list}'[Lists the running modules.]' \ + '(-n --name-override)'{-n,--name-override}'[On-device name of the application binary.]' \ + '(-2 --preview-dart-2)'{-2,--preview-dart-2}'[Preview Dart 2.0 functionality.]' \ + '(-2 --no-preview-dart-2)'{-2,--no-preview-dart-2}'[Preview Dart 2.0 functionality.]' \ + '(-t --target)'{-t,--target}'[Target app path / main entry-point file. Relative to --gn-target path, e.g. lib/main.dart. (defaults to "lib/main.dart")]' \ + && ret=0 + ;; + (ide-config) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--overwrite[When performing operations, overwrite existing files.]' \ + '--no-overwrite[When performing operations, overwrite existing files.]' \ + '--update-templates[Update the templates in the template directory from the current configuration files. This is the opposite of what ide-config usually does. Will search the flutter tree for .iml files and copy any missing ones into the template directory. If --overwrite is also specified, it will update any out-of-date files, and remove any deleted files from the template directory.]' \ + && ret=0 + ;; + (inject-plugins) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (install) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (logs) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-c --clear)'{-c,--clear}'[Clear log history before reading from logs.]' \ + && ret=0 + ;; + (packages) + _arguments -C \ + '1: :_package_subcomands' \ + '*::pkg-arg:->pkg-args' \ + && ret=0 + case "$state" in + (pkg-args) + case $words[1] in + (get) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--offline[Use cached packages instead of accessing the network.]' \ + && ret=0 + ;; + (pub) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (test) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (upgrade) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--offline[Use cached packages instead of accessing the network.]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + + (precache) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-a --all-platforms)]'{-a--all-platforms}'[Precache artifacts for all platforms.]' \ + && ret=0 + ;; + (run) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '--flavor[Build a custom app flavor as defined by platform-specific build setup. Supports the use of product flavors in Android Gradle scripts. Supports the use of custom Xcode schemes.]' \ + '--trace-startup[Start tracing during startup.]' \ + '--route[Which route to load when running the app.]' \ + '--target-platform[Specify the target platform when building the app for an Android device. Ignored on iOS.]: :_target_platforms' \ + '(-t= --target=)'{-t=,--target=}'[The main entry-point file of the application, as run on the device. If the --target option is omitted, but a file name is provided on the command line, then that is used instead. (defaults to "lib/main.dart")]: :_files -g "*.dart"' \ + '--observatory-port[Listen to the given port for an observatory debugger connection. Specifying port 0 will find a random free port.Defaults to the first available port after 8100.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--full-restart[Stop any currently running application process before running the app. (defaults to on)]' \ + '--no-full-restart[Stop any currently running application process before running the app. (defaults to on)]' \ + '--start-paused[Start in a paused mode and wait for a debugger to connect.]' \ + '--enable-software-rendering[Enable rendering using the Skia software backend. This is useful when testing Flutter on emulators. By default, Flutter will attempt to either use OpenGL or Vulkan and fall back to software when neither is available.]' \ + '--skia-deterministic-rendering When combined with --enable-software-rendering, provides 100% deterministic Skia rendering.]' \ + '--trace-skia[Enable tracing of Skia code. This is useful when debugging the GPU thread. By default, Flutter will not log skia code.]' \ + '--use-test-fonts[Enable (and default to) the "Ahem" font. This is a special font used in tests to remove any dependencies on the font metrics. It is enabled when you use "flutter test". Set this flag when running a test using "flutter run" for debugging purposes. This flag is only available when running in debug mode.]' \ + '--no-use-test-fonts[Enable (and default to) the "Ahem" font. This is a special font used in tests to remove any dependencies on the font metrics. It is enabled when you use "flutter test". Set this flag when running a test using "flutter run" for debugging purposes. This flag is only available when running in debug mode.]' \ + '--build[If necessary, build the app before running. (defaults to on)]' \ + '--no-build[If necessary, build the app before running. (defaults to on)]' \ + '--hot[Run with support for hot reloading. (defaults to on)]' \ + '--no-hot[Run with support for hot reloading. (defaults to on)]' \ + '--pid-file[Specify a file to write the process id to. You can send SIGUSR1 to trigger a hot reload and SIGUSR2 to trigger a full restart.]' \ + && ret=0 + ;; + (screenshot) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-o --out)'{-o,--out}'[Location to write the screenshot.]: :_files' \ + '--skia=[Retrieve the last frame rendered by a Flutter app as a Skia picture using the specified observatory port. To find the observatory port number, use "flutter run --verbose" and look for "Forwarded host port ... for Observatory" in the output.]' \ + && ret=0 + ;; + (stop) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (test) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--name=[A regular expression matching substrings of the names of tests to run.]' \ + '--plain-name=[A plain-text substring of the names of tests to run.]' \ + '--start-paused[Start in a paused mode and wait for a debugger to connect. You must specify a single test file to run, explicitly. Instructions for connecting with a debugger and printed to the console once the test has started.]' \ + '--coverage[Whether to collect coverage information.]' \ + '--merge-coverage[Whether to merge coverage data with "coverage/lcov.base.info". Implies collecting coverage data. (Requires lcov)]' \ + '--coverage-path[Where to store coverage information (if coverage is enabled). (defaults to "coverage/lcov.info")]' \ + && ret=0 + (trace) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--start[Start tracing.]' \ + '--stop[Stop tracing.]' \ + '--out[Specify the path of the saved trace file.]' \ + '(-d --duration)'{-d,--duration}'[Duration in seconds to trace. (defaults to "10")]' \ + '--debug-port[Local port where the observatory is listening. (defaults to "8100")]' \ + && ret=0 + ;; + (update-packages) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--force-upgrade[Attempt to update all the dependencies to their latest versions. This will actually modify the pubspec.yaml files in your checkout.]' \ + '--no-force-upgrade[Attempt to update all the dependencies to their latest versions. This will actually modify the pubspec.yaml files in your checkout.]' \ + '--paths[Finds paths in the dependency chain leading from package specified in --from to package specified in --to.]' \ + '--no-paths[Finds paths in the dependency chain leading from package specified in --from to package specified in --to.]' \ + '--from[Used with flag --dependency-path. Specifies the package to begin searching dependency path from.]' \ + '--to[Used with flag --dependency-path. Specifies the package that the sought after dependency path leads to.]' \ + '--transitive-closure[Prints the dependency graph that is the transitive closure of packages the Flutter SDK depends on.]' \ + '--no-transitive-closure[Prints the dependency graph that is the transitive closure of packages the Flutter SDK depends on.]' \ + '--verify-only[verifies the package checksum without changing or updating deps]' \ + '--no-verify-only[verifies the package checksum without changing or updating deps]' \ + && ret=0 + ;; + (upgrade) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + + esac + ;; + esac + + + return ret + + } + + +(( $+functions[root_commands] )) || +_root_commands() { + local commands; + commands=( + "analyze:Analyze the project's Dart code." + 'build:Flutter build commands.' + 'channel:List or switch flutter channels.' + 'clean:Delete the build/ directory.' + 'config:Configure Flutter settings.' + 'create:Create a new Flutter project.' + 'daemon:Run a persistent, JSON-RPC based server to communicate with devices.' + 'devices:List all connected devices.' + 'doctor:Show information about the installed tooling.' + 'drive:Runs Flutter Driver tests for the current project.' + 'format:Format one or more dart files.' + 'fuchsia_reload:Hot reload on Fuchsia.' + 'help:Display help information for flutter.' + 'ide-config:Configure the IDE for use in the Flutter tree.' + 'inject-plugins:Re-generates the GeneratedPluginRegistrants.' + 'install:Install a Flutter app on an attached device.' + 'logs:Show log output for running Flutter apps.' + 'packages:Commands for managing Flutter packages.' + "precache:Populates the Flutter tool's cache of binary artifacts." + 'run:Run your Flutter app on an attached device.' + 'screenshot:Take a screenshot from a connected device.' + 'stop:Stop your Flutter app on an attached device.' + 'test:Run Flutter unit tests for the current project.' + 'trace:Start and stop tracing for a running Flutter app.' + 'update-packages:Update the packages inside the Flutter repo.' + 'upgrade:Upgrade your copy of Flutter.') + _describe -t commands 'command' commands "$@" +} + +(( $+functions[_build_entities] )) || +_build_entities() { + local entities; + entities=("aot:Build an ahead-of-time compiled snapshot of your app's Dart code." + "apk:Build an Android APK file from your app." + "flx:Build a Flutter FLX file from your app." + "ios:Build an iOS application bundle (Mac OS X host only).") + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_project_templates] )) || +_project_templates() { + local templates; + templates=("app:(default) Generate a Flutter application." + "package:Generate a shareable Flutter project containing modular Dart code." + "plugin:Generate a shareable Flutter project containing an API in Dart code with a platform-specific implementation for Android, for iOS code, or for both.") + _describe -t templates 'template' templates "$@" +} + +(( $+functions[_ios_languages] )) || +_ios_languages() { + local languages; + languages=("objc:(default) Objective-C." + "swift:Swift.") + _describe -t languages 'language' languages "$@" +} + +(( $+functions[_droid_languages] )) || +_droid_languages() { + local languages; + languages=("java:(default) Java." + "kotlin:Kotlin.") + _describe -t languages 'language' languages "$@" +} + +(( $+functions[_target_platforms] )) || +_target_platforms() { + local platforms; + platforms=("default:(default) default." + "android-arm:android-arm." + "android-arm64:android-arm64.") + _describe -t platforms 'platform' platforms "$@" +} + + +(( $+functions[_package_subcomands] )) || +_package_subcomands() { + local subcommands; + subcommands=("get:Get packages in a Flutter project." + "pub:Pass the remaining arguments to Dart's 'pub' tool." + "test:Run the 'test' package." + "upgrade:Upgrade packages in a Flutter project.") + _describe -t subcommands 'subcommand' subcommands "$@" +} + +_flutter "$@" diff --git a/.zprezto/modules/completion/external/src/_ghc b/.zprezto/modules/completion/external/src/_ghc index 7d4e1ef..2709406 100644 --- a/.zprezto/modules/completion/external/src/_ghc +++ b/.zprezto/modules/completion/external/src/_ghc @@ -92,15 +92,15 @@ _ghc_compiler () '-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]" \ + "-dylib-install-name[On Darwin/macOS 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]' \ + '-framework-path[On Darwin/macOS/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)]' \ + '-staticlib[On Darwin/macOS/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)]' \ diff --git a/.zprezto/modules/completion/external/src/_glances b/.zprezto/modules/completion/external/src/_glances index e0298ea..a86f875 100644 --- a/.zprezto/modules/completion/external/src/_glances +++ b/.zprezto/modules/completion/external/src/_glances @@ -40,24 +40,36 @@ _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]" \ + _arguments \ + "-0[Divide task CPU usage by the total number of CPUs]" \ + "-1[Start Glances in per CPU mode]" \ + "-2[Disable left sidebar]" \ + "-3[Disable quick look module]" \ + "-4[Disable all but quick look and load]" \ + "-5[Disable top menu]" \ + "-6[Start Glances in mean GPU mode]" \ + "-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[Enable debug mode]" \ + "-h[Display the syntax and exit]" \ + "-o[Define additional output (available: HTML or CSV)]:output type:(HTML CSV)" \ + "-p[Define the client or server TCP port (default: 61209)]:port:_ports" \ + "-q[Disable the curses interface]" \ + "-s[Run Glances in server mode]" \ + "-t[Set the refresh time in seconds (default: 3)]:seconds:" \ + "-V[Display the version and exit]" \ + "-w[Run Glances in web server mode]" \ + "-z[Do not use the bold color attribute]" \ + "--browser[Start the client browser]" \ + "--disable-bg[Disable background colors in the terminal]" \ + "--disable-bold[Disable bold mode in the terminal]" \ + "--hide-kernel-threads[Hide kernel threads in process list]" \ + "--password[Define a client/server password]" \ + "--theme-white[Optimize display colors for white background]" \ + "--tree[Display processes as tree]" \ + "--username[Define a client/server username]" \ } -_glances "$@" \ No newline at end of file +_glances "$@" diff --git a/.zprezto/modules/completion/external/src/_go b/.zprezto/modules/completion/external/src/_go deleted file mode 100644 index 0a9b6a0..0000000 --- a/.zprezto/modules/completion/external/src/_go +++ /dev/null @@ -1,554 +0,0 @@ -#compdef go -# ------------------------------------------------------------------------------ -# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users -# Copyright (c) 2013-2015 Robby Russell and contributors (see -# https://github.com/robbyrussell/oh-my-zsh/contributors) -# Copyright (c) 2010-2014 Go authors -# -# 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 go 1.5 (http://golang.org). -# -# ------------------------------------------------------------------------------ -# Authors -# ------- -# -# * Mikkel Oscar Lyderik -# * oh-my-zsh authors: -# https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/golang/golang.plugin.zsh -# * Go authors -# -# ------------------------------------------------------------------------------ - -typeset -A opt_args - -_go() { - local -a commands build_flags - commands=( - 'build:compile packages and dependencies' - 'clean:remove object files' - 'doc:show documentation for package or symbol' - 'env:print Go environment information' - 'fix:run go tool fix on packages' - 'fmt:run gofmt on package sources' - 'generate:generate Go files by processing source' - 'get:download and install packages and dependencies' - 'install:compile and install packages and dependencies' - 'list:list packages' - 'run:compile and run Go program' - 'test:test packages' - 'tool:run specified go tool' - 'version:print Go version' - 'vet:run go tool vet on packages' - 'help:get more information about a command' - ) - - _arguments \ - "1: :{_describe 'command' commands}" \ - '*:: :->args' - - case $state in - args) - build_flags=( - '-a[force rebuilding of packages that are already up-to-date]' - '-n[print the commands but do not run them]' - '-p[number of builds that can be run in parallel]:number' - '-race[enable data race detection]' - '-v[print the names of packages as they are compiled]' - '-work[print temporary work directory and keep it]' - '-x[print the commands]' - '-asmflags[arguments for each go tool asm invocation]:flags' - '-buildmode[build mode to use]:mode' - '-compiler[name of compiler to use]:name' - '-gccgoflags[arguments for gccgo]:args' - '-gcflags[arguments for each go tool compile invocation]:args' - '-installsuffix[suffix to add to package directory]:suffix' - '-ldflags[arguments to pass on each go tool link invocation.]:flags' - '-linkshared[link against shared libraries]' - '-pkgdir[install and load all packages from dir]:dir' - '-tags[list of build tags to consider satisfied]:tags' - '-toolexec[program to use to invoke toolchain programs]:args' - ) - - __go_packages() { - local gopaths - declare -a gopaths - gopaths=("${(s/:/)$(go env GOPATH)}") - gopaths+=("$(go env GOROOT)") - for p in $gopaths; do - _path_files -W "$p/src" -/ - done - } - - case $words[1] in - build) - _arguments \ - '-o[force build to write to named output file]:file:_files' \ - '-i[installs the packages that are dependencies of the target]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - clean) - _arguments \ - '-i[remove corresponding installed archive or binary]' \ - '-r[apply clean recursively on all dependencies]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - doc) - _arguments \ - '-c[respect case when matching symbols]' \ - '-cmd[treat a command (package main) like a regular package]' \ - '-u[show docs for unexported and exported symbols and methods]' - ;; - - fix) - _arguments '*:importpaths:__go_packages' - ;; - - fmt) - _arguments \ - '-n[prints commands that would be executed]' \ - '-x[prints commands as they are executed]' \ - '*:importpaths:__go_packages' - ;; - - generate) - _arguments \ - '-run=[specifies a regular expression to select directives]:regex' \ - '-x[print the commands]' \ - '-n[print the commands but do not run them]' \ - '-v[print the names of packages as they are compiled]' \ - "*:args:{ _alternative ':importpaths:__go_packages' _files }" - ;; - - get) - _arguments \ - '-d[instructs get to stop after downloading the packages]' \ - '-f[force get -u not to verify that each package has been checked from vcs]' \ - '-fix[run the fix tool on the downloaded packages]' \ - '-insecure[permit fetching/resolving custom domains]' \ - '-t[also download the packages required to build tests]' \ - '-u[use the network to update the named packages]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - install) - _arguments ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - list) - _arguments \ - '-e[changes the handling of erroneous packages]' \ - '-f[specifies an alternate format for the list]:format' \ - '-json[causes package data to be printed in JSON format]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - - run) - _arguments \ - ${build_flags[@]} \ - '-exec[invoke the binary using xprog]:xporg' \ - '*:file:_files -g "*.go(-.)"' - ;; - - test) - _arguments \ - "-c[compile but don't run test]" \ - '-i[install dependencies of the test]' \ - '-bench[run benchmarks matching the regular expression]:regexp' \ - '-benchmem[print memory allocation statistics for benchmarks]' \ - '-benchtime[run benchmarks for t rime]:t' \ - '-blockprofile[write a goroutine blocking profile to the specified file]:block' \ - '-blockprofilerate[control goroutine blocking profiles]:n' \ - '-count[run each test and benchmark n times]:n' \ - '-cover[enable coverage analysis]' \ - '-covermode[set the mode for coverage analysis]:mode:(set count atomic)' \ - '-coverpkg[apply coverage analysis in each test of listed packages]:list' \ - '-coverprofile[write a coverage profile to file]:cover' \ - '-cpu[specify a list of GOMAXPROCS values]:cpus' \ - '-cpuprofile[write a CPU profile to the specified file]:profile' \ - '-memprofile[write a memory profile to file]:mem' \ - '-memprofilerate[enable more precise memory profiles]:n' \ - '-outputdir[place output files from profiling in output dir]:dir' \ - '-parallel[allow parallel execution of test functions]:n' \ - '-run[run tests and examples matching the regular expression]:regexp' \ - '-short[tell long-running tests to shorten their run time]' \ - '-timeout[timeout long running tests]:t' \ - '-trace[write an execution trace to the specified file]:trace' \ - '-v[verbose output]' \ - ${build_flags[@]} \ - '-exec[run test binary using xprog]:xprog' \ - '-o[compile test binary to named file]:file:_files' \ - '*:importpaths:__go_packages' - ;; - - tool) - local -a tools - tools=($(go tool)) - - _arguments \ - '-n[print command that would be executed]' \ - "1: :{_describe 'tool' tools}" \ - '*:: :->args' - - case $state in - args) - case $words[1] in - addr2line) - _files - ;; - - asm) - _arguments \ - '-D[predefined symbol with optional simple value]:value' \ - '-I[include directory]:value' \ - '-S[print assembly and machine code]' \ - '-debug[dump instructions as they are parsed]' \ - '-dynlink[support references to Go symbols]' \ - '-o[output file]:string' \ - '-shared[generate code that can be linked into a shared lib]' \ - '-trimpath[remove prefix from recorded source file paths]:string' - ;; - - callgraph) - local -a algos graphs - algos=( - 'static:static calls only' - 'cha:Class Hierarchy Analysis' - 'rta:Rapid Type Analysis' - 'pta:inclusion-based Points-To Analysis' - ) - graphs=( - 'digraph:output in digraph format' - 'graphviz:output in AT&T GraphViz (.dot) format' - ) - - _arguments \ - '-algo=[call-graph construction algorithm]:algos:{ _describe "algos" algos }' \ - "-test[include the package's tests in the analysis]" \ - '-format=[format in which each call graph edge is displayed]:graphs:{ _describe "graphs" graphs }' - ;; - - cgo) - _arguments \ - '-debug-define[print relevant #defines]' \ - '-debug-gcc[print gcc invocations]' \ - '-dynimport[if non-empty, print dynamic import data]:string' \ - '-dynlinker[record dynamic linker information]' \ - '-dynout[write -dynimport output to file]:file' \ - '-dynpackage[set Go package for -dynimport output]:string' \ - '-exportheader[where to write export header]:string' \ - '-gccgo[generate files for use with gccgo]' \ - '-gccgopkgpath[-fgo-pkgpath option used with gccgo]:string' \ - '-gccgoprefix[-fgo-prefix option used with gccgo]:string' \ - '-godefs[write Go definitions for C file to stdout]' \ - '-import_runtime_cgo[import runtime/cgo in generated code]' \ - '-import_syscall[import syscall in generated code]' \ - '-importpath[import path of package being built]:path' \ - '-objdir[object directory]:dir' - ;; - - compile) - _arguments \ - '-%[debug non-static initializers]' \ - '-+[compiling runtime]' \ - "-A[for bootstrapping, allow 'any' type]" \ - '-B[disable bounds checking]' \ - '-D[set relative path for local imports]:path' \ - '-E[debug symbol export]' \ - '-I[add directory to import search path]:directory' \ - '-K[debug missing line numbers]' \ - '-L[use full (long) path in error messages]' \ - '-M[debug move generation]' \ - '-N[disable optimizations]' \ - '-P[debug peephole optimizer]' \ - '-R[debug register optimizer]' \ - '-S[print assembly listing]' \ - '-V[print compiler version]' \ - '-W[debug parse tree after type checking]' \ - '-asmhdr[write assembly header to file]:file' \ - '-buildid[record id as the build id in the export metadata]:id' \ - '-complete[compiling complete package (no C or assembly)]' \ - '-cpuprofile[write cpu profile to file]:file' \ - '-d[print debug information about items in list]:list' \ - '-dynlink[support references to Go symbols]' \ - '-e[no limit on number of errors reported]' \ - '-f[debug stack frames]' \ - '-g[debug code generation]' \ - '-h[halt on error]' \ - '-i[debug line number stack]' \ - '-importmap[add definition of the form source=actual to import map]:definition' \ - '-installsuffix[set pkg directory suffix]:suffix' \ - '-j[debug runtime-initialized variables]' \ - '-l[disable inlining]' \ - '-largemodel[generate code that assumes a large memory model]' \ - '-live[debug liveness analysis]' \ - '-m[print optimization decisions]' \ - '-memprofile[write memory profile to file]:file' \ - '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ - '-nolocalimports[reject local (relative) imports]' \ - '-o[write output to file]:file' \ - '-p[set expected package import path]:path' \ - '-pack[write package file instead of object file]' \ - '-r[debug generated wrappers]' \ - '-race[enable race detector]' \ - '-s[warn about composite literals that can be simplified]' \ - '-shared[generate code that can be linked into a shared library]' \ - '-trimpath[remove prefix from recorded source file paths]:prefix' \ - '-u[reject unsafe code]' \ - '-v[increase debug verbosity]' \ - '-w[debug type checking]' \ - '-wb[enable write barrier (default 1)]' \ - '-x[debug lexer]' \ - '-y[debug declarations in canned imports (with -d)]' \ - '*:file:_files -g "*.go(-.)"' - ;; - - cover) - if (( CURRENT == 2 )); then - _arguments \ - '-func=[output coverage profile information for each function]:string' \ - '-html=[generate HTML representation of coverage profile]:file:_files' \ - '-mode=[coverage mode]:mode:(set count atomic)' - return - fi - - _arguments \ - '-o[file for output]:file' \ - '-var=[name of coverage variable to generate]:var' \ - '*:file:_files -g "*.go(-.)"' - ;; - - doc) - _arguments \ - '-c[respect case when matching symbols]' \ - '-cmd[treat a command (package main) like a regular package]' \ - '-u[show docs for unexported and exported symbols and methods]' \ - ;; - - fix) - _arguments \ - '-diff[display diffs instead of rewriting files]' \ - '-force[force fixes to run even if the code looks updated]:string' \ - '-r[restrict the rewrites]:string' \ - '*:files:_files' - ;; - - link) - _arguments \ - '-B[add an ELF NT_GNU_BUILD_ID note when using ELF]:note' \ - '-C[check Go calls to C code]' \ - '-D[set data segment address (default -1)]:address' \ - '-E[set entry symbol name]:entry' \ - '-H[set header type]:type' \ - '-I[use linker as ELF dynamic linker]:linker' \ - '-L[add specified directory to library path]:directory' \ - '-R[set address rounding quantum (default -1)]:quantum' \ - '-T[set text segment address (default -1)]:address' \ - '-V[print version and exit]' \ - '-W[disassemble input]' \ - '-X[add string value definition]:definition' \ - '-a[disassemble output]' \ - '-buildid[record id as Go toolchain build id]:id' \ - '-buildmode[set build mode]:mode' \ - '-c[dump call graph]' \ - '-cpuprofile[write cpu profile to file]:file' \ - '-d[disable dynamic executable]' \ - '-extld[use linker when linking in external mode]:linker' \ - '-extldflags[pass flags to external linker]:flags' \ - '-f[ignore version mismatch]' \ - '-g[disable go package data checks]' \ - '-h[halt on error]' \ - '-installsuffix[set package directory suffix]:suffix' \ - '-k[set field tracking symbol]:symbol' \ - '-linkmode[set link mode]:mode:(internal external auto)' \ - '-linkshared[link against installed Go shared libraries]' \ - '-memprofile[write memory profile to file]:file' \ - '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ - '-n[dump symbol table]' \ - '-o[write output to file]:file' \ - '-r[set the ELF dynamic linker search path to dir1:dir2:...]:path' \ - '-race[enable race detector]' \ - '-s[disable symbol table]' \ - '-shared[generate shared object (implies -linkmode external)]' \ - '-tmpdir[use directory for temporary files]:directory' \ - '-u[reject unsafe packages]' \ - '-v[print link trace]' \ - '-w[disable DWARF generation]' \ - '*:files:_files' - ;; - - objdump) - _arguments \ - '-s[only dump symbols matching this regexp]:regexp' \ - '*:files:_files' - ;; - - pack) - _arguments '1:ops:(c p r t x)' '::verbose:(v)' ':files:_files' - ;; - - pprof) - _arguments \ - '-callgrind[outputs a graph in callgrind format]' \ - '-disasm=[output annotated assembly]:p' \ - '-dot[outputs a graph in DOT format]' \ - '-eog[visualize graph through eog]' \ - '-evince[visualize graph through evince]' \ - '-gif[outputs a graph image in GIF format]' \ - '-gv[visualize graph through gv]' \ - '-list=[output annotated source for functions matching regexp]:p' \ - '-pdf[outputs a graph in PDF format]' \ - '-peek=[output callers/callees of functions matching regexp]:p' \ - '-png[outputs a graph image in PNG format]' \ - '-proto[outputs the profile in compressed protobuf format]' \ - '-ps[outputs a graph in PS format]' \ - '-raw[outputs a text representation of the raw profile]' \ - '-svg[outputs a graph in SVG format]' \ - '-tags[outputs all tags in the profile]' \ - '-text[outputs top entries in text form]' \ - '-top[outputs top entries in text form]' \ - '-tree[outputs a text rendering of call graph]' \ - '-web[visualize graph through web browser]' \ - '-weblist=[output annotated source in HTML]:p' \ - '-output=[generate output on file f (stdout by default)]:f' \ - '-functions[report at function level (default)]' \ - '-files[report at source file level]' \ - '-lines[report at source line level]' \ - '-addresses[report at address level]' \ - '-base[show delta from this profile]:profile' \ - '-drop_negative[ignore negative differences]' \ - '-cum[sort by cumulative data]' \ - '-seconds=[length of time for dynamic profiles]:n' \ - '-nodecount=[max number of nodes to show]:n' \ - '-nodefraction=[hide nodes below *total]:f' \ - '-edgefraction=[hide edges below *total]:f' \ - '-sample_index[index of sample value to display]' \ - '-mean[average sample value over first value]' \ - '-inuse_space[display in-use memory size]' \ - '-inuse_objects[display in-use object counts]' \ - '-alloc_space[display allocated memory size]' \ - '-alloc_objects[display allocated object counts]' \ - '-total_delay[display total delay at each region]' \ - '-contentions[display number of delays at each region]' \ - '-mean_delay[display mean delay at each region]' \ - '-runtime[show runtime call frames in memory profiles]' \ - '-focus=[restricts to paths going through a node matching regexp]:r' \ - '-ignore=[skips paths going through any nodes matching regexp]:r' \ - '-tagfocus=[restrict to samples tagged with key:value matching regexp]:r' \ - '-tagignore=[discard samples tagged with key:value matching regexp]' \ - '-call_tree[generate a context-sensitive call tree]' \ - '-unit=[convert all samples to unit u for display]:u' \ - '-divide_by=[scale all samples by dividing them by f]:f' \ - '-buildid=[override build id for main binary in profile]:id' \ - '-tools=[search path for object-level tools]:path' \ - '-help[help message]' \ - '*:files:_files' - ;; - - trace) - _arguments \ - '-http=[HTTP service address]:addr' \ - '*:files:_files' - ;; - - vet) - _arguments \ - '-all[check everything]' \ - '-asmdecl[check assembly against Go declarations]' \ - '-assign[check for useless assignments]' \ - '-atomic[check for common mistaken usages of the sync/atomic]' \ - '-bool[check for mistakes involving boolean operators]' \ - '-buildtags[check that +build tags are valid]' \ - '-composites[check that composite literals used field-keyed elements]' \ - '-compositewhitelist[use composite white list]' \ - '-copylocks[check that locks are not passed by value]' \ - '-methods[check that canonically named methods are canonically defined]' \ - '-nilfunc[check for comparisons between functions and nil]' \ - '-printf[check printf-like invocations]' \ - '-printfuncs[print function names to check]:string' \ - '-rangeloops[check that range loop variables are used correctly]' \ - '-shadow[check for shadowed variables]' \ - '-shadowstrict[whether to be strict about shadowing]' \ - '-shift[check for useless shifts]' \ - '-structtags[check that struct field tags have canonical format]' \ - '-tags[list of build tags to apply when parsing]:list' \ - '-test[for testing only: sets -all and -shadow]' \ - '-unreachable[check for unreachable code]' \ - '-unsafeptr[check for misuse of unsafe.Pointer]' \ - '-unusedfuncs[list of functions whose results must be used]:string' \ - '-unusedresult[check for unused result of calls to functions in -unusedfuncs]' \ - '-unusedstringmethods[list of methods whose results must be used]:string' \ - '-v[verbose]' \ - '*:files:_files' - ;; - - yacc) - _arguments \ - '-o[output]:output' \ - '-v[parsetable]:parsetable' \ - '*:files:_files' - ;; - esac - ;; - esac - ;; - - vet) - _arguments \ - '-n[print commands that would be executed]' \ - '-x[prints commands as they are executed]' \ - ${build_flags[@]} \ - '*:importpaths:__go_packages' - ;; - help) - local -a topics - topics=( - 'c:calling between Go and C' - 'buildmode:description of build modes' - 'filetype:file types' - 'gopath:GOPATH environment variable' - 'environment:environment variables' - 'importpath:import path syntax' - 'packages:description of package lists' - 'testflag:description of testing flags' - 'testfunc:description of testing functions' - ) - - _arguments "1: :{_describe 'command' commands -- topics}" - ;; - esac - ;; - esac -} - -_go diff --git a/.zprezto/modules/completion/external/src/_golang b/.zprezto/modules/completion/external/src/_golang new file mode 100644 index 0000000..ad37aab --- /dev/null +++ b/.zprezto/modules/completion/external/src/_golang @@ -0,0 +1,646 @@ +#compdef go +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2013-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# Copyright (c) 2010-2014 Go authors +# +# 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 go 1.11 (http://golang.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mikkel Oscar Lyderik Larsen +# * oh-my-zsh authors: +# https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/golang/golang.plugin.zsh +# * Go authors +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args + +__go_buildmodes() { + local -a buildmodes + buildmodes=( + 'archive[non-main packages into .a files]' + 'c-archive[main package, plus all packages it imports, into a C archive file]' + 'c-shared[main package, plus all packages it imports, into a C shared library]' + 'default[main packages are built into executables and listed non-main packages are built into .a files]' + 'shared[non-main packages into a single shared library that will be used when building with the -linkshared option]' + 'exe[main packages into executables]' + 'pie[main packages and everything they import into position independent executables (PIE)]' + 'plugin[main packages, plus all packages that they import, into a Go plugin]' + ) + + _values 'mode' $buildmodes +} + + +local -a commands build_flags +commands=( +'bug:start a bug report' +'build:compile packages and dependencies' +'clean:remove object files and cached files' +'doc:show documentation for package or symbol' +'env:print Go environment information' +'fix:update packages to use new APIs' +'fmt:gofmt (reformat) package sources' +'generate:generate Go files by processing source' +'get:download and install packages and dependencies' +'install:compile and install packages and dependencies' +'list:list packages or modules' +'mod:module maintenance' +'run:compile and run Go program' +'test:test packages' +'tool:run specified go tool' +'version :print Go version' +'vet:report likely mistakes in packages' +'help:get more information about a command' +) + +_arguments \ + "1: :{_describe 'command' commands}" \ + '*:: :->args' + +case $state in + args) + build_flags=( + '-a[force rebuilding of packages that are already up-to-date]' + '-n[print the commands but do not run them]' + '-p[number of builds that can be run in parallel]:number' + '-race[enable data race detection]' + '-v[print the names of packages as they are compiled]' + '-work[print temporary work directory and keep it]' + '-x[print the commands]' + '-asmflags[arguments for each go tool asm invocation]:flags' + '-buildmode[build mode to use]:mode:__go_buildmodes' + '-compiler[name of compiler to use]:name' + '-gccgoflags[arguments for gccgo]:args' + '-gcflags[arguments for each go tool compile invocation]:args' + '-installsuffix[suffix to add to package directory]:suffix' + '-ldflags[arguments to pass on each go tool link invocation.]:flags' + '-linkshared[link against shared libraries]' + '-pkgdir[install and load all packages from dir]:dir' + '-tags[list of build tags to consider satisfied]:tags' + '-toolexec[program to use to invoke toolchain programs]:args' + ) + + __go_packages() { + local gopaths + declare -a gopaths + gopaths=("${(s/:/)$(go env GOPATH)}") + gopaths+=("$(go env GOROOT)") + for p in $gopaths; do + _path_files -W "$p/src" -/ + done + } + + case $words[1] in + build) + _arguments \ + '-o[force build to write to named output file]:file:_files' \ + '-i[installs the packages that are dependencies of the target]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + clean) + _arguments \ + '-i[remove corresponding installed archive or binary]' \ + '-r[apply clean recursively on all dependencies]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' + ;; + + fix) + _arguments '*:importpaths:__go_packages' + ;; + + fmt) + _arguments \ + '-n[prints commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + '*:importpaths:__go_packages' + ;; + + generate) + _arguments \ + '-run=[specifies a regular expression to select directives]:regex' \ + '-x[print the commands]' \ + '-n[print the commands but do not run them]' \ + '-v[print the names of packages as they are compiled]' \ + "*:args:{ _alternative ':importpaths:__go_packages' _files }" + ;; + + get) + _arguments \ + '-d[instructs get to stop after downloading the packages]' \ + '-f[force get -u not to verify that each package has been checked from vcs]' \ + '-fix[run the fix tool on the downloaded packages]' \ + '-insecure[permit fetching/resolving custom domains]' \ + '-t[also download the packages required to build tests]' \ + '-u[use the network to update the named packages]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + install) + _arguments ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + list) + _arguments \ + '-e[changes the handling of erroneous packages]' \ + '-f[specifies an alternate format for the list]:format' \ + '-json[causes package data to be printed in JSON format]' \ + '-compiled[set CompiledGoFiles to the Go source files presented to the compiler]' \ + '-deps[iterate over named packages and their dependencies]' \ + '-m[list modules instead of packages]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + mod) + local -a mod_commands + mod_commands=( + 'download:download modules to local cache' + 'edit:edit go.mod from tools or scripts' + 'graph:print module requirement graph' + 'init:initialize new module in current directory' + 'tidy:add missing and remove unused modules' + 'vendor:make vendored copy of dependencies' + 'verify:verify dependencies have expected content' + 'why:explain why packages or modules are needed' + 'help:get more information about a command' + ) + + _arguments \ + "1: :{_describe 'command' mod_commands}" \ + '*:: :->args' + + case $state in + args) + case $words[1] in + download) + _arguments \ + '-json[print a sequance of JSON objects to standard output]' + ;; + + edit) + _arguments \ + '-fmt[reformats the go.mod file without making other changes]' \ + "-module[change the module's path]" \ + '*-require=[add a requirement on the given module path and version]:require' \ + '*-droprequire=[drop a requirement on the given module path and version]:droprequire' \ + '*-exclude=[add an exclusion for the given module path and version]:exclude' \ + '*-dropexclude=[drop an exclusion for the given module path and version]:dropexclude' \ + '*-replace=[add a replacement of the given module path and version]:replace' \ + '*-dropreplace=[drop a replacement of the given module path and version]:dropreplace' \ + '-json[prints the final go.mod file in JSON format]' \ + '-print[prints the final go.mod in its text format]' \ + ':go.mod:_path_files -g "go.mod"' + ;; + graph) + ;; + init) + # Use go packages as module name suggestion + _arguments \ + '*:module:__go_packages' + ;; + tidy) + _arguments \ + '-v[print information about removed modules to standard error]' + ;; + vendor) + _arguments \ + '-v[print the names of vendored modules and packages to standard error]' + ;; + verify) + ;; + why) + _arguments \ + '-m[treats the arguments as a list of modules]' \ + '-vendor[exclude tests of dependencies]' \ + '*:module:__go_packages' + ;; + esac + ;; + esac + ;; + + run) + _arguments \ + ${build_flags[@]} \ + '-exec[invoke the binary using xprog]:xporg' \ + '*:file:_files -g "*.go(-.)"' + ;; + + test) + _arguments \ + "-c[compile but don't run test]" \ + '-i[install dependencies of the test]' \ + '-bench[run benchmarks matching the regular expression]:regexp' \ + '-benchmem[print memory allocation statistics for benchmarks]' \ + '-benchtime[run benchmarks for t rime]:t' \ + '-blockprofile[write a goroutine blocking profile to the specified file]:block' \ + '-blockprofilerate[control goroutine blocking profiles]:n' \ + '-count[run each test and benchmark n times]:n' \ + '-cover[enable coverage analysis]' \ + '-covermode[set the mode for coverage analysis]:mode:(set count atomic)' \ + '-coverpkg[apply coverage analysis in each test of listed packages]:list' \ + '-coverprofile[write a coverage profile to file]:cover' \ + '-cpu[specify a list of GOMAXPROCS values]:cpus' \ + '-cpuprofile[write a CPU profile to the specified file]:profile' \ + '-memprofile[write a memory profile to file]:mem' \ + '-memprofilerate[enable more precise memory profiles]:n' \ + '-outputdir[place output files from profiling in output dir]:dir' \ + '-parallel[allow parallel execution of test functions]:n' \ + '-run[run tests and examples matching the regular expression]:regexp' \ + '-short[tell long-running tests to shorten their run time]' \ + '-timeout[timeout long running tests]:t' \ + '-trace[write an execution trace to the specified file]:trace' \ + '-v[verbose output]' \ + ${build_flags[@]} \ + '-exec[run test binary using xprog]:xprog' \ + '-o[compile test binary to named file]:file:_files' \ + '*:importpaths:__go_packages' + ;; + + tool) + local -a tools + tools=($(go tool)) + + _arguments \ + '-n[print command that would be executed]' \ + "1: :{_describe 'tool' tools}" \ + '*:: :->args' + + case $state in + args) + case $words[1] in + addr2line) + _files + ;; + + asm) + _arguments \ + '-D[predefined symbol with optional simple value]:value' \ + '-I[include directory]:value' \ + '-S[print assembly and machine code]' \ + '-debug[dump instructions as they are parsed]' \ + '-dynlink[support references to Go symbols]' \ + '-o[output file]:string' \ + '-shared[generate code that can be linked into a shared lib]' \ + '-trimpath[remove prefix from recorded source file paths]:string' + ;; + + callgraph) + local -a algos graphs + algos=( + 'static:static calls only' + 'cha:Class Hierarchy Analysis' + 'rta:Rapid Type Analysis' + 'pta:inclusion-based Points-To Analysis' + ) + graphs=( + 'digraph:output in digraph format' + 'graphviz:output in AT&T GraphViz (.dot) format' + ) + + _arguments \ + '-algo=[call-graph construction algorithm]:algos:{ _describe "algos" algos }' \ + "-test[include the package's tests in the analysis]" \ + '-format=[format in which each call graph edge is displayed]:graphs:{ _describe "graphs" graphs }' + ;; + + cgo) + _arguments \ + '-debug-define[print relevant #defines]' \ + '-debug-gcc[print gcc invocations]' \ + '-dynimport[if non-empty, print dynamic import data]:string' \ + '-dynlinker[record dynamic linker information]' \ + '-dynout[write -dynimport output to file]:file' \ + '-dynpackage[set Go package for -dynimport output]:string' \ + '-exportheader[where to write export header]:string' \ + '-gccgo[generate files for use with gccgo]' \ + '-gccgopkgpath[-fgo-pkgpath option used with gccgo]:string' \ + '-gccgoprefix[-fgo-prefix option used with gccgo]:string' \ + '-godefs[write Go definitions for C file to stdout]' \ + '-import_runtime_cgo[import runtime/cgo in generated code]' \ + '-import_syscall[import syscall in generated code]' \ + '-importpath[import path of package being built]:path' \ + '-objdir[object directory]:dir' + ;; + + compile) + _arguments \ + '-%[debug non-static initializers]' \ + '-+[compiling runtime]' \ + "-A[for bootstrapping, allow 'any' type]" \ + '-B[disable bounds checking]' \ + '-D[set relative path for local imports]:path' \ + '-E[debug symbol export]' \ + '-I[add directory to import search path]:directory' \ + '-K[debug missing line numbers]' \ + '-L[use full (long) path in error messages]' \ + '-M[debug move generation]' \ + '-N[disable optimizations]' \ + '-P[debug peephole optimizer]' \ + '-R[debug register optimizer]' \ + '-S[print assembly listing]' \ + '-V[print compiler version]' \ + '-W[debug parse tree after type checking]' \ + '-asmhdr[write assembly header to file]:file' \ + '-buildid[record id as the build id in the export metadata]:id' \ + '-complete[compiling complete package (no C or assembly)]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[print debug information about items in list]:list' \ + '-dynlink[support references to Go symbols]' \ + '-e[no limit on number of errors reported]' \ + '-f[debug stack frames]' \ + '-g[debug code generation]' \ + '-h[halt on error]' \ + '-i[debug line number stack]' \ + '-importmap[add definition of the form source=actual to import map]:definition' \ + '-installsuffix[set pkg directory suffix]:suffix' \ + '-j[debug runtime-initialized variables]' \ + '-l[disable inlining]' \ + '-largemodel[generate code that assumes a large memory model]' \ + '-live[debug liveness analysis]' \ + '-m[print optimization decisions]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-nolocalimports[reject local (relative) imports]' \ + '-o[write output to file]:file' \ + '-p[set expected package import path]:path' \ + '-pack[write package file instead of object file]' \ + '-r[debug generated wrappers]' \ + '-race[enable race detector]' \ + '-s[warn about composite literals that can be simplified]' \ + '-shared[generate code that can be linked into a shared library]' \ + '-trimpath[remove prefix from recorded source file paths]:prefix' \ + '-u[reject unsafe code]' \ + '-v[increase debug verbosity]' \ + '-w[debug type checking]' \ + '-wb[enable write barrier (default 1)]' \ + '-x[debug lexer]' \ + '-y[debug declarations in canned imports (with -d)]' \ + '*:file:_files -g "*.go(-.)"' + ;; + + cover) + if (( CURRENT == 2 )); then + _arguments \ + '-func=[output coverage profile information for each function]:string' \ + '-html=[generate HTML representation of coverage profile]:file:_files' \ + '-mode=[coverage mode]:mode:(set count atomic)' + return + fi + + _arguments \ + '-o[file for output]:file' \ + '-var=[name of coverage variable to generate]:var' \ + '*:file:_files -g "*.go(-.)"' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' \ + ;; + + fix) + _arguments \ + '-diff[display diffs instead of rewriting files]' \ + '-force[force fixes to run even if the code looks updated]:string' \ + '-r[restrict the rewrites]:string' \ + '*:files:_files' + ;; + + link) + _arguments \ + '-B[add an ELF NT_GNU_BUILD_ID note when using ELF]:note' \ + '-C[check Go calls to C code]' \ + '-D[set data segment address (default -1)]:address' \ + '-E[set entry symbol name]:entry' \ + '-H[set header type]:type' \ + '-I[use linker as ELF dynamic linker]:linker' \ + '-L[add specified directory to library path]:directory' \ + '-R[set address rounding quantum (default -1)]:quantum' \ + '-T[set text segment address (default -1)]:address' \ + '-V[print version and exit]' \ + '-W[disassemble input]' \ + '-X[add string value definition]:definition' \ + '-a[disassemble output]' \ + '-buildid[record id as Go toolchain build id]:id' \ + '-buildmode[set build mode]:mode' \ + '-c[dump call graph]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[disable dynamic executable]' \ + '-extld[use linker when linking in external mode]:linker' \ + '-extldflags[pass flags to external linker]:flags' \ + '-f[ignore version mismatch]' \ + '-g[disable go package data checks]' \ + '-h[halt on error]' \ + '-installsuffix[set package directory suffix]:suffix' \ + '-k[set field tracking symbol]:symbol' \ + '-linkmode[set link mode]:mode:(internal external auto)' \ + '-linkshared[link against installed Go shared libraries]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-n[dump symbol table]' \ + '-o[write output to file]:file' \ + '-r[set the ELF dynamic linker search path to dir1:dir2:...]:path' \ + '-race[enable race detector]' \ + '-s[disable symbol table]' \ + '-shared[generate shared object (implies -linkmode external)]' \ + '-tmpdir[use directory for temporary files]:directory' \ + '-u[reject unsafe packages]' \ + '-v[print link trace]' \ + '-w[disable DWARF generation]' \ + '*:files:_files' + ;; + + objdump) + _arguments \ + '-s[only dump symbols matching this regexp]:regexp' \ + '*:files:_files' + ;; + + pack) + _arguments '1:ops:(c p r t x)' '::verbose:(v)' ':files:_files' + ;; + + pprof) + _arguments \ + '-callgrind[outputs a graph in callgrind format]' \ + '-disasm=[output annotated assembly]:p' \ + '-dot[outputs a graph in DOT format]' \ + '-eog[visualize graph through eog]' \ + '-evince[visualize graph through evince]' \ + '-gif[outputs a graph image in GIF format]' \ + '-gv[visualize graph through gv]' \ + '-list=[output annotated source for functions matching regexp]:p' \ + '-pdf[outputs a graph in PDF format]' \ + '-peek=[output callers/callees of functions matching regexp]:p' \ + '-png[outputs a graph image in PNG format]' \ + '-proto[outputs the profile in compressed protobuf format]' \ + '-ps[outputs a graph in PS format]' \ + '-raw[outputs a text representation of the raw profile]' \ + '-svg[outputs a graph in SVG format]' \ + '-tags[outputs all tags in the profile]' \ + '-text[outputs top entries in text form]' \ + '-top[outputs top entries in text form]' \ + '-tree[outputs a text rendering of call graph]' \ + '-web[visualize graph through web browser]' \ + '-weblist=[output annotated source in HTML]:p' \ + '-output=[generate output on file f (stdout by default)]:f' \ + '-functions[report at function level (default)]' \ + '-files[report at source file level]' \ + '-lines[report at source line level]' \ + '-addresses[report at address level]' \ + '-base[show delta from this profile]:profile' \ + '-drop_negative[ignore negative differences]' \ + '-cum[sort by cumulative data]' \ + '-seconds=[length of time for dynamic profiles]:n' \ + '-nodecount=[max number of nodes to show]:n' \ + '-nodefraction=[hide nodes below *total]:f' \ + '-edgefraction=[hide edges below *total]:f' \ + '-sample_index[index of sample value to display]' \ + '-mean[average sample value over first value]' \ + '-inuse_space[display in-use memory size]' \ + '-inuse_objects[display in-use object counts]' \ + '-alloc_space[display allocated memory size]' \ + '-alloc_objects[display allocated object counts]' \ + '-total_delay[display total delay at each region]' \ + '-contentions[display number of delays at each region]' \ + '-mean_delay[display mean delay at each region]' \ + '-runtime[show runtime call frames in memory profiles]' \ + '-focus=[restricts to paths going through a node matching regexp]:r' \ + '-ignore=[skips paths going through any nodes matching regexp]:r' \ + '-tagfocus=[restrict to samples tagged with key:value matching regexp]:r' \ + '-tagignore=[discard samples tagged with key:value matching regexp]' \ + '-call_tree[generate a context-sensitive call tree]' \ + '-unit=[convert all samples to unit u for display]:u' \ + '-divide_by=[scale all samples by dividing them by f]:f' \ + '-buildid=[override build id for main binary in profile]:id' \ + '-tools=[search path for object-level tools]:path' \ + '-help[help message]' \ + '*:files:_files' + ;; + + trace) + _arguments \ + '-http=[HTTP service address]:addr' \ + '*:files:_files' + ;; + + vet) + _arguments \ + '-all[check everything]' \ + '-asmdecl[check assembly against Go declarations]' \ + '-assign[check for useless assignments]' \ + '-atomic[check for common mistaken usages of the sync/atomic]' \ + '-bool[check for mistakes involving boolean operators]' \ + '-buildtags[check that +build tags are valid]' \ + '-composites[check that composite literals used field-keyed elements]' \ + '-compositewhitelist[use composite white list]' \ + '-copylocks[check that locks are not passed by value]' \ + '-methods[check that canonically named methods are canonically defined]' \ + '-nilfunc[check for comparisons between functions and nil]' \ + '-printf[check printf-like invocations]' \ + '-printfuncs[print function names to check]:string' \ + '-rangeloops[check that range loop variables are used correctly]' \ + '-shadow[check for shadowed variables]' \ + '-shadowstrict[whether to be strict about shadowing]' \ + '-shift[check for useless shifts]' \ + '-structtags[check that struct field tags have canonical format]' \ + '-tags[list of build tags to apply when parsing]:list' \ + '-test[for testing only: sets -all and -shadow]' \ + '-unreachable[check for unreachable code]' \ + '-unsafeptr[check for misuse of unsafe.Pointer]' \ + '-unusedfuncs[list of functions whose results must be used]:string' \ + '-unusedresult[check for unused result of calls to functions in -unusedfuncs]' \ + '-unusedstringmethods[list of methods whose results must be used]:string' \ + '-v[verbose]' \ + '*:files:_files' + ;; + + yacc) + _arguments \ + '-o[output]:output' \ + '-v[parsetable]:parsetable' \ + '*:files:_files' + ;; + esac + ;; + esac + ;; + + vet) + _arguments \ + '-n[print commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + help) + local -a topics + topics=( + 'buildmode:build modes' + 'c:calling between Go and C' + 'cache:build and test caching' + 'environment:environment variables' + 'filetype:file types' + 'go.mod:the go.mod file' + 'gopath:GOPATH environment variable' + 'gopath-get:legacy GOPATH go get' + 'goproxy:module proxy protocol' + 'importpath:import path syntax' + 'modules:modules, module versions, and more' + 'module-get:module-aware go get' + 'packages:package lists and patterns' + 'testflag:testing flags' + 'testfunc:testing functions' + ) + + _arguments "1: :{_describe 'command' commands -- topics}" + ;; + esac + ;; +esac diff --git a/.zprezto/modules/completion/external/src/_hledger b/.zprezto/modules/completion/external/src/_hledger new file mode 100644 index 0000000..0c1937b --- /dev/null +++ b/.zprezto/modules/completion/external/src/_hledger @@ -0,0 +1,286 @@ +#compdef hledger + +# ------------------------------------------------------------------------------ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for hleder 1.10 ( http://hledger.org/ ) +# Last updated: 07.08.2018 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# * fdw ( https://github.com/fdw ) +# +# ------------------------------------------------------------------------------ +# 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' + '--anon=[anonymize accounts and payees]' + '(-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]' + '(-V --value)'{-V,--value}'[converts reported amounts to the current market value]' + '(-I --ignore-assertions)'{-I,--ignore-assertions}'[ignore any failing balance assertions]' + '--forecast=[apply periodic transaction rules to generate future transactions]' +) + +_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=( + 'accounts:show account names (a)' + 'activity:show an ascii barchart of posting counts per interval' + 'add:prompt for transactions and add them to the journal' + 'balance:show accounts and balances (b, bal)' + 'balancesheet:show a balance sheet (bs)' + 'balancesheetequity:like balancesheet, but also reports equity' + 'cashflow:show a cashflow statement (cf)' + 'check-dates:check that transactions are sorted by increasing date' + 'check-dupes:report account names having the same leaf but different prefixes' + 'close:print closing/opening transactions that bring some or all account balances to zero and back' + 'help:show any of the hledger manuals' + 'import:read new transactions added to each file since last run, and add them to the main journal file' + 'incomestatement:show an income statement (is)' + 'prices:print market price directives from the journal' + 'print:show transaction entries (p, txns)' + 'print-unique:print transactions which do not reuse an already-seen description' + 'register:show postings and running total (r, reg)' + 'register-patch:print the one posting whose transaction description is closest to the description' + 'rewrite:print all transactions, adding custom postings to the matched ones' + 'stats:show some journal statistics' + 'tags:list all the tag names used in the journal' + 'test:run built-in unit tests' + ) + _describe 'subcommands' cmds && ret=0 + ;; + args) + : $words + local cmd=$words[1] + (( $+cmd )) || return 1 + # curcontext="${curcontext%:*:*}:$service-$cmd:" + case $cmd in + accounts) + args=( + '(--declared)--declared[show account names declared with account directives]' + '(--used)--used[show account names posted to by transactions]' + '(--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) + ;; + add) + args=( + '(--no-new-accounts)--no-new-accounts=[do not allow creating new accounts]' + ) + ;; + bal|balance) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + '(--pretty-tables)--pretty-tables[use unicode to display prettier tables]' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + '(--invert)--invert[display all amounts with reversed sign]' + '(--budget)--budget[show performance compared to budget goals]' + '(--show-unbudgeted)--show-unbudgeted[with --budget, show unbudgeted accounts also]' + ) + ;; + bl|balancesheet|balancesheetequity) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + cashflow|cf|balancesheet|bs|incomestatement|is) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + import) + args=( + '(--dry-run)--dry-run[just show the transactions to be imported]' + ) + ;; + is|incomestatement) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + print) + args=( + '(-m --match)'{-m,--match}'[show the transaction whose description is most similar]:string' + '(--new)--new[show only newer-dated transactions added in each file since last run]' + '(-x --explicit)'{-x,--explicit}'[show all amounts explicitly]' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + register|reg) + args+=( + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-r --related)'{-r,--related}'[show postings'\'' siblings instead]' + '(-w --width)'{-w,--width}'=[set output width to 120, or N]:width (default 80)' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + stats) + args=( + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + # 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=( + 'acct\::match account names' + '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' + 'cur\::match by currency' + ) + 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/_include-what-you-use b/.zprezto/modules/completion/external/src/_include-what-you-use new file mode 100644 index 0000000..bb9902c --- /dev/null +++ b/.zprezto/modules/completion/external/src/_include-what-you-use @@ -0,0 +1,65 @@ +#compdef include-what-you-use + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration. +# All rights reserved. +# +# Developed by: +# +# CERN LBC group +# +# CERN +# +# http://cern.ch +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# with 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: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimers. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimers in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the names of the LBC group, CERN, nor the names of its +# contributors may be used to endorse or promote products derived from +# this Software without specific prior written permission. +# +# 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 +# CONTRIBUTORS 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 WITH +# THE SOFTWARE. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization or +# submit itself to any jurisdiction. + +# TODO: +# - prevent _iwyu_opts from running once the first clang option got passed + +_iwyu_opts() { + _arguments '--check_also=[print iwyu-violation info for files matching the given glob pattern]:glob pattern:' \ + '--cwd=[specify the current working directory]:current working directory:_path_files -/' \ + '--howtodebug[print instructions on how to run iwyu under gdb]' \ + '--howtodebug=[print instructions on how to run iwyu under gdb if file matches argument]:file for debug run:_path_files' \ + '*'"--mapping_file=[iwyu mapping file]:iwyu mapping file:_path_files -g '*(/) *.imp'" \ + "--no_default_mappings[do not add iwyu's default mappings]" \ + '--pch_in_code[mark the first include in a translation unit as a precompiled header]' \ + '--prefix_header_includes=[what to do with command line includes]:command line include treatment:(add keep remove)' \ + "--transitive_includes_only[do not suggest that a file add headers that aren't already visible]" \ + '--max_line_length=[maximum line length for includes]:a number:' \ + '--no_comments[do not add "why" comments]' \ + '--no_fwd_decls[do not use forward declarations]' \ + '--verbose=[the higher the level, the more output]:a number:' +} + +_arguments "*-Xiwyu[include-what-you-use options]:include-what-you-use options:_iwyu_opts" +# gcc will also provide --version and --help. Not ideal. +_gcc diff --git a/.zprezto/modules/completion/external/src/_kak b/.zprezto/modules/completion/external/src/_kak index 9fd2540..6079f36 100644 --- a/.zprezto/modules/completion/external/src/_kak +++ b/.zprezto/modules/completion/external/src/_kak @@ -42,8 +42,10 @@ # ------------------------------------------------------------------------------ _kak_sessions() { - session_ids=($(_call_program session_ids kak -l)) - _values "${session_ids[@]}" + local -a session_ids expl + session_ids=($(_call_program session_names kak -l)) + _description session-ids expl "session name" + compadd "$expl[@]" -a session_ids } _kak() { diff --git a/.zprezto/modules/completion/external/src/_node b/.zprezto/modules/completion/external/src/_node index f9ef3c7..36c58ff 100644 --- a/.zprezto/modules/completion/external/src/_node +++ b/.zprezto/modules/completion/external/src/_node @@ -1,6 +1,6 @@ #compdef node # ------------------------------------------------------------------------------ -# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2018 Github zsh-users - http://github.com/zsh-users # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -28,7 +28,7 @@ # Description # ----------- # -# Completion script for Node.js v0.8.4 (http://nodejs.org) +# Completion script for Node.js v10.4.1 (https://nodejs.org) # # ------------------------------------------------------------------------------ # Authors @@ -36,24 +36,64 @@ # # * Mario Fernandez (https://github.com/sirech) # * Nicholas Penree (https://github.com/drudge) +# * Masafumi Koba (https://github.com/ybiquitous) # # ------------------------------------------------------------------------------ +_node_files() { + _files -g "*.(js|mjs)" +} + 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]' \ + '-[script read from stdin (default; interactive mode if a tty)]' \ + '--[indicate the end of node options]' \ + '--abort-on-uncaught-exception[aborting instead of exiting causes a core file to be generated for analysis]' \ + '--experimental-modules[experimental ES Module support and caching modules]' \ + '--experimental-repl-await[experimental await keyword support in REPL]' \ + '--experimental-vm-modules[experimental ES Module support in vm module]' \ + '--icu-data-dir=[set ICU data load path to dir (overrides NODE_ICU_DATA) note: linked-in ICU data is present]: :_directories' \ + '--inspect-brk=-[activate inspector on host:port and break at start of user script]:[host\:]port' \ + '--inspect-port=[set host:port for inspector]:[host\:]port' \ + '--inspect=-[activate inspector on host:port (default: 127.0.0.1:9229)]:[host\:]port' \ + '--napi-modules[load N-API modules (no-op - option kept for compatibility)]' \ + '--no-deprecation[silence deprecation warnings]' \ + '--no-force-async-hooks-checks[disable checks for async_hooks]' \ + '--no-warnings[silence all process warnings]' \ + '--openssl-config=[load OpenSSL configuration from the specified file (overrides OPENSSL_CONF)]:file:_files' \ + '--pending-deprecation[emit pending deprecation warnings]' \ + '--preserve-symlinks[preserve symbolic links when resolving]' \ + '--preserve-symlinks-main[preserve symbolic links when resolving the main module]' \ + '--prof[generate V8 profiler output]' \ + '--prof-process[process V8 profiler output generated using --prof]' \ + '--redirect-warnings=[write warnings to file instead of stderr]: :_files' \ + '--throw-deprecation[throw an exception on deprecations]' \ + '--tls-cipher-list=[use an alternative default TLS cipher list]:cipher list string' \ + '--trace-deprecation[show stack traces on deprecations]' \ + '--trace-event-categories[comma separated list of trace event categories to record]: :{_values -s , categories node node.async_hooks node.bootstrap node.perf node.perf.usertiming node.perf.timerify node.fs.sync node.vm.script v8}' \ + '--trace-event-file-pattern[Template string specifying the filepath for the trace-events data, it supports ${rotation} and ${pid} log-rotation id. %2$u is the pid.]:template string' \ + '--trace-events-enabled[track trace events]' \ + '--trace-sync-io[show stack trace when use of sync IO is detected after the first tick]' \ + '--trace-warnings[show stack traces on process warnings]' \ + '--track-heap-objects[track heap object allocations for heap snapshots]' \ + '--use-bundled-ca[use bundled CA store (default)]' \ + "--use-openssl-ca[use OpenSSL's default CA store]" \ '(- 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 + "--v8-pool-size=[set v8's thread pool size]:number" \ + '--zero-fill-buffers[automatically zero-fill all newly allocated Buffer and SlowBuffer instances]' \ + {-c,--check}'[syntax check script without executing]' \ + '(- 1 *)'{-e,--eval}'[evaluate script]:inline JavaScript' \ + '(- 1 *)'{-h,--help}'[print node command line options]' \ + {-i,--interactive}'[always enter the REPL even if stdin does not appear to be a terminal]' \ + '(- 1 *)'{-p,--print}'[evaluate script and print result]:inline JavaScript' \ + '*'{-r,--require}'[module to preload (option can be repeated)]: :_node_files' \ + '(- 1 *)'{-v,--version}'[print Node.js version]' \ + '*: :_node_files' && ret=0 + +_values 'commands' \ + 'inspect[enable inspector for debugging]' && ret=0 return ret diff --git a/.zprezto/modules/completion/external/src/_paste b/.zprezto/modules/completion/external/src/_paste deleted file mode 100644 index fd7d035..0000000 --- a/.zprezto/modules/completion/external/src/_paste +++ /dev/null @@ -1,58 +0,0 @@ -#compdef paste -# -# ------------------------------------------------------------------------------ -# Copyright (c) 2016 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 paste (from util-linux 2.27.1->) -# (https://git.kernel.org/cgit/utils/util-linux/util-linux.git/) -# -# ------------------------------------------------------------------------------ -# Authors -# ------- -# -# * Ole Jørgen Brønner -# -# ------------------------------------------------------------------------------ -# -# Note: paste has upstream bash completion -# Note: Credit to https://github.com/RobSis/zsh-completion-generator which was -# used to generate most of the script. - -local arguments - -arguments=( - '*'{-d,--delimiters}'[reuse characters from LIST instead of TABs]:delimiters' - '(-s --serial)'{-s,--serial}'[paste one file at a time instead of in parallel]' - '(-z --zero-terminated)'{-z,--zero-terminated}'[line delimiter is NUL, not newline]' - '--help[display this help and exit]' - '--version[output version information and exit]' - '*:filename:_files' -) - -_arguments -s $arguments diff --git a/.zprezto/modules/completion/external/src/_pgsql_utils b/.zprezto/modules/completion/external/src/_pgsql_utils index 8bd16fb..ae44844 100644 --- a/.zprezto/modules/completion/external/src/_pgsql_utils +++ b/.zprezto/modules/completion/external/src/_pgsql_utils @@ -303,7 +303,8 @@ _pg_restore () { --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]' + --use-set-session-authorization'[use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership]' \ + "1: :_files" } _pg_dumpall () { diff --git a/.zprezto/modules/completion/external/src/_port b/.zprezto/modules/completion/external/src/_port index 29a08fa..d186ef9 100644 --- a/.zprezto/modules/completion/external/src/_port +++ b/.zprezto/modules/completion/external/src/_port @@ -119,7 +119,7 @@ _port() { ) pseudo_common=(all current active inactive actinact installed uninstalled outdated - obsolete requested unrequested leaves) + obsolete requested unrequested leaves rleaves) pseudo_advanced=('variants:' 'variant:' 'description:' 'depends:' 'depends_lib:' 'depends_run:' 'depends_build:' 'depends_fetch:' 'depends_extract:' @@ -127,6 +127,7 @@ _port() { 'maintainers:' 'maintainer:' 'categories:' 'category:' 'version:' 'revision:' 'license:') select_options=( + '--summary:Display sumamry of selected 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)' @@ -157,7 +158,7 @@ _port() { '-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).]' \ + '-t[Enable trace mode debug facilities on platforms that support it (macOS).]' \ "1:Port actions:(($actions))" \ '::Per-action arguments:_port_dispatch' \ && return 0 diff --git a/.zprezto/modules/completion/external/src/_rclone b/.zprezto/modules/completion/external/src/_rclone deleted file mode 100644 index 15d3fc0..0000000 --- a/.zprezto/modules/completion/external/src/_rclone +++ /dev/null @@ -1,119 +0,0 @@ -#compdef rclone - -# ------------------------------------------------------------------------------ -# Copyright (c) 2016 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 rclone (http://rclone.org/). -# -# ------------------------------------------------------------------------------ -# Author(s) -# ------- -# -# * Rajat Roy -# -# ------------------------------------------------------------------------------ - -_rclone() { - local state - - _arguments \ - '1: :->subcommand' \ - '--bwlimit' \ - '--checkers' \ - '(-c --checksum)'{-c,--checksum}'[check the file hash and size to determine if files are equal]' \ - '--config' \ - '--contimeout' \ - '--dedupe-mode' \ - '(-n --dry-run)'{-n,--dry-run}'[Do a trial run with no permanent changes]' \ - '--ignore-existing' \ - '--ignore-size' \ - '(-I --ignore-times)'{-I,--ignore-times}'[unconditionally upload all files regardless of the state of files on the destination]' \ - '--log-file' \ - '--low-level-retries' \ - '--max-depth' \ - '--modify-window' \ - '--no-gzip-encoding' \ - '--no-update-modtime' \ - '(-q --quiet)'{-q,--quiet}'[as little output as possible]' \ - '--retries' \ - '--size-only' \ - '--stats' \ - '--delete-' \ - '--timeout' \ - '--transfers' \ - '(-u --update)'{-u,--update}'[skip any files which exist on the destination and have a modified time that is newer than the source file]' \ - '(-v --verbose)'{-v,--verbose}'[tells you about every file it considers and transfers]' \ - '--delete-excluded' \ - '--filter' \ - '--filter-from' \ - '-exclude' \ - '--exclude-from' \ - '--include' \ - '--include-from' \ - '--files-from' \ - '--min-size' \ - '--max-size' \ - '--min-age' \ - '--max-age' \ - '--dump-filters' \ - '*:files:_files' - - case $state in - subcommand) - _arguments '1: :( - config - copy - sync - move - delete - purge - mkdir - rmdir - check - ls - lsd - lsl - md5sum - sha1sum - size - version - cleanup - dedupe - authorize - cat - genautocomplete - gendocs - listremotes - mount - --help)' - ;; - esac -} - -_rclone "$@" diff --git a/.zprezto/modules/completion/external/src/_rspec b/.zprezto/modules/completion/external/src/_rspec index 2ffb196..7bef11c 100644 --- a/.zprezto/modules/completion/external/src/_rspec +++ b/.zprezto/modules/completion/external/src/_rspec @@ -48,6 +48,9 @@ _rspec() { '*'{-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"' \ + --bisect'[Repeatedly runs the suite in order to isolate the failures to the smallest reproducible case]' \ + --only-failures'[Filter to just the examples that failed the last time they ran]' \ + '(-n --next-failure)'{-n,--next-failure}'[Apply `--only-failures` and abort after one failure (equivalent to `--only-failures --fail-fast --order defined`)]' \ --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"' \ @@ -58,8 +61,10 @@ _rspec() { '(-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]' \ + --force-color'[Force the output to be in color, even if the output is not a TTY]' \ + --no-color'[Force the output to not be in color, even if the output is a TTY]' \ '(-p --profile)'{-p,--profile}'[Enable profiling of examples and list the slowest examples (default: 10)]: :_guard "[[\:digit\:]]#" "COUNT"' \ + --no-profile'[Disable profiling of examples]' \ '(-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:' \ diff --git a/.zprezto/modules/completion/external/src/_scl b/.zprezto/modules/completion/external/src/_scl deleted file mode 100644 index 831d528..0000000 --- a/.zprezto/modules/completion/external/src/_scl +++ /dev/null @@ -1,81 +0,0 @@ -#compdef scl -# ------------------------------------------------------------------------------ -# Description -# ----------- -# -# Completion script for Software Collections (https://www.softwarecollections.org). -# -# ------------------------------------------------------------------------------ -# Authors -# ------- -# -# * Julien Nicoulaud -# -# ------------------------------------------------------------------------------ - -_scl() { - local context curcontext="$curcontext" state line - typeset -A opt_args - - local ret=1 - - _arguments -C \ - '1: :_scl_cmds' \ - "(- : *)"{-h,--help}'[display help information]' \ - "(- : *)"{-l,--list}'[list installed Software Collections or packages that belong to them]:installed collection:_scl_installed_collections' \ - '*::arg:->args' \ - && ret=0 - - case $state in - (args) - curcontext="${curcontext%:*:*}:scl-cmd-$words[1]:" - case $line[1] in - (register) - _arguments '1:Software Collection path:_files -/' && ret=0 - ;; - (deregister) - _arguments -C \ - '1:: :_scl_installed_collections' \ - '--force[force suppression of the collection]' \ - && ret=0 - ;; - (enable) - _arguments -C \ - '1:: :_scl_installed_collections' \ - '2:command: _command_names -e' \ - && ret=0 - ;; - *) - _call_function ret _scl_cmd_$words[1] && ret=0 - (( ret )) && _message 'no more arguments' - ;; - esac - ;; - esac -} - -(( $+functions[_scl_cmds] )) || -_scl_cmds() { - local commands; commands=( - 'register:register a Software Collection' - 'deregister:deregister a Software Collection' - 'enable:enable a Software Collection' - ) - _describe -t commands 'scl command' commands "$@" -} - -(( $+functions[_scl_installed_collections] )) || -_scl_installed_collections() { - local installed_collections; installed_collections=($(_call_program installed_collections $service --list)) - _describe -t collections 'Software Collection' installed_collections "$@" -} - -_scl "$@" - -# 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/_scons b/.zprezto/modules/completion/external/src/_scons new file mode 100644 index 0000000..f9b6b8c --- /dev/null +++ b/.zprezto/modules/completion/external/src/_scons @@ -0,0 +1,72 @@ +#compdef scons +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for SCons 2.5.1 (http://scons.org/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Oliver Kiddle +# +# ------------------------------------------------------------------------------ + +_arguments -s -S \ + '(-c --clean --remove)-'{c,-clean,-remove}'[remove specified targets and dependencies]' \ + '(-C --directory)-'{C,-directory=}'[change to specified directory first]:directory:_directories' \ + '--cache-debug=[print CacheDir debug info to file]:file:_files' \ + '(--cache-disable --no-cache)--'{cache-disable,no-cache}"[don't retrieve built targets from cache]" \ + '(--cache-force --cache-populate)--'{cache-force,cache-populate}'[copy already-built targets into cache]' \ + "--cache-readonly[don't update CacheDir with built targets]" \ + '--cache-show[print build actions for files from cache]' \ + '--config=[set Configure mode]:mode:(auto force cache)' \ + '(-u --up --search-up -U)-D[search up for SConstruct; build default targets]' \ + '--debug=[print debugging information]:type:( + count duplicate explain findlibs includes memoizer memory objects pdb prepare presub stacktrace time)' \ + '--diskcheck=[enable specific on-disk checks]:check:(all none match rcs sccs)' \ + '--duplicate=[set preferred file duplication methods]:file duplication methods:( + hard-soft-copy soft-hard-copy hard-copy soft-copy copy)' \ + '(-f --file --makefile --sconstruct)-'{f,-file=,-makefile=,-sconstruct=}'[specify SConstruct file]:file:_files' \ + '(-)-'{h,-help}'[display defined usage information]' \ + '(-)-'{H,-help-options}'[display usage information]' \ + '(-i -ignore-errors)-'{i,-ignore-errors}'[ignore errors from build actions]' \ + \*{-I,--include-dir=}'[add directory to search Python modules]:directories:_directories' \ + '(--implicit-deps-changed --implicit-deps-unchanged)--implicit-cache[cache scanned dependencies]' \ + '(--implicit-cache --implicit-deps-changed)--implicit-deps-changed[rescan dependencies]' \ + '(--implicit-cache --implicit-deps-unchanged)--implicit-deps-unchanged[ignore changes to scanned dependencies]' \ + '--interactive[start interactive mode]' \ + '(-j --jobs)-'{j,jobs=}'[specify no of jobs to run in parallel]' \ + '(-k --keep-going)-'{k,-keep-going}'[continue after an error]' \ + '--max-drift=[set the maximum clock drift]:drift (seconds)' \ + '--md5-chunksize=[set chunksize for MD5 signature computation]:size (kB)' \ + '(-n --just-print --dry-run --recon)-'{n,-just-print,-dry-run,-recon}"[print commands but don't run them]" \ + "--no-site-dir[don't use the usual site_scons directory]" \ + '--profile=[profile scons]:output file:_files' \ + '(-q --question)-'{q,question}'[query whether up-to-date]' \ + '-Q[suppress progress messages]' \ + '--random[build dependencies in random order]' \ + '(-s --silent --quiet)-'{s,-silent,-quiet}"[don't print commands]" \ + '--site-dir=[specify site_scons directory]:directory:_directories' \ + '--stack-size[set stacksize of threads]:size (kB)' \ + '--taskmastertrace=[trace node evaluation to file]:file' \ + '--tree=[print dependency tree]:format:(all derived prune status)' \ + '(-u --up --search-up -D -U)-'{u,-up,-search-up}'[search up for SConstruct; build current directory]' \ + '(-u --up --search-up -D)-U[search up for SConstruct; build Default targets]' \ + '(-)-'{v,-version}'[print version information]' \ + \*{--warn=,--warning=}'[enable or disable warnings]:type:( + all cache-write-error corrupt-sconsign dependency deprecated + deprecated-copy deprecated-source-signatures deprecated-target-signatures + duplicate-environment fortran-cxx-mix link misleading-keywords + missing-sconscript no-md5-module no-metaclass-support no-object-count + no-parallel-support python-version reserved-variable stack-size no-all + no-cache-write-error no-corrupt-sconsign no-dependency no-deprecated + no-deprecated-copy no-deprecated-source-signatures + no-deprecated-target-signatures no-duplicate-environment + no-fortran-cxx-mix no-link no-misleading-keywords no-missing-sconscript + no-no-md5-module no-no-metaclass-support no-no-object-count + no-no-parallel-support no-python-version no-reserved-variable + no-stack-size)' \ + \*{-Y,--repository}'[search specified repository for files]:repository:_files' \ + '*:target:_default' # Doesn't seem to be a simple way to get a list of targets diff --git a/.zprezto/modules/completion/external/src/_sfdx b/.zprezto/modules/completion/external/src/_sfdx new file mode 100644 index 0000000..9fbf313 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_sfdx @@ -0,0 +1,935 @@ +#compdef sfdx + +# DESCRIPTION: Zsh completion script for the Salesforce CLI +# AUTHOR: Wade Wegner (@WadeWegner) +# REPO: https://github.com/wadewegner/salesforce-cli-zsh-completion +# LICENSE: https://github.com/wadewegner/salesforce-cli-zsh-completion/blob/master/LICENSE + +local -a _1st_arguments + +_1st_arguments=( + "force\:alias\:list":"list username aliases for the Salesforce CLI" + "force\:alias\:set":"set username aliases for the Salesforce CLI" + "force\:apex\:class\:create":"create an Apex class" + "force\:apex\:execute":"execute anonymous Apex code" + "force\:apex\:log\:get":"fetch a debug log" + "force\:apex\:log\:list":"list debug logs" + "force\:apex\:test\:report":"display test results" + "force\:apex\:test\:run":"invoke Apex tests" + "force\:apex\:trigger\:create":"create an Apex trigger" + "force\:auth\:jwt\:grant":"authorize an org using the JWT flow" + "force\:auth\:sfdxurl\:store":"authorize an org using an SFDX auth URL" + "force\:auth\:web\:login":"authorize an org using the web login flow" + "force\:config\:get":"get config var values for given names" + "force\:config\:list":"list config vars for the Salesforce CLI" + "force\:config\:set":"set config vars for the Salesforce CLI" + "force\:data\:bulk\:delete":"bulk delete records from a csv file" + "force\:data\:bulk\:status":"view the status of a bulk data load job or batch" + "force\:data\:bulk\:upsert":"bulk upsert records from a CSV file" + "force\:data\:record\:create":"create a record" + "force\:data\:record\:delete":"delete a record" + "force\:data\:record\:get":"view a record" + "force\:data\:record\:update":"update a record" + "force\:data\:soql\:query":"execute a SOQL query" + "force\:data\:tree\:export":"export data from an org into sObject tree format for force:data:tree:import consumption" + "force\:data\:tree\:import":"import data into an org using SObject Tree Save API" + "force\:doc\:commands\:display":"display help for force commands" + "force\:doc\:commands\:list":"list the force commands" + "force\:lightning\:app\:create":"create a Lightning app" + "force\:lightning\:component\:create":"create a Lightning component" + "force\:lightning\:event\:create":"create a Lightning event" + "force\:lightning\:interface\:create":"create a Lightning interface" + "force\:lightning\:lint":"analyse (lint) Lightning component code" + "force\:lightning\:test\:create":"create a Lightning test" + "force\:lightning\:test\:install":"install Lightning Testing Service unmanaged package in your org" + "force\:lightning\:test\:run":"invoke Lightning component tests" + "force\:limits\:api\:display":"display current org’s limits" + "force\:mdapi\:convert":"convert Metadata API source into the Salesforce DX source format" + "force\:mdapi\:deploy":"deploy metadata to an org using Metadata API" + "force\:mdapi\:deploy\:report":"check the status of a metadata deployment" + "force\:mdapi\:retrieve":"retrieve metadata from an org using Metadata API" + "force\:mdapi\:retrieve\:report":"check the status of a metadata retrieval" + "force\:org\:create":"create a scratch org" + "force\:org\:delete":"mark a scratch org for deletion" + "force\:org\:display":"get org description" + "force\:org\:list":"list all orgs you’ve created or authenticated to" + "force\:org\:open":"open an org in your browser" + "force\:org\:shape\:create":"create a snapshot of org edition, features, and licenses" + "force\:org\:shape\:delete":"delete all org shapes for a target org" + "force\:org\:shape\:list":"list all org shapes you’ve created" + "force\:package1\:version\:create":"create a first-generation package version in the release org" + "force\:package1\:version\:create\:get":"retrieve the status of a package version creation request" + "force\:package1\:version\:display":"display details about a first-generation package version" + "force\:package1\:version\:list":"list package versions for the specified first-generation package or for the org" + "force\:package2\:create":"create a second-generation package" + "force\:package2\:list":"list all second-generation packages in the Dev Hub org" + "force\:package2\:update":"update a second-generation package" + "force\:package2\:version\:create":"create a second-generation package version" + "force\:package2\:version\:create\:get":"retrieve a package version creation request" + "force\:package2\:version\:create\:list":"list package version creation requests" + "force\:package2\:version\:get":"retrieve a package version in the Dev Hub org" + "force\:package2\:version\:list":"list all package versions in the Dev Hub org" + "force\:package2\:version\:update":"update a second-generation package version" + "force\:package\:install":"install a package in the target org" + "force\:package\:install\:get":"retrieve the status of a package installation request" + "force\:package\:installed\:list":"list the org’s installed packages" + "force\:package\:uninstall":"uninstall a second-generation package from the target org" + "force\:package\:uninstall\:get":"retrieve status of package uninstall request" + "force\:project\:create":"create a new SFDX project" + "force\:project\:upgrade":"update project config files to the latest format" + "force\:schema\:sobject\:describe":"describe an object" + "force\:schema\:sobject\:list":"list all objects of a specified category" + "force\:source\:convert":"convert Salesforce DX source into the Metadata API source format" + "force\:source\:open":"edit a Lightning Page with Lightning App Builder" + "force\:source\:pull":"pull source from the scratch org to the project" + "force\:source\:push":"push source to an org from the project" + "force\:source\:status":"list local changes and/or changes in a scratch org" + "force\:user\:create":"create a user for a scratch org" + "force\:user\:display":"displays information about a user of a scratch org" + "force\:user\:list":"lists all users of a scratch org" + "force\:user\:password\:generate":"generate a password for scratch org users" + "force\:user\:permset\:assign":"assign a permission set to one or more users of an org" + "force\:visualforce\:component\:create":"create a Visualforce component" + "force\:visualforce\:page\:create":"create a Visualforce page" +) + +_arguments '*:: :->command' + +if (( CURRENT == 1 )); then + _describe -t commands "sfdx command" _1st_arguments + return +fi + +local -a _command_args +case "$words[1]" in + force:limits:api:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:app:create) + _command_args=( + '(-n|--appname)'{-n,--appname}'[name of the generated Lightning app]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningApp*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:delete) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you’re deleting]' \ + '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file containing the ids of the records to delete]:file:_files' \ + '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:status) + _command_args=( + '(-i|--jobid)'{-i,--jobid}'[the ID of the job you want to view or of the job whose batch you want to view]' \ + '(-b|--batchid)'{-b,--batchid}'[the ID of the batch whose status you want to view]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:upsert) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you want to upsert]' \ + '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file that defines the records to upsert]:file:_files' \ + '(-i|--externalid)'{-i,--externalid}'[the column name of the external ID; if not provided, an arbitrary ID is used]' \ + '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:class:create) + _command_args=( + '(-n|--classname)'{-n,--classname}'[name of the generated Apex class]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultApexClass*,ApexException,ApexUnitTest,InboundEmailService)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:doc:commands:display) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:doc:commands:list) + _command_args=( + '(-u|--usage)'{-u,--usage}'[list only docopts usage strings]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:visualforce:component:create) + _command_args=( + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFComponent*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-n|--componentname)'{-n,--componentname}'[name of the generated Visualforce component]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-l|--label)'{-l,--label}'[Visualforce component label]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:component:create) + _command_args=( + '(-n|--componentname)'{-n,--componentname}'[name of the generated Lightning component]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningCmp*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:convert) + _command_args=( + '(-r|--rootdir)'{-r,--rootdir}'[the root directory containing the Metadata API source]:file:_files' \ + '(-d|--outputdir)'{-d,--outputdir}'[the output directory to store the sfdx source]:file:_files' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:convert) + _command_args=( + '(-r|--rootdir)'{-r,--rootdir}'[the source directory for the source to be converted]:file:_files' \ + '(-d|--outputdir)'{-d,--outputdir}'[the output directory to export the Metadata API source to]:file:_files' \ + '(-n|--packagename)'{-n,--packagename}'[the name of the package to associate with the Metadata API source]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:create) + _command_args=( + '(-f|--definitionfile)'{-f,--definitionfile}'[path to a scratch org definition file]:file:_files' \ + '(-j|--definitionjson)'{-j,--definitionjson}'[scratch org definition in json format ]' \ + '(-n|--nonamespace)'{-n,--nonamespace}'[creates the scratch org with no namespace]' \ + '(-c|--noancestors)'{-c,--noancestors}'[do not include second-generation package ancestors in the scratch org]' \ + '(-i|--clientid)'{-i,--clientid}'[connected app consumer key]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the created org as the default username]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for for the created scratch org]' \ + '(-e|--env)'{-e,--env}'[environment where the scratch org is created: \[sandbox*,virtual,prototype\] (sandbox*,virtual,prototype)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(-d|--durationdays)'{-d,--durationdays}'[duration of the scratch org (in days) (default:7, min:1, max:30)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:create) + _command_args=( + '(-n|--name)'{-n,--name}'[package name]' \ + '(-o|--containeroptions)'{-o,--containeroptions}'[\[*Managed | Unlocked | Locked\] container options for the package (Managed=DeveloperManagedSubscriberManaged, Unlocked=DeveloperControlledSubscriberEditable, Locked=DeveloperControlledSubscriberLocked)]' \ + '(-d|--description)'{-d,--description}'[package description]' \ + '(-e|--nonamespace)'{-e,--nonamespace}'[creates the package with no namespace; available only for developer-controlled packages.]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:create) + _command_args=( + '(-f|--definitionfile)'{-f,--definitionfile}'[file path to a user definition]:file:_files' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the created username to reference within the CLI]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:project:create) + _command_args=( + '(-n|--projectname)'{-n,--projectname}'[name of the generated project]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (Defaultsfdx-project.json*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-l|--loginurl)'{-l,--loginurl}'[Salesforce instance login URL (https://login.salesforce.com*)]' \ + '(-x|--sourceapiversion)'{-x,--sourceapiversion}'[source API version number (41.0*)]' \ + '(-s|--namespace)'{-s,--namespace}'[project associated namespace]' \ + '(-p|--defaultpackagedir)'{-p,--defaultpackagedir}'[default package directory name (force-app*)]:file:_files' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:delete) + _command_args=( + '(-p|--noprompt)'{-p,--noprompt}'[no prompt to confirm deletion]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:deploy) + _command_args=( + '(-c|--checkonly)'{-c,--checkonly}'[validate deploy but don’t save to the org (default:false)]' \ + '(-d|--deploydir)'{-d,--deploydir}'[root of directory tree of files to deploy]:file:_files' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \ + '(-i|--jobid)'{-i,--jobid}'[WARNING: The flag "jobid" has been deprecated and will be removed in v41.01.0 or later. Instead, use "sfdx force:mdapi:deploy:report -i ".]' \ + '(-l|--testlevel)'{-l,--testlevel}'[deployment testing level (NoTestRun,RunSpecifiedTests,RunLocalTests,RunAllTestsInOrg)]' \ + '(-r|--runtests)'{-r,--runtests}'[tests to run if --testlevel RunSpecifiedTests]' \ + '(-e|--rollbackonerror)'{-e,--rollbackonerror}'[WARNING: The flag "rollbackonerror" has been deprecated and will be removed in v41.01.0 or later. Instead, use "ignoreerrors".]' \ + '(-o|--ignoreerrors)'{-o,--ignoreerrors}'[ignore any errors and do not roll back deployment (default:false)]' \ + '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[whether a warning will allow a deployment to complete successfully (default:false)]' \ + '(-f|--zipfile)'{-f,--zipfile}'[path to .zip file of metadata to deploy]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of deploy results]' \ + ) + ;; + force:mdapi:deploy:report) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \ + '(-i|--jobid)'{-i,--jobid}'[job ID of the deployment you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of deploy results]' \ + ) + ;; + force:org:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[emit additional command output to stdout]' \ + ) + ;; + force:user:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:event:create) + _command_args=( + '(-n|--eventname)'{-n,--eventname}'[name of the generated Lightning event]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningEvt*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:execute) + _command_args=( + '(-f|--apexcodefile)'{-f,--apexcodefile}'[path to a local file containing Apex code]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:get) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[emit additional command output to stdout]' \ + ) + ;; + force:package:install) + _command_args=( + '(-i|--id)'{-i,--id}'[ID of the package version to install (starts with 04t)]' \ + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-p|--publishwait)'{-p,--publishwait}'[number of minutes to wait for subscriber package version ID to become available in the target org]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:install:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[ID of the package install request you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:installed:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:interface:create) + _command_args=( + '(-n|--interfacename)'{-n,--interfacename}'[name of the generated Lightning interface]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningIntf*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:jwt:grant) + _command_args=( + '(-u|--username)'{-u,--username}'[authentication username]' \ + '(-f|--jwtkeyfile)'{-f,--jwtkeyfile}'[path to a file containing the private key]:file:_files' \ + '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \ + '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:lint) + _command_args=( + '(-i|--ignore)'{-i,--ignore}'[pattern used to ignore some folders]' \ + '(--files)--files[pattern used to include specific files]:file:_files' \ + '(-j|--json)'{-j,--json}'[format output as JSON]' \ + '(--config)--config[path to a custom ESLint configuration file]:file:_files' \ + '(--verbose)--verbose[report warnings in addition to errors]' \ + '(--exit)--exit[exit with error code 1 if there are lint issues]' \ + ) + ;; + force:alias:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:list) + _command_args=( + '(--all)--all[include expired, deleted, and unknown-status scratch orgs]' \ + '(--clean)--clean[remove all local org authorizations for non-active orgs]' \ + '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[list more information about each org]' \ + ) + ;; + force:package2:list) + _command_args=( + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:log:get) + _command_args=( + '(-i|--logid)'{-i,--logid}'[ID of the log to display]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:log:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:open) + _command_args=( + '(-p|--path)'{-p,--path}'[navigation URL path]:file:_files' \ + '(-r|--urlonly)'{-r,--urlonly}'[display navigation URL, but don’t launch browser]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:open) + _command_args=( + '(-f|--sourcefile)'{-f,--sourcefile}'[file to edit]:file:_files' \ + '(-r|--urlonly)'{-r,--urlonly}'[generate a navigation URL; don’t launch the editor]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:visualforce:page:create) + _command_args=( + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFPage*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-n|--pagename)'{-n,--pagename}'[name of the generated Visualforce page]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-l|--label)'{-l,--label}'[Visualforce page label]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:password:generate) + _command_args=( + '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames for which to generate passwords]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:permset:assign) + _command_args=( + '(-n|--permsetname)'{-n,--permsetname}'[the name of the permission set to assign]' \ + '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames or aliases to assign the permission set to]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:pull) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \ + '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to the project]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:push) + _command_args=( + '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to scratch org]' \ + '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[deploy changes even if warnings are generated]' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:create) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re creating]' \ + '(-v|--values)'{-v,--values}'[the = pairs you’re creating]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[create the record with tooling api]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:delete) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re deleting]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re deleting]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[delete the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:get) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re retrieving]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re retrieving]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[retrieve the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:update) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re updating]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re updating]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-v|--values)'{-v,--values}'[the = pairs you’re updating]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[update the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:retrieve) + _command_args=( + '(-a|--apiversion)'{-a,--apiversion}'[target API version for the retrieve (default 41.0)]' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \ + '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \ + '(-k|--unpackaged)'{-k,--unpackaged}'[file path of manifest of components to retrieve]:file:_files' \ + '(-d|--sourcedir)'{-d,--sourcedir}'[source dir to use instead of default manifest sfdx-project.xml]' \ + '(-p|--packagenames)'{-p,--packagenames}'[a comma-separated list of packages to retrieve]' \ + '(-s|--singlepackage)'{-s,--singlepackage}'[a single-package retrieve (default: false)]' \ + '(-i|--jobid)'{-i,--jobid}'[WARNING: The flag "jobid" has been deprecated and will be removed in v41.01.0 or later. Instead, use "sfdx force:mdapi:retrieve:report -i -r ".]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of retrieve result]' \ + ) + ;; + force:mdapi:retrieve:report) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \ + '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \ + '(-i|--jobid)'{-i,--jobid}'[job ID of the retrieve you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of retrieve result]' \ + ) + ;; + force:alias:set) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:set) + _command_args=( + '(-g|--global)'{-g,--global}'[set config var globally (to be used from any directory)]:file:_files' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:sfdxurl:store) + _command_args=( + '(-f|--sfdxurlfile)'{-f,--sfdxurlfile}'[path to a file containing the sfdx url]:file:_files' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:create) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:delete) + _command_args=( + '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username for the target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[list more information about each org shape]' \ + ) + ;; + force:schema:sobject:describe) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the API name of the object to describe]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:schema:sobject:list) + _command_args=( + '(-c|--sobjecttypecategory)'{-c,--sobjecttypecategory}'[the type of objects to list (all|custom|standard)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:soql:query) + _command_args=( + '(-q|--query)'{-q,--query}'[SOQL query to execute]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[execute query with Tooling API]' \ + '(-r|--resultformat)'{-r,--resultformat}'[query result format emitted to stdout; --json flag overrides this parameter (human*,csv,json)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:status) + _command_args=( + '(-a|--all)'{-a,--all}'[list all the changes that have been made]' \ + '(-l|--local)'{-l,--local}'[list the changes that have been made locally]' \ + '(-r|--remote)'{-r,--remote}'[list the changes that have been made in the scratch org]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:test:create) + _command_args=( + '(-n|--testname)'{-n,--testname}'[name of the generated Lightning test]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningTest*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:test:install) + _command_args=( + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status (default:2)]' \ + '(-r|--releaseversion)'{-r,--releaseversion}'[release version of Lightning Testing Service (default:latest)]' \ + '(-t|--packagetype)'{-t,--packagetype}'[type of unmanaged package. 'full' option contains both jasmine and mocha, plus examples (full*,jasmine,mocha)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:test:report) + _command_args=( + '(-i|--testrunid)'{-i,--testrunid}'[ID of test run]' \ + '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display Apex test processing details]' \ + ) + ;; + force:apex:test:run) + _command_args=( + '(-n|--classnames)'{-n,--classnames}'[comma-separated list of Apex test class names to execute]' \ + '(-s|--suitenames)'{-s,--suitenames}'[comma-separated list of Apex test suite names to execute]' \ + '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \ + '(-l|--testlevel)'{-l,--testlevel}'[testlevel enum value (RunLocalTests,RunAllTestsInOrg,RunSpecifiedTests)]' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(--precompilewait)--precompilewait[how long to wait (in minutes) for Apex pre-compilation (default:3, min:3)]' \ + '(-y|--synchronous)'{-y,--synchronous}'[run tests from a single class synchronously]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display Apex test processing details]' \ + ) + ;; + force:lightning:test:run) + _command_args=( + '(-a|--appname)'{-a,--appname}'[name of your Lightning test application]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory path to store test run artifacts: for example, log files and test results]:file:_files' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-f|--configfile)'{-f,--configfile}'[path to config file for the test]:file:_files' \ + '(-o|--leavebrowseropen)'{-o,--leavebrowseropen}'[leave browser open]' \ + '(-t|--timeout)'{-t,--timeout}'[time (ms) to wait for results element in dom (default:60000)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:tree:export) + _command_args=( + '(-q|--query)'{-q,--query}'[soql query, or filepath of file containing a soql query, to retrieve records]:file:_files' \ + '(-p|--plan)'{-p,--plan}'[generate mulitple sobject tree files and a plan definition file for aggregated import]' \ + '(-x|--prefix)'{-x,--prefix}'[prefix of generated files]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store files]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:tree:import) + _command_args=( + '(-f|--sobjecttreefiles)'{-f,--sobjecttreefiles}'[comma-delimited, ordered paths of json files containing collection of record trees to insert]:file:_files' \ + '(-p|--plan)'{-p,--plan}'[path to plan to insert multiple data files that have master-detail relationships]:file:_files' \ + '(-c|--contenttype)'{-c,--contenttype}'[if data file extension is not .json, provide content type (applies to all files)]' \ + '(--confighelp)--confighelp[display schema information for the --plan configuration file to stdout; if you use this option, all other options except --json are ignored]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:trigger:create) + _command_args=( + '(-n|--triggername)'{-n,--triggername}'[name of the generated Apex trigger]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (ApexTrigger*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-s|--sobject)'{-s,--sobject}'[sObject to create a trigger on (SOBJECT*)]' \ + '(-e|--triggerevents)'{-e,--triggerevents}'[events that fire the trigger (before insert*,before upsert,before delete,after insert,after upsert,after delete,after undelete)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:uninstall) + _command_args=( + '(-i|--id)'{-i,--id}'[ID of the package to uninstall (starts with 04t)]' \ + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for uninstall status]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:uninstall:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[ID of the package uninstall request you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:update) + _command_args=( + '(-i|--package2id)'{-i,--package2id}'[id of the package (starts with 0Ho)]' \ + '(-n|--name)'{-n,--name}'[package name]' \ + '(-d|--description)'{-d,--description}'[package description]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:project:upgrade) + _command_args=( + '(-f|--forceupgrade)'{-f,--forceupgrade}'[run all upgrades even if project has already been upgraded]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:create) + _command_args=( + '(-i|--packageid)'{-i,--packageid}'[ID of the metadata package (starts with 033) of which you’re creating a new version]' \ + '(-n|--name)'{-n,--name}'[package version name]' \ + '(-d|--description)'{-d,--description}'[package version description]' \ + '(-v|--version)'{-v,--version}'[package version in major.minor format, for example, 3.2]' \ + '(-m|--managedreleased)'{-m,--managedreleased}'[create a managed package version]' \ + '(-r|--releasenotesurl)'{-r,--releasenotesurl}'[release notes URL]' \ + '(-p|--postinstallurl)'{-p,--postinstallurl}'[post install URL]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default: 2 minutes)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create) + _command_args=( + '(-i|--package2id)'{-i,--package2id}'[ID of the parent package (starts with 0Ho)]' \ + '(-d|--directory)'{-d,--directory}'[path to directory that contains the contents of the package version]:file:_files' \ + '(-b|--branch)'{-b,--branch}'[the package version’s branch]' \ + '(-t|--tag)'{-t,--tag}'[the package version’s tag]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-p|--preserve)'{-p,--preserve}'[temp files are preserved that would otherwise be deleted]' \ + '(-j|--validateschema)'{-j,--validateschema}'[sfdx-project.json is validated against JSON schema]' \ + '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default:0)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:create:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[PackageUploadRequest ID]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create:get) + _command_args=( + '(-i|--package2createrequestid)'{-i,--package2createrequestid}'[package2 version creation request ID (starts with 08c)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create:list) + _command_args=( + '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-s|--status)'{-s,--status}'[filter the list by version creation request status (Queued,InProgress,Success,Error)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:display) + _command_args=( + '(-i|--packageversionid)'{-i,--packageversionid}'[metadata package version ID (starts with 04t)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:get) + _command_args=( + '(-i|--package2versionid)'{-i,--package2versionid}'[the package version ID (starts wtih 05i)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:list) + _command_args=( + '(-i|--packageid)'{-i,--packageid}'[metadata package ID (starts with 033)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:list) + _command_args=( + '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-m|--modifiedlastdays)'{-m,--modifiedlastdays}'[list items modified in the specified last number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-i|--package2ids)'{-i,--package2ids}'[filter results on specified comma-delimited package2 ids (start with 0Ho)]' \ + '(-r|--released)'{-r,--released}'[display released versions only]' \ + '(-o|--orderby)'{-o,--orderby}'[order by the specified package2 version fields]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--concise)--concise[display limited package2 version details]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display extended package2 versions detail]' \ + ) + ;; + force:package2:version:update) + _command_args=( + '(-i|--package2versionid)'{-i,--package2versionid}'[the package version ID (starts wtih 05i)]' \ + '(-n|--name)'{-n,--name}'[the package version name]' \ + '(-d|--description)'{-d,--description}'[the package version description]' \ + '(-b|--branch)'{-b,--branch}'[the package version branch]' \ + '(-t|--tag)'{-t,--tag}'[the package version tag]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-s|--setasreleased)'{-s,--setasreleased}'[set the package version as released (can’t be undone)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:web:login) + _command_args=( + '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \ + '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--disablemasking)--disablemasking[disable masking of user input (for use with problematic terminals)]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + esac + +_arguments \ + $_command_args \ + && return 0 diff --git a/.zprezto/modules/completion/external/src/_ssh-copy-id b/.zprezto/modules/completion/external/src/_ssh-copy-id deleted file mode 100644 index 77bd01c..0000000 --- a/.zprezto/modules/completion/external/src/_ssh-copy-id +++ /dev/null @@ -1,34 +0,0 @@ -#compdef ssh-copy-id -# ------------------------------------------------------------------------------ -# 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 index 75eebfc..b6d1abe 100644 --- a/.zprezto/modules/completion/external/src/_stack +++ b/.zprezto/modules/completion/external/src/_stack @@ -40,54 +40,56 @@ _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)]' \ + --version'[display version information]' \ + --help'[display usage information]' \ + '--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]' + '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]' } + +_stack "$@" diff --git a/.zprezto/modules/completion/external/src/_subl b/.zprezto/modules/completion/external/src/_subl index 2f21385..9cb3471 100644 --- a/.zprezto/modules/completion/external/src/_subl +++ b/.zprezto/modules/completion/external/src/_subl @@ -39,22 +39,17 @@ # ------------------------------------------------------------------------------ -_subl() { - integer ret=1 - local I="-h --help -v --version" - local -a args - args+=( - "(- *)"{-h,--help}'[Show help and exit]' - "(- *)"{-v,--version}'[Show version and exit]' - "($I)--project[Load the given project]:project:" - "($I)--command[Run the given command]:command:" - "($I -n --new-window)"{-n,--new-window}'[Open a new window]' - "($I -a --add)"{-a,--add}'[Add folders to the current window]' - "($I -w --wait)"{-w,--wait}'[Wait for the files to be closed before returning]' - "($I -b --background)"{-b,--background}'[Do not activate the application]' - ) - _arguments $args[@] '*:file:_files' && ret=0 - return ret -} +local I="-h --help -v --version" +local -a args +args+=( + "(- *)"{-h,--help}'[display usage information]' + "(- *)"{-v,--version}'[display version information]' + "($I)--project[load the given project]:project" + "($I)--command[run the given command]:command" + "($I -n --new-window)"{-n,--new-window}'[open a new window]' + "($I -a --add)"{-a,--add}'[add folders to the current window]' + "($I -w --wait)"{-w,--wait}'[wait for the files to be closed before returning]' + "($I -b --background)"{-b,--background}"[don't activate the application]" +) +_arguments "$args[@]" '*:file:_files' -_subl diff --git a/.zprezto/modules/completion/external/src/_tarsnap b/.zprezto/modules/completion/external/src/_tarsnap new file mode 100644 index 0000000..17f47f1 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_tarsnap @@ -0,0 +1,64 @@ +#compdef tarsnap +# ------------------------------------------------------------------------------ +# Copyright (c) 2014-2017 Daniel Teunis - https://github.com/danteu +# +# 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 tarsnap 1.0.39 (http://tarsnap.com). +# +# ------------------------------------------------------------------------------ +# Author +# ------- +# +# * Daniel Teunis +# +# ------------------------------------------------------------------------------ + +_arguments \ + '(- 1 *)--help[prints tarsnap help]' \ + '(- 1 *)--version[prints tarsnap version number]' \ + '(- 1 *)--verify-config[checks configuration files for syntactic errors]' \ + '--fsck[performs integrity checks on the stored archives]' \ + '--fsck-prune[performs integrity checks and prunes broken data]' \ + '--list-archives[prints names of stored archives]' \ + '--nuke[deletes all stored archives]' \ + '--print-stats[prints archive statistics]' \ + '--recover[recovers partial archive]' \ + '-c[creates archive]' \ + '-d[deletes specified archive]' \ + '-r[prints content of specified archive]' \ + '-t[lists archive content]' \ + '-x[extracts specified archive]' \ + '--lowmem[reduces memory usage by not caching small files]' \ + '--quiet[silences some warnings]' \ + '--keyfile[specifies keyfile]:keyfile:->file' \ + '--cachedir[specifies cache directory]:cachedir:->directory' \ + '-f[specifies archive name]:archivename:->file' + +case "$state" in + file) + _files + ;; + directory) + _path_files -/ + ;; +esac diff --git a/.zprezto/modules/completion/external/src/_tmuxp b/.zprezto/modules/completion/external/src/_tmuxp new file mode 100644 index 0000000..f42bbb2 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_tmuxp @@ -0,0 +1,133 @@ +#compdef tmuxp + +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 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 tmuxp (https://tmuxp.git-pull.com/en/latest/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bez Hermoso +# +# ------------------------------------------------------------------------------ + +_tmuxp() { + + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ":command:->command" \ + "*::options:->options" \ + "--log_level:log level:(DEBUG INFO WARNING ERROR CRITICAL)" \ + "--help[display usage information]" + + case $state in + (command) + local -a subcommands + subcommands=( + 'convert:Convert a tmuxp config between JSON and YAML.' + 'freeze:Snapshot a session into a config.' + 'import:Import a teamocil/tmuxinator config.' + 'load:Load tmuxp workspaces.' + ) + _describe -t commands 'commands' subcommands + ;; + (options) + case $line[1] in + (load) + __tmuxp_load + ;; + (import) + __tmuxp_import + ;; + (freeze) + local sessions="$(__tmux_sessions)" + _arguments -C \ + "1::session name:compadd $sessions" + ;; + (convert) + _arguments -C \ + '1:: :_files -g "*.(json|yaml|yml)"' + ;; + esac + esac + +} + +__tmuxp_load() { + local state line + typeset -A opt_args + _arguments -C \ + '*:sessions:->sessions' \ + '--yes:yes' \ + '-d[Load the session without attaching it]' \ + '-2[Force tmux to assume the terminal supports 256 colors]' \ + '-8[Like -2, but indicates that the terminal supports 88 colors]' + + # Cant get the options to be recognized when there are sessions that has + # a dash. + + case $state in + (sessions) + local s + _alternative \ + 'sessions-user:user session:compadd -F line - ~/.tmuxp/*.(json|yml|yaml)(:r:t)' \ + 'sessions-other:session in current directory:_path_files -g "**/*.(json|yaml|yml)(-.)"' + ;; + esac +} + +__tmuxp_import() { + local state line + typeset -A opt_args + _arguments -C \ + '1::program:(tmuxinator teamocil)' \ + '2::project:->project' + + case $state in + (project) + if [[ $line[1] == 'tmuxinator' ]] + then + _wanted tmuxinator-projects exp 'tmuxinator projects' compadd $(tmuxinator completions start) + fi + ;; + esac +} + +__tmux_sessions () { + local tmux_sessions + tmux_sessions=($(_call_program tmux_sessions 'tmux ls -F "#{session_name}"')) + echo $tmux_sessions +} + +_tmuxp "$@" + diff --git a/.zprezto/modules/completion/external/src/_tox b/.zprezto/modules/completion/external/src/_tox new file mode 100644 index 0000000..efd0549 --- /dev/null +++ b/.zprezto/modules/completion/external/src/_tox @@ -0,0 +1,61 @@ +#compdef tox +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for tox (https://tox.readthedocs.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +(( $+functions[_tox_envs_list] )) || +_tox_envs_list() { + local envs; envs=($(_call_program envs $service --listenvs-all)) + if [ ${#envs} -gt 0 ]; then + _values -s , 'tox environments' "${envs[@]}" + else + _message 'tox environments (none found)' + fi +} + +_arguments \ + '(- 1 *)--version[show version and exit]' \ + '(- 1 *)'{-h,--help}'[show help options]' \ + '(- 1 *)'{--hi,--help-ini}'[show help about ini-names]' \ + '*-v[increase verbosity of reporting output]' \ + '*-q[progressively silence reporting output]' \ + '(- 1 *)--showconfig[show configuration information for all environments]' \ + '(- 1 *)'{-l,--listenvs}'[show list of test environments]' \ + '(- 1 *)'{-a,--listenvs-all}'[show list of all defined environments]' \ + '-c[config file name or directory with "tox.ini" file]:config path:_files -g "*.ini"' \ + '-e[work against specified environments]: :_tox_envs_list' \ + '--notest[skip invoking test commands]' \ + '--sdistonly[only perform the sdist packaging activity]' \ + '--parallel--safe-build[ensure two tox builds can run in parallel]' \ + '--installpkg[ensure two tox builds can run in parallel]:package path:_files -/' \ + '--develop[install package in the venv using "setup.py develop"]' \ + '(-i --index-url)'{-i,--index-url}'[set indexserver url]:index server URL:_urls' \ + '--pre[install pre-releases and development versions of dependencies]' \ + '(-r --recreate)'{-r,--recreate}'[force recreation of virtual environments]' \ + '--result-json[write a json file with detailed information about all commands and results involved]:JSON file path:_files -g "*.json"' \ + '--hashseed[set PYTHONHASHSEED to SEED before running commands]:seed' \ + '*--force-dep[forces a certain version of one of the dependencies when configuring the virtual environment]:pip requirement' \ + '--sitepackages[override sitepackages setting to True in all envs]' \ + '--alwayscopy[override alwayscopy setting to True in all envs]' \ + '--skip-missing-interpreters[do not fail tests for missing interpreters]: :(config true false)' \ + '--workdir[tox working directory]: :_files -/' \ + '*: :_guard "^-*" command positional substitution 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/_trash-list b/.zprezto/modules/completion/external/src/_trash-list index 0f821c0..c1b1004 100644 --- a/.zprezto/modules/completion/external/src/_trash-list +++ b/.zprezto/modules/completion/external/src/_trash-list @@ -39,16 +39,10 @@ # ------------------------------------------------------------------------------ -_trash-list() { - - _arguments -C \ - '--version[Show programs version number and exit]' \ - {-h,--help}'[Show help message and exit]' \ - '*: :' \ - -} - -_trash-list +_arguments \ + '--version[show programs version number and exit]' \ + {-h,--help}'[show help message and exit]' \ + '*: :' # Local Variables: # mode: Shell-Script diff --git a/.zprezto/modules/completion/external/src/_trash-put b/.zprezto/modules/completion/external/src/_trash-put index e9bf06d..770158e 100644 --- a/.zprezto/modules/completion/external/src/_trash-put +++ b/.zprezto/modules/completion/external/src/_trash-put @@ -39,21 +39,15 @@ # ------------------------------------------------------------------------------ -_trash-put() { - - _arguments -C \ - '--version[Show programs version number and exit]' \ - {-h,--help}'[Show help message and exit]' \ - {-d,--directory}'[Remove empty directories - ignored (for GNU rm compabilty)]' \ - {-f,--force}'[Ignore nonexistent arguments and never prompt - ignored (for GNU rm compabilty)]' \ - {-i,--interactive}'[Prompt before every removal - ignored (for GNU rm compabilty)]' \ - {-r,-R,--recursive}'[Remove directories and their content recursively - ignored (for GNU rm compabilty)]' \ - {-v,--verbose}'[Explain what is being done]' \ - '*: :_files' \ - -} - -_trash-put +_arguments -C \ + '--version[display version information]' \ + {-h,--help}'[display usage information]' \ + {-d,--directory}'[remove empty directories - ignored (for GNU rm compatibility)]' \ + {-f,--force}'[ignore nonexistent arguments and never prompt - ignored (for GNU rm compatibility)]' \ + {-i,--interactive}'[prompt before every removal - ignored (for GNU rm compabilty)]' \ + {-r,-R,--recursive}'[remove directories and their content recursively - ignored (for GNU rm compatibility)]' \ + {-v,--verbose}'[explain what is being done]' \ + '*: :_files' # Local Variables: # mode: Shell-Script diff --git a/.zprezto/modules/completion/external/src/_udisksctl b/.zprezto/modules/completion/external/src/_udisksctl index 267c4af..48cc9e5 100644 --- a/.zprezto/modules/completion/external/src/_udisksctl +++ b/.zprezto/modules/completion/external/src/_udisksctl @@ -56,7 +56,7 @@ _paths() { _path_list+=$_path done - _describe 'paths' _path_list + _describe 'path' _path_list } _filesystems() { @@ -68,96 +68,97 @@ _filesystems() { 'xenix' 'xfs' 'xiafs' ) - _describe 'file system types' _fs_types + _describe 'file system type' _fs_types } _udisksctl() { typeset -A opt_args - local curcontext="$curcontext" state line + local curcontext="$curcontext" state line ret=1 _arguments -C \ '1:udisksctl commands:->cmds' \ - '*:: :->cmd_args' \ + '*:: :->cmd_args' && ret=0 case $state in cmds) local commands; commands=( - 'help: Show help' - 'info: Show info about an object' - 'dump: Show info about all object' - 'status: Shows high-level status' - 'monitor: Monitor changes to objects' - 'mount: Mount a filesystem' - 'unmount: Unmount a filesystem' - 'unlock: Unlock an encrypted device' - 'lock: Lock an encrypted device' - 'loop-setup: Set-up a loop device' - 'loop-delete: Delete a loop device' - 'power-off: Safely power off a drive' - 'smart-simulate: Set SMART data for a drive' + 'help:show help' + 'info:show info about an object' + 'dump:show info about all object' + 'status:shows high-level status' + 'monitor:monitor changes to objects' + 'mount:mount a filesystem' + 'unmount:unmount a filesystem' + 'unlock:unlock an encrypted device' + 'lock:lock an encrypted device' + 'loop-setup:set-up a loop device' + 'loop-delete:delete a loop device' + 'power-off:safely power off a drive' + 'smart-simulate:set SMART data for a drive' ) - _describe -t commands 'udisksctl commands' commands + _describe -t commands 'udisksctl command' commands && ret=0 ;; cmd_args) case $words[1] in info) _arguments \ - {-p,--object-path}'[Object to get information about]:object path:_paths' \ - {-b,--block-device}'[Block device to get information about]:block device:_paths' \ - {-d,--drive}'[Drive to get information about]:drives:_paths' \ + {-p,--object-path}'[specify object to get information about]:object path:_paths' \ + {-b,--block-device}'[specify block device to get information about]:block device:_paths' \ + {-d,--drive}'[specify drive to get information about]:drive:_paths' && ret=0 ;; mount) _arguments \ - {-p,--object-path}'[Object to mount]:object path:_paths' \ - {-b,--block-device}'[Block device to mount]:block device:_paths' \ - {-t,--filesystem-type}'[Filesystem type to use]:fs type:_filesystems' \ - {-o,--options}'[Mount options]' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-p,--object-path}'[specify object to mount]:object path:_paths' \ + {-b,--block-device}'[specify block device to mount]:block device:_paths' \ + {-t,--filesystem-type}'[specify filesystem type to use]:fs type:_filesystems' \ + {-o,--options}'[mount options]' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; unmount) _arguments \ - {-p,--object-path}'[Object to unmount]:object path:_paths' \ - {-b,--block-device}'[Block device to unmount]:block device:_paths' \ - {-f,--force}'[Force/lazy unmount]' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-p,--object-path}'[object to unmount]:object path:_paths' \ + {-b,--block-device}'[block device to unmount]:block device:_paths' \ + {-f,--force}'[force/lazy unmount]' \ + "(--no-user-interaction)--no-user-interaction[don't auhenticate the user if needed]" && ret=0 ;; unlock|lock) _arguments \ - {-p,--object-path}'[Object to lock/unlock]:object path:_paths' \ - {-b,--block-device}'[Block device to lock/unlock]:block device:_paths' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-p,--object-path}'[object to lock/unlock]:object path:_paths' \ + {-b,--block-device}'[block device to lock/unlock]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; loop-setup) _arguments \ - {-f,--file}'[File to set-up a loop device for]:files:_files' \ - {-r,--read-only}'[Setup read-only device]' \ - {-o,--offset}'[Start at bytes into file]:offset in bytes:' \ - {-s,--size}'[Limit size to bytes]:limit in bytes:' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-f,--file}'[specify file to set-up a loop device for]:files:_files' \ + {-r,--read-only}'[setup read-only device]' \ + {-o,--offset}'[start at specified offset into file]:offset (bytes)' \ + {-s,--size}'[limit size]:limit (bytes)' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; loop-delete) _arguments \ - {-p,--object-path}'[Object for loop device to delete]:object path:_paths' \ - {-b,--block-device}'[Loop device to delete]:block device:_paths' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-p,--object-path}'[object for loop device to delete]:object path:_paths' \ + {-b,--block-device}'[loop device to delete]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; power-off) _arguments \ - {-p,--object-path}'[Object path for ATA device]:object path:_paths' \ - {-b,--block-device}'[Device file for ATA devic]:block device:_paths' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-p,--object-path}'[object path for ATA device]:object path:_paths' \ + {-b,--block-device}'[device file for ATA devic]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; smart-simulate) _arguments \ - {-f,--file}'[File with libatasmart blob]:files:_files' \ - {-p,--object-path}'[Object to get information about]:object path:_paths' \ - {-b,--block-device}'[Block device to get information about]:block device:_paths' \ - '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \ + {-f,--file}'[file with libatasmart blob]:files:_files' \ + {-p,--object-path}'[object to get information about]:object path:_paths' \ + {-b,--block-device}'[block device to get information about]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 ;; esac ;; esac + return ret } _udisksctl "$@" diff --git a/.zprezto/modules/completion/external/src/_ufw b/.zprezto/modules/completion/external/src/_ufw index b4cf0f1..010a3fa 100644 --- a/.zprezto/modules/completion/external/src/_ufw +++ b/.zprezto/modules/completion/external/src/_ufw @@ -41,7 +41,7 @@ _ufw_logging() { - local main additional second + local params additional second second=$words[2] if [ ! -z $second ]; then @@ -60,8 +60,8 @@ _ufw_logging() { "full" ) - _describe -t params 'On/Off' params - _describe -t additional 'Level' additional + _describe -t params 'on/off' params + _describe -t additional 'level' additional } @@ -85,35 +85,34 @@ _ufw_delete() { } _ufw() { - local -a commands + local curcontext="$curcontext" ret=1 + local -a state line commands commands=( - "enable:Enables the firewall" - "disable:Disables the firewall" - "default:Set default policy" - "logging:Set logging to LEVEL" - "allow:Add allow rule" - "deny:Add deny rule" - "reject:Add reject rule" - "limit:Add limit rule" - "delete:Delete RULE" - "insert:Insert RULE at NUM" - "route:Add route RULE" - "reload:Reload firewall" - "reset:Reset firewall" - "status:Show firewall status" - "show:Show firewall report" - "version:Display version information" + "enable:enable the firewall" + "disable:disable the firewall" + "default:set default policy" + "logging:set logging level" + "allow:add allow rule" + "deny:add deny rule" + "reject:add reject rule" + "limit:add limit rule" + "delete:delete rule" + "insert:insert rule at position" + "route:add route rule" + "reload:reload firewall" + "reset:reset firewall" + "status:show firewall status" + "show:show firewall report" + "version:display version information" ) - - _arguments -C -s -S -n \ - '(- 1 *)'--version"[Show program\'s version number and exit]: :->full" \ - '(- 1 *)'{-h,--help}'[Show help message and exit]: :->full' \ - '(- 1 *)'--dry-run"[Don\'t modify anything, just show the changes]: :->cmds" \ + '(- 1 *)'--version"[display version information]: :->full" \ + '(- 1 *)'{-h,--help}'[display usage information]: :->full' \ + '(- 1 *)'--dry-run"[don't modify anything, just show the changes]: :->cmds" \ '1:cmd:->cmds' \ - '*:: :->args' \ + '*:: :->args' && ret=0 case "$state" in (cmds) @@ -124,19 +123,21 @@ _ufw() { cmd=$words[1] case "$cmd" in (logging) - _ufw_logging + _ufw_logging && ret=0 ;; (delete) - _ufw_delete + _ufw_delete && ret=0 ;; (*) - return + _default && ret=0 ;; esac ;; (*) ;; esac + + return ret } _ufw diff --git a/.zprezto/modules/completion/external/src/_virsh b/.zprezto/modules/completion/external/src/_virsh deleted file mode 100644 index 3dee9c7..0000000 --- a/.zprezto/modules/completion/external/src/_virsh +++ /dev/null @@ -1,278 +0,0 @@ -#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/_vnstat b/.zprezto/modules/completion/external/src/_vnstat index bfb08dd..5676f8b 100644 --- a/.zprezto/modules/completion/external/src/_vnstat +++ b/.zprezto/modules/completion/external/src/_vnstat @@ -38,73 +38,75 @@ # # ------------------------------------------------------------------------------ -local context state state_descr line +local curcontext="$curcontext" state state_descr line ret=1 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]' \ +_arguments -C : \ + '--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]' + _values 'live mode' \ + '0[packets per second]' \ + '1[traffic counters]' && ret=0 ;; (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]' + _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]' && ret=0 ;; (interface) local interfaces="$(_call_program interfaces 'vnstat --iflist')" interfaces="${interfaces#*:}" - _values -s + 'Interface' ${(z)interfaces} + _values -s + 'interface' ${(z)interfaces} && ret=0 ;; esac +return ret + # Local Variables: # mode: Shell-Script # sh-indentation: 2 diff --git a/.zprezto/modules/completion/external/src/_vpnc b/.zprezto/modules/completion/external/src/_vpnc index 622b1d3..edda13a 100644 --- a/.zprezto/modules/completion/external/src/_vpnc +++ b/.zprezto/modules/completion/external/src/_vpnc @@ -35,13 +35,13 @@ _vpnc-connect() { '--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]' \ + "--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]' \ + "--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 -/' \ @@ -116,7 +116,7 @@ _vpnc_tun_tap_modes() { (( $+functions[_vpnc_debug_levels] )) || _vpnc_debug_levels() { local levels; levels=( - '0:do not print debug information' + "0:don't print debug information" '1:print minimal debug information' '2:show statemachine and packet/payload type information' '3:dump everything excluding authentication data' diff --git a/.zprezto/modules/completion/external/src/_wg-quick b/.zprezto/modules/completion/external/src/_wg-quick new file mode 100644 index 0000000..8de17ce --- /dev/null +++ b/.zprezto/modules/completion/external/src/_wg-quick @@ -0,0 +1,25 @@ +#compdef wg-quick +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for wg-quick (a script for easy managemant of wireguard +# VPN tunnels) (https://www.wireguard.com/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nicolas Lenz +# +# ------------------------------------------------------------------------------ + +# The possible modes +local modes=('up\:"bring a wireguard interface up"'\ + 'down\:"tear down and remove a wireguard interface"'\ + 'save\:"save configuration of a running wireguard interface"') + +# 1: Complete mode +# 2: Complete interface with all .conf files in /etc/wireguard without the filename extension. +_arguments "1:mode:((${modes}))"\ + '2:interface:_path_files -W /etc/wireguard -g "*.conf(^/:r)"' diff --git a/.zprezto/modules/completion/external/src/_yaourt b/.zprezto/modules/completion/external/src/_yaourt index 920b16f..4727502 100644 --- a/.zprezto/modules/completion/external/src/_yaourt +++ b/.zprezto/modules/completion/external/src/_yaourt @@ -92,7 +92,7 @@ _yaourt_action_sync() { _arguments -s : \ "$_yaourt_opts_common[@]" \ "$_yaourt_opts_sync_modifiers[@]" \ - '*-c[Remove old packages from cache]' \ + '*-c[remove old packages from cache]' \ ;; sync_group) _arguments -s : \ @@ -213,110 +213,110 @@ _yaourt() { # options for passing to _arguments: main pacman commands typeset -a _yaourt_opts_commands _yaourt_opts_commands=( - '-Q[Query the package database]' - '-R[Remove a package from the system]' - '-S[Synchronize packages]' - '-U[Upgrade a package]' - '-V[Display version and exit]' - '-h[Display usage]' + '-Q[query the package database]' + '-R[remove a package from the system]' + '-S[synchronize packages]' + '-U[upgrade a package]' + '-V[display version and exit]' + '-h[display usage information]' '-B[backup pacman database]' - '-G[Get PKGBUILD]' - '-C[Clean backup files]' - '--stats[Package Statistics]' + '-G[get PKGBUILD]' + '-C[clean backup files]' + '--stats[package statistics]' ) # options for passing to _arguments: options common to all commands typeset -a _yaourt_opts_common _yaourt_opts_common=( - '-b[Alternate database location]:database_location:_files -/' - '-h[Display syntax for the given operation]' - '-r[Alternate installation root]:installation root:_files -/' - '-v[Be more verbose]' - '--cachedir[Alternate package cache location]:cache_location:_files -/' - '--config[Alternate configuration file]:config file:_files' - '--debug[Display debug messages]' - '--gpgdir[Alternate GnuPG home directory]:gpg_directory:_files -/' - '--logfile[Alternate log file]:config file:_files' - '--noconfirm[Do not ask for confirmation]' - '--noprogressbar[Do not show a progress bar when downloading files]' - '--noscriptlet[Do not execute the install scriptlet if one exists]' - '--print[Only print the targets instead of performing the operation]' + '-b[alternate database location]:database_location:_files -/' + '-h[display syntax for the given operation]' + '-r[alternate installation root]:installation root:_files -/' + '-v[be more verbose]' + '--cachedir[specify alternate package cache location]:cache_location:_files -/' + '--config[specify alternate configuration file]:config file:_files' + '--debug[display debug messages]' + '--gpgdir[specify alternate GnuPG home directory]:gpg_directory:_files -/' + '--logfile[specify alternate log file]:config file:_files' + "--noconfirm[don't ask for confirmation]" + "--noprogressbar[don't show a progress bar when downloading files]" + "--noscriptlet[don't execute the install scriptlet if one exists]" + '--print[only print the targets instead of performing the operation]' ) # options for passing to _arguments: options for --upgrade commands typeset -a _yaourt_opts_pkgfile _yaourt_opts_pkgfile=( - '-d[Skip dependency checks]' - '-f[Overwrite conflicting files]' + '-d[skip dependency checks]' + '-f[overwrite conflicting files]' '*:package file:_files -g "*.pkg.tar*(.)"' ) # options for passing to _arguments: subactions for --query command typeset -a _yaourt_opts_query_actions _yaourt_opts_query_actions=( - '-g[View all members of a package group]:*:package groups:->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' + '-g[view all members of a package group]:*:package groups:->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]' + '-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 in ascending order (oldest 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]' + '-c[remove all dependent packages]' + '-d[skip dependency checks]' + "-k[only remove database entry, don't 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' + '*-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 group:->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: + '-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: + '*--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]' + '--asdeps[install packages as non-explicitly installed]' + '--asexplicit[install packages as explicitly installed]' + "--needed[don't reinstall up to date packages]" + '--devel[used with -u updates all cvs/svn/git/hg/bzr packages]' ) case $words[2] in diff --git a/.zprezto/modules/completion/external/src/_yarn b/.zprezto/modules/completion/external/src/_yarn index a41262d..382f58a 100644 --- a/.zprezto/modules/completion/external/src/_yarn +++ b/.zprezto/modules/completion/external/src/_yarn @@ -37,14 +37,14 @@ _commands=( 'access' - 'cache' + 'autoclean:Clean and remove unnecessary files from package dependencies' + 'cache:List or clean every cached package' "check:Verify package dependencies agains yarn's lock file" - 'clean:Cleans and removes unnecessary files from package dependencies' 'config:Manages the yarn configuration files' 'generate-lock-entry:Generates a lock file entry' 'global:Install packages globally on your operating system' 'help:Show information about a command' - 'import' + 'import:Generate yarn.lock from an existing npm-installed node_modules folder' 'info:Show information about a package' 'init:Interactively creates or updates a package.json file' 'install:Install all the dependencies listed within package.json' @@ -53,16 +53,16 @@ _commands=( 'list:List installed packages' 'login:Store registry username and email' 'logout:Clear registry username and email' - 'outdated:Checks for outdated package dependencies' + 'outdated:Check for outdated package dependencies' 'owner:Manage package owners' - 'pack:Creates a compressed gzip archive of package dependencies' - 'publish:Publishes a package to the npm registry' - 'run:Runs a defined package script' + 'pack:Create a compressed gzip archive of package dependencies' + 'publish:Publish a package to the npm registry' + 'run:Run a defined package script' 'tag:Add, remove, or list tags on a package' 'team:Maintain team memberships' 'unlink:Unlink a previously created symlink for a package' - 'version:Updates the package version' - 'versions' + 'version:Update the package version' + 'versions:Display version information of currently installed Yarn, Node.js, and its dependencies' 'why:Show information about why a package is installed' ) @@ -76,13 +76,13 @@ _global_commands=( _yarn_commands_scripts() { local -a scripts - scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n')) + scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g')) _describe 'command or script' _commands -- _global_commands -- scripts } _yarn_scripts() { local -a scripts - scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n')) + scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g')) _describe 'script' scripts } diff --git a/.zprezto/modules/completion/external/src/_zcash-cli b/.zprezto/modules/completion/external/src/_zcash-cli index 6dfbe2d..70ffa40 100644 --- a/.zprezto/modules/completion/external/src/_zcash-cli +++ b/.zprezto/modules/completion/external/src/_zcash-cli @@ -38,25 +38,24 @@ # # ------------------------------------------------------------------------------ -_zcash-cli() { - local context state line curcontext="$curcontext" +local state line curcontext="$curcontext" ret=1 - _arguments -C \ - -?'[This help message]' \ - -conf='[Specify configuration file (default: zcash.conf)]:PATH:_files' \ - -datadir='[Specify data directory]:PATH:_directories' \ - -testnet'[Use the test network]' \ - -regtest'[Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.]' \ - -rpcconnect='[Send commands to node running on (default: 127.0.0.1)]:RPCCONNECT:_hosts' \ - -rpcport='[Connect to JSON-RPC on (default: 8232 or testnet: 18232)]: :_guard "[[\:digit\:]]#" "PORT"' \ - -rpcwait'[Wait for RPC server to start]' \ - -rpcuser='[Username for JSON-RPC connections]:RPCUSER:()' \ - -rpcpassword='[Password for JSON-RPC connections]:RPCPASSWORD:()' \ - -rpcclienttimeout='[Timeout in seconds during HTTP requests, or 0 for no timeout. (default: 900)]: :_guard "[[\:digit\:]]#" "RPCCLIENTTIMEOUT"' \ - ':subcommand:->subcommand' && ret=0 +_arguments -C \ + '-?[display usage information]' \ + -conf='[specify configuration file]:file [zcash.conf]:_files' \ + -datadir='[specify data directory]:directory:_directories' \ + -testnet'[use the test network]' \ + -regtest'[enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.]' \ + -rpcconnect='[send commands to node running on specified ip]:rpcconnect [127.0.0.1]:_hosts' \ + -rpcport='[connect to JSON-RPC on specified port]: :_guard "[[\:digit\:]]#" "port [8232 or testnet\: 18232]"' \ + -rpcwait'[wait for RPC server to start]' \ + -rpcuser='[username for JSON-RPC connections]:rpcuser' \ + -rpcpassword='[password for JSON-RPC connections]:rpcpassword' \ + -rpcclienttimeout='[specify timeout during HTTP requests, or 0 for no timeout]: :_guard "[[\:digit\:]]#" "timeout (seconds) [900]"' \ + ':subcommand:->subcommand' && ret=0 - case $state in - subcommand) +case $state in + subcommand) subcommands=( 'getbestblockhash' 'getblock' @@ -167,13 +166,11 @@ _zcash-cli() { 'zcsamplejoinsplit' ) - _describe -t subcommands 'zcash-cli subcommands' subcommands && ret=0 - esac + _describe -t subcommands 'zcash-cli subcommand' subcommands && ret=0 + ;; +esac - return ret -} - -_zcash-cli "$@" +return ret # Local Variables: # mode: Shell-Script diff --git a/.zprezto/modules/completion/external/zsh-completions-howto.org b/.zprezto/modules/completion/external/zsh-completions-howto.org index d494a10..b996e44 100644 --- a/.zprezto/modules/completion/external/zsh-completions-howto.org +++ b/.zprezto/modules/completion/external/zsh-completions-howto.org @@ -6,7 +6,7 @@ with examples, so that you can learn how to write more advanced completion funct 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]]). +Please make any scripts that you create publicly 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 @@ -78,7 +78,7 @@ 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 | +| _describe | Used for creating simple completions consisting of 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 @@ -86,6 +86,7 @@ Examples of how to use these functions are given in the next section. | _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. | +| _sequence | Used as a wrapper around another completion function to complete a delimited list of matches generated by that other function. *** 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. | @@ -119,72 +120,76 @@ _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 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 +local -a subcmds +subcmds=('c:description for c command' 'd:description for d command') +_describe 'command' subcmds #+END_SRC -You can use several different lists separated by a double hyphen e.g. like this: +You can use several different lists separated by a double hyphen as follows but note that this mixes the matches under and single heading and is not intended to be used with different types of completion candidates: #+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 +local -a subcmds topics +subcmds=('c:description for c command' 'd:description for d command') +topics=('e:description for e help topic' 'f:description for f help topic') +_describe 'command' subcmds -- topics #+END_SRC +If two candidates have the same description, _describe collects them together on the same rowand ensures that descriptions are aligned in neatedly in columns. 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. +However, unlike _describe, instead of fixed matches further functions may be called to generate the completion candidates. Furthermore, _alternative allows a mix of different types of completion candidates to be mixed. -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). +As arguments it takes a list of specifications each in the form 'TAG:DESCRIPTION:ACTION' where TAG is a special tag that identifies the type of completion matches, +DESCRIPTION is used as a heading to describe the group of completion candidates collectively, 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' +_alternative 'arguments:custom arg:(a b c)' 'files:filename:_files' #+END_SRC -The first specification adds completion candidates a, b & c, and the second specification calls the _files function -for completing filepaths. +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' +_alternative \ + 'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))' \ + 'files:filename:_files' #+END_SRC -If we want to call _files with arguments we can put it in braces, like this: +If we want to pass arguments to _files they can simply be included, like this: #+BEGIN_SRC sh -_alternative 'args:custom args:((a\:"description a" b\:"description b" c\:"description c"))'\ - 'files:filenames:{_files -/}' +_alternative \ + 'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))'\ + 'files:filename:_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=))" +_alternative \ + "dirs:user directory:($userdirs)" \ + "pids:process ID:($(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. +evaluates 'ps -A o pid=' to get a list of pids to use as completion candidates. In practice, we would make used of the existing _pids function for this. 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}' +_alternative \ + "directories:user directory:($userdirs)" \ + 'options:comma-separated opt: _values -s , letter a b c' #+END_SRC -this will complete the items in $userdirs, aswell as a comma separated list containing a, b &/or c. +this will complete the items in $userdirs, as well as a comma separated list containing a, b &/or c. Note the use of the initial space before _values. This is needed because _values doesn't understand standard compadd options for descriptions. 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. +With a single call to the _arguments function you can create fairly sophisticated completion functions. It is intended to handle typical commands that take a variety of options along with some normal arguments. 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), +These specification strings specify 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: @@ -227,11 +232,11 @@ In this case paths to music files are completed stepwise descending down directo 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]]. +repeated options & arguments, options beginning with + instead 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. +the _regex_arguments function may be what you need. It typically works well where you have a series of keywords followed by a variable number of arguments. _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, @@ -251,7 +256,7 @@ For example: _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. +This specifies a command line matching either SEQ1, or SEQ2 followed by SEQ2a or SEQ2b. You are describing the form arguments to the command take in the form of a regular expression grammar. Each specification in a sequence must contain a / PATTERN/ part at the start followed by an optional ':TAG:DESCRIPTION:ACTION' part. @@ -266,7 +271,7 @@ except that it has an extra : at the start, and now all of the possible ACTION f Here is an example: #+BEGIN_SRC sh -_regex_arguments _hello /$'[^\0]##\0'/ \( /$'word1(a|b|c)\0'/ ':word:first word:(word1a word1b word1c)' '|'\ +_regex_arguments _cmd /$'[^\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 "$@" @@ -435,6 +440,6 @@ you can add another empty option (i.e. \:) to the ACTION like this ':TAG:DESCRIP 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, +[[https://wikimatze.de/writing-zsh-completion-for-padrino/][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/init.zsh b/.zprezto/modules/completion/init.zsh index 48202f3..07acf13 100644 --- a/.zprezto/modules/completion/init.zsh +++ b/.zprezto/modules/completion/init.zsh @@ -99,7 +99,7 @@ zstyle ':completion:*:history-words' remove-all-dups yes zstyle ':completion:*:history-words' list false zstyle ':completion:*:history-words' menu yes -# Environmental Variables +# Environment Variables zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-} # Populate hostname completion. But allow ignoring custom entries from static diff --git a/.zprezto/modules/editor/README.md b/.zprezto/modules/editor/README.md index c27e864..d5280c4 100644 --- a/.zprezto/modules/editor/README.md +++ b/.zprezto/modules/editor/README.md @@ -1,7 +1,17 @@ Editor ====== -Sets key bindings. +Sets editor specific key bindings options and variables. + +Options +------- + + - `BEEP` beep on error in line editor. + +Variables +--------- + + - `WORDCHARS` treat a given set of characters as part of a word. Settings -------- diff --git a/.zprezto/modules/environment/README.md b/.zprezto/modules/environment/README.md index b0d579b..15ee959 100644 --- a/.zprezto/modules/environment/README.md +++ b/.zprezto/modules/environment/README.md @@ -5,9 +5,6 @@ Sets general shell options and defines environment variables. This module must be loaded first. -Environment Variables ---------------------- - Contributors ------------ @@ -15,6 +12,39 @@ This module **MUST NOT** rely on any command not built in Zsh. Non-interactive environment variables should be defined in [`zshenv`][1]. +Options +------- + +### General + + - `COMBINING_CHARS` combine zero-length punctuation characters (accents) with + the base character. + - `INTERACTIVE_COMMENTS` enable comments in interactive shell. + - `RC_QUOTES` allow 'Henry''s Garage' instead of 'Henry'\''s Garage'. + - `MAIL_WARNING` don't print a warning message if a mail file has been accessed. + +### Jobs + + - `LONG_LIST_JOBS` list jobs in the long format by default. + - `AUTO_RESUME` attempt to resume existing job before creating a new process. + - `NOTIFY` report status of background jobs immediately. + - `BG_NICE` don't run all background jobs at a lower priority. + - `HUP` don't kill jobs on shell exit. + - `CHECK_JOBS` don't report on jobs when shell exit. + +Variables +--------- + +### Termcap + + - `LESS_TERMCAP_mb` begins blinking. + - `LESS_TERMCAP_md` begins bold. + - `LESS_TERMCAP_me` ends mode. + - `LESS_TERMCAP_se` ends standout-mode. + - `LESS_TERMCAP_so` begins standout-mode. + - `LESS_TERMCAP_ue` ends underline. + - `LESS_TERMCAP_us` begins underline. + Authors ------- diff --git a/.zprezto/modules/environment/init.zsh b/.zprezto/modules/environment/init.zsh index 4f3bbfe..7ae8c4f 100644 --- a/.zprezto/modules/environment/init.zsh +++ b/.zprezto/modules/environment/init.zsh @@ -14,7 +14,7 @@ # paste had a regression. Additionally, 5.2 added bracketed-paste-url-magic # which is generally better than url-quote-magic so we load that when possible. autoload -Uz is-at-least -if [[ ${ZSH_VERSION} != 5.1.1 ]]; then +if [[ ${ZSH_VERSION} != 5.1.1 && ${TERM} != "dumb" ]]; then if is-at-least 5.2; then autoload -Uz bracketed-paste-url-magic zle -N bracketed-paste bracketed-paste-url-magic diff --git a/.zprezto/modules/git/functions/git-info b/.zprezto/modules/git/functions/git-info index a173c20..fe8ca2a 100644 --- a/.zprezto/modules/git/functions/git-info +++ b/.zprezto/modules/git/functions/git-info @@ -212,10 +212,17 @@ function git-info { # Format stashed. zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' - if [[ -n "$stashed_format" && -f "$(git-dir)/refs/stash" ]]; then - stashed="$(command git stash list 2> /dev/null | wc -l | awk '{print $1}')" - if [[ -n "$stashed" ]]; then - zformat -f stashed_formatted "$stashed_format" "S:$stashed" + if [[ -n "$stashed_format" ]]; then + commondir="" + if [[ -f "$(git-dir)/commondir" ]]; then + commondir="$(<$(git-dir)/commondir)" + [[ "$commondir" =~ ^/ ]] || commondir="$(git-dir)/$commondir" + fi + if [[ -f "$(git-dir)/refs/stash" || ( -n "$commondir" && -f "$commondir/refs/stash" ) ]]; then + stashed="$(command 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 fi diff --git a/.zprezto/modules/history-substring-search/external/README.md b/.zprezto/modules/history-substring-search/external/README.md index e9642ba..c9dbad6 100644 --- a/.zprezto/modules/history-substring-search/external/README.md +++ b/.zprezto/modules/history-substring-search/external/README.md @@ -17,6 +17,27 @@ Requirements * [ZSH](http://zsh.sourceforge.net) 4.3 or newer +Install +------------------------------------------------------------------------------ + +Using the [Homebrew]( https://brew.sh ) package manager: + + brew install zsh-history-substring-search + echo 'source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh' >> ~/.zshrc + +Using [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh): + +1. Clone this repository in oh-my-zsh's plugins directory: + + git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search + +2. Activate the plugin in `~/.zshrc`: + + plugins=( [plugins...] history-substring-search) + +3. Source `~/.zshrc` to take changes into account: + + source ~/.zshrc Usage ------------------------------------------------------------------------------ @@ -35,24 +56,27 @@ Usage Users typically bind their UP and DOWN arrow keys to this script, thus: * Run `cat -v` in your favorite terminal emulator to observe key codes. +      (**NOTE:** In some cases, `cat -v` shows the wrong key codes. If the + key codes shown by `cat -v` don't work for you, press `` and + `` at your ZSH command line prompt for correct key codes.) * Press the UP arrow key and observe what is printed in your terminal. * Press the DOWN arrow key and observe what is printed in your terminal. * Press the Control and C keys simultaneously to terminate the `cat -v`. * Use your observations from the previous steps to create key bindings. For example, if you observed `^[[A` for UP and `^[[B` for DOWN, then: - bindkey '^[[A' history-substring-search-up - bindkey '^[[B' history-substring-search-down + bindkey '^[[A' history-substring-search-up + bindkey '^[[B' history-substring-search-down - You might also want to bind the Control-P/N keys for use in EMACS mode: + You might also want to bind the Control-P/N keys for use in EMACS mode: - bindkey -M emacs '^P' history-substring-search-up - bindkey -M emacs '^N' history-substring-search-down + bindkey -M emacs '^P' history-substring-search-up + bindkey -M emacs '^N' history-substring-search-down - You might also want to bind the `k` and `j` keys for use in VI mode: + You might also want to bind the `k` and `j` keys for use in VI mode: - bindkey -M vicmd 'k' history-substring-search-up - bindkey -M vicmd 'j' history-substring-search-down + 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: @@ -107,6 +131,11 @@ default values only after having loaded this script into your ZSH session. Flags" section in the zshexpn(1) man page to learn about the kinds of values you may assign to this variable. +* `HISTORY_SUBSTRING_SEARCH_FUZZY` is a global variable that defines + how the command history will be searched for your query. If set to a non-empty + value, causes this script to perform a fuzzy search by words, matching in + given order e.g. `ab c` will match `*ab*c*` + * `HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE` is a global variable that defines whether all search results returned are _unique_. If set to a non-empty value, then only unique search results are presented. This behaviour is off 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..93f894d --- /dev/null +++ b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.plugin.zsh @@ -0,0 +1,2 @@ +0=${(%):-%N} +source ${0:A:h}/zsh-history-substring-search.zsh 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 index 34c3df5..0edf85e 100644 --- a/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh +++ b/.zprezto/modules/history-substring-search/external/zsh-history-substring-search.zsh @@ -7,6 +7,7 @@ # Copyright (c) 2011 Sorin Ionescu # Copyright (c) 2011 Vincent Guerci # Copyright (c) 2016 Geza Lore +# Copyright (c) 2017 Bengt Brodersen # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -39,34 +40,30 @@ ############################################################################## #----------------------------------------------------------------------------- -# declare global variables -#----------------------------------------------------------------------------- - -typeset -g BUFFER MATCH MBEGIN MEND CURSOR -typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND -typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND -typeset -g HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS -typeset -g HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE -typeset -g _history_substring_search_refresh_display -typeset -g _history_substring_search_query_highlight -typeset -g _history_substring_search_result -typeset -g _history_substring_search_query -typeset -g -A _history_substring_search_raw_matches -typeset -g _history_substring_search_raw_match_index -typeset -g -A _history_substring_search_matches -typeset -g -A _history_substring_search_unique_filter -typeset -g _history_substring_search_match_index - -#----------------------------------------------------------------------------- -# configuration variables +# declare global configuration variables #----------------------------------------------------------------------------- typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold' typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold' typeset -g HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i' typeset -g HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE='' -typeset -g _history_substring_search_{refresh_display,query_highlight,result,query,match_index,raw_match_index} -typeset -ga _history_substring_search{,_raw}_matches +typeset -g HISTORY_SUBSTRING_SEARCH_FUZZY='' + +#----------------------------------------------------------------------------- +# declare internal global variables +#----------------------------------------------------------------------------- + +typeset -g BUFFER MATCH MBEGIN MEND CURSOR +typeset -g _history_substring_search_refresh_display +typeset -g _history_substring_search_query_highlight +typeset -g _history_substring_search_result +typeset -g _history_substring_search_query +typeset -g -a _history_substring_search_query_parts +typeset -g -a _history_substring_search_raw_matches +typeset -g -i _history_substring_search_raw_match_index +typeset -g -a _history_substring_search_matches +typeset -g -i _history_substring_search_match_index +typeset -g -A _history_substring_search_unique_filter #----------------------------------------------------------------------------- # the main ZLE widgets @@ -223,6 +220,7 @@ _history-substring-search-begin() { # speed things up a little. # _history_substring_search_query= + _history_substring_search_query_parts=() _history_substring_search_raw_matches=() else @@ -233,20 +231,31 @@ _history-substring-search-begin() { _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 "\\\)". + # compose search pattern # - local escaped_query=${BUFFER//(#m)[\][()|\\*?#<>~^]/\\$MATCH} + if [[ -n $HISTORY_SUBSTRING_SEARCH_FUZZY ]]; then + # + # `=` split string in arguments + # + _history_substring_search_query_parts=(${=_history_substring_search_query}) + else + _history_substring_search_query_parts=(${_history_substring_search_query}) + fi # - # Find all occurrences of the search query in the history file. + # Escape and join query parts with wildcard character '*' as seperator + # `(j:CHAR:)` join array to string with CHAR as seperator + # + local search_pattern="*${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*" + + # + # Find all occurrences of the search pattern in the history file. # # (k) returns the "keys" (history index numbers) instead of the values # (R) returns values in reverse older, so the index of the youngest # matching history entry is at the head of the list. # - _history_substring_search_raw_matches=(${(k)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)*${escaped_query}*]}) + _history_substring_search_raw_matches=(${(k)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)${search_pattern}]}) fi # @@ -265,8 +274,7 @@ _history-substring-search-begin() { # _history_substring_search_raw_match_index=0 _history_substring_search_matches=() - unset _history_substring_search_unique_filter - typeset -A -g _history_substring_search_unique_filter + _history_substring_search_unique_filter=() # # If $_history_substring_search_match_index is equal to @@ -309,16 +317,20 @@ _history-substring-search-end() { _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 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") + if [[ -n $_history_substring_search_query_highlight ]]; then + # highlight first matching query parts + local highlight_start_index=0 + local highlight_end_index=0 + for query_part in $_history_substring_search_query_parts; do + local escaped_query_part=${query_part//(#m)[\][()|\\*?#<>~^]/\\$MATCH} + # (i) get index of pattern + local query_part_match_index=${${BUFFER:$highlight_start_index}[(i)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)${escaped_query_part}]} + if [[ $query_part_match_index -le ${#BUFFER:$highlight_start_index} ]]; then + highlight_start_index=$(( $highlight_start_index + $query_part_match_index )) + highlight_end_index=$(( $highlight_start_index + ${#query_part} )) + region_highlight+=("$(($highlight_start_index - 1)) $(($highlight_end_index - 1)) $_history_substring_search_query_highlight") + fi + done fi # For debugging purposes: @@ -447,7 +459,7 @@ _history_substring_search_process_raw_matches() { # # Move on to the next raw entry and get its history index. # - (( _history_substring_search_raw_match_index++ )) + _history_substring_search_raw_match_index+=1 local index=${_history_substring_search_raw_matches[$_history_substring_search_raw_match_index]} # @@ -627,7 +639,7 @@ _history-substring-search-up-search() { # 1. Move index to point to the next match. # 2. Update display to indicate search found. # - (( _history_substring_search_match_index++ )) + _history_substring_search_match_index+=1 _history-substring-search-found else @@ -638,7 +650,7 @@ _history-substring-search-up-search() { # _history_substring_search_matches. # 2. Update display to indicate search not found. # - (( _history_substring_search_match_index++ )) + _history_substring_search_match_index+=1 _history-substring-search-not-found fi @@ -707,7 +719,7 @@ _history-substring-search-down-search() { # 1. Move index to point to the previous match. # 2. Update display to indicate search found. # - (( _history_substring_search_match_index-- )) + _history_substring_search_match_index+=-1 _history-substring-search-found else @@ -718,7 +730,7 @@ _history-substring-search-down-search() { # _history_substring_search_matches. # 2. Update display to indicate search not found. # - (( _history_substring_search_match_index-- )) + _history_substring_search_match_index+=-1 _history-substring-search-not-found fi diff --git a/.zprezto/modules/history/README.md b/.zprezto/modules/history/README.md index 3dc9a26..d020688 100644 --- a/.zprezto/modules/history/README.md +++ b/.zprezto/modules/history/README.md @@ -3,13 +3,6 @@ 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 ------- @@ -26,6 +19,13 @@ Options - `HIST_VERIFY` does not execute immediately upon history expansion. - `HIST_BEEP` beeps when accessing non-existent history. +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. + Aliases ------- diff --git a/.zprezto/modules/history/init.zsh b/.zprezto/modules/history/init.zsh index 31db4c5..db357b0 100644 --- a/.zprezto/modules/history/init.zsh +++ b/.zprezto/modules/history/init.zsh @@ -6,14 +6,6 @@ # 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 # @@ -31,6 +23,14 @@ setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history setopt HIST_VERIFY # Do not execute immediately upon history expansion. setopt HIST_BEEP # Beep when accessing non-existent history. +# +# 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. + # # Aliases # diff --git a/.zprezto/modules/homebrew/README.md b/.zprezto/modules/homebrew/README.md index 98a3444..2a37553 100644 --- a/.zprezto/modules/homebrew/README.md +++ b/.zprezto/modules/homebrew/README.md @@ -1,7 +1,16 @@ Homebrew ======== -Defines Homebrew aliases. +Defines Homebrew specific environment variables and aliases. + +Variables +--------- + +Execute the following to list the environment variables loaded in the shell: + +```sh +brew shellenv +``` Aliases ------- @@ -20,12 +29,9 @@ Aliases ### 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. - `casko` lists casks which have an update available. - - `casks` searches for a cask. - `caskx` uninstalls a cask. Authors diff --git a/.zprezto/modules/homebrew/init.zsh b/.zprezto/modules/homebrew/init.zsh index e517c0a..d078b7a 100644 --- a/.zprezto/modules/homebrew/init.zsh +++ b/.zprezto/modules/homebrew/init.zsh @@ -10,6 +10,16 @@ if [[ "$OSTYPE" != (darwin|linux)* ]]; then return 1 fi +# +# Variables +# + +# Load standard Homebrew shellenv into the shell session. +# `brew shellenv` is relatively new, guard for legacy Homebrew. +if (( $+commands[brew] )); then + eval "$(brew shellenv 2> /dev/null)" +fi + # # Aliases # @@ -21,15 +31,26 @@ alias brewi='brew install' alias brewl='brew list' alias brewo='brew outdated' alias brews='brew search' -alias brewu='brew update && brew upgrade' -alias brewx='brew remove' +alias brewu='brew upgrade' +alias brewx='brew uninstall' # Homebrew Cask alias cask='brew cask' -alias caskc='brew cask cleanup --outdated' -alias caskC='brew cask cleanup' +alias caskc='hb_deprecated brew cask cleanup' +alias caskC='hb_deprecated brew cask cleanup' alias caski='brew cask install' alias caskl='brew cask list' alias casko='brew cask outdated' -alias casks='brew cask search' +alias casks='hb_deprecated brew cask search' alias caskx='brew cask uninstall' + +function hb_deprecated { + local cmd="${argv[3]}" + local cmd_args=( ${(@)argv:4} ) + + printf "'brew cask %s' has been deprecated, " "${cmd}" + printf "using 'brew %s' instead\n" "${cmd}" + + cmd_args=( ${(@)argv:4} ) + command brew "${cmd}" ${(@)cmd_args} +} diff --git a/.zprezto/modules/prompt/external/agnoster/README.md b/.zprezto/modules/prompt/external/agnoster/README.md index a45667e..dd3cbb5 100644 --- a/.zprezto/modules/prompt/external/agnoster/README.md +++ b/.zprezto/modules/prompt/external/agnoster/README.md @@ -29,6 +29,53 @@ To test if your terminal and font support it, check that all the necessary chara ![Screenshot](https://gist.githubusercontent.com/agnoster/3712874/raw/screenshot.png) +## Customize your prompt view + +By default prompt has these segments: `prompt_status`, `prompt_context`, `prompt_virtualenv`, `prompt_dir`, `prompt_git`, `prompt_end` in that particular order. + +If you want to add, change the order or remove some segments of the prompt, you can use array environment variable named `AGNOSTER_PROMPT_SEGMENTS`. + +Examples: +- Show all segments of the prompt with indices: +``` +echo "${(F)AGNOSTER_PROMPT_SEGMENTS[@]}" | cat -n +``` +- Add the new segment of the prompt to the beginning: +``` +AGNOSTER_PROMPT_SEGMENTS=("prompt_git" "${AGNOSTER_PROMPT_SEGMENTS[@]}") +``` +- Add the new segment of the prompt to the end: +``` +AGNOSTER_PROMPT_SEGMENTS+="prompt_end" +``` +- Insert the new segment of the prompt = `PROMPT_SEGMENT_NAME` on the particular position = `PROMPT_SEGMENT_POSITION`: +``` +PROMPT_SEGMENT_POSITION=5 PROMPT_SEGMENT_NAME="prompt_end";\ +AGNOSTER_PROMPT_SEGMENTS=("${AGNOSTER_PROMPT_SEGMENTS[@]:0:$PROMPT_SEGMENT_POSITION-1}" "$PROMPT_SEGMENT_NAME" "${AGNOSTER_PROMPT_SEGMENTS[@]:$PROMPT_SEGMENT_POSITION-1}");\ +unset PROMPT_SEGMENT_POSITION PROMPT_SEGMENT_NAME +``` +- Swap segments 4th and 5th: +``` +SWAP_SEGMENTS=(4 5);\ +TMP_VAR="$AGNOSTER_PROMPT_SEGMENTS[$SWAP_SEGMENTS[1]]"; AGNOSTER_PROMPT_SEGMENTS[$SWAP_SEGMENTS[1]]="$AGNOSTER_PROMPT_SEGMENTS[$SWAP_SEGMENTS[2]]"; AGNOSTER_PROMPT_SEGMENTS[$SWAP_SEGMENTS[2]]="$TMP_VAR" +unset SWAP_SEGMENTS TMP_VAR +``` +- Remove the 5th segment: +``` +AGNOSTER_PROMPT_SEGMENTS[5]= +``` + +A small demo of the dummy custom prompt segment, which has been created with help of the built-in `prompt_segment()` function from Agnoster theme: +``` +# prompt_segment() - Takes two arguments, background and foreground. +# Both can be omitted, rendering default background/foreground. + +customize_agnoster() { + prompt_segment 'red' '' ' ⚙ ⚡⚡⚡ ⚙ ' +} +``` +![Customization demo](https://github.com/apodkutin/agnoster-zsh-theme/raw/customize-prompt/agnoster_customization.gif) + ## 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. diff --git a/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme b/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme index 4eceafd..d156340 100644 --- a/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme +++ b/.zprezto/modules/prompt/external/agnoster/agnoster.zsh-theme @@ -22,6 +22,17 @@ # jobs are running in this shell will all be displayed automatically when # appropriate. +### Segments of the prompt, default order declaration + +typeset -aHg AGNOSTER_PROMPT_SEGMENTS=( + prompt_status + prompt_context + prompt_virtualenv + prompt_dir + prompt_git + prompt_end +) + ### Segment drawing # A few utility functions to make it easy and re-usable to draw segmented prompts @@ -135,12 +146,9 @@ prompt_virtualenv() { prompt_agnoster_main() { RETVAL=$? CURRENT_BG='NONE' - prompt_status - prompt_context - prompt_virtualenv - prompt_dir - prompt_git - prompt_end + for prompt_segment in "${AGNOSTER_PROMPT_SEGMENTS[@]}"; do + [[ -n $prompt_segment ]] && $prompt_segment + done } prompt_agnoster_precmd() { diff --git a/.zprezto/modules/prompt/external/agnoster/agnoster_customization.gif b/.zprezto/modules/prompt/external/agnoster/agnoster_customization.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e472d3211cad132cf89ac202a850f87f1a7954d GIT binary patch literal 1758977 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%0DL9 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 z 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

-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

u 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

-9c;5H3);_|?XJr{&mC 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�)I1D=qHc|Fwoa`8|`Vl+3~oGxtKkNO~3g( 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�nrZ2<&w7JD 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%0D?6;5XHg*k>w!)l{Xoyv_0Eie5yg`_TT z8*uoXriMM|?cRQoAT6Z2+2ndRrjl%Rkh$51D34mv9mf5Il+7x-BQ{Ph<&W{XeE(IJ z=0}dIe$f|kX~(R-)fJ~Vsd@>!D`&rHHIUvc6MQ1>MLo1n8}|1ggf;%Dq=c!v1wSY% z6Qt!aoZrj9&MDKCSUD}tU{@v6ma;*cIjh1-_r2!DmCXyGqLYtJXGm@gX58Gywn~o! z@x`ZJF7JzQhJ$Ne>&^&~xAFIi8g17>{^KA2-6|}FV?WLWI zd#zqPELCTscU@x8$&w0n33vdA>-UiOD?6D-rL1u2?*=l0pFJq+>g;Tx%dwUG0U2~N zSP*IRUsb3fMVH+`aL+ls>#ceDmHWvTe7d?sJg^!iN7)|#?wPjp$P~icN%$+U_T0Pt z^4_-_4_fu@i&nU%peLXd;6>a=RV(w_(S`L}o8N9yJ z!p$-NliVTIm@ZZ1Q0d`K!IkqyIwwc-9*EAARu(B5vd3)5O5WT$5Uv6ORX>s-TKL#o z_D7p^tiLxrc8?A4+l;{!`YD$H`-2Q9Pi|EO(c{)o*44RRsNNsRz~Prp5S?0#v*C}n zywh<}>wZW7FSs+}UpX!2;*V#KUnOj|i&OxFFv@esI(5JjwPCF)Z@Ml+eYhoa^9cPV z;0?P90ps^Sycz_E-(36baq!r#E1HP+&KrMyJQ%HVSmBW6kk+fUZ@R2+3J`ABnp(=- zMAB1u`(Q@X^f>-#?;CCMd%LY9CB-DY0qvy()a}h@@M$*t-U6vvcRa%J;$4D=24gBl z=cq1wW=_3xc>TYJzprLyOhAFhmgr4ug@io+oAd6g|9h0D07$oKpNh4Mvib#;2c%RD z%rz_~Zt+gQUl6qflFAsNz?EiWGH9C^EM&nk&@z|Krx=it`dX>!avv?b9x z5ddD1jSjNzhVfFx=)W=rrGAmt4xnCdh>GbE=4JUoX(d2y^KD)nb zHOH%@7}lz~ySCr;v%#)^Iqy7+{%<>H3ZfQwF_rgo_`n&hQbq5H=ts8yqPCt*@7|d;5=)_y3=4Mmvr^qR}RA1TURXh){cY*LO8V|d3LdXo;&mVt%MqX{y zkkXek=?L5&Ed{*#n%P2uuCxyV)IMZ3MrbN9fJqWz{02b0 z!-)4S#UFvSuH=U>10GDXM*n24!IS=f`HTo_S*6c>~?GxgMDT~gl*U@X_9?HzBzUI>^NSp7@(}hwni=aGq=BLtH zZzUdBAyYit$Rm>Id+ZtfIcz$f(E=8u8qB@-TJ^g zpHkyWg%hal*ZbEN>?6Kx?+Y_1y|-j$wY=++B~=2q^U97LRKWY(`%yr#>DRL+Yi)~J zZ*WKJz}K3jRiz@ROo)1BJ4FTW zbF_uL3^D<0`SyM}jiukrX3BWAn}n`v3;~{3|H+NiDVZU*S}dkeV5QWrYdUkiMD^`5 zy}$R!tLAJ?P3q>7Dc$HjmQjlY%Xijn5Jh~1SiUKrc0O>Dt)HW75kJdFSEQ7T>KjhM z9r)|%kNV>iZQh7JrBd-)ePrRZxKa-vQ4i6 zvN~@Q?v4DiY{pv==xrxoD59*HjA&fK;uv|JLcu}RgXJ_*xTO1*lu6$?fTk`tMt;Dh zJg&*~0_e+ry59&>-@;msiG4sq} zg$vj`>x)RQA{&a$sqQ}YvIvdV7V<=na&I0*k3xY?s|&gE?Enzfr))~Wt_DSHC!AOB z?pww)wy$SQYh+*mn)9layzm=&764`ea+5b@s>OIpHZ#wj`8Ne1-+TZ^jVFtACX|4& zYVtkE?ARk)2p|su&E;plcdcz{{c`G4h{)D9*Z#|alvbq-D7m(QAxR2vJp!ki043WZ z-6)>GR_NLjyXg{AL=88EL2uL7*)TAVPhIbGQjWx98ALfK0ZYZZ&nTo10S_PO55w5lVZ++Yt$0{KT&4kgCd89$x4Lf%cIG|)`%Nm2CkCSSJ(n~p zP?=Z|W%qgaF!^Q)M@zZI`*HFaOF49*g3lI$FJub6?z^_&0hvFo?K8dVdtL)CX4Z*y z;niq>rr6QC8A4_&_amEcIsazJ`#y~A@TRN}q`abhb@mLBXQ-kTzZ$la$EtUhM$A30 z-np5&XCsj^{7}2KgwkK4PwF2DM~{&hhAKn)!daNJnX#eAr4EUVG~wUc8bC`&S; zy+1A~k-Ac97dowu|4weaXqm5!k?TjU#*yX6$u0!wq*j;SKkzdEzQjKWr;ZDOPg^X9fhUQ0HW@ydq6lIcB-vQe2z)+1E>Qi*Fg zQnu&=CRHofevgePoAe^nSWiMmt$K*nqT*E{ z)%~FD70CO2ewz0pw0iSibVq1bBv5J}8fofcE+VGI|EoG&sumP1NuZL8i*r#bc*?Fu0rNBzd zCCtRTr6rsv0fEo-JxeKN>`kvFk>`SpIGq%8+mA!l+IB=O#2IZkubi22bcO zqf8k0m~8fzR48oK5;!&@65F^Ie&ij2Ol8^g;D%)Al9TsaZ1G@Pm1>5wF8WKAzs~rT zy=l;Oo_xr7qh9PF{+r%-kiNHKTK<`LNg?NyZZrkVx%kc1ze~!mk`MWKFD+o12sFyb z_kQA}xhpjczoMVfdbQ<|bEyxEtVc_=6n~v-$pu2F5La=nGP~C6SFI`!XkH*YpKQoo z)JuA*AKp{g zk{WQX2Hg%+DjcWXHjslv+&IF=q*cd}!7_VYY{>QqOJV zHLqIy4B8WOdL`uXpJJ;hV&E{(;JGnn-wZrTj`FEPvF#ZdU3bDba(#&IwsX{NR+^WJ zqZ(4nuak?Jo@Cfiq}7g7R(UfBl5%Hpq?JjJmAB?L`AVs+lZ^+@v+hVhx{-OaVS1ba zg~{L z-rG+qYK7GoJ=NW}iQ@T(8s19(u;qeDdb(b1=ZU)QSl<8K`KZ{;Gq|;zf6DT~W6+-o ziU z!E~!`5LqV}#79=2lpIE?14WCvduBC)-HLY7`rT$=`)cHD;E5GPH-L>Sdv-Y0`Iv;Q z%H$3X@sz%f-FX`4^W)BwU__#`ublKRvzv|UZ@BSgPul)1sXzW0$G#-b%@O~d)&-2? z*$`I$U(3j9kI4q|;wg&WRs*{tsvOs3q{cbC4|U-*C2ITA7HXZ_3{9>7bjWa)Tx78k z&tC54+=*KUP%;x8O%G*8%n|l}^wc$nt52?0QOf`|@H#nt%_w1MVl9Ew$oh#+NcQ46 zUpU$mLU~SxMzZJ!Kayo&MK|CutO}&OBHNH3tJf&6B5`ZdPfCg86`^KPHRr{p&MS1K zC-N|~AzuxMs8ikUu8X1&|DIfOqZ^*XXid$g^-nAELWeRb9N8z;?MDGxTweY8x$An4 z*O^i>6F%iSHW_W{9uojpj+}x-ox2xs3~-d3b55k%lV2G{wo;&TCG zJk3bOKa>tdmyo|&I3a5@fk}Zud<3@t&vcmNo=!E)<}Z^ttpZvDz0??wbD;nY%F$V| z>Ni1017r;#sAs@~@l<`=M%Ob2K>wOR&J5c{wz915m&0gx2L&KOlt9HKq_;v$xs|7B zmH=nNm7NQS4FgbbK&GQ^;Mh~U%0bI;fKqt;EP}@M$la3iORGW;3J|vCXdq}`rDJ?W zEm{b6qp=eg^P+YVv%T>NUNwyz)yHU>Xd`aWuVQR$9BQ`M$o7wPjeur{a6ZEAz-al%_ zxaut%$nMf&pIjAdKa=xcVyEr_YHk4jBn2iXhlw7SR^e~mtAqkmCBtdDYLAS(57t_@ z*5~BuP8bIOd#=9506IUl650f}cC6#{dZMM=XI#x71NScsu1lec(Un3USn!-a|EW(& zF10kK>v7bs4Edg^RUR~#)?ayW-KY%aqhS2~W~L5Qd^c;G>O9*3O?%Ss?(#FG)QcFd zf+GQ@>``Sv;^Jh^p4b?mTRGyLEo2-=hwN0UNZ=i_fmlKTGJvmevYBwfy7YFB&Uli& zef@Q}|10gw*(^WK#ThvKe4DJ2hNOiOOYv-{4Kgu3r1SB z-d0ZEdCra-%e+x4WE2gW2Y*60;6I;T@9#CZ`H941;(a-aX=pWi-X&&0=w%}t;WcRP zkUZUuw-Zj#u8fX1HXXMbB0yjf!aARe9|_OX*BLF0nW-7wZDKHd#xe{^X~Cl?b78}W z^Vp@4)mkS`)LW>WWDEtE?vhKoLxX+dON8$g)Z=2y2gO|6z?Fe>7i>-nFr*EqTOqYT z6&SZZpoib=K@Gyvv;hvaRQuRZlbRy$Jo1tYq1zIYh8@LIoK8&q;1&5cR6oqxKjrK~&zJ zANIL=e23OSr_TZ76yTOZiGd$c{ud$g^m6Xu7qGmkKt}7Nk{;k|FtBv+&HC{c656nD zoJg@Xo7qFXrCw94?&ic80!r@qAXOduwj;u>+WW2VWskv&0SEjCIj>D_gy+O#e^H}imCi5UOr zl3fifmJtD?Fg0I{o_CVlvV{I_TO_LQWY&!`F~@R4sTnXro6Hvs-LL~uCTP4ub!3GMU1kR|r1gyt{A>SZ3Y^6)@> z`aXWW8}v~aV>u2g1+@4llWY6J6$fjiGe&b2jxi7%*(h59oYqrH_~3b_buGY66>vbv zw%uVsKmOGx`Wx0WKma@45NoNk5eh^)8TzmmyYP1M?^wmUPRI&oHX7!`UW95yB5vEqz)$SxCJYjhK@dz^6wf_NC49COR*6$p?T2NKB#~t{*@yD365=%aJQ_FD9P+5g zJ9j@ZkSiLcx#A}Z;K?VtD;S5!&t6LxC5Ra-=?m{r75P?Q)5gv`L--$M&uax|Ev0g` z`y>?xRZ+--PGL446uG67kHlb4F`9*h&|1^17~dx}JN&}|BR;fSd&rN};ocrqldAiQ z72lk}%bm9Cg>k=l#+FA4QtJnXQ?GlUhm8%|?zwyK zA@~&2DXpSS5ZU`19g=I#!HG={VTDc42R13o=-dsydqS+1sf|q-0swL^3ILS9ouxf) zWN-d*@^&>DQT5Eyf&Dl5h%I^$jy3IxBID5xw!jD|A@hhrFnKO;sQR|=CHj{4uvhfU zj2>q%s33@Pf7qO``mv0lMY_CAXoNrG4I@mRqB3r7be40(uU3Mkj5Te(-BnwX_OWwaAHbC|&L!o;t5Fadz06Ft|_dwOc54HbA9lb%%2zW=hLRBGOshz(52y5Q!(upkN~wUkDVg;eu>xoQ{3eLOh_F<<Aus4@sdi~u-2^A8YRLS? zi_ER^b^=waL%wv<3!khaX;yjak#!Nl7ku^10nra7+Y-cGi9G30eCc+T>m5y+F(LQU^pzZL0DVv1cAcDynXR?-T zlw#kILGT2?wSiNHVKSCgkgI2aowG~AJExT82RwMg?&am-lZ|50@2(NMjA z9KW-e#nzp%jeV@y%Gk#~_MNdLTN(Qj8nhrZV;FmlrN~l*5DH018cPgGqf`_%mP)0f zRomCk@6UVAz31NZoM*Yu=Xt+h@9&jm#xV?{_mSB7oa@=(!=4gT|B^imWinQW0-DN+ z>gR$SON8G^B-Asc>mf?)9mv+@(*Q*QH(8JreJ(t|EL1Y;(tL@xx}rF`+;G|1&Iw0> z9E^FFbo3lpA|6vGDz4La_F8$xmCz&?&x$Z&Mts>JfynHOPn2^OT%`c-;#duJLmGh(P`(0~G|V!uMQ!ij5p8Knc8B=leKn3-9b@s2CY4zIF*6O);8a?PZ)2-^O z^oq%MwSx=6GE}1(pQ=Uw>e&T+PX0xSt}0j;^m9Md=~hi|f5y#8%%yKo?ahlb`lqg7 zwaW4xpP);~3KzXfb}oHESid$Fzxds!=a)zZsvhJQ!@hO>{L2a3Tz7h20&`XL(p)az z>_w?Hkpt`1M;~9>EZaBtI4WMGUd9=tkd_EFxuj>J{Lrz%sGz~b0i#VJ8uG(d&Xet& z&UFx7H0u;=V>C2L$Ils;*+(>XDa%3g8yysqqx&(W0THkp>S{|+T5xsKEpjOl(|nKh zt~#%cwwInbH=vjx?0ojXg@#0p=49vQh;1pKpB6A4G`PPe)bFh3FQ3%QsitqB{X}I2 zYQSOVQ@&~HwjyOyYT`=b;!swys3%ZS(5k<6(NZDi;H-=?;Vin#1B*8R21M#gv3%@i zi3yLt#0K@@o$Q!L%9YM-0O;|uwG0-}e0!?x&igjgl6ZiOF#E};_@q{JI61OW?8j?` z6=Y>(jL2ve82nS^R&TleYrtodFM$#)k3TB)UgBJp#K^6Vu#$GP6&z2cooGEOme>{p zb$)cUofvzCI0`lV?d$og?a$Qpe^Sl8udy|uNDVK3Pb}rxuIK(w%>9!fihi9Rquh^a ztI$PvQqi?#qVk)#o*WF%#7zE6r)daWu1r8Q8WR#JvQw_BkR`5x?S2z2LS~um_ucQZ z9C{#2CB}~)|x66CO*A;}at-pOBCh>@rEWLry0*0FT`F%=>*9fcSJ zLZzW+jDe{rd8_-wF9~Ik46An%(<$2dhARYN;sj0UE$HYG5wlL$sy7mtx|DR!KIx>s z0ZnM(DgcpifMsK3*^RkdWG}1RLiM0W{sCvt0n^0G>*Y6H=n{Y0;=ljKI(P55PAb9v z2>|MB>DK#fp~bf8Z7eEi-!cTC;rD$~5Ub0@{R9v`3zV=rJ;4!j0V z+~;e`NnXf;D3N*xP55gm-5Fhe@<~`-o^0c0udwTQ#NzcD@#BUe~eN~)84gL2=bX;bub5=P%UuP>lkVdVb)5^0}a_CKS-)5`>nM=*o|<}BV0An`B4 z#$@VaJ#{sU2(W`%W6~q3xDc+rO5ESE+Y+9myL`+)uJU_2xNhZOaVI}tPyE=%ti0^> z+Y#>zUqpnz;xG>`f)RHuyC$@^ATpf?0{jre2B5W$VHYi|gWpKiw&5KgkvMC7t0s1@ zgQ#)Nh*%SNA-S!${rFrSsMwaXLJGGn`=Ur$Y|iqgJ{ayPW}t)vUd{3#&@=#mBT;mEeD z;Fcgz$P0iH@H0(#i5}cu12ii`l%^zFYbV{hYl1t35&b7Y>kN0_S73(`u#Lk!{~)rl zSLDVIm7O@uUa+bsP9&thPQprB#|(52hx1v-o^X5lI)1=lTjY?SnAlH#8}4k0S`Bka z*&QW70laQ>BSo#zw9e3_WT+^9*SE0qv_VWD6gVW|2~(%zgKI&bZ%~6_`KNAqPm+9o z-NcOe;!Wu2gIzGYFQ^Zp@N1glMd#U&%lG-a_M4UJ;J>=${toD<`Pw;==xxQwAc^e|nj)+%qXVeH?!QGD(Saqs>TuQikxR5`5>@XgyK2eC-bxxsA zN}X0-5?6p(enl10fRE{%)_ORKCI=(6dL{GgYytX@P{nolqcu_%_#rFo1iIcLSpiW4 zF;6zTE-|cP%Q3lPB5uFAqm2%Mug7CJ-QgViB5rxfs0H%kA7)oQTo{D0=ib~!duqQ> zj!MBi(0O*?+Q$7E4|6tz-7eu;}~y8`2NA63WnTj!TvTY z<;H&QHH+dcZpkDbIW2^$@cg7!3*M^+ZR_9gC!#yOv%(MWli&Q(MkPccV9t%Pmrd8K zq2c15z#mgcV(E@_{}v7n`v9IYk*0k-O_v}m4J7bvr&Q!Bxd`D+D75VPJ7pt)r|GWW z^{F1S=P2fLetppFKG-EtAJ0~#?bb)cJvwh(ss@GPSM{!M7rv5EIVNh$lGkMa)SkU1 zp9tB@16*k6V}Tfv5{L}<(!&-=O=|S#4_IODJI@eQ235_vwbTH6tUvUpd_9E9IrljY zB0+gveH7FGxhpMmrUIkcpw^_dAjuUM3!s{+Y`UU0#Q6!QR9M^L%b=wdL5f8ayaHTE zfkaBJ8xH5M`N`{_TWHvkK4aOT;4AMuk|Ixy-aVB!k$RrxXtJD+8TcgPC``hTyszb^E$|GxV9<96po> zQ)8Vukq+na6^jJ5xgRSz_|{HH>hBrVL(jj(%(Wi49=TK%@^DDjC5UWH9tI${FkVen zkM~;DM&nfdp}C4_tk=m8aP;MO0au-C-;pwzVpv<-n7d86ZoA+T3at` zJ)>Bf7D@tDuxWvsPn(*EI=J1Nhugm{pZ*CIrIMfm`kN&9J(qmLw=yg7dN+3u=ZVYM zjidd5Kl_9F%8ZG6Q@PZJ*I{V$HnWjFI0POpP--yz17JB1%K8Gs^}Zrg;ks{#;P*!NVlkt7 z^HJ%aLB}2+`1!Q_m@+5FLw+f7DXSd-tkW(H7zStl`TjGQ20Q#kW7oiE1y>gUD2I{! zmCGbki(Ni39!14N05%Swc>#DzJ%AYTtJ^bHs@C}lmAd2g#jlwCFW@(Zmr;FhQ|AJYwN=bqv3y!?yzAJ>6=FP-1Efgh6sEK zPSBQq87tZ>)nJBlexX?QUWCPr7IH44a&06sjy-xDL{d-yIKFN;8S=`fLg%5z#0El| z)z|P*ss3XxPyPINk_S^Z!HBpz3UBe3nl@%h@$Yhf%-~S%Frl%e36A zlki#Ol&kt2VdU~2A3UA$!2pm|X;Kk-^Non>>er1T5C%|6t zag@D$uUJtVN|W}f@pw?UE*@I&cHuND3-%qfWV4?tcc?-u`4gfY6TlNNx<;|JkSwn0L(CHY~ z`FrfVArU}adJ(31=$Er!=o-B3>w;i|BWMe-Pa6|av#y|#I(rY`?}2Y(C_7dxw{%xSbzW{vwXy=zvLn-TmMSk~fa@u%lhj$b_KWW6gm zOblax{q*I|9YJN^+c8#CW;-G!2iqSgrMlz^2)~mPZ>O0PrUcM_bu`pGM&*M4h$hte z<^k6PwP2~qTby5>EN1yhlig*28d?e9s{dn8$hrk{P||Y<}Ba zpjJ=-OrnO}M4&5a?mCUqcA=y$ANkKEJt zv?nFWL9zOy?+xtA>^uWSJ{%mqvfduq0SW#W0F4)iqqIoFXbRUK$9vL#KIUqKFZ=No zs93M+@nL~o2E&e6AB9i5((`C=+d(}VK z>DtfQE!SO5JEv99eafbUd2n#`CZ|Y_K;t9vAbVN>`13$IpBV-6?n#pw9e}6$@*tUu z*UkQ+Uj3SpfI_&R(cc8<-w^mA7<(8HZRh>6zym}wDH|pOd`FN*gtx62Z>0gjT)$zM zTo)5b1E7t5_tf1_fyejJOJi6!*7RfW66 zNf%Y!lHkD=G0oHo9XT4qDm_9g%J{w(I1KIi8$rnRpAJ(^zVIOZHN+3^x9@$azw++; zCw7cygaPf;kLginBH{Mpel*c}GMa=8;4*~2=_FW1+wL8}F6^d~(IA2j;PY9Q@3Fdn z)S^Q^QnPWLFp)}fjz_N4T!Z-WR;P?u?`EkdZNA6b{Qt!soRE5Y{nJQm{Kpv8-PS2# zjVTCY@`I7m^K9W>WzjCCOe0OO0Q{kl<`x(I$K?6&l^;DF`{Lscn!b4U^u(=xp^d|< z%Lw(B<>NxwUHSu!{}eFhw`eY|m|o|fdgbJuQRz8|X_efcHz)7@Dn6Uu(jdFpi8STS zo=NFs$Zc+(9Q}1@PX@6@4y+(rDDF>8V=2jRbG9w!t%Rv-t8!~>;@#Kv!X}MDuXi+~ zQtu!7FR5}O=#5@;>Vx>qua$+?qHlPq4>SJzdhyh#m@$X0)VTFE5jgbDB`WQ4?SIEw zG|k_=*<>n-0*ot_xA6>PIZ2%Wg6Gerh&_bj|T5_MZMwfZQfGDt4D0%^8p zwI`Lvkm1v|H{;UJ9NB=%P5=&zTkaA!D-cmBNH`Fqb&C?1D2LuKs>i-iF?X{%_M z27yo+K^(Qh0#eX?R@RY7Qlyk?%w@b+8d_>I=T$Qn8txe9F^ubA2HVyKJ~le841KjxgCZN_8XJ@L z(e+cKy3;m#i=)p2E#^hw&e6Y zb)B|#TeNj=XZ~7cx(nKQ&e__G*?#=WByZ9rD7*Y-OoxED#O6RyN=_h+&#%SKkH^P< zj4s3-5d3RL3A%Jk0LZv+B|B%O;e$M`woAIRI>yd9(8m`p(X+j{hKOB9*!$eQY=elQX7`n5 zhjT4FWbCep+QsvjiCpHDnkl!xcU|WY$(``MG@587M#G}tUXk0{F5NiDz3kfqGuN3lTc`^HST=AoPMEKg z;Xi2Sm%EoguN&R; zKYBBZ9M@O9*J|#R>`pCtlLm$IA+CGo`4Yk0OLJp&$81ATOiFZ?YGsc9 z_QR|Cwp$;Vf2KWRsbnuRkI#>X!g1NA9H-W4TOacS2^22*uZ8oVb0Q^&;CMYkA&(M5 zLN?k3w%dVrF2U-a(Z#;kjb}5w9}vuU`-SOH9G`wlkFy#gBYRgCg_Lmh)Nn;+%;%o& z8&2Eh1LpLd_B$BSl6$gvFy%?^v6N@W00)glBTC@E3kC}*jaj1jY5*OI@ebV&~ z(~6oMPC)Jsq6C0_GyX-3sI5!UR97vcuG~46J9cSqD6TWdw1qE$HT6}HOT{r&DKhUD87^i=rCJt$XGsKj^9ZRtV?L}HzEyxawhLnd`PJZ_i`<#?uXO^4PT9*yQE zeY8Jr?v;rK3lW$*5k+uJJQyw=iKXT*w*9pM%M6XR+oS3FSl09a$=PsO)-H{`6xFd={() zT2yXs^!H9lIZT=RN|D7-?4%nV;OVemS(2dI>oZkuFqk_`?-);Io2Q}%Rp$Ad;~0A~ zDXQCyh9?j!5>yeNrP<>C=b!Zg8bm@TT$c;o=Lhou*x^)oq!&~J&#>jJBy?sQaI>^n z@DR>i6pBe=@tJY5lt~N)am(FKJ@kDy#{=q%%e~(8FqZ8cLWJ#cq+@n?$^dXE;$BX- z+5H)m#FIPWuD%knVqPaJM+U>J#bo#nlaZrkOG`NjAJvG|6lC64+mra@IVvott#fr}Ou)eJKNO@jrK?u2Nw-Hf+k zvLq<+91MnonQtzfXFRZ^WNG$g1?bVVw?{M2!;HZhjp$eV@mY#3QOZQxe$r?~u}yQ6 zW9yS43yW|$Uyp`lM3f^`;RJKC*0N4C_b`fK;K*l4%(B@b@o9BtC*ha|op7($Fm)6n zJS9lo5gv*{*s-!gQV>y8J{K0$ax>6W(|q^$Sp0hl)< z`sI%e4#3O~(9Ikj&ACzLzV+jv91pf0kw)qwKhkvKrK!%ZML;9DgNR zdVBO6;^>w=R7h^2yp3}DKbw=jyXxUl3&Pv^@>ltCbH?oCB5M1+5|5F%&b;~B78qlO?BZnlv}FLOydxBE8Ez97lt^J(MbojI z{p3=+?y-A;(Y_M6xDewwJ`2T4>h43Kl^5( zxj4XTZY8!Q)@dC=z%e!VOKji4GZ#tsj;VDc5a<)^^6s42TmzZtp$eg^H zrHaZ4;2A59ZxOb$8|Q`+x2YbLe1VlYwk&8MiFp)-(BfqesVutxUG|{zc@VQNpUClu zMkxAnV^B!^ONhV@2k1P;4uF3R5{=XUoO&r&)IghaAaZu^^u#>kV8+~|Ffx+b;v3#> zs`xQCS^rpOVOl07KGU0-zK+anLE30Lf;C>zoQWgtAE&O^FEFj#-+q*x?$c>Z{1pGtY(q z*K7g@`gZ5&e_A+1ROPA~DQEJ#tOUNPGADmq>-4hIuOQ3!mM@C!F@-z7&;1SIcFHDW5Mxg*V(E${R$^ z4W=@P!mHy&ZwbB)_GfEght^x@u!*k72c47-D}H?5(YaWrl;x&$M(^tZ8#klpc@6g^dmY0j zWjXj8;|k9lv538oiK~UmQ7EM|xvO}QB5|+ztfJiZ?5%wL$I%TBi02*YuDbIS#`LKN zej=`-?RgDC^zRTSd84@=PLZZNb)?vkFX={cnHKYgtB6h`fsRs$-gW&z`%3Qb>rBrV z(1K#ZLD#6u7p_zt>0Y=}eRM>!xhDCMf3vezAF0eOY^%rn;Jq>LDHU!fOz7~$22@DD zZ%6r2fkr0j`D|SSCIRzj2_e8TL^O1LvNu$E~%Fr_^;{K6TnIA|I&Vjd;lE+9-wM39TzEu($ zoO-F=Yji|M8g)+faAM3l-8Q!Q(D-4@0nyYQeN^gx+46XUXNo3uN z9HE=_E{Ef*n{qd#8=FcCa=$0Sl(PmFOKgOXq?BG_{d|&3(H3wPal(TaG5Ojdj!DJ2 zlkg;aZS(!BMTT$wCLt6jQ(9bbDg$aW#EaP&L0uI8QkbDhcWLlFE9*lKh^yH*9uQvb zxOP0y|0cP9St}%km4(tOB4k+;P!xy#*JOTw_MX+ zj%ha44e$vYvpE`?^#%L+&aCn_l-14N@S3lY& zr_?8j1*qw70k9ckUeAql*KaX?3;U#z_g?5)NgUtoW1XE4rEPEMr zh0)Q`A{C~77HF$iV|6KEy4mSPC4yOF#it|#+2emoYA!%ou+(lv_#w%DDiecnP~I7p zSs{;MKH-bP1r@;oLas6S8(JhkEPOY^!_ZnsFzQ<<=taswMJePb5W`|ZSUIKqqBnoX zHAvp5ytnr}Q6O;oa^xZpQ8=U{D9`1=B~ex=(Qdj>T&v4$7RwVM&|w zN-fVJPB-fKPhMSdHZAaMv0GGRF}d*i0v+*GW$f9zNfUkno`TO>6wLC}pYF)OE^5rv zjEhSI2kJmTd)q@di3ar9YLv#HHon=&n(_NZfx^%qGQJ zyq!8qb!7-S@t|Ujb*OUP4m;O^s;BMiS-X`_s5p(pN2Ta@^m9bqX(WE@&a7_rY`zrd z7tcA{O?1(0xL2*x!Q1bjT+cFS50%xdeeWkiS?u!gN-Q*~o8_mllvwP%@%;su+pR5E z5B}~8@|jWClM#OJL>*R)GEu7Wxb=(2MrWJG{IV#er2&_X->KDjG9{MEV#uV?qO=NC z?i;0)>C6p6WrtE9J}4R%SXr1J{I-eEPN~oA%a`B$23nq477^ZZfyt~jztHJ36s|6= zNR|6~*SIJ|FexuSE+eq|^jEsk?A&7NFr;T4&HJr3D~NZ~8T7V|QPY2uC%ms! z65X-Kpm(__M5{siKF)sk(Dha1F$V4$Dreu2&MR0kOuBb_Y%g<5P{XT1>IKe$5EoLo z{X9zgAqqjiK2D0#hYe|&gl1f^DvpFJjVTImot$)m$+=Qsfrs*ZW>v?vZ$2mj{B-<} z#H~uN5+_VvZoT{u0jcivBJ?+i?tUxLRG9R04AaFGIivpjORT%K1{`bV)D@E59*WQ9 zr9kF{FVy?C*5~Y{kL=vwsSV*1J1_R$9MvLf(087mE(B5>=G5HAWCzmET$Vy#LIhV+TUeeS=v$q-$FnSC&ue?9rdpo9QG~KV21n zyI)1kQ%GKtY_Tmn&~bBE&|3+*8@_UuUUm3YLZ#2TssZn0Lnb?xcS{QKcki>>1bkV* z9g7FsoAZ0NJz6Bz-yJ?^n!y%6QJu(;JhMp>!didK2}dgsaJ1*+>xR8c&^ChF@X~|$ z?NKF*t%Bge>cb$^^kS06p?6b$8b^P5A0FCwt~vdU>F3n@$wT|fBr?{m?*5wbX!=qP z@M)>6{(g4*Kf>gNJK?2amCslI`*ExJ->2k@SODTK_b$e($#1#sEF9kV5L0_yxKc^t1WWc{P{_=;! z@030NvG@GO8)HH+hV?(t_ngfbj=P#=bg=*NdVU;Udk3zKvRU)X$TrBN!NVJ1)G#9xwt+L-C_#x>5JoI*Fl06ur74-54>P{J zY8ts}nzf2dr@@L=4U!rR3sx=Ohgm*tu(-Br`83Ref6bzx0XoOtqeerJNjfVl+W&>Z zec0L;0bw2u?ZdujYrSTl6z-6==8zTcSkUNbPlE}vVWMn)S1V)r!pG2@o zPFKT>GCj}ZR#d-)d;DJWfT~pWu*n*5wBTz`#RxBr*Iv32-Wn=sT$8t9laJGDFW(0J z5gM|G<_jeqNPB%SE5c8>Nr2VlSM}OoPGy(JD1cWv;Hv^;1IS%3=%a{3&zrmwXfPIF z-$OcR5XSKkcm)?O9vKnvCL%O4a(9&NYVv=< z`49jAXze0BfOdEo1VHTo5R?pxBs9!GiD(3II_pPsK_%xJ$F9rw3UPX|i=3{8iL-c{ z0vV_7#>p}@@2f$R-A(r^2w_u;E#nj!1Eb`XMdKUI4=<4z{IbqHEwc@dWg3U3dRiYh z3ng0DI^T@7;qz@Pr7D!$`W6M=Es%BTZC|)SdN3H{FVgYi*1kZt3NaKu0_Q`Cb53!G zt+6y%VUPmrp3U7oHs#-(J#DSW#P&_c?*>BUVaxQ6yqq>}lq4pbFoolFgx}4yc-utO zZGq#CfTGYsNeGYmLOOfIUhU+%V79+_KtZGJvf$IJ`wIOmK-({GxeXOfkVm{4qh_&@ zl9@SAU0~&k!OrT?>~MbLZc8X|j;|!phnaRks;?x6K?VKjzFKmoYuxg@VlZBA`rG8m zO$bF`5C5-jGT~lM2?*n~9&^B3?mKA>Upv0Ooa@~Bq$DPh6b@Qb%Tb}OkMdw71I^5D zYyna#^`)Jgi~?EEO*z>CcxN}JU{$(&i_E{@jmkpGYw^65FXBly0Ic!nu$6kFL(v{I zAB6_xpN6spWR(GLZ6|X82+`?%_okZA$|;cpDj{!Oz3_^Kn)j&T3Hs@5_abUR3 zO&o;8Z=^UzYS66j8nu&mq=W@S(VJWh2vC_M^B^vG93Qg9x)RqLe$eJdkox;dpmK)> zDx$ty=aFhpkP9`dE|P{TYe&Ans2vkO5*O7xTVij&aJ*-X6q`pZF7GsO^wgR3$A9CEm#5fPs}dm$H0JKEn{5( zm}&Kaq749&hRww>fISSI-Rva69ZREa>hbfEf@kd3oCex-_1C)8n%lojLE~@D8NuH{ zNov#KE}))#&WCaVQ7y_aT;ZE4M)0kbM!EJdeGS=u#Y5$fF$k&xw7{g@ZDiV zf32=e|0;ZxB%e-pu`WOz>$No(4A%sV0d9+tfJ%1@Nrb3y!y!az$7jJq)rX>gKU*T9 z&j~^O26H?uLs-xUNc&j^ocTr8O@(~mI$6t4wnVvVf7DUe7PU1;ZKuBik5T~mWRc#y z?SHIxKr5My1c+g#j$`cUag1Cei$FecQ2!k%MvrBk0Cj?rjIROI!QAeIi!AlrsO$fJ zV8!Sq5@9J2KxTh%&mk#8LH*ns;e~hQeOR=Km%ygt1u>X*JGtJLhG8~}06e(8UkM06 z@d9O1wf3SaED^Gx4b*cEt;I7g^ixt6s01RbB{ae)njS9xLL>rVulmv&+x3&E4g~Kc)rmV)R)FMWZr6 zXALQ>UPz*NELKJOK72-GJin2YBi@xwS}_E@g~ot)8u|T-p@q<<0{jmfZ!naG$g89Q z0O*a8U4aR;gjWb`jWy2s>4Xro&LZiweai?JI_L6HZha0(%8-*(b%UxAd*0?L5@Y4l zXj}Xt%S6(8?}9=^H2{igUZ(AUD#GymUmJ)wW{US1j;e>nKn_@w#I+Y1fvkmdUM(7y zXrjZ7PBgr>`XP=%L?6QwL{Ug#-FA8>{v7fbTquR`h}E}s28yxbLw9>cUA7e$zQ6}P zQK!x{#IqoMVbMt1O=Ct$J{-Si~g}pY7uUY$p;2FVc zC|iOKEA|*naTP><@askZeO(>U#B5PpB5Skn!6kJob)a!m)GiTU4@WcaSy!=|E#M~; zWZ~9YkOy?a0Y%f!XD4@0o6|AM*zUm#BtW`E)ANR6@3Dq|*dz$5M-=!?=fKA~nDFu= zc)?Io7-SR8+_4qi4Y0^#m?#!ng)g6({^R1&!G-OS(N|Tm%L{>!G_RWc?2q&p0IqIo z(YX-CM9wu*qX1y;>Lo1TX`?LJ4Ob&KUOZemnolkV?dy zkA%$H%d)LgKxI}s?#Y^xx-A<5lO!hC_4Yn3+XvSL2%o%_!@LX3te{-C8&zT5hl^SE zJ9e{PoZ}OJScazAGoa+|Kjbp&&y}@y6v6ES>eN`69*0&K8Y|%b;$1#(!dTLAkAUxH)&+~PY=IEBB9#@KC}mdX;$adX zTm{8!kGH{%G1ST$`Cj%45CsOH*V@xBqn9-S=rEJCtpMJG17qe%@#2l?_>U#OlH?yr zgD_xE>2@|v1PiHm8%x`NVZep}0M{q}Y(#tfv9eHiKA&EyaCDD~n#YR$Qw!zS&%{k_ zsdYcE!+;IB(_xkSJ~&hC;p_0N0@OMZdmTTdAf-l!3rCbr2&}!$`gQxeA=^RAD+Z!_ zbm~6lGDO%Fcpf&)Mzv3zlk)k4S0z9Y7q9(z{^BsJp5~|)D_wi;cbejH^nYi=R9Hhw zjnM9u_6-B<;!2=lu(n$A!ofNqyINL3d(#S@dADTw6v~Kwp0m^SP!WpLGFN)GgI;i> zNW4Ms{MbCZBdET^lHp>%m+459lBh{92mkIg{5&0zo7|HNUV952cQ_8Hf$!de4{m|? z`BJd6(vWqGz&y=ffhIt-X|xwjT0SnXc3P2`r6ppBJr8PcLZ4j;8bwH)!RX2l#|Ult zpotQa&lI*HcE%|TWfWF&f?CiKz)tP>9U)(Gp$0lz&0bx{asAX0eNIIJ&+ipxzR=6*5qR(NcjFOjB! z5nmm{^b`2R4KQI0`Z2#eW=dY3nrtUqTZWvYvlA@|Rmjlpf*jTX_Euu9Q^S$7^!)k! zi`)5i^O6z3@o=O>L^SrUXu;LKg7*1>&}C>7Q6k_ehQ=%CO)2cFEOb<`Ql$g1#2CF0 zRcVOhfM3ygN)g9Vj6i0%d-9*IDB|LZ9}$c9%;ronb%h;@pZ66n&KJ)@;Ku=hme<8= zerMjKoJrW?w;)6AW}W%8eP$DPRyR?l2!HlR%GvG8vtlLa!Md~mZJz~NBM(2t5$3^$ zZLv5Ui@%>G=&waWVP5V9VLS;!UL?$44vNp;b?OOIvW0$?;3Z2LYfwHXEMFfes9LJg zU#iubQ?y(HqeHspOZENB44sJDJN>vOLk!>XGK*hjq<%$=I@U%Ka~xCdc%j_6U(ybZ zb^8UL=_~g#KIh|q&Nua(pL%XXb1F=MUOYkbmpmV8eBO?pTRUs}Q7tUI|9srS`C6;I z1j&jd;|le9fSM1IXatphkmyj6`K#h>o z$S_}ImOv;k;Y|O9nuYT#C~UDVyors{A(YjoR<)#_8^j|39-@nj8BzqZ(11Lpsx`H` z?_F_c9o&>0qPXRUE;;`Yg<)4#kEhlo`_-Vk_}ssO4Nu_u)RH~3XSW?N>Xeh53$@RU zi$~VM3k20@d(5RBNz9Tu5g?%p@h~;KWG$%*g9je<*M2d+balNDV`U)biIk&5ozGQ( zbb%mJ(Kq8dxKz#*8aNA}r9&iYTEG)*e3ci!Jv9`$rCCk|vk%Dd4b;m>G)OR9AnBtjwp@83N*RWX1ng^GEfmmvVY+3_xK(`;0rp%6U%Lc3R9ni_p;%*es zi8@OI`6?ao0F3yP1*6Ls-hyO8n#Ah?->QayfhP4EGSWWK`-uf2^^lA9&bDC7AjDuuZ?_~R%v}@wSSA-!~)A#`yZXFs@E6IZN?7Cv# zK$XBYsadGCJs2E~(PB02&A$dea*ZDkjq_^{`k8dMN+ZD;%;PKTwSs2qT!V>tqhQxD zT@VsV63fO(QlVDQF|PtTRZn$GY(eEWI{`vBOd+{EA0v&=AZ1FrxC*PI$? z5fHrqTo8lcq}9L?G|*K&&=YuDL;-PX6VrYKllHz^bh#vu0G{IZU}jOhrv@{AU!Pfr z6(qJpLy!^!V81{wY>WTwCVWp98M+K3v0)YziTyjYw2a%}+qV(U6jWg6ZT^zR9^+jL z&>eoAA&%+Y8mBNQ06jUWaMwhKzXXuu!44)>w9&u{9wCSxIctJB{u?8z2hbuU(1MNp zE_X#2&mTY`bn>(R+{R!Doltt@@C#_zPddYZ#GV?X_#IefBp*?o1LXvXNh^an>$?}wJxFR+<9z~&lTE&D1le_WwAaa@D`uwm-~;MGs>*Z zAIs>l0oH9%9keX(26;kk?$qv*GwHJQgwJ^pt?(pA6C=QN_4 z^pe?*+7~-5^41;l?j5tYJS9G-VWkO+0~w2klP`*;yqkhBlXVP(kOJlR)5ttA2soDyN~!wGYh zke6SUUO~_e-pjb$53k_+OS7E#-Ussd-Rp{JcWkNrPzXGP4+S0IiGQlF4`AuwCA-+D zzOvr=Nie$_tH+v?$XuBtYUvqNtG!&QnZ)%2Sg{1GpJ%Bvi?{#c>TBHY`r_|k)po^{ zW@54C($5y{B43e)zyRn2w>9^d1u5~Rwi*}}%ClXLY{m9kKxUDQ?uuX+V0Q{Le@Z|G zBG3dp5x!yE$$K66@=eD)lt`Oc_$OgjhzawC33GZdq*zE<>NsV8US9)y*HCWPaL0E*ayP6<1qt zTzxq|1U~$@f!Sis7Ju5_pVc`dqezwRy!i3M-zzudu4XctUkY=Q{{!pZf0!!yEc`0F zpPu|vDAPu8^ZLdMft{4Gq0OkjpJYn1e?xGV%olrtzr--#BSY3y?|xZq!KE$(v18Ew zouExU3{>yo7ouerj@#e{(KaLZIK@6Ow*1z63p!H`B1Hr!Zr@x_moW*eZt~xK=hqZN zP>P;xuS?&vj(s){`GlSw4v_z`9&K$(gVj-x>6$-cPZPtuA5*Ph{zE^Kf{Xktf1Wr> z?CRt{9xOig$MfXQ&!eT;L7+fG-W!qOp>GLTdWzh0f$cMU_WFRU0IyMW_!V*(CQOU$ zn7)rJ**?4TYk~0ytjFCzVG@qc)m{4SHV+{`1R;3f+fN0f>%X`Cw%`SDxF@{tA!z9E zr#0|}XXU2iWLRkM`nC99hxeSG-$ESg{`=sx?8AqD|DRfOR(8qYU;WnKXO|B6?^ykN zd>vU&mrbMmVTE&i|K3YjzFeia`qk#MhtpQD;?vVd*UA)qb9Po4I}15S0SI1L z2H+Etv#lgATQh}ZM-&3@l2}pT(v(VYo65p!*k6sSIe4Zd%^3q^Z9*;hO#BS z-?&y82o%gyyx+QCG|!m&OR*ju!7B61dHS!s^}6B~=zHuv!OcqbC~D+_$lfEqIkAF@ z0%%%*Pd9&mqN!iUg5&=vy7zdd{yz@jXZMX^?ssi-oBJi?-ZsNrn`0%(oG|@BDscA&6;bsMDlzyHtQpU3;WFV9zffPNDzB=TeQ^#dPf z`;*gn*}cd9{Eg_riq{w4Oh_8X%^NWX0q5Ob;adY)~l`GQ%Vo5vR*WsMQH*`h_pL22YVct5E&h}a!xOeR(%?RH(RWT zKkK|R>7Z&r*;9uzb-J!zjg!GCfVRD@0~D@ymwJ~^;s0|GqE=a0%};TY|ghW zBE;hIL7P>*HU+>J8XKPvTL)(<0D@0LEkzvCT0%6|nS?Y*io)cm)4*k?QK!jwV)Lle zJ8!hPu4kP+-TQ#lRAN#E8tO#ND1(|BTZJ@&5)S~?8TsNhsn(nh#mQwY`Tf*lUY z3_cg@oF)!z2t)|O%8nCYfP7d~Cw>bci@kqg7SZq}*^*V6eY}&W%B^!i3piOfug#W-M#IKW{SId-0vWdS zT-aYhuuGy#KIeqb=1K3C5{II9@U7cxAxMDUsYxh!MWhU8XJwG4IShtBl$+E3x;f2x zAIBeHIl~F^ub|v|#6z`VI9KrQZT31ycdYgHvqQ?Wg^u~O=Y^5enGNJJ2!30xWQny3 zoPCn29cDljPfQ7yn(*}?? zX5SwYT__^S1RTycgVN{a?bq|2yFWSGuU(W><`)wQN|3qm;+ z0_ZLq0Oc*PtVE+^94lrEW3H6q{7Uhj{m?t+q(Nr)iJ}~*=nJ6&xc+ytRA2b z0%WY*H=Yuvrp!32XXF$%WIodnBg7^VM+Ka@A&ya+{;{iemTp(6a9I{POBTcSA4 z#X|tlLW(wdUmJFNx*Z?qoUI&#AK}`5!P|-`Z!+U@l~w?NoMs-*UWN|dLj;+fiuHF- zdvrdk@yLLxpZov|rwWo`(T0?*$@VV1a#_+yLB8Vf>HC~s89Wg#Ryn5vhsneZ&Vk+( z(E_xfwG%(A#e*f`?v)CFLx4!Us;sQSpDi-VNA8n?fS^CyIWF%sq5^UGGH&S43C~G8 zkq_zJ0Oe9&r!w+5*lyIbuj_9JC(6N7 zIi#2c-nkV8$+V93F^34cUb}w6vu81~sAC-t3{!&Vi=jQ+ClNsATn+M4;HGQQ3fnHw zd{lN>+q>S;-}+Qi7i(rhl}tomTEAfF5J%q?_qQs{g4b&J>0<9r+xYXpPdD1ud>q<5 zUTNRWHcVVaUq6ln%mw2-BaQ^8x1?;G`R@m_)|jB+GKlJW9_nwSwr<~+Px|)DA z%lzaUICcJRGC>{|Nq>8;qV&sRieYd?D<%XbIz+SgLURi-yTM1S(e*9j13 z#}Xd74JuG}mDO_a4kr804n3JoBi6X_bb>a~cP(!$Ye~EC0`bJ2JG8++guh#aEIQJb zjTYw!ugMOdf$PL2?N9vF$zo7A6@=iBAFx$jaN`>vF-w*MmEzH`S{q0hQPG``ab~aLGRsW;oNwUFs;U56 zJN{b2qcye`GUO18w>~e%eAQLioQ%FJ;%}&ey>aHdwH4Zkpv1LFO}KO>AI+(f=0u50 zSmN?--I8>E@TmNGh(^c~UsDFb1@JYigg3t^y?@E~FB6Jmy(xit%4y!kEVicejcnT{ z7d9l+L52BSd1f15J`)Q#LudLtD_W>UH8$BSh-Ov)**QRA8eoMM`fs(sq(KUwq7{W# zcO}TB!GUvj3j0#{DZ?6u)9it_eB~8F4w;&>e9dxS|E>-X?jl?ABTp*q|0e~#ae{3J z(5<(Cc5r|fPQRdH`IHU3_M;=yhOEjJX54yLPday0wRp_j9jaWZ8<_Tv{>m@5M3=dv z6-DHtv_@hpNTjf5-}Ak^902-oJ>4QMLyo$9KD(Pd6$N6@!#TFYoM&iFrdzGUm9-o0 zbRef5jy#a*&ts01fFm3dG93ULQ~bF=PGk58SL9!(cDIMr$zwYAwLAo!C_YG|* zA{XqVxACH?AeQJCa9~xYcAv8tH2)iuvke{i>Dr)L^`Mb_bIASIdhGVlytg#$yWjj8 zk?#OM80hvMO4D1+xS#cjI^r<)MU8fdu_@OX1u*X2hl5$#EyUIbT$0KlB>&N;uDh7wQ9%)C#v}fA5}E~sb5{a08DoTV4+380 z>7~`}q=!b{K>(uOkC;l;s>$pYy_ig1q-*#&5gzEScfW_Wf66ylY#U&3u(e9|2OhEX z1Jo)a8(6vD9Qel=NI)D}#y|kJ@E{U@>+`S;#-WFpkCL9}S+byKER+$6=m$);o>_Jd z8K}tQU1xRh@EShO^&FvDQA>Ds%cZuVNe;irw?d&)F7m*Es7OCYub`rwW7Dgr#i$>F z{KMiXE-L~c=SDiC(@5yhSJRGG{6qW@|LilXqv${*n|jy66i!G!(6p zfw>R`hl|;onT3z@FyD!gb2;PF*z3H11)jxATp({3-a(60FFoW+*Jrh%qWO5EwQrJ`+T$X&g*h;Og*B8GX!m}d(J8K5CMY1=%m_Nb_3wls(zs1SOC z0n1KDN8RPKFKsMZcV#2>- zj57l+ij1pYp)-^DI{N|AqJgruY#nlb&4E8OG`c4U^Y&)8g9o#1xrftds6TF~51!Ai zg3XL@*|a?K;@iz48F!qWdwJbTJSK(2PiOLrIC-l<@+F><^{3G#wq(T1t=n!kX+krx zs1;D#0OP2a_xn%n`6|#^ZJuJ1(AXa{n}I%Id~f0*e_P8ljv(fKU4cm?-^?0~@kH}U z{9IS?^8tQ7no-`u&Ue1v8M3hy-OR4YYqCJcqGQi6VjtUP@4Cd+(V92~Rj!@kM2Y80 zNPvzO@Nb?v!uH}x(k!>itBBD;-T8W_=d4#Sn)N!en2ZVw;@|f|?@rBUi$(u>h)Snb zffjcA+dSBGLc8+Ilcc++yJ0l32ao@1(8VEJUzae7e$oA^6o>fp2%}PUcJ;t(P=mGm zLljRd^u!-Di^2an8kogm4h(T8f=H`-twqGBQafkRorS*YfwsX9SzGf%eE5pTah2=& zd&l$WB>uzgXqI~3N(4Wc$>T&6c8vHI^Ru0BT>I(W;hzc;tqVM(vJJsuw$r-{K1q%q zXg6E_zh`DSnTw^F+zp>)RnDM!+L`~9F&^kQ8*O*-J~NA*(4+P9ba%87{Y^FVZDkb_ zfhf6-SI6QZb}Q)Kb0@z5JZ&+WYm4ceiO5|{1Y}SIb8EGbt&;Xuq%~W&b7`RRq45-& z7m3lU5BV=}OKDY7voOz&ETW~{E&=%t-T8HQql;vAK-9W+C$#>4#U|11E26xy>734H z$5wn>s#fl`W(-VkZZ&88R#8h8D+!{d1sR-A)@aeP8{!@Pz{fhX8xBKMh3apXZmCQM z-$(;J(w08FP91DUxj3Si^e5K`VfK7P8+=LeJayse>HIJx(CEx(Ab01D^M}*^y)FDu zBDPOjA)V*HskG+rEZhv)g#MsbeWPQyu^kUaQN$GvKdH#0efYR0{c8RR9QKL8-d1&) zUw#sv*YQ!VOceJ|>4kvmy-`y^oe`f_zbl1)nk*9E=cV1{i2|&fmURa|>5a*!u~4NR zxdwZ4zhfuA!zVcainxn!xFMamIUQi68)$C97v&&}(}{b>Ox~n+hgQep%6j*q7wRJQ zHNV)I?thgzv?>Pz=qS)(^A|@OmBo-R4sV{jYy;$kpu;~PO1ys&1IUl>M|XdD*9vmO ziR9J&K;}>{m2OS3#W@dTlUsxUfId{Hl$H_D^>xG9uY2rplk6IYu3cy7U+6EDwSc6< zmS4g*e~ZY)cJm7~yS?FOY_MAFHhbX@*WsKM!WPqhbwTP{g%=j!fxb~q&Q33`8N_o0_p{^L~zW8wnkGM`=u$;VyM+;=En`VoE3tYh#Ih@W?U z`bS~)8Q~dQk$sH;6z>n={3jm>VJC%yYAHpcd%G&S?;hTLsLgL@0}g}=cm1Xx`r01L z6=zn9A>8H1mUHogsfV8|SD)(2)0mz-JH|)sl9LXUsPaJw4yf6r*s$^Z{lmP?ll;Q+ zG)no;%Qt_VgaBZ5IDP2xxm|p@6>Iv?&uTmy=YDvK|D%-oQN)5*l2Wq4Y%>Np(e_rM zN@zfyda{!IGt;H~_vWDm+7|e6ArE3_i_j5lJA=Y%kuGpLG4&#de>V?1TmW(YXJBnN7~taofThJ+ z#!Gl|n)WG+X|dV4DyE_CQ3NkZsQQNVC6+CFP@wKXBb{PM#M;EoZ4PU{{dJYF5SdxEH7j!aGvF7KCd2rW5s&ROfJR4ci&p;wZ=z4Nzn(v_2r?Bi`N_F~CI zY=Md-8XKEt)Hm)uotLI<{uU&r`d-T{x&Qn~=hYqg8V-t06CH_Tt77Cu^J=s-*2D(^ zkoPo=FWu2`Q<&{^|D@qHzV2(*_rnl!oX*BvOCv_syj;KM^;@1%4Nf1QT}O=oKtaw( zp1sPy1G-{{iGhQ^d*Qe1_jZm&=N~y%2cn|h!R$;NjJ~uS%rknXXxXloc<^#FB>L*~ zZeO{)=*TU`!OYJz17Zi4r5rPFz8);a*#KCvhP>5onU@#!&tr*veyoqa(#1cA2sxH} zAOZT?TfdJ`G}d-^O&rF_(OiGE6-qp!;#zjD?}23~({4sfBa;xcw){Z#_!RG@(jus) z-S?}TiXcTgoct$4-@9rpIdc&2{Xn1g0&7Y#3+2gY`O31LQs6LM#VZ zNgMI+OU+vHKhS>?r)ifW^^z~2W-o9UKpY!DnxWEug`Ra(NRF;}cR=IsJG( zzM)UO^_K+@pM#1>M4P$d`W5$Kxun#D-p{G4;fqNO8oNj{=9+wL3!^u6e%=S_9>s_# zHhejChGO{BQLKsgcK{E;^4egx-e`;)-}SU}#)tMRq@7WYzaC|(OgG39R6BGpTc=J0 zB`i^WHhYvJby8X&kp#`nIa}8~9DkDPCcIhd(+9zGI`(cu?DqCD62EV7LvP>qOxO83 zI&w!C?J#xQ0u?c#c+Y=YUUlTF{qr2tx@*+5Kf)-8dsJ!`)g&;1=5IBg!O%bVB7;+| zZahc1^VzA@tVeNzDK`as1-O0DXUhRf{;-y`J#lF36JtPc%Fpjn3TYT%d%q+z)tzyb z@sK~Ce-inGoy@@gv!US^IsA~r;@Ij?!`>%9l{{WBHhl+fRe+luZ+?+Gi=@JV4nj<( znK)eQOE<4d5~%r3hjQ7NGan*NwTR_m87J-Vd@9y{G3HC?ieQbxg59vo3;URWQ}d@m zo$B)7F>f@3e(#bq*fy$Z8*|;;&6x&wP~x|JEn1^Rh+W^R#_D1 zkSYqOQG$g8X=~0~AxN>tjRo=wI{i4GultPSxo42GkIVk(OSzcXmo)cFf-(g-3VFCT zOe8ypmX4a%VhdH$mN~1NQzw~Hm-D_le#$=KG|Xj8p`!Zdjpw^bsnw^}23i0RswJfY zC(52+uk~ShmT&@iH=MJ@H)my#9duo=uwuk%_>Ci2vHAcb0mQczIJstl0#SF$(DnQL zGAwpQ_=EkqwKDUv`2h-PP?RapdF%#p4?=exfoQ9 z^UTR!<)vEFadh?ClNw^?rKmg$Z?a2-s7+e+^wb=!=@hOv27&In@mkiD?x!_wl6u^m zum0nmU~&)n%#Fk6wzd01|G9jr4e@Ey$zF5i;cF2DOZ*3?byP%6CbsiZeV+a^X71Cv zgBvUt-v)W=RQBviyIg$W!zLAN!y4#gb2$bWv~*q2v*%!YalIPg-?e4rp!BMumiR!s zE~IdLk9+Mo{yzf|(cIB1z15wi8wcHRC}&wWaL)ShBi$XJef~S~)hehLiSsU|y@6}; zpB+9Ku>FTY0?gr2am)pa=fcT7T;^84gOHzs&x&;!LB!>V;;p(1)c-nlrqcE_epgY+ zm^NFTuM@>Xuz=)pX{y%Ly#n3!U7VDuuJ7AhIoqg_8qdC8v7BzIG}xy6PVrQm-L=51 zALa=qM%~06$)Ae?U|h4O9ret&so5R@vDu7@BD@ukuEv-g%>SIpQD$m`LUkEttnh)=T| zSLsbmk39*eHoK#G4z_TM-U{+%k6>HA%j2Y+8xDuoTXXUofp>+=0AWoMiey?Mx+a^ zR7eLbby_g}uE)ydIzsK7qVp2>2A3WvFcm9rCY%oYSW0PEvw*(+Z|p>KhHlZ>g{V0Q z?)riCWZw-*&dZdCY#D5eNrs^jPM?bQtI&JBh7@+YdJCHm;+M$>&zfJS#z1QS%=b!E zl=&Njewe&@-esGC0%j$K9>)IV^E>?Z{Rg+c%SKywEk3fzQS;9-_+cFR z(CE(05=5hA`Iz_Om;AXM2&0qHm{RZ0yxRdrpOT5;CYJTMM4eEA9IA`5^P6gyOTrI7 z^}NZo(0kR6zgMxbo&f7%nfv2X&w$d|k5{O$dzHawR0U-pYP8GPsM3C}V6yP>j zqz|*R3FE%n{62$TgHOBRg$&3ViLI2Wck9Ec0?|D=OI@lKb2pi?3Wzn(2*5;Y<0zxj z@YPMity>UUjJ~$tJb7G!*s)A^X@X3zqJ@vs=)j-D(sDnkMisQ&VU_lIjYkO_2YhPO zg6F7#13UQ=o6_?K@oGRJde0-|E36za&4b~lfo_>khD4P=NBMmwl~f1^qfiPw`Oz{} z>ppT5in>Jmr41jmq8T=E{&c`~iBf}C=MNU5)u3eMdt`vYtBcYB7Maoyyr8c&4}kL& z2gtX30@0%)uTi|W@cx&O8nfy+U{Y7s|x|1TQSvBF0c*8C-QC zpIDHYHIH?u4fu3`Yz4!J4v2!~oKGDX#G>h+T@_MV49#C(@NB5;0ziFcd_~_2$~0Sw zjiY0g)Dtj3=3oLVHg$2H${eRequwb*X4*+JqpMT3IM{F_iX9D=g7n?ZMzJd5g#(x> zBSUkaON-@Hq58Ird8!zg4w0u#Md~+EH$nj<@Ny9X`p@^*!$b^z$^a^c&iEZJ^uMRTd-o(N zz@2RPEW}r>l-5GG2#NP4SHQc^9R#6(6bzV*@d%-{JThkVBH%ye8g9cLJZX;hU`9GO7 zRS&A6XaMuDZqsNs&jgOI;(yyGwQz?FM$7X@-};CFkvE-Vz?+SLZ;NJ$w54hx*%~)R z7d*}X`Qf7^P(xia0W9Abh~p{xJTG(F9)q&?0&zb(Hqdh3CjlHBCpYKOiXx=)-E;nG z;z;xYC1Wv244`Jl5V*Jhc)|^ZWt36f^C=+O9?m!?Q8NP9M@ZpO;`fU+5n{kNlyEfX zEtVz@=m5imc*2hngSKmdihX7c%`E@)t z{!TX;Qc!m+eVw7|Qc5}`U+RR#oHjNWz4 zS@)IJLWuBQfMbxA0u4ICo3Nxpnt-fyVHh~p=88DW{1BDO`^Oa?k^?XKG<@YSd~Xg7 zT@J;M4q>7|IDC`}S5FWf~3*!#zc zkD8l-q{*P)VA{ZWUjR~ot_Yq0e8BfrI14I+-MQ?yKN69#TdazMEW{3#JTr-MrZ3cQ zjY^>?zdgGNn@T0AdKLO%o>_Sp<`!W49y?58nn0LZl5bRnOyhl^tE!sART>MB=ba>3 zZ|@rlyGkW`i<{5%&HAAGf2y#bK&Qykf9rPw(P-;>nwf73@MA=}ArZ`mh?RQ5w{6yl z4bQ4%@m?#wgE_Q{Z{_5u%9#w+U-RBsG%-MaBZ+{sdI5!$#c$d))I)Ob^b3zjb@W&H zpXR)reNVq?(Ro%he-xN*dx{yLE#@ zE_*bd$Dj{CTWC>$1I^-9B2T5MSOw^-svA_Yv_IH!Dq>k{ap$PZxd)eL;fuxMzaRo5 zP;W-2XMLV7f1BuAXx{ew1J!+UEvs|g2~?x@wt9qxJd=zd0oxAJk2dcX11kFU8 z+3qF$(kd1xXn!F`sqSrEHQWnX@9}uQcS5?!UF|O8cHfj4*VF4G9sEwUvE)8} zivAiQ+aJ|&*~2&5vWs9kx1aL3)q550wXwrz@7D$`ZHd`>(xvtY>6V-OI()p&`n}xg zf7K!27ox9h%Q5}_s6LQ;%rr9diLV86f2YHy|2j6UIxvn5$zcziaP5B#CNoSsLv0+x zHXI1xQ}Q^v7Y`#g?&x>EeTGi%-&2znbJw++oE2XL)6sD}(kZyWt9qK9-%f8!8GiB80J}V^!_NfN4 zPj#F=!2Fhg`Hvd@F^JWkUb5lv$wR<#bAT12CiB(6!eK_zBX{|TWl>)s8&>zku!ZlY z)Joq>gEjGnPj`Vz&g?GM(M>!XfQ--*Qytd(u3YMqa*pX1+-!5KUzD0 zvQ0d63t0{h>N`Mr1vJaWPC7UPf8R>$29C+QUOaUD;$7aX8C!j*7*j>A2rGauUOmYJ zE)O*q(P&8bJsLq0j1nRDKORP@iH~Ktb;*OrMjp18xb>X)wO>iPOrofY+-{im^{iig zYN#N6Hx0mHpu(uzEhXvAf0Qj?pt3{XZIt`kgCj=$E?QysnD$EKWgF;HX8?4;^PGR{ z=>vfNC|f(cS9=tqUj+e}?t_hegJ;--@xLYK-A69|{>R}CIoxYQIG5rKyDP7!*UP5# z_UTQ#1HBMEtW@{6yWZE|=%aK)febE1>^`al-;f3adOaL7?mWA3^zLo<*)ER{_t<)! zl2+0ka*78)`{SkNWjyZn;Ka>&8_zH9Ub{d48S8_*80%a2yN`mtMH8%Y6PIE07RS8F zcPJw6WV|QrpNRxA?&ZZ>lFfGYxz=X}a3Zy1WF+-NED1HJ67&tt2A{YEd=9qAG2on-E8z(z8Fa~3cuT$Hj&c()+d zi@pD~XrFUwoOc22&3N8=#^Bik71I$n5k10~eIs*wov1M82K&P-gzu+ZO|RIn&-__S zY#fxMZL*afi(^CCYZ8k)i@H1P;-(s(3fGFHh{nyWJ0D%ISWVu1bw|YvG`;hTc%L*H zvaEVp1K7jF1i$oQ=tYzu=EP=;_4(qpduaQI+xFcb$lq?R(Yk_M9=M@t(YYTZi=Z5e zdN6Tjcv*vzc~UnumAEy6bGrQnZcvk z?lwunwRi&x#8168$L(C!f%lJFcRjv!?#O?l7x35JFQ?{&CV3s`KscZT?twnlJi5{L z<{@qpa#zIBiNJ53uGRTyaAP=hpz$AI+;<(YNFh~6S|>9qGFk0PHE06{9i~77A=jVz zFh&#s@rqb&gJP(dl?BZnNzXi`9jo0^Cd|e`GO2l{dWIW=UeUxU!CdY_Ll^)+=-d#R(P|CALX%umT)v)1dOjrM;3 zA{%XZ5y260eWy?J?CutPR6a!fWLv{cdPkF%`r`fU$S4R>nMfjWG|Xxh_*4Wn{IV)? zk|tDfeFZ@pM0W412};I^6~k;-?|l-gOd@3WbrBw-oQTk(sQEmz=IQzH^QHDRyDvj3 zg%l%glGbj^GG0|$(*u*oZ1;vxGsyW#HU=7zHQMa(6~|Y+nXbW~<{79OD<$iXXn-N; zqmeMq|?T-AHgB^0S!Wi>BrX9GkY7$U6bcG!1VFxxV?MYfKN`U&p@C!U(u9B)^6a z3?q4?EnDiH3lU_ogXiPR?IS89?dG-e{&~W9B!^*gcF3B~%P&_$%wMsNVrO5p24eRB z(;j>{HhuHR68qVzZFUVdD>?!Hz^Cr<#}7UK&i?xM4bn@v8z8+GnkrLywT@Y*iq8xx z+h4Q&@V$|)2rQ8P0K9<||F6{%P)DBd!umyL;zP+tM#g$!mKV5F3 z)(dQvKgbw2`_WQ}fB+>qP0IQy)FGFINpW_a7)S%0QeVPae#mOF|c}asvUv8CQzPn?rfdW}Z0-Hkl9p}u4a&oi+w%jkP zq#T6;b!p05NJeXmryO!qtANSr*BHu_r;dp9^Nb!4vbxW|9R&t1FA@%@L2>}qxCV9$ z_u#>dA-9yzS5PYOVsz`E9ldpcBZ$YRr;HGkB=TNbJk*I^bg~1U{hk%4;%JH1bnO;k znd$g8RXSSZi8^9g2nB2*s3n)1s-%mR>Ya<;cIM_r5E(a>GEd2QBG|H2rnPKHZywq_ zAaH^$s>I%?i1#$U7~x__sltHg61@w!Ps{*I)1Vy7 z2*Q$s`O?f>@fC^RHfSHp>lq>9lF5R-czNv<90ER;gP*~C5<}f(kvu+d1u^j^Ebf!r zd+@VKuZKm!IE7jOI#P&}?faV$rI%eAkE*;Ezl1+-ili`11U-P zu_LqO&~9~kF&en*HH5u*CRSl@)gAq7j2%WkN@uEepRMDNznDu%h!=HG6+G#X;_fM~ zQJEu@{ia$rEWl+}4SIb4RKh-s!#zbw1GUinT)l*kj0|(@H2X{C?Pk?YQNt0}K3B9J zolwjGfo-#&DQOp|b{pyd&mIhZ0t-T$PT}?G;2FsB>vbL=R0#wC=V3p&#V2^xDDb>l zG!9Lc-QIdiyygxJu`OjJg;)N?u`ZW`?79iZ14WdBZ3Lc<(InKb&fE0nOUtpcNl(4G zdS5H^pty@&nBlFB+ECc@;DimfEeE0zDpT85Rd<=+`__5YRPz44SP1{QK#~7?U@0Pu zhq7i}+nb;OYW9MthXdatY2-b?;!lL=zFd<{868`Y1XoM^Or1rZ={o$BI&aN>jQjjH zPb+HRi&JvZzfW}1Hm`^q36$a+sO7N33bW6*CDc1PZ|D4bB>c@lvApv#UDUf1F%a7o z{H_RxqyILq&$(N0NrjnDdhEIu6tR}+4D*J8bHs<_9{6XSi(=udi*;AHkzhaI9F4zs zIL(_8DDX~Ipj+GC&vi;wZvQid4=e#Ko@iub(?Eg6j%DHrUz|z`UV^Q0{p_mE30A6e zu|N6r<5tBwoWN?1N%&d(>1M^6m9x4KQ<|RKqRQ^LaN}k2iyNhx$8qa`nvYnvv`sbc zAiEcYslJ_=%ATHxvfu7@uIwk?X3|g(l>NJ*#y%YCVZ9Xn3tz4|l(Ti5h@#`+5)=BI zCJ~~%wD4y8gt!Q_<+T=85Os-^sV-l*wLAOew$`6P#PJKecfAS5q*30Skv*24S&)g(k~>$O^GCZh7M=dCX&4| z>(kaMelnbvx?~MqfY&Pe*O;Y42vHX;n4p|gNH|*ip&N?b2~LOELkbd>sl{r9*)0#rStZC!wrbru6!n_>c+%Uq)07CZtZ*$1-Ete7Gvl3qOM& z?eO}2eSVKd8o^qLZf|WtS0cFbVG*^E&2=z0fkj#@?V1q(cP~-4$xJ7Q0L=Ng_LCy} z(8X5?8lx4iz!%ocPkgRUUsRIa{6h2pZHBlzY4v&;n|Emj37$->TKkd_2;EK#Ed zqFV@P)~bD%nI8owiu)9)r4~$BToO6dpCYI$aNrkMq$CRk?YDWZYtFtNLny zG4eyp_BO6O#}G1|jUtV^@vU{P7^=F8A;S3bbf~M!1OX?zuP6Bfh^yn~${ku$&xR1n zO3j}MVfXt9$C>EN68!fB)VSUKm=?KCp}}nloGzPRx`T`BLjwR53TkiPi~l?fDOLv7 zvb{~Af3zg%{V(zMw4dp5k!5Duk2y+JbWFgnk|1j~l+!!=xL~p( zLKz5bbIp_;O0C1IODs$|sQZ(|olJrl*pS9FROa9yWI+}2Q|%-{4n*lpm}v!>nMn*S z0*~O?$QUsX3xV)(fZk^d#ymQmF!;t{+d0LxAnuEFGe%g&Y=NpJVPxI3O zCauN6RMFmiTF~cQ znP{UzV#qMEA5>?|?A-$oi*i@be~HB5-}pX?>U=;w)LXFZtTLaZfmS(=VN^iLeh`Ds zjE9^Ho+rXB_-Yms|AP+rpnbJ)CJ?SP4>tkPAoJHXE^1NmTWvl>iTZOXgP3Zoe1c5g zPlTQnSX5>lDX%m0Y~8T>E5j{{oC1C$eq3+i5KfpqK_CzN1|c-Qhq#%UG&#%sY~nD0 zOgXdf_q3Y1ds(2}COl63RgKzBs?9+Q?ZXrZqiVpox;b+W4Ua<#Pna`hP$X~yI%!5{ zM(W0SIe-W>=5vQ3Z2A@AnmQr!ZFz$v23RBh28cjw?0O}$!lZ}x5gTI#`zx zNlY{#V=NkfaGg_*Zr_H2!n@UgRMnJU6$G-1c_!J^;=$gQ+N28{1TAQnT`0_22v3s1 z6Sx|ye%ajycrVx32=x|XN<2|#IB}| zEO`llq<(RfC&H$15#^PxBOqa+$Z_QI3)1|1l{j^kFL3qwoi>*A?^4M0RafUj{^x65 z^VSi5QZy3k6w}-Xrvyyq-5n)Nu-hvT>LlY*?(s5_M`Yk_$*Dr zyt!rrIYbYtDJE}VGSkm-n&DKJ3)Fwwzmi&N5%@^_GbfG3bmDTSeQqe@5_P~Rk+hn$ zUeFM91bR|V1GmM7D!&tqD1;|(IcRR%ZIM2QkvoY$E>lbDA{2)2?1F_kcZI7RBD(hd zkyAo9n;eMkLrc^M4NP=7;A#UAn5-w94LiO+F7X01`AmTYLNbb-U-Pw9t3jkjt3?vP zkXHq0vC0fC=gnGRq}JEDk9*QbG}uavb0r|lXohL!0b!3SjdE` z0y#32Cwv2vd3YZ&wwnx;cAD?s7O{Yp1Ij=Hq>|_-8}LX-65|qZvmc_ zU~-5_DrZ6x!2-i>JoV(NHBrOdOXE^JYVw?Flmem1kSyd}kqt<~?YzjRNt_-9iKpDoT=MLD8uLk8f zI%ncj#nCTgR6d?lr5^E=tykb6dM_U?&cfrK5Sh%e#kZzwr^zU2-Eec4bMs|=Vnq^O zpiC5l_;s5e5?n%#-k-r&D#OpZ+LUlow6aaB)d{O<em2>*6`!*%n;$)$ty$-UDa>ePqfUhsk9lxWaYP1pSQ&(hu*3o_`wjSLNp z#8(KBRl)GTd*ISd#t<@8BvgDRR!n#6@)|b$GlTar+MWb#rhtwkI;wAgwAxBp7kr?VWLk|TIxKP(z-*Dn^`;51sKz&>6P zNM|sR?|#P2TL{UGEp^#?Oknv8{_F5kVI%(A4ZQ!)M(Y`K6-Ahyux2)A_q$Mmsr^7h(Dm*V78nX_2mdmt6tn0H|WXR zYnVkC_czq7J*&MN$Y&v*+enq>`(k_X!aLpH-ZoBZSd1$IDkkAu#e{Eubr-noGu&Emk9n#*i&s=Vr6t! zGwu-7V_>&lo6WOFX%FMf=0#n_Pz8O9;z7s4#(|-X_x9KEg^jMVrvmT)#w?Z|@7-=@ zq-7fZX9PtAwkgaOn@;!DB32Uum)sSYnwIMnu(!;hPE{AC4Wsy56mQu5eEj8?%6^_q zr|BUZ?jm!$Yk@#!-9SF&f{WkIN+?m&XwXc*p3(CcB^5Bc_-R7JYAGLGZ zJZ8K7XPP)Mi@AU23k=@v?;5W+crg0yMxAmn=DhFqKQ~yY|BDS1lZ@2wI~rab0(h zl`h+G;DZeq*gEUKF>%U=KG5*zM5)F1>3irH{^9e2KMY@fOXjn75k+nlf^AyN>#)mRW;@5 zte~-4iyP{S24o&P$23y2(c|XNZ%a>aY;u+g&)5U++|5?H@yCE)+1Fctu{ZDdB-QZw zqF_YX3HElWW?|(Xu0mO*+ns3emyaf1aMN9)#xu)m)^1vU?-nrv)aRt`5 z&@XA8OlcK4Rn{qI342a7IMR!wg|as$(&PYF&qLZqT}+i1|0C^9+@bvAzVCC+SJ z_V3SlQ8y5NSErHIiQ1{=!M_HMQq$V8Y)(hGVH<@6>~~C@rT6s}LIkPN=CT3^C3WQR z24gf|86;{m)6i7MEUFh zGj54hjNSsWQG&%Aj}0mMTC`H81T<1=1K|Odma*t1h-iOz;N&Y`r59FDB)8TwVU}jz z_J#V_N|{ed3@{!f3hqeZ<2r4=F-QvE`-f03aymN8@y+lTyff`ft=O-hz6h{VJ|p++ zemFVRWow-lG|k;lEu)hh+=x;MBs5)+l{v8+xyx@VmnfZUW2`4^H5pfoM~or$cJ#n zO2TD~vThp0ij)n31Ag=@zUqY}L=lVbGHI1M;s+wUZB+nT>RCoO?To*}-PqI6(%LI7aI``-0fzT;-Ep+ktX5)*EESL!_XKh6 zHnBiVqGlJ8b+srWGb1eUFqdPZ@}i3X(xg-rGS1Bj-Opi#E}ZU&+QnT zUC?EQnuD9ee3w1Y7Pjwt+95ph8P8E%=Ma^>ds)H7 zF%p6MGu7S7RHX z$wDaj6euah44Pd$ZmhN^}KT{{uGl+}nz0E&|etD_Ws zn)9$y?i#WJDeKu714R|mk1HYbVIn1#4IWj@%6gf+8$L&f-joF-7z3M9g2HGPXX38xoUOJP@8tCJ$cE}z_CC`YNVH}-Rv`2gY#Cw$$~ z0|yeWQ9N*GuhK)UCAA5G@gOzuxy_e7>|TmR2K}(wmMYnNkP`axx9GxcHyLJ=i4tvc z_s`Q_o;%z{I5z)m0$^?;Bz8A4w{*|8QJ}|nN~&z-^jv%owx`xCkb9AQb@Wtw?`;&| zy}q^j)I;2kgQTt|G1x5g%nw12)uB4&ichxNFj;gM*P9~@z)tUz`yKa5B~>v+;Z?$u zPgbSA?NYtUJEJp;rC44+ZF>n1x>M{S{ym?ocolNKVTCO95v;b{F{bE3_ErCaYu#!d zunFfx@(YSo9c@>EQ0H-J%Z-*kb=xj&V%*L|4e~$=?i?N%=?_M$N_j*{6N9-FNcdRXXZ8+ba4=LOcFL&a z_z_DkptS0(vyb!)GrfIp9v61?Kqp*Yv(-@5pYfbdfkBp^dQH49P%|P%MCY``hKZ?) zn*nIsoF5M{%O^Rpc8}S9@o1$8cDfqr6X~JNi6f*vyDexMcNbVbdRnm7lO?9XQi#V0 zZ-X#n!9V3p?Szd|4w-Eja8bHoU!_lNvg0X^+%=Y4Q8C65lO4#`+(L~lb`Z0ommhZb zcXp`kdouIqQ;M_YR#{e?%?)OP=$n2@uBgS;RCE?*NtFz}hH2T$i!TUVzti6uHWKg5%V6f~6_A$7yyn(aY+Weaza;(7f`LWbH0zYPN1 zzMrMWg%KUcckXb=)nEpeJ5XlQsW6-|ty<;`%UVwOgPs$5m2o=m5`?CY z6xCkZtM&Nfb%hc{5>lw>^zkaGI|ZAu;E#T@yM)Akm8EV)m+e2QaFUIQ8qi{4w%)=S zHs1D7HB#|nA8fqzi2Jclb@To^(YeatW!#0Y!nI0sVO8 z`BWFa1UWL`+~3ukYqsOzlIa{uFr3K(5&V&_Q04R=nmnJ}gxpEhh4hyp4l!M8?q*ZkJHUy6A)m8%%A6AY6 zM2bU#m!z53d5hkJt)e}_1oOfmn(+HslmUpYus>IvPypL1$cnK*pQ9fp?{7#vj6A2A zm$+>-IK%qFgvR+DjKnQoqFvLZL%~T_?v%KXdhMs=o|aL=V?1L&ZmI{9gUq1gdD3AH z#L(d6v$M(PW#fYx!J4zm2Qev^Y*OGcDOVyd{0I{5Y@}w!#5!wUSX55Dl9HOgb~dps zwO}^&JceyhEW;Q+c7ZCd!_vgJDFV#2v`L`N+Q-g){p`(IWj34Dye93vMruzz;ytRLq^0rzrAnS=dFfO8Ox_1I4EoOrjGVr{Ac#!OPMG{ z!!a4a{CR~UjRu5saM>_MuI3IoDE*!0l?3IcyFhH5GGm43HtN98w4XXCkEafP|1p1^gaJw7<0+3>gD9rPi<(jY~+X=nmCWzu4E=eUld) zz9Hty4za85T318dgCs?_B78u+Og7>D`jKrk_}+Zz`jr!pS4goGNH7w}ji=nbMISP| zdQ2=gQY%-#fhGpa0ytqY0(dkC4?K~rPrO*IdLsJe#y^HGe;8D)Y9F*ufkXr@5o5m!O} zQMf-S&4is!g~GT<(@BVL<|V&VD+v%gnter#YA?r!k+{dLso?1sWI59t08i^l-_1XB zH;K9Af`fVv@s@?0b&P@?)Sw0Z@P;mJf$&@|nQ?958GL3|FTPJ#`Nz!-{Y8rN4lN9v zd+V;;tJ=D$7;ze+P&Cyu!F@nSA>3geC$1?{H)NL-A=%uQ46wBErshexs;r}u!y9at zZNyE0%R6C%ABvp&OI+La6e11)94xj&9zS*(Lo5PV*p__wC9%*)S{^0k5EcSwax%9b zXTQw!er^THd7j>$nZcMu9p07U7FvEPtz0z#b~GD$BL+zM!904i` zRqI#aL_-fx7_N!t79f3lez!tQa-=y_&5xlsRH`$pqK7X?93)amP8D##1Hkde)a!-0 z)lRi9LTlxp6|(Ir)FI2T1Rb-8P<57$kz6hdeE6Y`GNt2j4q^Mct=p!FMYrVRXDcchE3(E!(Eq}^oV+_d>f)0Xrmi|VGW z15MjMH8F6_W^a(Dccqdcv1Go#d%RyPR8m-*XvMiQRA3i8BI+kFP0v zaku@ocYNdFx&c4{iNj$MLJl!(;I>UeBN&NW;1eF_wvdWY02g(7p!Ka3`UDLMh0qBW z=m@{I9mC>q1Mwk0&re=)0k}Jv=~lA>8*ury997~okNk}SW#fQTIEjKnBFp*m3jip4 zqnBBrd1auz_Kk(*ii$u;TIJkv>cG`T;5J9$!AS9G09c)9H{Egy#jxBWfA4YnJz9KL z&?i#y0QoM|iYOxVeIhTVKsdYmudDB?#yj0*;TkQVCA!?c#=9VlFfAbPwTbggd=vmg z^6rxi0IiAYV!ASf9QzV8Ukg4kro@j@bIHMx~@(9bSkwS2qX3*R# z*PJ_~22Jip;6y0tT^wG>xw9lBOj!_P(>Gu(<&W_aDusOM!A{*U#U)M)pCdsg-p^s& z1^o{p{rO@=58Uj~yLkvZDj{RTjoLgyA3FRcVV9M^if`8yD0^~d#tk5`3{Q4NioOQ2KQ#6J<_R%g-QQXo#NOh=B_A9%-e0_vJ3=jsLp@j%&IfK|12CYuKl!fu(cyg}` z+1!tGeBuG32z7X31i6f6;YNJJQ2oEjXdx=*ez#u3&^E*djJ$>ivUEg0qhE_<4!^rMd>=vq6mgx4cxSfw8&>~N0VLrv zCQE%`Yw)t-;@iG-2^5Ur?gBlugyyt~s{+Dj+N+xz$f9Mxg41ulABB!_TAjA8lOuqK zLkr_*B0AOreUO7XMjw$}?jBMQzzqbp2Iwc(QQ~@X?{%RXyyTd02w>sIc`vBp&=~JU zZsgm!p{bfTga?JU;qJX&1CNd^-aV=d!57|%6^Sh9qkC(*r3g}?{6S4T`UI~v0vJac zpu2QshQ>$Ff0~Z&5Em1F?W;&0=ZU|ey!O66h3eo})rb#oB?gAS)x9*+r~P0t;!ebM z=(}#`qVSoV|0}G)N4eqdZA)Z-ALy8%j}T6hxFPLy4vK#u^;SnN{WK&vIz{sjY0aC- z{M+9oE|sm<4f@Yv*{=}(sPkLLZxVp(8|UNpJw5L_Uw)&fv~Ira$@+ZNx%t|^^Hp!B z!Hx4=z4_MgPj`Hwwr%sgxASG;p5Z#sD;TyC~#~0we0n8-|LhXPNg#c(y>7hnqF&JuhT{P^ zeMt7$e(7V&RDDS9GNem|xl8TVyRt$Mtmv=9^pw8P^uL%+0)_Jqfd@e+8r=8IXBozk zC0n7j#DFSyA!JzB1u?g~@T|?})g4b$rl(;9w&EEBoWUd9SMU0-?sB3N^?&_HXyCv3 zk>U~mCWexzUrdGJME?7@HiNRS$a<Bg z>OFN1);%!Vx9ZnTgck1pftn&5WbKX+qZRpsxBen0vk7LMEKvZk{k-IyXW zvkg>pPJe-fWiJtqAyRX{-ofr5L>4RG@@_I|q zn4X4cmtjSpaBC_L*@)OQF=a`lcfGrvf#5~ifDE`#J)2cFl+RQ zKqFbm8w(7cvenJt^4W@#oS!5$AjODj@*;1(%2_RYoqzq*Rv}G`kIzOunL6I$Cjo^s_+*^DH))YA?Wy-kx^E z8(4a=;87qmf&NZMg~LVPNhZs|EHNxvk&fRYA0cDO+*~VvO}_0F0PNXe0P?YbWCRy%q14hMAhcXCh4U7?5YZ8^1IJ~* zQ`_R3iwHQiv?brf!6C#|!3WP*ym8g$hP8Z~;8Rw0P`381raxpbHsRECvJ!hOQWhAj z8qo&y+n`@`%5)usqj4x3hxa6tQhRUiIritP(n~KHvAp+(PNmL-+A=0bbC3P~VN+W8 zycFOs{s?<~L@FNFALL;Oq}{4t|NHy<`EBUFE9vVf2Y$K3Eb^;17nJGcqey*-vJ+f{ zhC>H-uP|PAkc+ZEY0=YlEP;YA!r0Gd`@sAVN~%TJJ-t>zVsuNT2_IaL!z1}Inkq{c z6emYL+W1qLOve{P>&Xr_8@AP?IJgv(#Cj7Zb(d3_8O7vshwe>#m(#oki=|t8yY=Fh z)BW(bWFI?-BrMAr!7jJtU-kBwwl80d$hf8O(c!WA*z%>A!CM=@_deeCbNMn$!b5G!^8viYjlWhhwT zx*pMaQTg(A``6lti`70KonEz%eXWZbs`mZf|LVcduk|eP8b7r2Xs7%)UW#i?fXu*X zkNLL-&c&KQjcS!w?%x`{rWMQ#23|jj`_{C{+g9sbEO$z5I)&?6EBQqZ01Ggsj_H1JlTs4r2f=rzV|?CsC!ip_tU>(4os z>V94N{t)@TF7_U70^G31$GGw0Wd^>nR^*Y?>D|zy|InZ$VqmYR=%7m zac&|ZGj}lXj?-b6gU=o*yrmr4WFJd$ztOmnhi7d%{i7e0d;YgT^l>S?)AyrG!;0mR z|Dda5eJH|ig#Okt$P9-d9OL4DdUXeFyOqxs6#Y z(MNJ;#dk7LdKG;2yUWC&FzdrtJ<0NdP8_?LJ~UL4WNS#7W5O$7e#{qp-j2BJ&pSxD ze53b!wx-O)bg>wLglL^Lq0vGJ}*K4(@6aHUp4q>TFry_ zc0YNCJ$k+{Kn zyHbhmYr>SmtRH9P?5{(X(kWU1&|KYB+!Xp_muj?8$4d_zm(!IMV~Cw7uQe8GeEkp2 zFqI0)27gY+dp?J zLDqVn2G8r}?KT6!UPF}!P4YIMjXzh-z(B6*@o+z!$7rWCp9P1Q@>SaeveCUy_Lw|9 zv28LZ#pEtRW@2@w#l!aXn*(1A`sygBv?pNr*`up$<4UwX6!hK*3H!(6flbcipVJzC zu=X8)zYzVkXB7oDFFww+6c*r;13!@V9FmdAJ&$WRug#E%{R-R0 zfr}4gvINp9G|Puw=Mce?UuhC(m_!EkFi2H*iF9}>ZHZfE84IHhyPuQ_-lX7VH@BI@ z0$hp9pjMFdzFk-c_b4qd%@bUd)AGp#1Y#E*VmCqR!P4-&gl+z;+-10nXm64UB_+n^ z8equ@i5pf>N*Ll511OGnNX$T8lmdNIY%{0T{sdh}utI}ugaZJC@}T2TQquH+U@yfb z8tK$1VPC@qiH>B)OvnoZ9CsknNhv4ucE_y|){2s(+>zjVq-dWwes9PAz%LQO{;A2M zE*o>9rua-bsA^@zS&SR7cfI?`O9}u`V5;65i8I$C+_|WI5}- z;=j!}RrZ|ky$*{2;UfUxUUMb{1o6sb>k_pNfeFF@-@$=o^EoMGAZ;0t;K?di%EFk= z8v{TkKX5HKLU|cRo4cYid@>CNNc)-WURTkCgvUiMG;7Z`dcMyZgJ;|1gZn>bMs&e) zkW54e?9xFHiXuVNpd}C(KMAT*%#}4E)d{fp1aVwaJ0K)lWBD9m84S+P3Ei^caBB7r z_OW_uT;{>6KdFGNnXDQ=RJZl&j)s8T4p4`7?mY$+UVsj@*|1_gF_W<|{+G4=&-s)p zX>$&QJLX{xKzV-5t@yqB*y_>~ju+kYHp9dyR>{GpF=RH*6#%C^K$(f$LiYI=kuhi@ zi?hty>>nPUDsMImecWs*v;|Y(a*wUCC1OA+%64a4;fE#!ob8D*I9||j*@pw#ucD36o^n0DAlj1@)i5%ie+@CE(E_Vl))e5@4Em2* zwPc4JSuffWFQ%x>DKg2dXno-dXBRvzb!$50{enu@@hg&ixwXP{{{nfN!F;)4NAQC2 zzKpW{rJFX^VilXks-hFsuccKf7?f8~3x*9mPTS<~Y6fF|G9T=t=d!|uI9q*Q zRC;r5yvcbvcVK0Ud!N`*h_Ug)7fkzW?ZJNNzLxFp*nJ0B@lBH`V^+xy+u|q>(88R2 zh>mqsqm>EZCKN14#2qY<&+E5aC~?zm+mT@IE{OwN_VSd};`E?=3?2D%hQe~P(O9qE zJH3gh;LQEd(R5+*#wfcmX$6!>FsxvU1v7kg8Swj7g(5u@ky4p_NaS5Ish@x=2#jNB zz>Wl)o%={e+>%@vT>HvS0Kz#5U@eEX!2!4ivq_`qn6bc;3Pbvgc|GcfwiL==xed2A zQ*2mirC8lg9B8a8YTh1c1QH{?sL<2fzUmD~o?xd2t8K$_Jc)s|6Sjn0J%HmORSQ}% z)FMPCF4~WKbgy-#ww;>ao!!Idhi-O7s zNJ>CW@G8QFwxRcvBoiXixiFoGCZ);tO+_K6Ux3$6Lj)S|r2i^yy<+>rsGA@28#gYy zk|V30`rqC|mBIq8V#8Zo-#{Z4BqhId5(c0w7f{5lMh9k~qBd^&>_D@C=0?!|G5VcQgIIyS&+Rl7Pj zDLCo$>`rP#4IUZviGdYeea{uqO_c-SPrZuUw3mdS3V$$W%+{Nb7dTEBbjuOcQl zJvNgr9y(qs841oDc|2%Szm@Umv#i##_T5O=0mXWg^gXUrxoEa3TSZ;DP|wohNq znZCSheFgXWu8sHI_}#}SB79>(OMt|wHV9)z?5990T(;z7zgSTs*V20y0Fne8wMfFR zAXeEm;{C9UrZC;*OeJr#i}Ikj=&cq(l_=@rZ!VLw4;v0@5%?+_f zumJRCP+?i(g^$a=ndBOx?9@G|_e|1rJZZ$|NrMe~K~}L+hsaZSDjiAq81Zx|BDqoL z>8tm_AX{AVnY__v=pZfqBcAv(PX^M4rUnU{7!vn?%NqqtEeB%#Ylwy%DV1xSQ5W?C zT=3~WB2QLU?JD$c+^Q8C4$y)8@OKo}GZ94QLr|BoOo#4HkVN48ZyHoP`pnN7fgXS& z=1@r)&oOLVfI!J*YaBuxcj;@=FRDb~dXgW$cvMAM1uJ-?-{vY=@?^stMN z1mJ-P!qa=i^$7`r_p3KZAZg$+z;7_VNR(v3Pgi%opo!m+-XNw+61~Tz>L#6}N`!BP zzW*3SFor)0pMJVW{7M`89PwJS1HO@R*DL^?G~PF!Vk~M??pKJ$Yo+5Hh7plBwM7qS zgT(!}o~jzWfhgcTXVqOW+i(iw-4eRbNePI%)3T!tIs*QLFG9<2DB*GR+p$lqok?dycz(|hQk;zT2P`9?kir*Vq;)E^?t~|l7^cO7!-IsQU?=oNo*AP{NJLA)n?sLVb z=!d)RD{afmfU}=mVzbD#Vq(M37kO`GBa;gkNj?g)Nlk7ML>$mLZ2@Ntc6&a^G zrZ7c==muPm<}}KUC?1kQuTx7M&+oHe~@ z;}tRHf`*5gjZf+KVsanAT{-d9#F}Kyp9GOi)UQo8DjKDA&2REmyNAFfPxlj#W+l}q z|CE5=lrm>Oyf-7T?n|>zT#vOT`K|db`)a<+|LQB{vO{WLx#=D5vPlD6Byw%Hp*3(H zZBoS!++RwfXh^t6ItdW;i8@ClTurcJznstjW(?zU)A?%OvZPc6pUT#!Rt<(h>JDjY^FztEl$*+tr|D)TGf|)KPJr*>s4nz24M6FdOX~bEb=2! zSs*}m@RD_(vPlEQVG#2_{Yd9r*02DKLt+Cl9c*jI99>E5S`jhPxxnP8(>2HGM?*P8 z)e%{*sR=tsH)dn40}=(?QY%!xAa6p=DB4-;TRK;KOLRhhBcRmm#FQl40~p}~o{LtR z(J$M5{CDXLsgu02RdE12y^7pz94Yh^+9?=2`J6QmNTjDE9Ni?HS5)kYyri3JIl6Yd zQxxMOvK9QB2A(2*9rs|ie@J>#P#?YVtoO-<9QOM5vgsgH)n5bKGSky z&i?HA1Jnb5q`b>-Vo`s89_*`-@s-6e!2Rt+$3`J)I-&SI)?yTAvVtKqr zS;L$J^yXwcB&fS99Ph=Q_K0-SY#pz;P~V2wReQDb49&&psSc)#?Q7HIn%dU*%yrAh zk|sBc&s|1OjRu}K?byDKFlI8)YR$~;CykBQ-ECzKHM`q?^jL9s)F^G<>8#%!^=z{7 z2qRJUpEvyHmIr$Evs`xAn(W@a=TOUwiz8i4=72iD_t2!+q2dSNMU=%%R&y>GUF@kvCzj?jb9IB1Qao@{`Sck zzi6J%;JzO({r+SZFbW&irMxaeczr^S3LcGG8~Y_lJm^EK0g#G5aK=yC|Dta&EQzVs zV|MW3{zXJl{AN#_G!UVsvf~%sZp)#od!qX;nFDKn>e6nII4P%g#h-ft76YbSUtQ3< z>m07$9()U}%WZ(vb9V<=NgQLV+D8ESsZP7 z<*5m~ZK1G_f;8-(J$mw_6 zWBXyFQD5dR!OX&?EaX8JDo9S_e$;VoI6bxB?()UVA1-@dcYer$)8l(+YqHV*oO-o` z;o|*K@s6Tf#Lkx!m+c<}lX9MJ{ZXhSJ8|q|dHI95Pxa=#$i>#}O`kqJL~lQ{yfrP# z`K2**>deejt5C6{DYq}y%EPi}=etliy#&^Js4oXKD=|ObGxb;dE0i7F>1B)-cC?=U#7^aInqJ^o9_IqwEAW0xW<|zZ4O6aO2lD`)%Kb zFP}#QQjo77?867j%mOTBfO45(`Ycn;MwKy6{RgFu~`^rf&m~M1`9;^wRv4BF) zloSch*3xs>?m&cfYd2CK9VEtD)^o@W#mt-Ss@!e8`fgkVvFi7{#boZgL-^tPxiX_b&rNiUWV15;JdE>X(jV^7x$ww)Y+P=SsMaDl+ zD!AqD|A-zI+U_#nik}DX(E)HCjVa9NF{$!K3tbr5%3*)PXUS+k4Lk zTf+$6XMYK}r_jLSdAP-14hU@e4xlu-G5;8635X{6iU~i}g);hnaM&IaS@Vo>paq6s z2pU1n@(c@Eh##+-6CB{5h4*mXjQtRy9Psv#6ed`c&Qh@HiprBryy-=9WSE?R^5`#y zv)Ko{7bsRC`lfT!SrVy6;=l`h%q{7guhA@B?v@Ug4M}tQ5pk=6L6)cOx!s%`cYrpA z@@*mCqD#`mK3tEPk(+>|JRoVtxwvTXSTw`5gPYHQ;%$^OFn||AS5h(@b)EGN19s4v z7-c$-4@7omyGR=ZSADFkKm}85cRh=~Mb~Rvr!l#OEuw9V4T#6GV(sC9>cF`{vn(hdJ|~Yt#@vef4t?G^Tfc>vTD6Bh|t?{ z7g%lA^VgQ$@aEc=nd)PQ&p9GsZNE@Di&(!74PghS{!q<*i19PH6SCJ??jmnKd8;0I{-V^@gLtaqbkC|(ymVSKXChPs2Ey)f4Iag6$_jA6cb?N6P-ebLA3(c?emZ94p z>wYcW`@S)%LdHEa6Z9uE&$=l2&Hq{%%tgezqYXNH8I*}59F*X;DjV))^7+sA4M*u9 zUQM=y|Kp`LGNH1q4*&O8O**ZPzH*|Z;|cM@-t*yK?vBJ`C_u-b341;$FJxg{{HXKxslqAt3U-c_p4Nm-D?%jWdjnXhDWGX9s| zu+J^-f9egdEYRbbef^gEDe#n^1LFG}oh5fyP?Sbpbx-vT`2JkU<>Sj}qTVn-{!3o3 zOPOJA-{4{MFZqIuGUIZ`q0qfw3PuOZOk4Yg!sEUaPTlcUhw7GtV_B1tG*}E z*j@XC<2e=|^RGaoUv7LWDc|P)Y@K^<{u$-(>c?$pd7`AOs5jhFVO3=JU%la&9K1HI zSmFcfG_8L)ySYl#8;01)t+;0vtd=MqN}xAW3E2f6*c+o2GlCD#TJzz6Hz&mPl+zX( zz<0CUy-)h3AM#0uaz(fb%8=9V9t0(px^!3Q7PvpFAdO&;LMh7O{rKvD5xD{01*59z z-SMHfHt3KXb`SLbXK#3tBAhaRx-x8%cqcBc@^9=bhfoJ#?m27aXQ-P26n&#QrrZB@ z>Db+0ED}#`gzrXwUwPqx(Jf-1Vd+Y`ViHUO_A{G4R$>3+THjqFoFdK z1}7l%b!b}RL~jP!^XFcz9%1a&jrtAiMJo{5TY^i8G3!d!Zg7f3* zVjtEprXIaJY(se}Rw$b)9=B|q9%QutFr}qvu1f^~#N^U5tjMI^yKlRhPmI6m#)@6k zLc||bN^k+0WexM$5hHoS{e4AnP^XJ8qmz&!lXjt7_nwd4c#CaJbry?+A*CDSa@GeE zwjhDB2*{}|TIWsGtCOxDS@D((F~t-eyE7s={3s*1jS~pN8>(vA0l?)M4BloERkYRr z>SYl-?bm^nj|#Y?Op6i(b6?v$q2B-Sj>^tAIXP5{WHE_YT4FdKJm5bwxJu#k&62C zrArO-OCO`#?Ylmm3wqxI9_vr74&;4px0rkyJlfr~B6W0D#)r8SCHLu>kG=1I2y&BM-@+tLc^sgu20xH^*O7fH;+^7{#KZNq>voqG zF0cQd-BVyWc=KGtpPbvi74h_E0PCZ=&Fzqwgs$<9Ki_g|v0IpkU(Y0f35hSF|FDVk zCsrkpREb5tfm6g@VzA7gTPzRa{x8oYegnYk?}SClS%q6#jm290AaVeQdBTt1^Qbuv_+Fb!6aU^-e)wb>gcdp zts+r868ZcPWE6vRo!$8Ed&03t(OMc8#Mx~0aH6dl#b?b_h8gNN3jKVgD%O@1A)9&dn)%d5$GaQ)#fkSeO}Jav}7#r7LVE39|Jo4QElds39S z{%3o)=m{?bBp7IC#&T6)bV?9%I7aV%O3oup)yyFR1?Wxyo~TB6u3{}b4fonX_D0Yh zUMRrZE5i;sfiWmW8~H1z0e&$@OqE62>;M7vw1DbpC&uByiveN-P2t{Jx|K@Ysm4G= zX0TX;55j<)&xdCxU(`Ag{K3ocNKP6c#6;ylUgZ~Of(@?=Lo`&5?Ys@~G@)#vWAMwP zZW@qb#6|2d%#xOhroz6NIo8P7WoQ~UFiBFQd+K_PU8Us@(VzlT-EwBgu7hbYO>iZv z4cpXYr?c!i@jzaLm=)=QWz*%o)<`36YMnnONu(QIH-hEviTadeXjg<#G0ilEU-CI& zX(I4zphnFnYW?vv`fd$odT!kZzbaaDbowE0e8<0|0(8BV(#z^PCE6LSL;M(xg0GV!ku%3G9uCu21qOq9J>NLo1;vK^tWz6D;Oz&k$dy| z;5YLNhe298FY_$yG6(~EK(SsqBAkopTK6)@`*BH$0^8$w{rQw)9xoW+!8?dRogB%8 zmWw`tebR>nC(|cK(YwFFbm^S=R1HIlwu%^VnsZ5EIEcd%liFhNL<>SrC|=QkU~+OC zGw!fq`c5=PZ5RVzzD#K0A(khC&qPaB z>e+LK^jHU_I884E71mW*q_PWrb*?BLhPl^MRt)z#UrN#N0(Qe}{Uulj&ML1TPlf5^}N9T=I-uPL`m9Hu`uPWJF zRTj!F-Fu7{Ks%x&uWEL;9gbrgP+xWtj)9UiS9+HF)4I! zK~1Dz&0v2`e_GAgpqi)VwIgFSBXPB(1+`=CwIlL1@?XvZ5lL^&>!#DlPj_E{i0Bg# z8cD_c+FkcxR}z_8FT`#?CP7hW-$LYI-mDG+P{3dFFK+noFMRrT z@HMaI3D-J(<8`6<-1Cb4>dr&$|H7vS%fG>ZUYz{7L!aIbZO~FMxu1ahZY+R{wAGs| zKq@asD1uM#k~j1An#_%sUZF1?&pD6@2Cc3G6fG7KXm6}O@bp1|Nl*n_GiTiQR=KQ! zs!RlDpWnrJV;Y}+79lOGs184QV!xHyZ+a3N>Nkb~k~`Y~q}~N(j@nJHoe4?na&KH1n52~20Q@J zyhnK{2DE(`fuj$x*mPw~pb8+L&54KOt|d?B2hX&)98>q;|t@Xu!$mEifgI8Uc8K2Xvk zoU5!TtD2|BW95g7&)2PQ`c%{W5?gRlezfXS-Mw$~pX&K2?FC+!^pS;zUiIpQ#=(E# zQ^CI>a>Vnc!jR(VrGuCz7<6+NN`kEZvzct6pkfxczDAuCPb@^S#xVM?T+Q zo2mZ%;PJz>k;vj0~hvb<*He+rRdUxv&+ z)_i$l`916ixDBmq9MCL&bamK4qt-Y|iRLX(cDC0&X}@9A%jA@F2NX}2TL^J4H;6R< zI;wDt$Hp87nc$fGbO8~!Zx5oJaiVV zRABykJkS!?2d;9l5GHE6{0pC&<6YH{>16mH zHf5T{4+2SsgVcl1Od?Pt?++u^}5A1rsKvOjJEx-{gh{zT~hL1 z>rRJLc*%dlr$LSbdqwbR+hD2Q|5J!O3<6_Dq7Yf+SoLp+9J$Rz>9s{rlsN!UF|p|= zxGV)S${7{escw0aDNBPyYs#`4<>e$xhc9n68@qljt_OkuNW)s4s(jum1!Dy7Bx9yD z6O@V41l>%Ed_Yo453d-^hcm(iNVdX+gi+H?+fNB1qir)qO)&&N$ANOHJd*dzLX7E& zXSw~HTe4q4z^&?@AwWN8s^%o`0%vUwCIkGC8`~1(v(36Xj3YEtLQ>)&Gv>)t?*ccu z&(P6z$4x5tidTC*cJgFrvK$V%dcQ$5dfp({A?vj>a5)7pU5?UA9O93l1Wpj|#mRsG zizldn3uRI@6u4J0PD$)p%EP#{T`B^=UwoI~MxG-Db3Cl)_y57(d%rcc=v%)tGo3mU zTBwH5d*~pb2{rVfGyydr9YjDtP;@195HJ)05iuarRf-}gYA7lyDkv&qAs`@jL{zNY zxY}N4mv^6Y?s@L>ocH<{?n>(!>VV~@8=1`Hgeh{Q51(v`OLBm}3R-BGl9-PQyqN@}2 zzA$QTc+G#j0Eo0P(fpUlKjBlxhl{8B#N)W>oy83Tn@fU=6*EOE1gEmX@1L zKUAuk!Q9Tt5c-nQCL#3*Z{l8+4v+X~@bnu?Qq8rGoUzS#xB|95v0GErnMH4bxY`Et<=^=XH2k!dquxkZ$hBG z|L0p3H%``@UVr8m)hSYgeh>Uq9nPIP zzGI_!14#ndLP?`60nAdF;N}S4srmC9P+k3O&;aF9XPjDLOlOMkXdLl7_25+C-eZpe7me|it+LXt$928MT zsh&@>`OZl{6k{O*SM1*O7^koM(LgqMbU-dc2a+8p3P+BAq%z@gPl`CPx+{bwZ7&4V zqwwgAsxij*9C0yCZa=o??jiZLme(R$b96&<2IO*Nyjal(iJsR}UZcX^>TUK?yfSxs ztidhu0S*Yq@&S|%k&_}2gR$v@FXobhX<<7Mqlh_syfFcElc_rwI{PW~-QISxY*$XG zbG+|hs}^>7V-+|{z*sZ8;^)Y3NZ~uZKX^Vtc+03rFDpWqb<2$P+QUI ze3e-r222n2mbhQQZWd@iiY8r%gUST@L#Bq%FeDuf-HOa;kH zh_w{>K{ay`%I?kSskv0Yoq^#utzis9fHVt=oRl)mVr|ET`l>==L#f*1X}Zg4WJ0=u zS-O#Lx=C`nSw;HnZR{)>IDa&KYzFQG070=#fCn!_XXLk2H2UDXxq?lgM>lW1lP^h` z11layA4p5F!2s?6;;Bz2iUin_{YyyO(DT45Mp}?Bk<8nbffuy1L4vRyTj#~GZQzl+ z;&rz$2grLe(o&oawiN8h#*ud0o2ff71pyUk=dcOX#)U^OyKL~%U)7d{QB2*{DWIbY z#o@9Lq-}4-DJ=~2q8Qc&Tpq@k8OF*}f&;eIJtdEn`-1TS)jczONxM;k&xQTLPN| zXCqSBe#kg@E?Z%{=hq=NWWMeTp=bdA*LIa9APlTUtouiS%bq%DB>ayliA~-=3S7(k zSY{XNcK7wawyS;@xRnVq%$Vz_=fOJ@FnodA`D?rCSAmP9AA2y~8IDYX<|F76dA{Qy zO)|$+Xz-(#zoGqMMq6VRYpl-XRSixbZ_U|c)%}tje zDy;8{gstdFfB`UNL;wostSOlz~_Rkq1 zgWSD^>kz0Qu_1S&5x9ZCPf5=AetI|WVd9emPx;)dOpATU*R|gOxMXSa%?lS+R)92< zekR~)IueiSk>aH2jd$_VA$#?yjE(Q@r!onlf3&NJS?bd{{FG!mSG~S*I#0W6etIwY zlKPW;qr2fx3VyV!3N1g(KiNk?Y0R)~e+XQfYST=y%a4?VZm%(0>ggRZyWcmoX|^oj zN4tuVr7>3#Toy5RAiTb5t}?po+1$a{OBzqB67EJk<)&mUpiYd)(h^^SaYv?8?mS$$Q~^Jfj5EY0Wqc2(r_Uj=S+YuEGVEp3;6 z6S$Etj&;xR1@4JCkQvd7($X&N1}NONA=SP7SuK+n+H8XQ^2?KB=T9GYAP!~~!B;^i z``z#->94wHB4 zhBy5}{uyMd==PKS0yrP#Gz`w?YcWPKgA+IKmz3mR3*49QvR;VTrl+oz+PdU0tXad% zbTEBoWQTymnBDF^TN77CPD#{aV&|&hPO-nGB;+E}h@jEP7p-Tlr?1!ugK;CD zU&aPe{&NC%bMv6koiM#EsEHkiYrP)s`a6O9=KGh0%X%wcm+oy_`L_J@*LKw#{x?vF z1E6XDkdj#Xr;>gMT*yd=Gl9?>qLx?i(lO6DKLqa4g+5U=7exV|#(v3;g-l&fMPQi- z=_C-tReq!-IYo`jbY-`xnjh_|zY5$saTGA!?I>1GK)U5@$#bqk14BF^ZGOATPT5AX z1F%;nJuwY2nl{AXFB-|b6??+2l})Tb>SG4+J}#H!3J8UPLU8H$hfgpK9>S4A%Ivh? z+f^Tgd<*$0iDNyv8QNNWO5Ckf+?nd9|^2Nx;-iNnDmy9#ipczAacRRbVOU&&0^^R6m; zI~<5@ym>yKTD?6vowAr~RxgpD7g;eN2ar9|CBTWW3Wqnoog?t!DxT3q3d6P9j7SHOf&4P$V2EuDK74_BYfC zVoo{hNZX z=zTKY5$x-GK{0DGf#3h5UFExP0RU>D@B^M3d_6XVM3yqV4>WRCKf(1GxA8#X)l<$5 zn!2WBTJ(XW*zzY$`}Z62mF(SHW~a&=TZZ89D0D4TbfpR(=OHX6+Iyxq=+aED=Y4b!^yb@*-m0?fJ43Tfmya#QQ$r;}}!A^zhLg7yLEk zaSc1sfL(!4XY!YSD=mk(JMp z>c#>&-6e|ca~=&Fg&QFruPx%7lto~@DS>uGoH;l6#=3M z5)#)n<=ec`(K}tcCRg18xz6=cli(fTu$=Q{*SC58y^-*KUEtR4xBZWny#sU-E=z4+ z|Hw?;2e)E2yDf14EbHOD-S^HA`YU?}r7C(<&h=5zp-pQ(x#T}NOX|D+X(_%U|DKO< zR43)k(Iv?u&KAnyJEX6>rhJ2U&0gFRvQQ@Nru2&WR7py1%Rr2o6jc6lmxaZ|z3STf zbONH3{#Yb3wfx063>Ig1TatY*$Rc7R(J*I`eMTjjm`D->)XzB7lMyPkt?o_m^%pSl zVJx93wD0Ei8ij*_Q+v8;zz5p=my__DX-y{)DM;;2Q&-KYMD#CGL&!PJJ5s3%w7f|S zIbCYiV*o(M?g1rc?x;=*W?-BaxFfUmEabJOkIxgomph$@@ox(gmFe5w)*OKecYOQ8 z`;n4dcK^P3ke`ycU-*3QrrAu#=9oI5EN^nM%a?cwit)|#>SAC_g!?o@h~Xd%vC-id zQmro-h=6+l`{>TwI$TaOnTYlss3FC~Sb@bvsDKGX)-u6Bh9?)k&G;9I97U^(7=4O= zOz~E58HQ(XQ<+z6FT#FC0tOUgIFA_-FQ72Q*P|Bt>T*cNcCB{!G*uS#K({-nDyTz9 zhRiLg425YX^%Oet7NULR7qC4PUOY+6a3)%=Vu2-P@JC zx4UBR1*OCIqVd8Y`6Kgqr>)%XQy9ZleJifr(xEePkz|9bs zGYI7mpzzYrEG6e^m!1yC$UQn+>hz)fxn2rt8ds6VVBh37{x|VW*C82%M7RA}7!!#W z)E<+h26ereX7RTe}DR6sSaxUVJg$88vz1oW%ePp*Xhk!R?18 z?R!z%@D&8!y=uPOy~ z3C9u&jtcZH-KIMTFKHfaB|*Y^%EA=bx*a;CXyXMU`^2Vlt6J3gb&P*Y?i}ApS)O{^ zm$f{-AlxVYgdO&jLPa{nq{P=W?fCcP&VS2vl}?2JN7MEHph>^IYlbc6Mq4f*n61I?^NZa^aH2zEDzj6?Hz1a=+%1k2=r@Z0I6{b+gMF%{K zyH=aghf&}kAOh=sGnYm%MkCeVGcJN+%g(+eN88eKE#6n<`*Tzt~c77UL7s`z46c2q*AZA zzACOwPHU0rWoO3L)saCJ*j($$zz2iozjPJGkS~ro6A+?t4O?`iVM~`JTJ#@|3yX)pNI#U(1&DoseLQ-?3ur zCr&;yaXPBZ)~JE2{PoxbO5@Ip(&rg06x#Q_qM5p#HVwvHhcF3Ndx;sZTwi&mjv>hH}ZJg%(X#A_kF?6Yy06SnF1_T6P@P~J`=`{iZk{(JsE<10k4)!6LEVC#R zzK?SY6ouco4kSK^YB%Sy&MjSkAI!`+3=iPW1^S zDgS8vm#Xsp)OiYMPz8h}b@vCVL}k$VK0_6tSnDaak#ryQ(kX8mDFi2lsQ-u$mm zksu&t!}F>UzMEm^u=Qr-bJg54sW_~4+x1kjiz)ywsPL;4;1mu*+?Vr=KbjVJ6Odgw0=tOLNVC&f0CT4W4?gU@+!dr43(%=Ucr~Ak4Xu>M zP`LmnuAMM)8kNRPL*oiok{b!tv6qkci|jZGEAcwt9DaZNQeD3)>TCX5`P%^jcc(wy z9KA1FC%t>lX0j~5-%Q^Z_j;ip1FJa#{1*DzP(_Go*lpJ_Mzk8 zx0m7WXD6;KWdSF?(PMr&`|zpT$1@MUy-vP)_VLFXJF?~Dh@p_}BrNf9-^YmaSx?2} z>JBc;AQ8VRlwV_E4?qM^MY#QgLZOkxfUWR`xGjIj7XJ%{5;`1nJ^J@eB8?4gfYZsp z#ln{y;Vp^Ve{2%9$azr6tUqI6$)nv7K=Xc`t6rS4Q?abofs|X9ixeEDe|60!FEHUH za_ee9W)~SZnc86T zQc{OUFJU*3qM~pff|?j zv9Mhtf8F`Qiexm|+6Lgf=@T+^8R!@Ol`Z~n#KM15D8I$RKiJ||e1)>NH|jUGSTT6Y-(nDmsu{{&mSdj}oP%ec9Nic*7?VyE&in0iuIu}7Bw3vBU!S)oLkc<^K4 zRaUZKgi_)1E$68#ALrL@69G1~O@9Bn^rrfvjQ7|ZOZ}nw$zDT*{^6C1u)U$25ay*$ zYgt5X&PV>A)$sO92GLVOrzo+>6Z4lm5%FBXU)kc{W8pUMfz>rH5dZ*7Eg;HZ_6tO) zWl1l_NStU3d@V;J%PA`(SEtGoSMUIE#bX9pE-?KJl+?y?S*OGzsM%^bKs$Pfvs8fzLhBa)l@NO5vQa)?FL>PR=?IJ%M@ z;+ezvHx@fH;gB43fOc2EW&O<1_d13dGumX)3r^DgE`V%QuOM#7=Y4WuH$zj-t4xF!i_<&T|bkOk?V3p z116~@;A%XHK=|e;q8{+s;uRH`3ZyJ~8XA(je8mhcK7)0d2O#P+oIl+!V$zSaNEcs$ z0ZZGJ$xxtDTu?r0H5} z!n;wp={1ro1JiN!>ke;U+E%OWj#2n{OKv~Whu&PK73HTSRzZYQ?)aRl%rL9I8;&qg zrXjvZjGccAVBC*U#SVV11DD0@y;G4Uuo1gvr)S8XXdJHB>28N+b6u!wi{HK9+2Vqz z#aK6b zc{ZSXi*__dQnq>9Q_ON#-}CFnwHfoj$PqIN49 zsf4(wp?aU-EOat2>7&3dOIq#;%9aCOWyc>qYNLj~465A7so^EY=9dr8s9J1Lw0<@g ziM`Vrttims9TQM0ohkb;+T3F}P)^XAD4%_v|GJ8NJxLOzDo|do94Otw!UPF0wY9Dy zDP?$caIOFK_WSgF--{(acfGP@5=ON4X5s*jo$b@`?n1t6W?rRH?ZgrLCF;0GgYmO_ zbTN|yI~V7fM87HS9Q-92pm(^9H!jS_G6Z)GW|&cb&a3Q_v3x9 zJR=<2?pWOnYl)K4tnY8!puDVx@!U`sE;wkURZv8OQEt2ay+S#CX8YWWME890%}SYP zm68M=f&C&!!$F|24Wl5e7#LE~&oAC>dx6NmV@1dT2_D0%W)~#kI?0I-p}lKlGjNEJ z(OP8C#oh0St$4k{ZK#eM55eFr%a6BCbAL?l2V2Zsd?umVD!`OCQv-x=j%t|P;8PGX zbN7n+!su3PtFgQGvQjkI&dhj@O~aI<1csO}mf_34z_2Wrqp@=#RCe_)*EMX)SV-`V ziK|~EVgL=%`sM+A25)v_+80Xb{UVnD{{1O+?d%S(kgyHroo*-G zFT^AtO6VEe_1Wvmw~(h-{J$?&-0Yn*z4__JuJ7+SqUYuv+&|ws_%uL+AK_MfU8}z05l35ir#Acb znT3<^zLRU%Aow@8#***WSRg$AK?@DVP94npCq1iwp@sfopD{sM&e-nndRA^f+?viG zZcU{!?GLx6$$NX5w+g!}_Q~&v9DhaiWtYT>$qTM(0A!gALvnxgtcJ&rnrsCcjbD#5 zt_5?UfPmi<#E5BtLo}KY1Hg(OZcP;T+NSkJ9#oTX6L_59SoGP`Kiry5qoOuc+!Rxa z$nRODyrbVxQP}sZ78>8*%)hmW{Go;TJ*!oVnUr@k|MzI2m}P1NO6S%*KS4YN+Xe(^ zdfSsTh;$S=*eK0KDc_He$O)Y6Ly>aGbnLOn6%NcnJ9%dj=CMRZi&IB6QwHd$*L>L~ zb4mcjAog>jv39dg{~nS1qM-ZyZ-|_qXIkg`Ki!)DAw=#hX5dE6+{<^lB9IXm_>mxv z+Lw1YX#g(P1A@I0%%w4@MG7R^x$c;8mc&@szw22EDwvE2U6@{ZWtu2Uc7`T@k$PR# zf*c(=J(aKIknmsaS^bx_&_6}w{?V!Qw%sph6KWt5(eP9ug&PE3&RCXpT8#qX#f@ z{RRVM6hNlwG6c}DPiCi~>}+lgQB?5>l}B_ip4cjqz*SPX9sXO-Dq0L{01a6q1${R> zz;^mE^)7Z3Gcs*QQ2C9k>_eGsq`sH(BTr2hn*rCFzbW9&W}$g1+Ng*@RWZ+ITsX0` z+_A=8n*yC{Eq1FMbk;qX)EDruIIdKifZp@Bp4FH4Wg)i)#o?b=@ta^-B02pc=~IN; zh#;r1yNEb|P8444ftF70j0s@RQWWeews+`A*2OhgK6P||vlS?QAN`|fSbueEiupY&b-r8Ub#G|@ z&PzygK?EnwUSL(@?V}EGHMboyYt~@~8^9^Bt{Bhv$+?ZD6Kd`jonYguXreaV2~&H< zvn3YT5a4%5rRA!Ea6Xaa2fkRp+8pwXzoX&ws(9_q)z$7Dr$Rm7Klc|kK_I#D$8}oZ zKzMhNOitPfxuY1>x6k!V*~*@}6qc>FjW5e8MoEv@V*9y_dCBiXhrpQ(iucVvG$vFkHA%#I3R*xlRC-1_|8BBYXfi% zSC<5=5y=pV@IAi!Z~}U>xGiDQ&IL#FzRDWpwfZoJRwXRhy}cAj6fE@h8!a#Bo(~kc zB9S8;%|;nxmWi|;@?{!VTgvjoE;j!V;&g40icH47O=fY_8$$@5wb1@$#H0~vyObfn zLLZ!Zgfi$1nSWjmygEVN^r8`(7g@gQd&6K5L%)yUPq}Y89*xFuj-I-!fe7!qQ{_u< zfhx>btQ*a#!cfPE&Vl!C#rtooIrQ{+ood#RZDb=*t`xBwScGEu9hlzJFdXfGc8&G( z`_|Wrg|v0IhsRvo==c<#mQRU2P~uhJbNQsI8MB$#*IagCe+FN!H@uR$zEjsqO0xU& z)~sqN?L~`mFF{vgy**^R`y9t$VgER27^z*%jtYirU$`N8@ZQ6jEJ7-s%Bp`@?)qf< zVve;C{66g1I~%@m|Gc*C#!&j5r1dOy7)EcC2V-`B?$_#FBz3~a38Uswa_#E)qag4eCkl`?!R z)tW^}BDV2Z_ufl!O?Go$2w#1JIM5|vK`BLjyt^4?`&iY5Vcj_{l7LWs^PDP(fKwkI zu6*LAYoB+=_3fPHY5Vt{KLPTU$TCicapN3bU0LMy&>(pf%kb-U$+MXePu z32%`aJiq4S-qH8(Uht!>wd?MDNB(b*w*C!n)i9faNP|n8FTki;FO{i+o%}w*FGNg2 zKNhL8m}5ue5=%fuA%3)F{eBL_p2Zn4;cy`?|A0kI8w({v=l2N&a-G>{m7a?=G<%BSPrC4!SC+;{Q}B{cMiY zF!{?X@lfWM*MjSgTKxC>1pg?OzJC0B+={muAQm1}CNn*F8Djo7S>=nw!NlJcJ&>9eK-fIX*u z7Zbu@V?Nj~-hlxZo1g64LvH=G{5+!cX_Mj*p=nA~xW-1YMJn42pa{c9;nV~=k~L2e z8JM_3@);X)P(YL*J!VvoN}_KoNW$pD-bM<9DXq?M8Gg5p~A-Ki1cvSZ>99=Wa!vPDYI}w2;XDPO^ffb z-|QsKLOnbRz=E0E_J0b+(j{*YPoWWVBmC)>&K1_aZ*KNdjbUtV6G>7#8|+|ZQ1~y= zMbX&^+3-<}kO1>dcb2%op+Rd?al_)1YH(>zLzI!<{$Khp)yg7^5q_PwSe~Qd3yw`L zVNSOzC&ub60jByxUY-8qCAud|T7`C3SyN6o!FEAXyPJ~k_E4V_Y$z<0G*Kr%XqO8l}o3x30Z@CXw+lte6k@ zvv>f8JikBeQz_raHE_&80NUQNjS?$4iL_tp_+!>u2*&!h0ji?Npgn{KOlI-{WIYhGeGPd|{p>U3M-Yz0V`CSZ6sh z#{3PRQCNtYY{`Y~{WdG-e%b7SKa&ckyXGRnXye+?2!S6PF9ad7{s zXx?2TOj@*Cf#A51N*}xYShJ8DTcWJR_&+Dh@~y(>)M*9}Up{@2q8LL@s5K_>QKy^@ zzoAadp_6>nY0hYR(`%s$ogb)^qT%@Y`{T;qHrnNip&H0(TBrQpAx_K#Q^8;R1VOJh zXao4&FOGYdc#7J^o%mFH<2Fyt69*g#Fupj+YBWhXRb1Zv*qe(mqjo{jnXdinU{MaCcy)JsXixLijFjj9asS< zJyr&pit1A#TMXoikJ~}QqQRK8Lp%06y{&zE*XxW<~Tih8owWls< z8!_}D34>kje>5nH(;+O{%R{>__sf1?$Z_wTmb$ro>0R`RLU$PreAuHQF&)WBqYPPZ z>V6$Unv)I3N!m#pA}&8zL{C4X0$=sM$xVdu-0?M^4gbm z;7#dc2WED$#F>T(qAN^>-YqLy6SjT1mm((wtY6|hUo0o`@uq|K~rw}r%%`$9#GwhQyXcZYw-5D<98E(rNbVBAjvrJFlOz-4O z--=8>0=c#;bLCd#CPG$_Syr&w`gPt};QEO0aNR?tAyG7)LrYm-f}G-gvo%qU8^g0Z zZbi1&XYWbg6tdu_9GRC+edGUbndod1m6vfD?LU<>V2TLKHLX4bM`B+t&s@o@SNP8@6aAMR zv#>GOe=L>$OA*MpD?kJ?v~`$={t7jLPoQo-)Rgf9YC>B52{ob2e}$Sd_)rr@1D!+X zLrvNKQ!~FqO`4@sGmILW-S6qr4WDIX4zC_BkT8O3c#)iPvc)<&lEAnHEpW8ik? zK-^*HM~%L`EU>6Au)+V)Yl9Gka-(q4xm|7k`g?mZTADkrMGd__^YI+sm2cRNun;4r zu>L{4R4Lm#0yO|&YzDJ7YEnI;+<|PcmP0o__dI!Whb^vAr8ae9=yUFDS>moXCz1x_ z{fPnt=N@37`M;qCXQ4FsBHs>ac8^nat;j zl<&jDtPfYTHrWFQ&Ks9(>{xnB4c(8xUJyjde0VGAEp!5M?jd&cU4-J_&+ay^8K!l1 zR5m-31d@rb1Ty50^jHWFWnfZ>Gw8se%XeAfc5a**H7giU zu*qXf6=L)gIKR)9*qIrfT90_gygiABvnR)7OYLc}nDex@r0B3Nb>(*O&V6<%#77zgLCBc*S@eQ^DB zp@tu)({b zb{Hi(2^lL!%lT!LgDg8ML^^;QiNh$rgdis-6 z`bjA{Kb-zaDgC6Beo{*R*HTJofIofzlT!LgDgC6B{zwm*KPja@r`S5G7qeUgkDz^oX7_ z*X#^TgNB#gsEwo#H2qPDi@H$_ij`HtnXMPi(C3;r?z)}l+8Aw7%ye#}fN9v*Ydp#A znUfbZH(;v#JV5(C?TraSxKXn0S-8(&;xj4AUa^wj?zDy#Y`?Wf!S#&MRdLcc=2rxd zULvi6%B#?sR*%Zb$h|c}xN-~1lXThgkkZ>kY3u)Sr&UgEv2t7GuCfdvW>@5$x(oSi z>I)Ds#dNLklKpuG{?gexaApB-uf#%_gHZi#>8`+ed0}GS9&gdToxp-HFaVI9#Q-+W z13--=ph#vq$N|s6ngwRkuM6a>a_#UNLN_dl*>1PJT;p}60?swEhya+W^>&PYI(+6* zk;Dp&$&@%()egXAUO7OadcEYL0{xT)Hr$9mcY{$gr?O$b2`9NbBw$#kZZZJWVUV1s zFkuA1zycZ+a*3Xw2LNo5=}VsGFOYvaAftMe1=)qmXGqE=O^9DotmZEinHqT52m|+F z*1Ixh#*07&Cb`eX2_y#FS#grGDf*r(cB3L1nMI@d zI_Bmh2#qD%aytUX)8C$dZw+7zK<^ygRp<~5h}68-N3l{V=3xt2gD|vq8_$Qon#v01 z@K5XLv8Qcu zpaPJJC@Rvm8sUMcOE^!PX#JYI#c%~5<$RoI$f!*N4!K@#^BW~mla9kig(0upnU$>Op79!sZQO^Oq9Aizq@^!}o z0Z)^Y>fz*m4^>P4nNtM{bA#uj0xeI2n3}=tNEP@BrGsMhGBypFXJwn-;qX;wy}`)& zU~!-W;0_?IH7V)Z(3)T!n(zF&m&c(vG^?^veHsC8v|=JP)f^=~LiE3Jd~`shGbF0I zoL_{uRmY7^`20ArvjJ9QBLWcD7B8lVWJubp?mSwM2zOL+HIsT4Rcu<;#{iGh`l^eR zthREgL+0%y58`>+sLe^$V`!jkh|#&pP|EfBu#F+mCiGpMiuy1zl3vezqhdt9WkZ6Q zM+wbr?_Z$pKT`^#gak=vQ*svb=cHq?wtBz<2aN=e_q*DPLsw*V0T0#bo`p>E@D;)g zfRkt1ifkglfya>5KHI0F=mpx{mG1u90)Vaz7t4XGoQ6Fxjxp5mg<*INxC>ktS8IT& zN$FpmJ` za)fJsEXA1#wQGqSp%Hf06zn-L6YVz*q^^F~x^YjiKd^8>t%?n9+?pX#27$*&cm$l| zu6&b3QxBgj`ew=VRH0IoNvDtI@GEgz(iG)zG_xl}83jf-?MPC}J%Cdpo#PPU50{~! z@w9Z-*L-s{xKiUP#6n4sVLG0ta7cA74E2b+Lp}FO*6O7i$-uOCR~N6c5~xbsm~f7h z5o84brLmB!{dY1uZ=JH(*o(Xmh+9J2m#&q;M>EapO^eg0!N~2f`Y^LL6PxLaB#5F+ zGs!+*C#;N~igT1ST+Dq$oKsYXXozjG=_ZUB4YgB+rYQg?OWpB0lvVK&DJ8~s} z-*q3l%CL~QqnzwoIK4~W3fW&@$iD4zDUXJ*BYCFf(}@PjLxNdfApcYzGF``!xlDmJ z8$=T=$653XUvMr39z?%WGwI??+qm{607JBI=x;xqG>6zB9WE^6 zh$nHag^={tG%2A0b2DF}+$kS>%ito-)EQCDwze%Awb+6ghA=?BoEROCx&`vQz@kCi z8Z~y@NP;ujI2X+rNrS>E@Igm4Tk*QGl>ir_9x?Vdz-F)(DDZV~rkLKknGFb#luOs5 zLR_4Ouw!ExgGeQq1{bJ5^HHS25MR}yO+6xjdErn~n>h>F-L#@yLpWG!#jHFUIs-2d z_qvB#d`zqJAfeP-Ss*n_7sj>YUp$md7BT~dg#dRH7DsS-=CoyKqYJ0MS9h9cT7kR` zEX>>3+p?bqA_O=Ob3)Hj&_#IV4zN$^$nf0#Y|hykv?7yxj|{&2-Nr zbfV3jS`zqzg$y9&|TM38qSREd;)Qx3WA38XEo zL@doI`7DSZMgSmHkPFlb9E)k^UdoXi+7ED|R|+x~DUUq??*;Hk>UyHavKz9e;4=@w zMZTfp;ot)EbsH1D?Xj?kIOMuF8Nyh1VGJwj+=_h075Jw@^Ae~k4(+KNHrTV&peOI^ zkdYmclYZ7#7?2Gz(pK$Qv*K8oQ~E72_!ox+d&4r17`9OQK9XXm>*|}I4BwbPTvZ{6 zHDhX7LWamiDHkg)YKs!|ZFa|ABX8aldpREHj>LWSv0FL`3fO?sC9x7Ugf(20P9O_E z1?Ig4)25`#P5s5DVxyr5Id$m%DO?uy7dS3}X-o*ScNY%FX|Xp-E`&y^V0F`bTa1lVPVgoP#q=aJQ0|bm%0qffc(&LmlQGf0xUAThgkA(oTcAymzUJtZm!VrH$yagEc1P0k|FyCQDQkg@I-ZFogxCJ8K)u zAgA1C2Vu(jXd^Dd9unv*7@T5(u!4L16Fc2KUi+`p;tIP{Y=EeQ`imEBa>tS$RW{d?4{$*x$+xW(HEFUB3l75>_5-a-F zu~K54aa&aAV5g#8-+a2*0sM_{HB*$5o&-YElV5r^RL6=!s^$P zPwE7i?`KGt1(}xxM;J?16ohEV4g@7f+%JpyR2KV8oU#D>Qi_i}ViX%+ZrE2Q*_SNt zvEQGJxR1wWhb7BPm**U)$m^-d-yoLhm^?7+Wikq8)NGSw3Hr5dCZL+?%1U}6KIst4p^C(wtM_)@hG=AXFM2hk4xy)6#jQ~>+Twx{Ic3Fx} z70QfSlWM9T+^>H9sd^#8Se_|en(Uu5ZdOOHmStfJ5E%aDr|CqoLkqcYH*iopIhbaN z729|veVBbb7Ff`p)&OW7vYe+lR|?!RT&%W&qwu+gC{ydL50@OV=a*9%vG&9^aG`|y z;R>#eVr{IC*aaOD)u=VAJhJ-C5xqFYb}lj%1`=aIy{kAR7yc#qpb<>ao-1$pxsEP# zbX^_}3Aws+>UwZnnLu^-0!GUaH;({%8EC_WDovQmUh>h%GxgEU^`kw?L6N>>ZkY-r zSAt~?!mvFH1vfA?vibtk_v_PEH)b?fWuGEse=1PssgADH!>~#jiR}8#>QIO$ieGwF z0VGWQ@OFNUKkl>&ly#@zyv!ju2groGgzTtQ7!?y}gJq_d$teP>n5i{8Te>S-dQ-qX zFo||^oHFkaq6v4qzU9)+)}e`mM=J5$&Q?gV<%-O)TdR)+MTqBw%H43nkDtM9c0Bg@ z^D&-ZUeo|vn|ge_yJ@QO`13QzD-aTM&Gs#*U-CQgAySufACJ_4%6IUOFrEM` zjEi!zUE`<%2k@8LVUidrSzdW$O&b?`0A|rH?%yuiUWAC-vK(!jAChrsqCqBFHUGQ#fr3nWA9b_&Je&jY&pF(_bP4``2^yvEPkX0rwAr^ znhB{urDmsMWl!^Dj)>|RdX@x`xo8|q5D4N~NGK9K$(-{gr)e!XCmEdQ2za;%T*)-2G9Dk3C_a8-vW|t0#C!mkP%4HsOLQwPkxR_{XyGU!U8`e&v< zVDw5gs1L8O*fF4qOLD^5p#c1d{2>O$Fcy47#qMJQGGsvSA#Oc%#{BC=M(Ux-B0-81 zv`q_VYYA=Df*7$I!M35u9t%xmBP8nUP`kZx|(uXd#D2k zv({M=!tMib;V%ZI<1UE8FlXCWweaBnsfxesqKV=5WqiHDd04$PW1nf<6RWSC)`dY* zkgQJ^z?z6vWWxet6F|8pQ3Dj}Zw<77*82PM<^v!c=sE>ze}V0jyE;@g92Aj~Fa*l* zK%p0)?1)Zm$F)Ms2CFzjcpnDfVjg~lc;RU`wF|`bWgmecRR*ukA>(;KSnKeD+)ajb zu0T|BjAt@*4W~p_5DS+8SNc4TG@D8R05_< zylq;xpJ#!`Y{khxxXr?hxl7|8Mc$?z8WTlc7uUgQTH)Pajg5RAk)%rTXk8x1#{ACR z>F3{z$UbP6g4f-O4|IjxRmQxo--$eTcd&$Pi7eP)#sA10Y{@b4xM7}9;q>-=t&R9# z3&`;L-88H5t2MWzV#lR;qXgDH>A>W^ng&l!uX_7!i|e>72f59;?HT9pS6!Frk366f z3zOI#em~O9hG-@Zab@1tLR;^}7j2}U#jQiM9@_Yz>zEh_@s(4-35_1vBiRP!r#642 z#eFM~<-a-$1EcrE^|Yi8TwaeO0%77XIU7(=2+691{j&A$o2s*?SH3;s6-ZbDV2KuP zvlAq3cveOq)V6|f3teUl;6+!QE{`;d!rlEudSC_Vy|gfpdkiS>uEH+Jc}T3~JqFta zSTgrU4q_3yxTF!-c+(!Ghe#t z8By`Rc;IQ78X%F`pgpu+E6@nj)^D(&Jv7=cS46GjVvud%8Thj@g%=&0aOK=W*>>{q z!(KRU?k4ygprfL+@p6OJa)|1PDxCB}=(%IFWbSz9_m{MdsJ2b`6EAQQI?6DyJb(h* z3;-2?vBcEG;;o_G0I(~sPrOgiW)E)70_=(|TK5HO1WCTz3T#5wVQ0tGx&cP zy7G9a-ah)wYKFlW+gQ68OtyxQEoK;uwMq8Skcv`Xl==fCe;`4_v1)}UzigW>CMRsCgm&57-&M@>`^ zwj+BM^ zmdH;Y-MOm#cUbp-ouwDWYDItJ)Sp)PKL26$_rjgOb9b6QCYN{~R1r=5Vg4Qbx?*W@ z)hJ*frF1?j%uud)xaZH9t!7}s;tHsl+KyU3Kv{ukGtJpZ;6!Un{jBlxB z^lhQmhBy8db~|6mj&FDycxvsze^HL^0<0#=jvH^FCKVJ~gmcqSQ&|cmRTWoEMacg` zo1J&RC;>dXDx+w3vjTE8WGnm|`&Xr9w76}{Z}C;ijQTmQ+eh;jM& zTKDjqo3?XuR@SK4TY!6SG7kZmDrwv`OPzl)P1jZMdjI48_4)SNQqQJTH1u8Fq_=#bj04Fm}T8Vx$M9C z5p(q##XUnvcx~xMAGC@+^_;TyavBdJtL{z( zJscFg=|7Bpcb~N!zJmsc-A9#T@wj-R@3|=FsIw#i1?@B_RpJ(->_uiDRXN)sCIW zpYC20mt$JrHi=!A;k&+I4*f1`S3rPB4loZBH6q2Li6yp^ zuTZ1%oa1SEGax|{*xP3ZOAEc666?ygzN0F7mG66VDte5*wCz-K>)8aQ<8Rt`T)5*J zS<{esH?l5!PieyY6S>*sq-(FUoj-B&Ok%e>GD3ZzlZQK>*PXjp>dftsGrh?+s!G2{ zHHiq4hr2Wn;|DrT&)iJCe~?oBNh9rzG`3XtT*Wi>(6*atkJou0WapUN`u*gn-~RUv z5ApYwF()h)F+aTb?XA79`#M1jF+6;?K;;{SyQ9E{OGkLApX5mX#E@oxyuQ%mdf;PX z952o7`>WY3TEKiYgpus}Q`k z_oND#^<&hOE%z=$G~AZ~?@Ue&@Q;IR$?%b2(n($#-PfEMM>;lYr$rn%fWAKN`z=jo zG63y2SBYaRUS(RP59UqZn_RA|5#NqC_tC!?>-B*ymTTMwnP)_MPukq(C%wpEU zJRN<5el!TxgK~0kNOyk5B?tra6rzq7srIMFr&w&U+H>7+j$sl8s-G)bk*&H-dYsR0XaKqM-L&@)p5(? zlb?m#BJ^oMwN0{n`)bj5d$t7muGwaPD!`!QY)dMM?0b3J+|}FJCz$dAFskd_7^Ie? z=0z1d8!G1(U)K1r!T4WAab%@ogW$7cApXw&~>l`2+cMULHy!noy zTch?g9E0Ba_&rX0@^R^*k=AQ}YaVj6i<=B(K{TMdE6X|Rf*HqCF_E`XCABl}8$QtZ zolZ)f^UGB+5b8oe4vO{T+y{2YW`h(JLQE?TaLU@>dafevjujOwi$84(E8K@vH<4qk z;p4ci4v%ka`uE=Y@E;V&@tuDmU>?4?3b*Ay^_$~XaWXMr(Jl1o)un97L87qZw!fh+ zcJFA{uDo4d;d2j4h8g_IhjtK7Nx7W19j9uXpE zvrD|8U%%JYp*}6SC3iGvn?QNX%zRikQGYd_-3x2hMPM)GdQ)LJ)!q&pg!JC4R2e4a zi$Up=n{W1=oK&yw@X3uuqDX^JO)H$!2>mRd8x01Gcm>?3FEQAyI$j3n-%yU5X z#I27#bIF z_o>&!ydJv*ZdQ*kw~p$|2NDHFQOd~~f-dD#*ux%Clh_rkuH|y8?*3RMFwmu|R=_RV zy$C&I``ZCY>ajIlMi!g)^~c7DcS$l|zbZa@C;1;FL;)o79G*fcthNCS!VEVh1>qecqHE0En9n&+#mNg>-0;7dIm3P{>&XyANN}(Qd7+e z@7lgO+3MPCw2B?(6VW&9wdCJo1>Jv=*ZxD}-a7Jcc^bD>%SwAR5Va%~;<+*jc^ zs>8`!RG^w~#8bllCwSsnl_s!_CQp(@_jES=*m>oU4u0iQbSc!BD~(6*YuTNYhRTFy4OpTT~tFJ7<{iZ(+a2=lq`&sjQJPVq=B~2{#d~YSMwKh(O^F!{5du!iV3Mi-ThX+DS`EP9`I}j@ z*ULv;gwU=00jHhxwapFL+sm=L7IN^q&dXAuhHr+FM$Lwu9YxE@KyZHvV6GqPhK+;SNC(qDF+SsFGT%3iH2 ziU0`ZUYrj(C*31^rz75K7HDqNM(T0?r4}$g;At$}fwVPzy0DPrUC_|ER0n$aZ3x{_tD=S~J=Id|2hmv%k*|eFWaM*N zq5Z6C-zhr3L?R9RmXk=u?H1>-(ctoPnb5(ryw~|CyA0ThHtZm5tI(Lv(X87pviaW; zJ81d)Bd$>)eduJC8Ul~wX^g|2N2yA^Fpdq#;cm!OdDI{r&{y~ycbX`zdfK_7o9)5R zXo?I1nlz*~7gn9q6|i94A%2X5z>d{Hrt++Va1j9b0a$OGr<~yz%k^Dl3&6M__nW*+ zd44h){4~UQlW`9%a+J_8rp@q}2w_Q<18kvAIKu1;z>-C6X%}?DaRX?eDDYOLiO2&z zZRHpsQds(FB>Hq-_o%tZYyiO$=A8b@7tjI$d5zaJ-iO^^H0l*hJbZFmv{Ohgn(bqY z_%ZZb7yiij+zW5H@-BXMSyGSi;Ty^WusIsMMB~>0c>bMxGZ(SaK!u*zR3cSSWrG?S zUYc=VkYTwtCu=3uPB4dA2|&79?cNt|WPteQmm`m-3(+u{ELsQP2nc(|KbxIUCB}h+ z(|BdFQG~>!h?B*K3nNGGD21#SKvT=W(3kj$X@)yt#{O_n$dV>V`hYtcr zM7oT+0v6)n|L}x_A+!9UJ{C`HZXlkFc1c61a_(ipEHHY%#DS;7?Ojd-LPe()>wNE2 zn$awn>&oioYa8Hfn4;uw!uM#f^QewVIC9nn=foEE^`q2Vc;!T)kT%TF!|4nl7?A94 zi({b}xlZg;)N-B1%1TVYZgcRg7{-3|R}{cJv(tDrc1Y1ebLdsPr4EibaE}Mj+ak@8 z*5=}GxR_fxB=#jfQLuYG&Il6WTU3Z#Od>RFS&0IS(x# zDn%+kdn#LS8?`Mm>R(qVM$7tf#Kasn8@Ht3@YsozgCW)mM2IdlP`zk`Z$a`$OS6qD zJ?(Im27XydyL$<$ETJ!dhqQc4K6e3kqMsk2j)#cEh%`re-R`l~I0dP>3TP8%XjxMq z=O@$z!O912;q9;FtXfVjUoKjK5E3n%j(k^fIZsm(bP*RSl)!^6K)u^vC`AUd(Fw*m z7#LP9&x}!P3!KpM5bt1q~MNJk4cpMBY zW;=idfnWf|uoM~3AwBGHYZD%N1>~GQKg>&b&7-|8l0*o|Ld}H2LUv5iEYI!%t|Alf zria_cc3j$tE!$vu(|Jt59w;LE9t#(`!jip|ys5STrQSSb2BO&lPoIS~IeB9U`NIHZ zHHswF^MB0VEy5wm9M}gBk6Y%bwyodDJx2UBC}3fp9NEB!W3$>OPKFCMQALznc>-ch z2L^0@QiC`v|0foq$wdUM91}EHpP}DY?1kkA9z@~}Kb;yq$~dJA0lx+GGK<3N?pl&@ zFxwMSyoDs@;I7ADZNFD17aj!}^x@d_D`!cH7R)eQXk^yWn%hS2Fp<%6vK?d9P zL}baM+T#LSn#0j6B8*y&L&obY4^i1MRG|P*6-WF$CKIzTSDZyjTS7qs%82?hun~Lm zFD`AZ$SDL@;lHtT4jU#K5lg2^hykG2t!O}%bTOtuzPVkTb1R&u!n&=GL`VS!8%y(}MVL3!mBrny6E@Pkqo57Z(S!eP6CmppdXKL4y@C?1GCDj~Fhz5YQw zoN6D}<1X3)VcqO#iQVbRN^F0 zx{Qt=k7e+>)A0^FhixSafhL z?+6BLT)^vLVNGcWQ=neW_$Z^FCb z?WA+Z*lRCa;ZWiP{@k2^EqLIYsMJZN_$K#ie*KTGP<|(vmov*P9&{MEABe+>KVP)lhM4om z>4_i~I)upI*S~W~z+qJtd>H%?SuvZpaJz$Fj<7VvVR1+oksodxR!^8L4Ua5f3qSfz zHNp1UqJsQSIS~9nPr{1{@5m?(5+)e(8xWUliqA<9SPW0CcRwumYOSf0dzA_{_&MN3}DHD6Ef81=q*0%FYiKeA8m0PC3NxJ>j)e+#Wedh0jvM?;e6~|*_=m6 zU#>hrS}W`???-OrUm~?v`AR||ZlQ$jmEm_#I zByd1lyWx$b0_v)ovg%JUyMX67nqY?urVV9Dc&w2edmNH?1Sm+t^V)d2vuXVC&BAd( z3>T@Kf^gNe3s=nfsDrJ9CZ9Oqj6db-a=_i;taR1nQM5zhPCJdWywy(p?LH!ZYd(dA zsLBS1uyAyEG~XdQkB#0M0Cb79d)4u$*5C(LYSm5r<~1O7$ieC?0^7@}-u@x=*h~RA zMacOd5B?uyx#rKZL86D9rYBdHM_)199Xp%7<0{{tOHES5ZyZon9eAM1Hoo%pHE+P% z!Y${!@N#2s;j(B>BnDP$$)Be~tBl^^$YAY6s(2R0EbtcEG5!#8Nw>E&Et{txy&B@s z@oYtoj~iagAD2WI=+lb)Fdzw+qj`&GU%oBa3kXDmyyfW+W^4Z!I^``gPt87ZEhm2T zP*uH$vScK7Ad%SXybg+w&q!CY#9=dn^k3~h6Nx{%G++WmdH_pWCODBoUOxpP;>=BS zLAFp(W5U2OTkwEt)q=4UHX79ND>WoN*(wzG7{de=xmbe~LK1ylmY4=fs&TEr)RUOPZo|=AW z-D{g-jWz_A?}7Stv4RUI2$+OWLd)n%q~R`lQvCY$J9CL>cjW~1WY6IhzdP>ADUI97 z=pVGw_&8(jD;`+0P$Y^c%noV3&VDX0?tI)Qs}@aNhF8l2>qD1IO@6g4??;Xz?Ok3m_E2ihD60PSPU(- za*Ph<`kXt~OL5v5I1qw6@DvW+AS@&Z4_BeS&^_?p#$8_I&?uZPQwMf3J6l(gtGS6Q zO?m2(EUhlpO6!irf;0dQhwL73630k}zIbV0cxdgd+m`(#V4G!D=?9Mo!n=xgQ*3*& zLp6e<1SS)V9y*NVst#QP!2YAhnjD=7zy6BN4;@C4wBw9BDwNLT@h2Kcg|I}9co(Y4 zM~u{aw$H4?awg9Jrz4VwbBrx?OOdEFTNr?(nNF&I zPAO^$wP|JrqopJBQjR`tO(zO%86xppX)ZzFI%C&>LACI4{x0RDV_(qGWC|$;7o_bs|OY6oNe_Wd?!-Qgf&i=DuqiCndq4t z9X&<^H#TCm{LuhsC|piFT{D*wupTo*DB5TB{SS;$F2wM6A!>CUf!xO74L<0>7AbPI zW^Kpq1xwfnD2tQWXyXLQ^V>%^{2mxbA8FzH5m~ffkIiA)^|xL;j{8mxG{m^4DyD73 zKroT7zzmQ?Pgf}?i1C|AXa+DNsr~FzHon~Nh3RQ*|MTU(n_JlK+Ug#irLM^fhyNze zrnsG-*R%jF+m#lK#&zf4y8Y3bJA@uw-lW-bI7sc4~v^?_>d7r@aq1!6k znWj34RbFgX(FHA8l#`Z%9d6m7%Y9@xa#?L|F$AU0%rSHc@3;eXqUNW?hcLS%SdBdh zrMA0k49n?w4ytmp4R+WOcT&Mi%6u3C693v5hI6(eKN+Y1E9z-K|CV~e5rDOmhTRTr z;diDeV`*YTX5*TA!ypQ3={=8*C7IsLQ~{|JhPsD@_AH1Ne*wBul@6y6=?DNpwar3*RLv!0PxIgX zh59qq9z*i@0<{MkqiVr(|I2-2Yj!7()bC|>YyB*cI%QofsLoYjgsPc5=E)vI4;K^9 z`VXwBPQ7|Q1_Nk>AVMlVzA@U`JhCr#r>i=USWj|fy!upaUzGwz4(jksF6*W5s;reCjyC4K$By(lUEhUq(KtT4K089+ z(<(ovG+Jwe-FO(AH;-EQ95e$vdeX2t2Jn@zQcKQGo_&3N~6 z=Z^C)W(sn3KZ*~#0Alp4l2HHjrDkV&zA{&M?D|$%J>$-SbJ4tegf!ZPsOcQiuIL@N zsIg%OE`N{tdAID=+|^YFKRdtv{VD9u;>@ZW$i|I%ExRt$^m^|pH4Z$m8kFMndHiVi z@T`=F<~`3Wc5mFQdrm{{!qu0W*{fYVRgSjFmP}l&bB`=2fkv{vdWRL5jeW_h73dEe z_qxd2Y!*qTG(IHkxL{V?LAdi?(W~Ax!HcZD?HCvG)5jgfleSQQ?!KoTVN9^ z{oaZXrk)VsZ4Q!k-QImZv_T&3|8&1n-EoSpwsmV6P&!}VsdV?Qdqh$k9K#H-mY^(W z8LI6A+37iXmh(z`uWTN?2Vgh-o#K7pJS=iE_XQU0BBfc`pMDu(|qBjIU4 zznh|090uT7WdmOmCu?HCif&xpRx4q4F)ua`pf=oVIk~?1dlRbtOw@(9ZMQnPqJh(T z*msAmv2j0It{}m=3>ke_ta#SsgR?*$yTbJxZXpiKP#ExBEQQx0#xbV9*_kC=W_uuyl z(S^DFugnHTHyHLif4+Qu@cJ8*((6s6#>`i~AzYEie!NZg^bO{!jyt&y=NMLbNhlDS zuwqTUn_FkE(3)-1AJ!O4?6@&4r}m}b4|9u1iQt29fe_6Tk3IO@7>AGgqM!Pm{6{TYSS3 z1V7fx0&(gq03iD#fD1lCh%mdNU>Ce8jMhWHaw3N=)Kde@HiBX+^Il_TU%c--b>=@s zp+cq5ah4K|T?U%z1{-5Hdd_-;O_M>R9l{Xpe0C^EyAsykBfXi?Xb z(4i`sT>p*JG1@Wxps-!B8$&MB{AWnRo~8|{YLSGfR-yBU^3KE)W@;XH^-z$Shq1J4 zR7)FkFbkt3vm25B`i`gnDOUexcNolJza8zVro_al888<%|7fEt`b(9;golU$HSq`csavr1|CT?Z#ZbJq)_N6W z*=RGp+hvZj@{rz_boxVQX;;n4VC-=o^dVbsf44d?RK0?^@In>yH`h;>Za_j`L{}(i zp*aMh8WCBjCfh<}wgG*Hf1bQzm+ckhUkqXM9?W!6w|t9KuB5_*ASBNjX|kDeXcZsi zGB+q($(E@uo_0N1r}e9wr0;pJF?OHymDfmJ^s6nJ{OUFpq0O|w`^T#zA+m5KnH51+ zn0UggiLy>Zs5mfY<2`#hYO_dRTS4;gG1sPL8^la@QqP14 z;X%?v2Fo!aDV++VhQ*s^CE@<@ZwDU*MIjmSDlrA7`%2%g+N!yBIA)LW3y*K7?)J^l zlXQVD$`J_i&r)=`Cd@@f3_)1L<7~|q9x@SMRP&1>%c5OYFlVJ$#B4-bmV9Ec4Vh_! z-og;A0Jhnjc(lg2XNpZ(Iu01SxX-3^?<6q!{;wiRXW0pIq+=Z`nekz1QaK3$un64) zbzyT=hcZ2_2x$C^s(nf;i!>4&wrC!RTw*#cpun&PD;s0GIC@QsX`B&X{P3uDe=b8d zu?SUN)U9e{n}kPg{zs5)PhVb}su(Q9@4iRc4xPdvS&~hchpw@?WGbAQ(2!ZYG`Qhd zZ3DTbE@Tc2zT?PKN!Xp^B zAR*NP`F8NW@m1}xl9@1v*c0vRgby|tebX(7r&nz?yOw_bT6Tq7`9v5Tt3za7|Fk9j z`We554xO75XKmj!XCMH5soqbC+1Q5G|3}wpW$J#SfXt4q?bXW{@K%3&9~MsK#&^+N z5S}a^bx2j;pg1iiiz7pHDQ5D1lF#_&(|$lA9~>>PCjskf&o_UTbZ< zf4h-g=g~prU!A~QEPoSj@j8yg)JC(T#byoPvKS4BX0Z`-VF&WNXB3qhU9ysqAh1{a zaO1`HaP;{wTWrdY`l~{(H4^kMPvbD|GFR2Tcom%<9D*MPy(8jOqNf(UlM;>@auI?c zbb11;z#LqC+*@&=)J0L6(;o7y(_%uSd4iO`=d5|S%;P{ocl3*_8~iNnt6avMC*P2Y zz#kt>?S7-ZB;=FwJNTZ-r*fb0!u?h}+LsY-ZM%~=#C!$|1 zy@#!YSLs{LVK2;S5L|=HHua+HG?*N#vMu(>()M+5yKq~*r*5Q47{}dABD_Muu1QM% znJT#9B6Q?>Y?h#}ON_2%Uiejj>Lh9F|J6SEH<+V^RsiezkDqyxu`oIR*dpvfixKIHi~QsUUt?*akCBNFC$hK{#b=C zYr$917{St@Mb-Drhjeur5>0=-tcT17`dNSjE}*7(9fl%&P6#G=z>23g60;sDeqRdm zy9pGjs;cIX>F9ugHna~#h_Ucg*A%L6kohXgMlCQ?7ML0(nK}v_y+T6inrT*9qZ__x zZIo$yE23^%M`X|y3A;S=Y4UF`E(=x@Hp&cPA+Ck~Ecel;Y?(sup!^j;2sZFuKVStplWnEvm_6SFj}i@Z-3DTp4gwk%3vJrSPNU)j|k8V;jqj}#Aj zKKnr=T3a)P%2sbv7izV`U5X`ASOI)B+=zMmO+h&mejUlIo4**g*zEW1q3JI}Q}y|f zN{!X4p9UocigGZk16Gf-&HYyrZjD=?6@5((9p+ zDI0N21}-;7-me{@kFNJ~$WL{Uf?#;yn7qq#73CK=CsZO!WP^uQ(}(ftB7jFvd%Y}D zJ2F2Wur7U=_@Q!eO|s4Z3ND$xiefCR4&#`5j#`tWbHZK>;-%nF+IqV$AvlZ6Bi~EA zlfY)Q8Vk&m#Lc{Nh^z<&V2H6v-M8S zN*^7>S4y*U=0XZ=44(~N`D936!4bZ@l6tc_q+5Be4KS32sLZAOef~4y%cGk);Nj@~ zcq#S@+{4e!p&bRUB+GUKY(f#T#STyOzMTp0!hwVvOhf`4D5vd|(%nHlntqAy?V{m5 zQS^n(*=fAmGs!N#14iRuR0~*r743XsSaJV(R zqzR1g^4fJi=N*)`0<+miS}wLvRL}$RdMRjshEUnGz!$wZ+=KqP=n~}3z817mwtr)O zj^t-wzU^5x>GrAn-hHK~%e~J&NoKGz(r0aP-!zQZY*dgbQbxTzDj(}ATK~NXqo|0F zfqb2CIXe`fNMF*U_X1s+Hvi6|r^+DN!0)6kvANq*2}mg@a{6O_v^O>yQ&kZ{#2pE9v;!S(8J0rK|l9T|r}+FO9g@7fV2< z8~W7q&A8DaLx516r50%ZqK{r@$aYq*LB4qBfGcTZQJ#3faO5d&?{Cl20~mi*boCjB z3=&#>KpMW`m&E9IC<2%W-_oU~TuIXLEm@YofX74St!_;9=x&N^CvrH0QJeAlH|E5q z_MRkgVgr8Vbr|34$0xQk*hnz?%SckQds{h%bv48m`R63PzGvqdRpv>8&qgKTr^??y z``1}m7#KAgL~F@5y2>UIbmX@s1V)K@NGJ$yX%PZ+g}JSzppY@Hh8_+WksqA1#mcFFLI)ka>~l zmo7{K$A!F4`ToHIavEH7=_|dFuP5rbwd!QL8}7!5rZCw9%Jib$iuQrMm>%m+LyOEX zipU_-^X|@T2Jt_G^RhB_gsUD;eF^9fj(j*fZuJOsP9l(RBf5>oohZ2NH+C0NGhAru zOcV54u$aJj;Y8uy!VskTYRtQiv9k$1yW4o|sRa+UgE{Lt+nv9K(WZUvq;87LQ|4KW z%Kd`ET$6dYTL*o*V(GQ%-4~!O!;K`YZbNU}?+PILz0r=splw!jH>$_s^zbM`rIhIA zjuaD2WKIlhMSAhS>4Qp|gd2WofH4I6Ab713a}T+bkYKa+qf|qLRHmF_417AvmA+JE znow^&8yT1>lTVk@O`-h19+q3&sgUUraooe#^ zRCR2F61@>g6LS~>ITe%O1h&GFK-99F4UHoJ^&+^k9&Q0DQ2_u4h_SIgM@_1U!`$M# zK4q)$6+>50bWo1o!bFct2Bk-k^2E$Nk9mC*^v`J<7M&*tloiZ4>jmQkke#lr)}pe6 zVVqpkk-f)Jpuiw&m?=#&+>;nuE3t8Cc#664#;TLr)5QP_V~!I$aTDWRB0f?s2qVt% zQq(L&aERy8p?!KQslyI-E$e2q95mE~V_lqlKM*-d%c$v$etJPYu!v2P{ZHG(wcnn# zT|yPqV^iU^nbj)#cI~ zSlaIZe1+n|!U79&f{Gy6C;=tdKdXSnkQs{b+_LG~>z{sa^=)4I(x~Kuamgf)#OEWo zNR*rsi_D6$kx(Z|J^Xx^Dc%ro1#Fp*n$93aG7YLt~64&LAZ3vjHTv`bFxHeJ5Z>DR$3UY8^E$RIKLrGRyTym zs57-noR&+2yl=Kyhn0Jrh^@8?+Fv$Y#Lk{p)y`;>*6JWylq><=;9K1X!~AnlQLteH z0kdhSbEQ{Y#yBFbt0wNrHkCMGw&wnjk4??ZLE4#c=}DY*eJZw2Bcrw;+R%(5|Za=KW1 z;^Qkds;($hc*TV{%6m_xqO<&O?I3|Gx+JhX?=%qjX<6|&g|I&nNt5#Qz0fv%s$iTq zf3WZIwr-kdm|%Y~SExb<)k0F5j*fv0%a_#n#f--y%jz2n<#2$V9~?u>9Xle#J!!3L zQaSgv*3@>U+8E?7Q@kxNh?|dT#r-(&1erneU#>eh9Ns$Y6rp3X%ebMnsitdtCjvSJ zV0puVz+QyPtAqI4N2$gQ0)J>J5ih*${%Sx{L$o1J2rBH~y*jTcuWzCilM#Eb9fRQ< zYg)OF@{PYWLo1!14L_4qCnQYlEO#xNMS)BdOi_%-%$UDk#L-(cT7ch1NR*GO!4Jb6 zCrmX1EAO5gB<|d_Z~0(E?Iqq+J`af_%Wi_@)WhAjYvTy{$XhQ`4NA}T%BbK(=5M6+szsS4E$;Mt>R*Jp#^uyu9GuEOv*+iKY zk}f#S!ddLPm}}Zk-)mxR1fU2&0z1ktMac))-Dx6r^Yq{tJycY6!fat-XLf{;F{oY7z zBai_<&}^Cck6Nt|Hu3w&!>2WTp`5k5EH(kLU$FF1LiDX)xZA-Ga zlRg75mXl@c%gp{lUb#eKvswy!sA}N3^U9}kqH2m?TXJ}x0BZ4RvC8Gqw=r&mm zLh~ja#a7I#N3!aE>tTV`LOEF`Zr}E=u@+SXP(4hdLjQMY!iSVkQ_&(MaZnl#QHM3K zh`W~V9z+T*E=dDH7Ii9GL+g-g@Vev8BT(Hq;xe(u*T6N_Rj!C2(pKkF-V|3E=bZgY zu(|P2|6#dldF{px4tJ0EbCBeLmw?RCREtt;UbZU7^(BO!Dvgut7L3&RPV&|gWmgk# z;f-7e+(shryukS7;E``6GqF{@it{9!r4llQXWPD8<%{`A^$Bv6^~ zmF3=qPvY9p9Z__oX8DosBbWXc-Rvm7g_P{ue45u7<*u)|uiWi&;vkPX=Qr8^)wrG_ zBFA-L6pu4wM1A#vZ8TH|p_Yj~z6H;M*IKI0Y?&MU8W1k!D@gZ2)e)X~!_LGaDblUM zAcw_zQB`dw#0~gL6%K9OdP97ja^Pi0k5XA}&{EneOlL};V+41NR;sp1z{1(aXp(}l z*er@&SNiFF5M;y}7jZ8IVokJ8=e5^MQD=`5UUeJji{e`H)89x`oVLbSQTFUnxNCamjd&_DAP(C({+)FBW(KyPj)6D-K^x18*5KCN8VB9n>KBg3p9D4^! z@FXO-pkrW=RSb|cd{BZ^jO#P11<*BKOR?K3hcoUA{zUDzQND--S)f0DnTX$Zs3L7F zAh=aum~h`%TPnSO&_?_-oJZNZ^ZqT3iLbnVdM)J;$;(OjGV=375RUq=;(+BUhnekYk^BY_xFn+p@!lu8Wj~yZ{ z?OL?chPQ-E6*Ph@;dc~&IpO(^2^W~<#j?k>Lo{HkK*hbb$vTb`$xi;+@$2AJgi#1c&>!_mYtAK zacc(guFD5wmAOL)42fSuj5oP|FVJI@Z_2*n;io#a#YY`MyGq{LY1Vi45#wX=+w*%? zV^y(vRaLTiB|etR0XPhSM7IllkNR}}03q%{)OahYhJFRSi$X3@8Ypi}5TN5~g&Bpj zt&}wRUuJ&-XI+vBZ*j?=|27cWs>I)D@BWrEsQ?|GiE>h{LHhZS@ocPpsL#Pq-Zx=&;`4M>B=$cgJa+ zMLZWWyZ|-NQCKDh^+u?6OIuL^6h3}H<1Qr>MwLH;G-7eCbccF^iTya{Zk|dW(wyav z-`|OUKgP;)hqvM59JZ8-pQ zlx=vTPksg#MEfZ3QP-K**vZg(l@qDnNLZ2>-1qc$0$STEgiGJ;I*yhN8nd@E4W$=4 z-y9)!w#CP5uJ1bPunQA99*Q-5T-+0-VR$5FLLH4f{=xXM2J$%ovAR%&Sq+BC@#21t zc=P2ycluIX^LuO!bx3##%a6etQWLg1v-rpsOO*eN{Ed}Vn*cxo0xk(1Cx)5hs(zD& zL)I4mOx4#Rjns?XK1fc)e1V{P%xpX)pWlZ>$v^eGeMZsoe1_r+AErY(&IMx3sG&Pkg0X#go%7Xke)E6skjuq6yEZ5z^T_&5hW$*AuR0$?-Jwy9KJY@S z^aARf#G9_OowDC0=Frja?@|B8U!yRmupy09TcPV$|Ho5qf$H|Q<6h3S%`wVgEceon z9qeauKy)nJAdBK(7qDd*Vo7|f-|wP)k66O`EWYwo%9*-rh-9ssT&-^A5qs9WqbDpm zIU?CTM14GJ(C(`1UD~i`z$Rp@@Vm+TbItYvA<>(Is~`KQUWGcpMkVJz?~O09x8FMb|LN^rhWm2J%P2H zCd#9E0;+%&(PbFzXy4Pm`9O_2-SEdAEFHOg(Rf`aVpppu!#<&^mKybK!w_@orme@S zk+84Blz<_O?7he~B;oVHSk+tC%rNj4NN{(!b?c)tzt>P}AfzjP1wU!^XT+Bof)2Oe z^EhkguVe9B)&wYrC3H>h-t*HK>^8clwC+HeTZX2XGyJ;u>UyTl<|V)Am`Ak#e4>Z5 zQnc1QX3l@{Ek(QR-G@p#)o!z^CwtxNI&)_YQ%?vT7_>+|&*V4rM z2Jug!40Z6s#A~x{ymNf=r>DmL<9lCUqXa&U+(t5pD{aZC=?oy7NKR^eP(JcNE zM`&dJ;$SCIkjy`(2aieJ9hQ1WON{vOxlbwflC>853~qkjMwe7X^C_S9o>0*=;TDTk z`Io{aVOBv$H$5|^mSA8DeY;)uwr`a_{zCeWt9n3h3Q$&VC1qz4PPBTAk|Nw+b)Q)4 zSgpRl`dU|F-?weX{Ax?Vbx-zb_g%U-J90 zJ@u)vSyydVXRMF#^RPFZO|p1s^d>>t^^a8)T@&l8envgOG0gkuqkd!Pqb+A+(>V|0Af;Hqfk>cKwFe1R)6x9EE8Qcc|4h ztNCzN=FHaJBVryN)P z0!Z*%1#&;$p;s~#Xf9hDV7W^hE!!0-A0!!ZibqGJv&*?_XGWX zH~V*I7!B2^-9FPELkC;Wpf%&R6LvxM^~-nHv8UkL8v+&N3`Cc zlwYRk(>L(rvPm4oi?0;~gNEuXh2KYqx(rv%)>6^*o@kn_8NW+hT%>dTaE!r<=*_R? zYhLKu)`>#{CUU_ zBpIGR{jz2;a{MkWK@H76N|@wFb>f_o9p0jyPdtQ1L`RahJ1o4k>OIZ(Gs5hD3~e72 zM@d?>H|GRzX}rT%Q9+_Ij8^nLw@UvDWpG}6bRSiWLwvhw=^~z1G<3l z#4d~%-J9uPRo(`H*jVvyoD&^6Jf)^v=|6HBH6F)ooO&9I+MWVolwLyQ+j2`WcVk>i zMGfRPD#+)b&MP+>!EVOyYxX=Rfdkts6x5)P8xlaU@v^D9p~bSOX#1_ZvK{R%Z>uTD zLz?!wD}E$c7^L6&@?>*qB?;vFAV|+r5W>-bIIb`M-KNtG^2kqhu0Qv%iKi)mu*2q|N2m zs7}|10dk+|YULXn`ZDsm>2#o56>$fM+H1tjh%Q~Cj`Ja?l?nk`{7Mvc27{!C-`cAFUi#^1vFD>$2d%%3vswzxjo@<5k zVWR!{(Z;~0(3`pTO^-9c&@Td-0B^aPkkX8ip083U$C^6jze2MJ0FBc|^^?e1R3K~_ z#27W(l)lXilu9I{UDtV5yptH#E*z?E^0aMqwTW8+Ip@cxYj0*e&6O;44spU zpeB}|#c98%T%u|9g`0&ZkUQQ!aJ1rdzIy-kcG3FVfB*Mq83oDI+=Ay4NzKj>Zm6Jd zoSmlHcSbQtOXGPMmAr|VvA<)~fJ5}Q^DkJghq8#c{qsF>0E3Be?3gJAyBr$bwwM`5 zxMrY8syn!R5;;e*2j!h5NxvLqCh^2R4=gK!ex41&y~mDau(6%lCzTE61%8U{AU~`) z*Lonjws74*>7g}#0v?_zqw+bYzl%KCw__TI&+T4iqzkO@Jpp^uqQ4^m!lLMLmVz>m z`zn$5>m61aZj{ilKvf0D8WRT-jPjS|oE9CtQYbYms%9%m&)FZRyH}X0vaCVClqt-C{M~+`*2u}oC zitJWcCg=s4bI0x5-V%DIx-*aY(;Ij(DGqiSZkCq$lB;y`nvzpH_*ktv>)VR^25mJ6 znI7s%K@vic`siJJ=SR$@WWzXx;?@(>iewydfpsU;YVh3H!`rcL@%OW$I6$1wsj63a z>+u-)!W!KTwj3=uKi(y!C3oo3oLZD6U?k!>5Ok&Q{ZNx$Z{b3}f+qFb_-YAH&(xFW z;9rb$7^!h{>@&mFPBJ3}ow-m6YvpK_9cQ@p3V2pKP;itSO458EnCm*~dB1+| zzlVRkNIT=qO&E(9CyyIJ-*l{pmb@m(e3>If4 zZnG@!KdQ?4st>f<6Z#p6cx3*{N2i|B6I*blh{lH%^t`VHYJc%10bL(sC?_hVVF*W+ zV}#qt==D;BBw4?GsX*Ex0@fJ`fxc51kctafQjEaqZV19ioCy`tA*2eV))SP5H$m@$U^^4bA3;tn5qQAK&M$(A5X>mb#xcFLT(tCIA8JZ z=)M}&mIhas#6Cz~MXgEgQ%B|>J`~t3C6H%xmMhRGza4atVqdcDp%^xKg`sVv1{1vC zNA=!&eG^N?Y;zXI_`~SB3QGv?cE{2guQz$c(SXWaNnv+^=Zm*&LcTpugs=*Upi3e! z4}J^B;-|KByErH6pKiDx>~0T{Z(TW6lQp|$WOj#NC`;db^aIu4GD(9&5Cu)WLhU`p zAfJ|LX^dYn>z~T=(23-Tqm=-~$cOAQ>B`$uC18D(x}pk)HV*Pn;Az1R8l+fbSs?A0 zeIG%Q*nGn&@cioPKo_n&q;bxxl^M7@cm?s9ocJTnXkWAoj*3(VH<(*f*-N^V!3Gqy z9!ri(*5yBLwrr;wEoFKo>Dg+2VEs!a34meZrQEJg|C~xYs5L6!_}ZOSD6R$jOH`>u z$!Om?4VYzE`(>Nq?swJ=i84Sj{&_|`wM)P20p!F4%35Tdz61@R;e^CI2eoGIm&Z}n zDy#Iv`No<^SA25piUVsiJA!xi#zeIenM%dzCk6@C@Fl~Em%*_4j3PnVA0)}3i!dJMd}7NZb6fBADY zK33VUTX~=_eT+Vf7yj&mjby@EQ1-y9K}aBV?*w#{z>}>7MI_?R?0oO=2WN>j3f;nw z)0t@9g$+v-*BTx5u=DGZ6bK3&N$D(hVqLcP)IJ@~>lutTt={aM$BSn>I|}&2?YXv0 zh3=gS?yi`-K5ZBOQTj0Qk^DrcpL~Q)y_T+7VR-lMfX`lYwF{ikhru*qzH<7ycjlsd zWVxakkZsQ#SGbk*RS`BCO5gdfgcKZZ{I*f4Eky5t~^zo7RaKkm@XonG_c-=*z#5zk)Wj}w^( zZ-V<hTx^MX?>r|@0zy~P(D zHjf9cEZx6f?udDzd-2KO`X>^Y(b-1U(z zG*;=w`nxL~&i{LDqI36$O+VY8YP|Y!`}nSDCyhh@H0)XIu{g4DD>#DlX{#DmFEJ(N ztk1Kazp%6Y$%V?#op07F{~F3W@@-AbLPDbL$cqMlQ#I3@@3$%c9>0I&zcy1N>iq^F z-W9hw^GxnUk;|*1N@p5%?tdTSivG-6{PS~g?~&qfvtj3-O{cCT_eVYco$K&tZ;J4M zhY}Z5xbtVkFr~L>NWpgYblZ!cANJn<{Ze^pasBDfYa2@rq+S{O2lGU2a_G(g3g z$~9IkAfq)s z9UUmQpQt`ggbhm>^=#c8Rs(b)$y)BHo=yEM#XBo+&T4K`?obeqZ;M!X%)hxPcTiC&x3 z&e9p!VQ_O+_R;8^lV@@qw^FdRA$C+brsephGY%HkkBMXJb zOc3|>XkLGL!L>t9z*<&g_D%w@r7wZ*p;n5efV*rQU+o`Zqby~XanK%!&9ZeAR zy!m;0VdC`Xx2NYy=NB=VB&YO@cZP|NqijrJZ>KgZ%PDWB{cxA<_Eh*|6PrNbFH3N4gFWO z@nrQ1uUf{h8mwPU60=sttIjpHPWy=xc35dlQs?zfG2RiMz=!wE;{-fdKs^h<_yhpI zcOHi$0}Xs&v1h<6i$1mTK*Fb3o4B5-O%RH*vnb-DrDb}1bsuvNq6G;>Pa|G z0Jj6c7$1HH0Ov#DG35M(>q~X5x#t0DQ|rLN*!dm3EVZHKXRs1(inM8}fetFlkouHV zSft&&B|MAKpLozUoB?X~PWQ?EOaEe{o9TLuWoD|qN`ungC= z5j~IYD1n#gfIaojnN&DXK(Q0V%#5X_1T5pX&@?$u3VSJ4r{l;G8}PS0^D{5MyT)Rj z*Lp`5N-)VX92RWP0e~3=;E)6k4TGcMl{@FphWcS&r#S~nH*H+N>6t_H;^hfTA{5Jh zbdh@bS5rb2Z&a22W;-XdR80}^`ja)vrItYDl&Fwri78n;PLyh z<<0`H=KlPjN(!wikA`w^3Cry(#S476Uk;xdGz$A*iShTZ0DB(hfMH zm9#Lpg$x=?j>)D0;S|mWKx+sD$ta9zcO4HXmqNsORL=H6f}h50r+Jo;F!4;K3Bb8f;d>gn zyeX^H;pPX=2CWf2Qzp=)qWP|CiHx7ZeICpW{o-+5*oI5k@t^l&$HkV_WT=o26T@%N z$iyqit)E>=sy3;MmGH z!{9VavmvR%foC`The_g-6D0QF##Xc$^D&(byYaW2LIKTKv|5Qh z)X!4@V8urQh+v~o2@@ob6rTw$K|&K!#Mzr&7(n_0&&J18J;Al!P6U8N>V5nWY&EGW zpq@*bKl@MB(#t?{^S(g?WktYd?F24i;y00U^FFX*=-9Wx4qTUh%{+1X&DOP3VYNcN zqwMuqVf=&wP%32O$)->%NRzJjk8{w1pFzWsSVti28|NuUw?0R&l=km~k24yJN^e@= z*l@T90FLnBmo2as@jf;Ie@kF6!+HWO&#IdS|7#jon!*B9sCD&eV(ZzB;CNQJs>O47 zUbehbkcO5W{s{^vCGbvtO3{OM{izKTT;G_}&GZD9myZq`MBE(9gk4yKd?xw=fx<~E zf+VmtGZr_De*Yaf_G~8PaR5F6g;|L<;HTREfj>77+8k%KkKyKLb%13o4b3_)W2tlf zr+1e$yylwDbN0YO9(+mm9H0_v*FYJ|e+v?DevmOHxc*=3ZG9T#DjEK1aW;4>eD4Ju z1E1YgjWe$ZM>WIa7vRsbi$~7C!BrDKU%%M*0se)+A0-pB7vL9vKfbwj5&8s^No03V z9?531H>Yv^54au zx^TV<;NL!55uKw1{4)=4;NjaNNR!a<^Lkj%ayTRAD^9u?-bSdZi5NUa>)agJrVh{?pujnRJ|2oU9XBn-hFl< z_+$iButCLV7=LmKSF1->PLAz0GIv=7ou0)ll3)O{L^5)cxUkbrVe6>zp=GZV+1R%( zWO&*&U(0^a?D+7EyM*RiXtep!tf%CFi7%R3XpF>6_7Fx*c$KRFr)%JNj#SILOnKXp zLnFi9m8)DqnU+WWl&*aO=De0ucGXC62-dv7 z_Ov$__S{JZa*wK&D+4cudkt~(RFvorY^m$a4?*s*0csdzG&MhJk!6HigG^Nekh%pO zHe%Xv^0Kiw-*%@+O!oj84~VgRJVG(pzB1~$l>4cwD^uBY>$Am#+5V#|cD?AFmg=r& z{I#4@l-a%m8vfU_ZfL?5m^igT6tMK7)1?XXAp7}sUSqGL*9f(;h__MuJbLEyKLOij z((=BPG*}s*;_iSTv4Uifz)jt|Yh#ZTt9ZOe&JTcrt3s61~iu z+P-*M>ew3I7td-na1M5VE4iPg3DFDr4(mzL2A--E;UjqTsGHSPNqLlgy|3Q1WXsbEBLkorVK#g5={Vafh> zYV^vI|0Z`{wrU4LHO&9p0_2`eu8uWz4h~5mhw`6ef#@IM5HKgL!kRSvSl&VUo`eI_ z*qroiMwKj`01<&zYr%$6r@**y`{2CPD0}*r-8(!)>LC!gJTUCqhK zN~LL@Z@(T}>o<4etq`#;tFA8iq=k%2FRt#~k44J>PP_*uM*qlJf!1M32tZv&TP$(uIZdzuj|9ujx zf zXb*`@B%g}c7j$8SMiQ2fGN9g&4$)KiTM3*Lt3x90P-n1=kO^&9Z!@sEbVp#w{-65R z<)9)ZBQYQK?PwKt*ZG$$-Q{eRh9W8vL->4dldb^(;@35FH4yKmYm8eOSxfnMs85(h zqP=!%Rg?F%>DMwbpAVne_egzWn>!3MR;0Cz$d;7! zrtf_0VjiZ;X>8(I^KCcJ9S)mjo#FQA>I1Z_JB>7j(%N-JKEqCwkZp0kHMe@^y>duk zy0ROt*gG1gSL^iQU(87~nvoQ=4I30Nxuol?oQ)|$l*hQlg2K%MQslZTBUf3GsKrdc zCyyodFo29o|MAv$LHMZEe+%O~_mz>|(>cT8h4g(j;vcc|D0Oi(dYej)rk+0obRs(C zv7x+>AuAz6j@FSIal8fY*@vjxE%{Xm>wq>|n~kkjL@^GTxM6^>2|Kv`B~H_T0yLX4 zBg~``Wf_XpuZ9msjo6)9#n$Wk58Yc>9+}){j9pi*IegC9aOu+hfduEDjt+`3(?3r);CX0qX%fHrI9eJYQ}l=;YjpZ<{6t=(_ENv|c!#v(+ZHmPX;9cKrXJj3e^MR0u z_RE&50#`Mct4nz!t%cv6S_Npp{C&?-UfbTSl!Pu7D=FgU(E~d)<;QNFLbo_@s|*-@ z;UG_%t{F)U9Pd`?_8PK^x=+_Y`gVho@GMzUmDi9eU?lzb=wmk31{NQ{)=UbcBNU8E zX1D{cCRWPFlIvpMFS*&BTv=5z~zyPQ=Xr)lcW*~YuJ6f>)l{b4&mrZ)^s*><||GKt^)!iOg z>X1-oD?+moG>-Q&6H zwifoJP_Hr2>~RHTYxW81l##gbv(Cs1vXO>Lgf*K)0Q^+A|JpT(^%V05vH&*W30I8U zA@f2F*?TH&2DXPB%rnz;US%WzgTQ$)DP^P=m2juE__8>_4g|pR0yF<`m~e=Hdr7}f zg~9~(x!h3f1duXp=Eo@YWe01Gz+G&2z4q1!XdU8uaV?KxpC%e7*>Fx7OaoNS6K9tI zCKu(APkuWYU!WP`bae&AAC!hrNz6#a?wq$`qX@fa&3#9{E7Y!HI~f`}7FIIkz*!v_ zP#@Ah9x{=Y^OE9aKFi+mWplC08a_lO&m#(t@K2F)qZ68as=D*>J(JCKs2Cw;S+b@n z(FRUnPR25)W>mgCNKAc6cPV3jKB`>jpu+(beTBR`=9g&VD`*tv%R+iQV*;gRrEGM3 zE}grDMupioFx{R8-cM16d%Fj*=|-zn^KOuf!%W}Jhlm!-sSdk5_B_*5Rd2XK(;6qY zXp%FIMxML|o0620VlQuYiR!YYcB=0*tnF8nD|8HXuiPl>54&{`E7DkkinO}12KC4f z=-T_;9&6Hbw{Ss`p=a0N`eL7d9#)htB7O=eF^+%3H&VPazyXkUmUOHK7_z)7QO7&z zIT~O9fRzMj-dyK*2YPZ}d?`;+6Sjxmo0*ZXbR~cw!VCo|I{maP=E|B1v2I9v1e)-+ zLrv=sL`(q|(jBs7w!(3tO1Xh@3d)#wPA)JndIyg3uM0y&LIk7;^eKRap}?T>B&e|{ zVMWN&0lQv9#)t*~-n?ZPt4Z|AdELRf~F8z1{B)__*!r3gt?NT-Fk3w8NC z+TrN-LjO?+Y7#2S9h9Ple`+CN>}83Q*^XS`EnxBbByu>F!bb_!1t1m?xyu@_B|u(* zmTx40qAuYdGO1y5<#0%xp-gfR;&YI%P~_b7cK$@NO06p}AO@sx ztI}J)io@nE=MP;f5X%T{Os#&;W~07!mSWra`vp`$di_kl1Q>-p_Uc0Y`AYe8Ykg3@mQ&IJ}~Kn@3Tk=A`^EvI4~ijQ#I&X3<=P%Tzwazy1rIV{eS zEs6lR=Jr{W^$O1>lI-Ta(>1XMDZ;P;kyZ#duj76}hkIeUkOP{$jsy)nRZQ!|VY!(` zRfD-wUV=8LQ~l_2ow(H~XU|(9rK4WG?!m=;@pmI}6b5k^2g&80W;vM-jA8dKRyzjp z56P@h6gzmG57mVI=mgL`Lie@&(q67KqG4K5lN?T7A|t#37p9oH(IXoZ^!ucE}cF z+^p*@XaGkw2bnjJ<;8X0^FbEyxUgYF897UaDU%bB$Eg4PZ~pqf0|6%Z*+xW~1Cp^h z;85k7%n}W1x|@LG2n`i!nq?b9AOjsBxuCzq9L#3kG~=0^q}l5O+FCKiCIjL(wNQQu z@QN>FarM^3SHdSY(|H^Gspjh!(V_!t)A;WM?QtpG2bV%*rQ6Kigb9@XGk<7oYWq zAcN>@xM8J(~=Z@q0^ODb8V>R0ut}WvPDY$R>eg$;p`u# zecnv=a=Up+zK(v)())dYwf9h&l{oJsq%j}5pavN_8DaS%H|jEyHUC6jKeJ72rwRU%nI<<)NJ(9?9PwHlQiVD}yp!}+II(CkVQ(2b^TM>TI~hYT7PFYqQ(}oV zJhZAsg=8F3cM!zrM>~YgfhIa)X8|`G5#@SG#bW2p$Hesiv4N^-`H-U~<52aszO{EHUrx8Ve52L`kPFodh?YtUa$G)U0C*e zn~cAZAi8tNA~L+=WhVZ{}hPhL9+qGf&`#Fm1#gjd0)b#UVFELy%w9 zrre>`2KGMb(%#5wt-HDeO|g#nB&eDKtR2}Xls(I0dShf5y;|;U1KTkRs-VOyqk1{Z z#f8#X?Q;F_0vdH}C)PU0Tl2=V2WFp)AXT2&xglWLbF9&~Gm9FRC*Kx)9?{eCz*!MO zA35fg3rSO%E|$>CW60`~@GQPfoP~H#gwIWD@v*z&O%gEuBuaaUwab72!sSXg{_=$7 z8d*9cB`KMOc7?a~#Xn<2kCGtHp{-dy-mF#Pt_$K(%d!BI4Xpzoh1AD+GA!qrVxfHP ztP-iJbFajy@lG_@_~}IQ!o^?4tRp)@l8h+r`r>EuWx-(d3x}K#>43OO`Z2=hnw}Vz zf#%fPAqnW!RST!KfOtI!rh-a~LQ|*!cl>i91KD5LQP5yTKiHlgeMVu?(mW;I)bw@^ zUw9+E(r9?*iPIIYz{{IXkY7)luqFW9r7uFKC;0*)G`0gz<+q0^|%!6QPTw|`FQRGyG>98x&{l>72DaRv0a!HPK-4zM11WIzGe z5e4e<8Ls|34$x05xYOU4u1O_W-q1qs|LOuOCXgQE$o=_=x zDD_46`n#+SwIkwTIqmH!l~I1adgE$-YV830_2a?IQyn%W$)-zYCH_xW8R!euyUJtg z^KuODGe4KQu$$eM-nfRu$`x zYN`^M6wzgG4Iu8t@vSaPG)Upu;fWNeF*Q^9jkx|zf_@qB?>%VY$J-VB&sd{mTjdip zn)3ii`CL>$VQodItsnrX(;&KcgMfBNq~m6n&nTwmtJAqmU9sSfY}rSjFJ~syK@@9X z86Tcd$01XKow+goueyayof0Zrn%S$auy1;_Kal~!N>+cljsDTy>dyO!s-Pilq&oN_ zy_v|uY|Pj3{S`LHiT+orI`0*^@15eZKlV~ujG;~?h8$KznHx*xzKaP zaEr8jF1=RXWT8?2JU1bhqj3Q5_|P)))y{Oy_C4P_hNcIL%MKU1{{H%b5u) zy(#Ai`O?y{P7UL@`)VuEx3Awg&l92vMLRmC(c%dpI6r?-lIS+FFJnbBD90zK(~)@P zB@{68X|tAs-HDPff!AIeQtl3PGhE;ywdBl-EBm)zI537kCyD+1R#cpHVsjEXFv-&q z#f5fAz=JfgiKcrm=ze^o;yFiodZ24kvG@wXV7`5uiC&5H6AY&Bl}3#} zS7l?mund);jlFN^z9yeG)k&0|Yec3itfGQ|ugN(Hes!Tnr5MM-8Wh;Ze2>U;k39Zr zqj&Mo7c7#q2T$~3_v2bG?Qpx}39MeXbLD(}t*GEg>%~`?6)zfj$Ama-)$+JiQojh= z(y+Uvbe~_<_EO-`ve~5zG^;-sb|k01{`Gf4RQ*A9{Ak0j@aShOOR4rN?wYfnFr<0N z?Q{jXOa1JTkgnw6j0@UP68D^IUT~&rB9|7gd(@E=4+SlnvFV$8yY~Rx8xl6qWB$>D zCY8rWs!lo`KLWR&&aV-JrwmNTul-F(H1-!8BDZPPh z-LS%?Id)#2al%F+;F3H`M{o-=74791%AZQF?o_*f{I1q6-Aj3E3I@R|>s=33bG~Yw z4Tx8+kF#9{$awRboK-6J?Og3B`rK#e&i(d)D13_APu{O{_TRC0gO^7kox@22^CcCG zPNwO9&n}N?Y_uxx#EaCn~G9@Xc6zFpU-9&_9layxt2b;pcudN1^L7dg}I=kNB{ zklI-4`)!8%>)sRh@w+);tBz=RyDr!{Y%t2_1y1PRobPruU)|9Xbl@`vz(3S}ePcQS zl<0_`MW)%sAKYi%^!}oS(cz(u8@Jv1`9}Fl9A{I_%Ui!c8=QKou*Pl$S#i=BbLS!R z&w<#N(dc{hIFu}q2xVxt81Xu46~lGi+cji-?BM0o)4|d!6%3h)!sRE!-|8gfXG^b) z9@_SU59(F$?@SVh$q<&1c(uXXI2lUVsGyR*KK)>GR+kyo%YmvU;^C}X%@E)VN?Uxm z7aK!o6TD24i?>stXhB}sb`lG{;G~_vxCZFC=EuFjT z*u5N?U0JJ(Z@YqGL;=<*svB}sT-Sfe{6}+S%A+Tx`26>IXK$g87e?+O=p_`T9NG>6 zCp>cMc2Ly-M04N`J5v=XA_|1KEbRIV(tpkW{ZdQNFROS7$UtTPVJ;_T!x}Fj>CB~K z443YB%gCHol8@jBH9(fQS`h&5;E!M{$r5UL4sF9mMHR0~B}lS#Ol0_Vxt8{Uj448g zOxCZfQYn^IVNA;vxO-wY0P&Z^;?C3Lx6%KmO|Lxj>zU~WS*^sj0|d5Jb>G*d@RqfO z3Z(Hdo9r5IfPpwWrOc@}KWb1MvZaxDW9ML0@j4zUA9C$0RPT20{n%xW4)K@_1`+>5 zA4{PwA;*?=>+P5vz1FXKH=M|8c8a631TxmG`G6zI*_aADEIW)y5SY)RC=+!YUkQU* zsR~d%2ItcIkKX{wsP0D%SE*cj`1E-`MpFQTReWBnwfEu4SVRB!u}^MH+h63^cJuZ` zXPX~IX>|*B8WOWpGeJ$$34s9SQhK0PNeC)&Hph8l%n+)Ic9Mz(05;5f7D;nkQ~?r;bE*faPSO-t z>y+PMZ2x}7@q#{7)&78V)|9Hq2eSO;1(*ABF-NbUmEaO5AnEvujQ|2@4vR5E7tdjG zdXvbuZcROo8ZTV8;lr4Bv*}U5e!e+}9~&ZKRC!Ta?~oo|e~EW->ZUw4O#tQSbT|n+ z={L^_bM^$ryUzO6fYlx3JTfyO(oB?hYvV)VAvg{l11kb zy6K)ig;Zkiz}3G90{SgvuO7t8(lBtopK29r3D!Ec^&+X5bCsWD$%ORl}XP$|H{>h%6;rW zSV1(XW$~~Y#CV209<2MxO~J`>Rcy!cut?+8N~;xzw#;fQv|g zeN5xuZ<%p^vTRGh?tBJg=Vd6=R@XyKltEZb#q7%Lg+owS?I<Q9OoZ13wCb7l5fdJ%JImu(ANZ4--r8-m zu9SQ!6jdqxL~i^;QS^gSR^ll1-W3eoh%Rg+^{w$}~2_-m@v7cjoO z_R6K6AFofFctmd}e9m-Q+oii6yrcFAvbfB}0tIN;sUQC1AzR;UUvqJ5^6P zed6vJ$7KJOmk$|1%DER|A8OD4+|$|=8(fIN%u8RhGSSMOY+d{a{ZBBg$U#{$rnz#!yR17vxYfl2_)b>5#piexOx^g2*$%QY zb|9AO1)OnTJlEl|L^(d z%fs#6t#gu3Oa3Ou*dE)5OdSWa&ld*^3Q)jYP0#ZYr9`@b%5re-x#}q*l(W40wvk&< zf0y$JwP)FrL9XHBM!0+VEupRjJ)s>evNiXCD_6T4wRD`^V={olbMLOC2M!ji0+N@9 z^fVoJ_;d*rPKx?>u9Br7NLrMeBJ-IiMYPTVqk5#Yq2;me$rry;TwQd>@VqFO#XP+p z6oHO0gpm&*ORu9V^(N3%DJ#^Z{;~^1!}(B%SM+n;lTyA5k8KL~C^l<#&@eXE+yQJh z1)=HEF{=lL|6_=JuPAIQR}UQy3EF=$B0Lz^T>fYCYz!?bLi=?@VNWbO@VO^a65iWR zz$(m!Cx9%q67Rignl2vU_;M|m<_OM^A;$wy0E+1SgB%D^-O6z}9NcCm8XabN(tCn@ z|2@GhYRdVS#~6IuEK@$G(t^21;<1*L0?V2gv|Q{!r8ZdcL!aZ?pj~b~V^-bfgE%z= zrJ;H1nN<(PVf(K&`E*-4NmXWO$7%oH)7oY-;EmdSMCkw><9qU+C-1J;QSE}^A}9al zng9kLnyK>vVAoAE>I`C&OSyp>D?Idoj&O_b79_s96l$6LAZA+C4d=&0#alEMu z#v%i)u6PC;1T-U0&gIlJT(#SBK$pk++4HDx$A_2+*h6>K+ej4L#lHzCA=yNe9+Wlq zGN8=GK>Gii;;KH=XL0a6)FZt!W4u>_*UH5whd;VTEh7T=>h}N<*$QhKIE%r#!cEGs zNOQD`I|}IcZXdJ9Ed7b9$b% znX#Bt-Krty@=Io|&ABc%-K4q5kJp5dGoXJe)+Js!o>l4_mAA<_Zuy1VwxaZF5bK(M zxvz)aqGFCU`pY$OglN_ezB@4gID1Nl`ZHR~oPJ^?BT5@-x+9^_9x#kW)<-niGA+YC z*^WPruWoK!GIW|aH=UEbC_C3ZD%me<7Xo;@ZJb$@23)Ht+R|n=y>SX~Ap*u#xh{y2 zDY+-W#~)-M7lkwz&8`%ua&p^wuJ==XCjxJEwG8>db;?_NNi^e)g*mF(zFcMR*n8|T zo+|kpIqpenOT>QwzH$?nZw_d3vMD`7m$q=q(mj?T5)L8*dk%gc@fejE9qUes?#+zu zseiZ3cm`McVl>oeNo6eDp?5qWJrc#zFK<3}STD^?pt6r&cs_KNb~0`t>l z4B(FzAm->HFUNOQpucs!H1Bys!NA@W%~;u^HC8Jlr#DcM0} z_6^w>8qIB+cx2nM1CX5xRv60fdCMLp0y}BH;;jqxUE(irWgnlUe*W=ko5?&9XU%mc z4^5ulePBFlhZmPJS;!6JK6fHQ9*AG1g(;Z^NT;|Vkt&iEr|nSYk(u!qI6rRXMI8E6 z>dV#Be6!WMrux{lF3555yFmKLFuSm21Hig*a`Zpn@aGZt4ku}(tc9e6&uK82_7EU8 zpRn_yK&p_7H}F^USj2GAqn2ow!?MXMGOvDZ4Mru)$a;fp)Lf=&vM7VR5mkqv9?z#7 zJE_hhS^1DGoX^qetQ#5|NMc}=qh=heFiH|x{xypYWe;5A3+_PpB^S)*r{hxzYlR8s z(o-fqW9gsuW^6=32;Pyq;~Ii$kkE8%gZg4QbA4VN{n(H(3cvfWmk3S0fcqfERH`1u z7K$0U5+@nox9744V55{t`z9=M!z;@DcJ0;?L?Qad+!nk;`)%WAtm93|_5qGl)VXOzCnd&{!gpjwN9g5qktmFE2a^owE-qRIMPJErKTM_*4*iqHcsH1XQ z(TH15q-LVm!_yo@<}-ddBPvjT^*0xnZ>7wln48l}`#eOLj<{Wd<*Xa7O1K_%9Q4@c zXStbr^Sb9jMd;J%z9rihuMIr`!{^*8iaJG^U*<5z1_kcFHIo_21u+Pk|0!n_^icj% zR2i|qO8JUWuBTKsMaO(Q8+al{;b5RE#F|pf#GagA@EBitTKE2@)mE1S`&K?W-xTS- z>tjR4De4Bk%*3zJHsk$gw{Kx1_N~V(jjaom_v3Ak13hLk0FrGRxf{AGak6gUn7p5G zFb@?nyTa#Qa7O=WPlav!o^Qh^^VaWn9c<-e+6~nF+PdxkVB9hyDfT%P(*iRZ>U-!~ z{V3(k?c1^OPrk>GB=7#ZeY@Q-whW1K$83ZhmWl`8MQn-=?{DX&c>k0uWFwv`_T;@^ zlR7#acw~6g`A2x8;+t8_#<@r3qsbf(-sGB^%CH~%Un*Xn7snqsklOU)3DGsl!ne7> zW_&+5hcZ=E0ZwX>k`7S`MUJEIy$u>cn6I>=vJN zCA+LhiO6bq8@l>~{@-t|qJW!{nUNy?tb$zj<3>4k9l{>S4zFLV5#LCOz{UNPJ8n9& znD=zCV9BBUTfc;gQC9Wa)8jt)twp#g%70bAf*7}b*IgU? z!=z?FqW+T`g-WAvMcTUxw)K9s%gQhlwzp!A=N;VIWnb->TDRd>orSMTrsE!#AAIs& zu5*9LxZ$Q}-wnl~4jc~n?6dA>Av&W!TgV;|vNMLs*g(&|cHEhOUoA7K7v87tPHV#l zx_ZA*(q9#Fl~NZZAGWFOC2)GY_8&JG>vFW}J~|9knTqr@t&#x{bOLPBg~}FF+!Q@_ z{P}%OXMm(;%xuUUNH5A0-w| z!L#-0?}5vQ?%(*6diyg^fC6S&9m=kk&n92wWi<@5Ko9XySNb;!CV+4=wO8KUsLMvS z9*peG&fIyhF`yx{6x;D>ExGpVg%;P_e;)5U{3Pvv8NF*wx<-95=%{QDhWEjFQkb~BMS&1y29BWb#fNpD@LwI=35N_|i!izD?_e{ysUG}bhsI|dAORU(m|z_Nv)%OW%8o}J7v9obZP=_}c< zzyF*0=kNQaqoB+Lz#yPKMb5$ktaKj$HOg9q-LVRu`oY}3d%4Sv>@YyHmAyTOV#SFc zUF?bSI%=`Gy{#N2JM9hW-xB0VT|EFRI{*RibRpTsdp@;E<^H`I`T#SQr&jf|qX z)eAvh9=vPG-+!sahqP|*KW3k%zB}|v+(i5S-|Bn9uI+pK_)6LnD*`};9|6pnsenMS zdc2(<`GFhSe2GS_l%{`nQPOsRT^CU}08~E+nj`4Xn+*)E@4Q|)g%NA7U`1VkI6Xd^ z?pI@@xGM3@K~O|liX?GE^wgak4aXz82NPf2KjC=buWsu9IXd%zq_X$_pL;JmsDOyL zBW`GFxMpS!xJ6`!no4Shrj1)go7p-SL^GGdB_q=YP1DjwDl0SVgSMG%mStAfpecm;*tw=c$Dl=4rr=wI?3qQfS71v}#~52;6f! zy`RgjTz3*qZbG^m%l_=~bt?{rok3*?;g>&nknVq`{sZqSEu#AMN0@uI7Vr8(O>}fJ zijcm>gEd>Y3S-m6v9m{PYdLT!4;6Pamv5(CWo6V=T(w-?LtD@hf@)3_#L!7-8MS2X z;m-z)mOYsT(8m2=U@4-qUGLHSlo2KbRPI-|D}TmpyxT$Hj?Ae3w<~Omu%kRoLkDAY%EzUDsOb`#ooJpYC^Q{u?!Sdu1~JM8)379aZl(}Uw!XX)Z|(x zGOeU_p^^&m8?EE}1SN%Fy0@d;H+`K0QAQ1Q*hOs`YICVZb5K3TsLf3&d5>vuwr08d z$1Rwqqtp=TKMl;CrYq-_daCp0*XX9D2t8yP29{~Fphwk?gQxDTzct_d>Ba}k_dm_^ zxQ7b&jfeLOfhF=!kJE2$dhO@xbWPZP(IlTs_m{~FUfY(?k0s=VwxRoyTmNk*U(9V7 zsTQ&Y2;|8xE--=yXFXvuiqU0Ckyy4n!TR=0_P%!80Zk!+qf=v;KQ=7Bbja=AEDUqh zrgoySJlOJe)4neyyY`K@H5A#q@z!6kto?(qYfoTbt%G^;U=^MzEp~6O(={rJPl+cJ z11^lLBH~Ox$H?BAGB6$)fYEu=$vjF%z}ZGhAoLR9PfPUDqvWlJxi-I9PX$}7U3$## zw{GhVWj=@MKHZ)_6XeXo{6{O6Cq|D0Jd^YiP>pT9vEJ-|x%uB;H`0+XHE0>UHd_n$rr^ZO8$yR?BM&_Wdz)FQ9yF@p~l zbL-8?4KKyl1IoV4xAUg#`ejjUA}`*+T3F+4(GQHmddV)q1~DTKYvQYtU&qi&m)%c0 zKe(=ZIncB8`NcsmQY)d`sFlk-m|-VHa0ofz9*n_?pN%U zQ(o9&mkC2{=@q*vj@J4~RX~rtVq@+?AMPVcb}jFzbIVRBJ`q=yJ)n%TWEEc5|u|>x=LS#z( zNoLR*m+n!Cd--)Z?#;dZXB~U}jvrXGoU`GeZu_d)K21=Z+uL;~deTHF>(AWppTUNQ1VjT1Wmo;PFlCF2mt_h4$n0KFtEu(>Wt75(z-39c7I%I^cwD|wdKN;nQ z>wbv;R?`5^(mjL*B|G3zS$18ul}lWfU#pzDX_E(m~ot=9^i%Gm}md5)s(Fw<9GKVD?{kiJbrK_pn^_T-M%0_GJx((3$)mS=DEvk09 zFNx3}ebO`w@2Ei~F@9RJ3elNhszEV}MXWUf7umYf-^O7k^ge7Tf^AlKk$L9CzT0bL z5XjqzZ8XogVd?WtwVB`PlwG{q`o0u52BTFEfKHT)a-%$jk{Mf(*@} zD(bj^ur$Aq%+UL>d-PaV4n#n82x*3|vp8c+sg|Z1PrSS^o24!K^E}MVWzWE(k&rwG z+~QIx6N`vL9IAQ9w_-laP)GB(3uK{ha4vZNFDCCb{!6RObBb2T9b9fC7`kdVTi_o$0qXkr*yT0M_K@tv743fbOO1@R&C!z|b+StBRrHkdZ6 zKNERU`u1!q^f% zMI8^o9o&&){nPpqHQco*@FqZ?Gs`QoD;%tY6DzWF58vMO4Cg#2jjSZ>4miABSl{9` z)LD#xRPFxX{i&U%k$~QquP{Le@!&HcoEQngPZ=rU`*ONXzM#z9eyyeT@9~DMrl2} zk_|t*exl&n*FW@FDs(zlEtqMxhjv>8$vk;-}W={7zeZ$ zSPDvPij|ng_uiK;1$lo@vHtIM!fy$AcaxrH!uEp!INt4sC;LVRe|pG$z$;DB+^&h4 zaZQCkr^!9dctSekJN|;IFs3%nBsadmK=yU1)iG|bwnsT!6j+^5Xa3>I&GN{G z5W6%>0}$C8S=Z$XuVn1f# z3gP&`awgTR4E6OdQmcuGFQ37LAnE^cfQgYBa9LVH*Bii3E#6X~lj3Po7^hdt06{c{ z-K?LI+MAahH+_SGVBOI}*-#?R+%^^O&VS67<1(cXhL8VUgY>_FWWZdieb46;Gf|8+ zx?Qc^ZVM2R5neh*4+cKoQbZ;tr|67QQtye_i1xL;HtYLfIhmwG+}N!WDb|3K2KMHy zx~n3CjS2Z!W%&MNDX5VSTT(>UAIz$ccVbHL!DVI-msqw`SpNRp@}%NIX(Bcr|5&&xWcq+%}@=O}=N@bv)M?_Q*|h= zdm@f)5+P??W={oO!d7Quk~Jo&5Ovji1XqDe(PNHLK3u+qiWV+hNZZ0>m5UN{1hVzN?k-U5nZHQ+)9{qR4IQjDS7NP!?6O03u7*DrMN zMOkOrhIK^vJZS){0^J}X-;ntHg>?t8cPj1TNvu?lb$fvq2`KTsM%Ca$pup{;mTPhU zyytA@AwA8oFatH8`0KuJ)DoKA-2LuRb+K@^1{hRF)87Y`p^UPcSW3UOsK*owXM!@@Bb+h_toc-0{d|c>qfPR-KW*ITKB%-Ew>jUq_cBcC z>7z_&NHw|_ZfOC#d;%aqbZ@-l&oKdd(kozde%uyfn{wqDw}bKI!tTXrlb7VLMS}s1>+2gPiZjXdpY?) zRFG=o42_lXLx!4fEn2|#3^=4fP4giHy?UU=L+-r^ckX`o_M)AQiXdIiPQ?#zNp_jgX%i@u%M2e^V?C zwlUG=#-%Nt#aX?}XZ3FzmM-#xXdzv%G%t-$yVuCAIvcD2--_Bt+XLd8V&^LCUnHkG zNJLKEP_=uXS#U3Vt>RczWPjZU+Dj@))N90^5fFpSO>6aVZKr843YZYReIGq#j2>l1 z@6tgjY=o!N1onSMHO93BYNiGm&@vmiA0EFg+=`l+!l zpJhCu2M}tUH?r4vX50|*!Lso=z3@a{rmP~AMCFi&r4H%xU0Y9cy5yGdL(Um>sh#+BXJa}&dBo??!C$Zy9@*aTx2zw4hXVd zW9FD?q0tVfFM>Tnmj^6-`>pctQnULH_OCFw?}#XAy~%r{+^S!uf3JMXV~d){1<8EI z7XW3WFsf&aY7pDYmz@Dt)JrWnnYU24YT9|-v&*n3mB!GAT^eOy0h67lxFYjws$2Qt7hHw8|Vr2We>!*JA)A+7e1baOnJa2Wf z{bs*WZ@Xi9Rt;o-%w9$_2S-xxc!$y}p@|QX9!Y6hQxI{ z)$xzil-^DpUsoM|B3b%f+GlJH2!Zy@ix20my%Xjlr?JOqQo*-m;INsEjncdLF2GO@ z6tt!-j{3iBpU!T826PN21DDNrS^18JE5Tu+0k_vUlf6}N;;BrxwZ(g6r=s<{ico*d zI8x5=g&3E-cU1Xeine}tMqN|2Gdh}Xxo#sPA`kb8yL7I&SMiG zv!_w}Owzk%C0E(~Xt3=bXT8E}dZF@c)7j&?E=i;HmM+d0lf!n6r1%h%J+q8oNx@(G zHD>!}J{ZWOeYn0Svl=B%TZgP8zIjmXEn-5fB@o#*t)!)kb6L=`46eEe*<(hXHXenu zQ4$?E+vwfi@gb3vo&pi*nlEppcx$PNC>0+y7h~QxlR^$( z7=NLY9C_2;5}RhZ^|oWDfOS=2Mh!W#7`ECvX8*y;zPrJq9RfcOUVNH%>ap?DQ7Iv; z-Q?YR1c%ZF{>84>j0A#ONPyG48ofBP6bck{HoLjpCX1!BzbM_A6nmn-2IotsWREhA z@QKDh_3QKqN3-cP+vO>BK3?pQtNs&%Z`#DuChR$?QG(Tp^IXj{c4*=sE zGU@1VOq^`@LAOhWP)|>njt2Dq_TG?Ot{saUmrh!nQy?Gb-nS6|;Yq)LLI3eZgM9(+ zo0MM5hV!2MYW(V}w3iSR@F;T8=@b+bR#C^Yd3Px#aOWahbk;o@=Y=ol{$jXXB5_!M z!|MFH_a2QbYGc`p;13tpIVp3ZFEthww|#{8CV8eHTjHLpA^e>EQo>nH<>0UC8(dFw zu700+HoSNEpi@)qxu}^pvpNOlxAk_{`q(F)a_Snaf-FHR+XjtB?g&Fe)1bh88;)88vqz|OJt^x@co+vB*hMtc^ZYcpH|$5-@9g_W%-`?z zcCBHo%^AjH;gT_T%123sbp5Oa-1v+P12_HBG@a(#Xo7dmZv5XUGCYzw=j&H$QRWHZmu`@BXq=7KPbP1Rmuc$Zuhp)Co5 zQk5^yi3QlDBhf{4y8v*>^yLmmnDS-eWT=uG+Y5+5gfR1_3yXGH>w}+^M4?|bnE1e#?!afT{`~2edB%q{Yi6x;SxQk=kDp=vsR3- z5IL5jk&{`hqjFsEIEGKA2?1XW7zRbHX%MxSXs^`#NkqEt5}h%>Dz49P)xP!+g-#Kp zFs)iFCKw0sP?)r|T|jog_@TgJvvn^p8zk#U#zI|RzuDP$fM^*Yn*>cR}Ei#H& z4koFHhSJ4J41f9l2i=ZB6mja{QcmF_BG^8FQ#@!!7R=JFd$4e}(G8L3_Kkl4adny! zvm_zhhe+!g+#R$1+asa|GlqZtH2<&T|32IP@B4rML<{cUPAf99JsMx@xhj8I)tc}< zsTp?%ES7hqUU3tiSc6^A-nq4TS-kd0MMTEIs*HE>x5UpQ=iC<~=-WT=Kh6A}I-ae; z`$=|~b@jM}89ZUCblW!ldE08~Cg1L3)+?{D3CcEuDwV`kgb z|ISM{eq!7Ivi9Gnb{)U(6}IfyIdwJ1gz+`8P}_$D@GHsYaK>QA*A+*jCf{69;9p41 zn$;mQ->%rPi(!fl|6%v=KeTn_y4A7`C8PN&XVSoj0yd?Aut3;HuO0L#5iBKja7?y# zQ9-S!E@9_BGe3225zsXlZ~Lds3U1rQe-TGrJ8_9){CDv$k&S;8OG0hGl+21)+Gy0m zy<)215tbj&W45$}d*n55P8z3OQ2jOU1?{856@!QP-{w43*~H_2|=ebqK*v*M4B>}gH#QuWWu zu=&=Xa84BeMi2*^v0h&|SvlN3_}Pu20f)!k9v&03k^Cz;%P-L7XLmLU2DTlZ`*5M8 z?@;0IXn{Pv&$NbxBIR~eK~W|=no0~By{Br$oG>8jHEjFy^Rt( zTbxT2v6pGe{_e(|aHo|0N@YnNI`9lr#W~vKkL&s32S-I)H@^a;jhhg$so-@>J{68s_bYu}Tp({js+Bj!#HiwXDxt{{hM%H57CB3-n@6s#X z?5%!Pb~rblV!ThY;>uwUu&Qo8nQW5Zc;(J-w9%{^CFxuKd*3lxGYaDk{~Aoy0Z*~m zaj1d~=livrQJrQ$Ci|h*6GbE%J1Rr(K$-+QmVFPO`+7mX`kBEks_}yPXL9~TA(Zk7 zL2T9R$d8FByDyyYq50MhxYwMV-1+Oo!^RVJABRtDo;#H|dD|*~mfC+4YsadBE_Bs_ zyk1=9LFh%uzspw~no2*sTyTE126ObH51v_h;TrDD(C(UlxA0Y&H~J=?_5AaJe1Ch! z-?x&+9Mm1;Z)9Y5p&oXT@!NkrqIPI+Tw%;Y)z9jyH8QXQp_srzo zvEvbQ=O%6+4c@Zlsc9B@!}&ey;gWin_6w%T=$S#|-o~?U6PxXhzI=AY2d|ui?%nY& zW1DC3t}UM@3A&lUVWb$HOq~Bo(s7|q5h-kYa_~giU%$RExt7yPgFWYd_zUw10rSEm?_}g+}jUm{E*`{zQp8fLVJ++hv~PSn;SQ995pZ_g^zXX(Fqp~uYa_` zDgM+7TRoVWBNN_(>FgXN!->rXnMis_=!)H6yx>XT!j~FxeG%Srj&z65=FJxD4dnuFCrzO9@8>w{UQ@?K{J%!X^4 z3+xU9{5mK=jLXnFt>I&XQyuxyNXk_h%Y{3feR;13ShhP1|x{9>Uba$TTN&g(2KIW zE{4B^VDlz$DIshJeiBQw^J5FuL5t0o;F7eogfpd^g;;bW6r{z5QOlRGp_y0fmY;`Yp@IB`UVce|KuwQ zrh}Zhz*Gu7uM~6cWs`Jh>U1`p2eXD03qKY5N_O;q@phytRvUyHdf1-o+?`(*G`N8e zZK*mN^mkX{yd9aD)w1)hMG5=!HEvG)OhEaD)+N$I6OG#fD`X1aGj%` zr(P)-gN-KgTx9#E@)hP;ik$u`01A*nMWR;?ZvqVM^A!w0Js`EzpTBpA61=pt++d+Oml>O-nH2*F?1R59vqyn6t-4DCK^n} zBqY+~R!H$Z(-`khD~((nHfb=vVi@m)OVXPL(CmX7?EGZAo>uI#)#P8srT4|s7$~t( zj~oz_tfJw&P9UQXi%}`o)1jGP^kv&xb{K0go1}z14F;=c=S^bP7n^nmtag{PH=&24 zhO_x%e3=$6orLVf$bZ*Md#3I7b{_ih`p_EGK$a^rtt|`gP2|PyGEKy94R8`oVtZQc zMSAGQCD`k4EQ$*4q`z8?o0|T$V96kq#BN^0bF`yEi}b%o1~!NcG5PGg=iW`_fRKhZ z(KPB0uYaF`Faxi_uKReDhjlGLR`4*sJouk2@Y=_RmUnAHNf=*^UEJ1ILSIvKB5pR% zGt5A`l@hiJeU15;b5c^1nA8CXL>)2|2NtP_5r*7%jBd%s?a&g|01Q@KCgvSGOhn?| zl$n2lW|r!Zw!ngtxeaU3!zEWY4jhJP09&LZ_;k0si(8)3n$xt$tn^?JAQXvlL9*FP zRb>xr)fs%GB(MR5V2ricuh&=1t!NKDc0BqU#!d&BX|dPd;DR+EXAan+BR7jr5HYR) zBN~#%_CFh`vj+(s;uBpe;yfA50GMi&-=re%Wg}cISfV0t<6+MM0+#Ck?AU^BHPC-! zh$VZWiMeNzlz^(rxL9p)>PfyHha*)j5#u+pape-5!`HR_Bn&mfar06( z2-CG#-ouc1>ckNEe#tS?I8>3|{IsIXdQMFo>GV<_Vxc+oWvg^|ZO6=_c}KPg5i2qB zc%b8Y*XpyUA)53wGUZtJxcTY2R(C%1-#V8x9YWVaVpSO_3Etz1BTaUylJNY=j;Uof z%e^tbXj@k#Y1lkjhL+I(2I;lf@GbU48=usez04a=T*C*MLteAH@nwd->>zZ?t>YtS zmoum1XJzXWcGuWAoQ59T{~cPi%WQHA$)V7Qt!sX>Ao_9hR3dar)O2+bV&&7;Lp|A*eX8aGTJjn(9fV82bZF7@ zCJlfmqtVLRx->lFVN4|Ue8}4m0K0t~c11qS#d$pvqgSg!TWVQ4-K!|OVkgwLaOGa!$$!pk% zpI+S}CKYLjU6X|Q=*e^6N$13*rbz>V3hdC4FGrHj))GS}p+*(CO-tILAgW8c-Z()b zDp@;8BHbeIHMHQxxZ1kGF3oMxEB#a+6{!~AI8#P$mSVA! zSo=k!vh8gKGWdTR%$`qSTC}7h9`REy2A;%z9VLEizn>_MSt=!UXov@NWK@fYROBKm zvV53&j*atSlR9{$`a#13lgd_LwTfsnNN7aqgmQY76k|jqAK=}e>CzJH z>RY>1*Mel39@K<2d}0@mv___}9wvP1ArNn2v3w%;KM=;p2;E6*c!;YOaJQfR&k0yw zxV}w6&Kn$RFoShH_!B&0k?Qtpt-cALs9H?& z(%em7JbYM75{p5(j-13cU{OKVV(b!>zqWvU_8Tc<5c1QH>;;cHbXfOjutPxNkXezoe)avi}-1)J#Z8SG8-WM{tMng1zb>UG%lTsXG? zIWYKGjgo6o1lAFj-+F{lPo-P{!l%Tk?ZjVCWzCFVAas#vtcLqo_rWF&CgFJh*~H;I zK3JjaXOu6@&<$&H%{(=rT--J{<(V%)@b&Z#9eF=`)I|k<+dy2q68|_Ae@?^q9|P?3 z$m;bZM)?hN5(*e3mQcuFd+r!G7F&FOUiR{e5hJa3?{M=3$YH*d_ZbYd#i1k)?Wg!3C025@OyCZ+nvp1N{yzR478{Y}r@o>TNSDq=PL_PQq8dmX05dws^e87B|dQH}}A?iu} z;OMXQ!z%Gf7ya-7HnM*CFkweq)uc9Qu>b6#w?j4R6SAh$o3rdyP?(NzLe=|Wflbmw z_!sdr)H2~k^C7K8L?nB ziBL~>-{#M{e$49DyYA$n9`In1oSddbxIAz=g|uUhh7U-4sYuBKYR{x|z4q=7Z<0s_ zW;RLN+BA$k?Y$B&&(Ia0!*<-=`oD>0)#oOl8MEwFscy$ygsUaN)n}H6Y99IMmm{+0 zrK)?m3bLAyBvZ+;>{P$WI}2)^Y<=lJlS%W@Pv1Yhb4L^Gx^DzGo91be02E#$)%)<_ zpQf-aWB!*%gadq}93{>N8-^+5A}xuVLbANO!VaBWJV|$&#`rXRB5Mha0Qp5rI;Xw; z-~!F25BaR<-y=@@e5aw z>1N4wF#%GP)fi+=y}L}0MQKhVVdm28=%e$ym>0NuXLB`WWC!IOTDDBR7*L{Y5KsdZHCrq;OggU_rA~8On@L7p%4)i**)f`%>Gf&C14$up- z=~p>$Ruc4v1Jo;<_M?{hp9HLa;wn3pNXm}3aL$y&Gk zCL?S-SF<-}RVDJ!+3CW{E zw8#_ydBH@_jlbPImRk!HufXeB1r%vgGm&WBN*(w;;h^*ohoIeKa;Mzy8sN1a zLfQ$o>kb3kBi12|IVz=L8Zu?ec!62ZbK}eBrLEAeh!2%grTby!EN+MFj28c;wT|Z2p{xJgKL7WS(q-Xt`bpsgf`Ar!e?8T!X!nh$Y9; zk2Kd{nNifqk!KtUMr1o9B5w4fjl4O!M*?rq;~&vS3if}FB)_h}jB*QinS`10l`jys6gmtzA`4DqWS-Elsm89fR2zrgy%k&0N=* zR_Qp9Jq)#lP*WAw+FWeM|)djojxr7 z!PJaf6Gf@E%nrJ%psPP_{LG1dc%6bU^QL1s{aM8 zZzeilV;oCqpw%qeu0oY`4vML<&&;$B;^wb=UT7l8Y^t&_-h5NuZ#nmAVSV|e6pl!X zPQ#gpMGFC>LzQ^T?BZOLn5_Z5g^m_kj&gIJ4n0ncl3Y=lWV2JrDU@i92h)F3Vsx@j zy@EKg5|0^a4)g;++ZP{jKk?V-YP9#DH zp_-h`Q$(#kihWMMQq*~^@Pm`axLQJ@Ts^HQ>v=)*w&2@H8G^eQOpKTmK_D^ns0@n1%+|Wz;Cn~C@*zs5_>>L@4qD39Dbj8m zi5?TIz?y82pcUl1ID{65TQqq?eycdRZCgXU@IWcK4?(XiVHBQJCg;j=bEAvvr4V_} zWhvJ;U+!^(TI$O91T8t|fW6x4)Do@7bbv58U&TFhvn7QsktdE9L=M&Q4dX!?u1x+5 zHrJkcR;_Lb6cXMH#IRq!7hMP7ST6dQ@rt`&WaE7hz3;_6!I*2vr zi%r4ye$ULK5Mh0jJQWVX?b|Yj_0$!_mZk3}8TKwl`bUB!6=I+m`5(L4N9y#2rfEv< z8iPrf5JcIi+S2{gsaFhse#%P%%t)i${Ld3~l?}7YeO{^^&TMdU`!O z+43oWeqKH2{7mhC;B-x^aDrP((CQUad9Q1~j)u>pO$*#(rjy#b^g&G{z1Uo0VREK@ z-1%-4TP#A>+`A4_`&T+&v?xueTL+aFU+HM2l3%jvm_}Y$SWq1PP!@Z4eJ!*2c%jFJ zEgd+{ADW2(oY@I5$Hvpl&M)eHYe`hWz5 z@J&(TpFi%GBm;!1McE}={vrpgJYVVE2p!;t;@^mUoG!!5j=#Bq$i$>RN--Ied3jwj z>b$!#6*y~9tg_~pBshdY?4}LX`5Qz}9L<7#Iuc(4P8kB&`MMI1!V!eB{yp(^<;=u7 zYw6tt!`2h`T989f4^>HZle3{H8@Q{~C-_$LR5?WAg6_MAa6A$U{Tkp5TT}I!i&b@T zLVn>~sPuQG8sLz3gV=MrM5xwEZC0FdxAPq#%}c|W?<&bGIB!A+fDQ_o>+ zNf^;WEMPS8gT}Lzl~7lz$)6i%k^Hl+*;FgYuddV1jPi;6vc4U24F�KF`Qq-;+`N z`xe$+BK&Ubg{4$p@Z(*9NqVDc@C0ZOv<*ReZ^8LUnscDc4!fO=Sg~FeaaE9=JpmK& z{@k5ytWy8!<+?8yk3{8rgYMzfS1qM3xr-MSM6nu&3au@m*#d@Z*1nd=btT-Eq zDD*G>W6bCH+1gWw$EKbShO| zdJwh?D6BfHh?=yepyYWHtmmLHH0H+4?@Z7ZTx3CK5!8#c*GaY?qdUEP05zY$tPM1! zd}eJ8Y?^{lBFj_QrCh*9wWplD_*4saFjZF*k%{4VVeP~ysX<{OE2r2u(5X=FBU7)| zD$`auQ+S5qT6iZWus{mk6BIkR%Dc!mU<8;?(pHcv&z5=|4Un6o%3!53VhcoL$;mos zjvhY4k#~Kct2qqJLTCDR6RCW5pLy{fvuSWe8yaM-z_4B1Cgll=E?X2f*kA^}Ty zaNQ8vKCgNrz(^uf`>ZpJU_%SXtXTP|H6UTdt!@36Kk5FsTV+u{0p3+Wn{zH&s9RjQ zp-@2Ets%_fNx#z$g%)aF>UBU8?xU3MVUHg$V#^m{Jaa8nd0SD_)-qD7JWhtd(*T>< ze(DrgnnS*1kn&F;i&@xEuEyjZ#@4jZ@J6uOdPsu_RT~-lxmZ1=AUeR71%1_+@Pyz! zDj$?{O64uWx|+&9DIpC_-3_TxODW{OQdxN;M3h-ztgD%iD#O*vi<2&=O=r;j z$8B+-)8q+*oDY6nx!w>ggxfG5k!JbQl^cz?zQ93B`a&g@$~Hb97iIHi*zD=QZEPEkn1&z^NF6 zgBoHj22>uTXq7+v?&EsGiBJc-p-bKJ?Pn{MX(vHzqS@{dmtRXjCLLL{de5~>&eeQ~ z&$Y1Rb!ykk>8+d&Nul@P04aJ#5h?yfI00-msI^YHwW4x5=kAVUU4o$USXKWy0`$Gs z*t2-4n;s&f(APzC417J3&^%VJhz1z1;$v|DnetICXofw-3Xo;&1TarsQS9m2`|g!7 z*U7O`N{sd%6d+_y+BvnCu}t}*{6duhz}_nF%#s^X0?)o`L=nZs@>tgBSH;!? z%Fh_}>rBO8rce=tBwInho+^&csZT~R9x>=q){$_K;Fb^jc8-MB0wR!qy*%Jh|A6a+ zwV)!O6XWgFss?Izg<2c@<5C16Y^2g@=Q1VkGW$%x-iVFmjvT_niIZpDAdg28!`bCt z-@>5unMhOV%>nDPlhcZo609w7&_1Pq)G>K{)q+e6*g_R?ONjY^I0y&?5YdIPMX?pu z5l;HT=^(8ouW-IfPSouQ&xcEu&>3A|cv{S-v=$d}ycmy#u<-vM4K~qQ6x!Kj3 zbrFL$CSo(^Tc`_a7#nep<-zM5=KPFN+8kDcBTMb8Z5q_6)%fh~lD{?ybXgEue zoawVQ24w9Nf|P#Dtc)4g++`Rc^-9#l zp{R*ahNRhB4@&@S$vZNC-W|LA!kW9@olh%T92D$a#FmS8Ek$Qf_)cLVGX&#Y59Zt| zCUg(ynqi$XC2M!22TaRT&9Z5#9YK8izS#dr&H%lfZBu3 z>XZj-bEA zSma}(*?qPLpw_Svq*|X?~P(yihU;+438HTrZ7dVPpC+O$|q3HmdN? zgaSCHRp*t@ZaVsrlUaq{nI5dx2sh!wpLOWrxrfd9hGwP$qdZ_iE$p~7WSohKL0y)m zpp~t*(|+GP+84%XF!j&s6DXe3^ui{oBzaKzn~mys z+rlW>et6n#o;oSR)z&iqf%D)@>2n@qbKrQ)1V)mnJ@}@qMN@TDTAQB-5vL(x7k3`} z=$6F7y4#ffQu=@l+KYqDC6z9qAR+&OC2FDU!q)99+)a|>Cl*{ZyWWsLtAyD*=0(W0 zheiF^-J|kDrX0hpY=j}Z_CG~nn&%i zCancgJSr|{&0k;I@TTcSS&B=qFP*=qvQaZzwhRRZU{mrjThebbdOJE#)Rck`3v;g- zNoylV!~EYk6fkD)*lfGPjLwWUp!I&p7itkDCtKfGd`M~wtBoD_{OS59)-0Ia58<^h zlI^XWRK2eK#+-)Pm7^X0{89k9Nixa@(Z^%?6*;CVK7Jbi0RFZR;THJlPKlnp|Q zv9{cYzcrw((Ou?xl%}quPo~bO;dPgpLY*@AIj}!hb8eZHzYpx0`0#(+!aeF!R^tjd zY9=HyQ+I{cXfAfN7)g*!zh=7>y8b-3a?|T%Gz-+ZoVfirycn8avfffXY=qI zn!MnxFR(4fQ@fjP6&GK?N`A4`5AR)87&wW>Q41{e2{En2WHy%dk-9%*rU8~gkwF{2 z$0$x$^xN|Od_VB_CbufjlvsH-wD%|ER=U~aZnfxUH`AywYDDg$$F6;|#=UmK9M!!m zS4Pae2=}5(P1Um~N!N%kSKv`h#58ImQATY(5UW=DOIe$bB)JXlU8w)DkQ@8#5y+8; zcRc}2I_g(|N!DRby}Tt}RFpv7EC*W+pQN^|IuI44vMhaRqKuwPOfX_1x+?UO8_j$HRkr#Bh% zq+C>yGk{kBkxm5^B8QZ{DUx)bh2%24iHfzn zaol;xVIGOY&3Xj&yL$Q9=3dA48;!e=QoxArAAK>+N>nTsuUvFAdCe-Brc?N;%4M-T zMYiGC?rZZ;NHfNxU8;cFwNdIw)xsiHY@&N`^!Um?G@^>3mR!jcdAj*{r;FL!@f(=- zBsb|>=1sgU_M7T)bXw?({wgPNnj?an0Y;YAYi0JjFUAxrTvXngXN9G5JbCM;=mrIb z-hTE^0TMoWX;vD+0P$QynFNmN9)74%b@62(zAQZ?*|p5KcTuL~uI>`XqKjQ(?_H}Mj6FZjYv>6Ovqe95nKY>CbyV6w2XR_j7s_R0#;A8fNytzt;dDWPh5(SjjR7P zU$E5rpI$XBy{~_nHJF)vfJ0u0cL|eks``K`a{Vx2`EDItMdw%Ea}y1UL-x@5PH{$d zV)?j3kgkbnGMl2h<~T2(`o@@1H+bEt_>n!%#Lk!5dV+`Q#C9g(zR{UShN+P8k&Ol? zDs5LZ-OOfV42i<;8K*}sR>oH)&VB!)XbJy1y5j#)be~a8q;DI*XC}P>NeB>n=m9CA zsED8wI!FmcL_rJ)2nZMv5CPpu=tT`3R5T#X6*V9#x~@(lN)a_8DyZuQ>}~(p%ewOB z{mK_OIh@He_jBF9D`Gfp4k5;$QD-Ek{F|~UblUbVh&wDiuHMDxqPhcaJgdXFbgnlR zZtX(J`~LDo88SC|jI{zDvlXd>V#Xi)eJ1x}MLgN1DD8ngU z=xy6JoJeroKPh`ebeN7;!XA#1*Pg~Bw5PKO^VoX=8=%)1I-_g|OA$aMtp3#r(WsUgaF7X?cL;ibFON^}#QgV+S$6eRLtc&#Rm&^(?m`TS02@&XIRPTT=e7z% zse^Iuf^NStv^0A79vZftVVB8UCqu(5)x|OdDgtp>$Vf6D6JhVIEoqhWUCJAE-TilP z`PTt;Kb(Gu%5MD}&-VK|Q%<88?^6inwrY#c)OKnw;h-k5PfBcB=XEzM!09I5)e%n> zIa=QoOBQQk#KQw=T*wKzvw@Gf2ukU)Km~ylLBNIxKutg%nzXD;UGzYVo@t;1bz^#s zATePA+Z!S;(ez{|vov%qSMd?63yBr3v9}3_uNeKRW8mNP^QfB^#MXJe*aJR+B=d~J z|1;|HT9_Q62Fk$gco}{FON3JW?Bc<>(Y-e@g2#cp>JXK;wkaPq_mE=@Bm&ZgR!fj2 zs?xG#r!MVQ&%eydPahIM|3SXgL+%z}mx|GucAsRzw+K&&3JB-GMD&|`m8z434U|qL z(8R~Sg!4n@!>F%g0ge8bxJl|eJwakAwP2hXTF`9PAyL0S+&yIdpSP`wxk#~6MgSQ1 zjG~JpHX0Juah%yRQcfNe*x!lgrqMu4nm?%(%{-OnjlB?rgS(Dt9Z*M*E&=^s@nRq= zJq59pfIfx(_|!Kh_7Vu=KHm*E33$nY3j+iqKv?$xd|cYpP8I;+O8{Pyb40mb>pXqs z3{v&HDcspDl6fkv1gOoutEYmQ$B_<9uL@z>SBo#bn^?CT4%TagA&lgNoyM6GNm(71 zH3k>0K}zD5^;rsD0yMyod+AH_k0UU<1M@bBV|z<6IAPS)+nm zj5$B;RX~ZQ?)DQS8$~(JmUfp#-0rYhtN2tT)Fl}nYg(L z0M1}W{#^OTk$Ez4b-_U$(E44;{x%fXtreDi@GJr(D>Pp{fi$dXB8sKbs#Au!uX9Ok z{l@Zt{=3Sab?$nmmCV4J794sN`X-3G1B^L%CkGsRRk9aJB$%^|E1ua@o8<}uYiD?6 z>Nype8TwqXSouPEmhBeuobb13gD5IG27|MoTif2Jz9r#fOs2i|oj48>OZ`@WkhKyC zQ160wPtz^})I$iV6_61}lk5||aR@{1qgHPb9tb1-@Ruf$Emf{b1$M##r2dUO%eA`> z5lF4^hdu97TTyGeUc~T&t7&)Ft$=Y-=|>41woyEp1+pJO^wP)Kw~=rW*>dD=`9<|} zkZI2csWTgNjPGcVD3;a1*nX6(LV%H4Vh@sZOp7W(_Nm8O)Ux}esx~8SHmaaKipKYi z*3;H%Ns$Q|oL(g^;lY}XWl$_7W)dJzqeUpBB^|G%0$W2%vm-#nD}uPlHKG#N9a&&s z%vDiX=Bz2$(yIDZ+ha97=!D2Ws~q$l=of|2(9*86s2WBdh_^fa&tjI_R}a2V6W zjZIkCUnAEdL~P|x9auf_rUS4nL_v`0;3bTSAU*3DurHZS=#1Bh1*i*g1Ql$f66-M0 z$Do2*3{N)luKfwInXpEq*engVrxrQ#iA|^m_84iuJX5A-Huel73LV%&;;l734+Z{( zwvJFs5zMza#U%RQ4M4LC*kc(H76Nv)>Mv}hHpI7KliTp_Wt2uU{G-Fv-08XnbxpDK ziY?N1WAb?y;pWSbnB>UAKqwf5K$1hoD-i3WuRK)e{DT?x@SKs_D#abCn~1X=wG zlU$2{5m=)im5^@e*p1fADVDf-6Q+6gEV*VEO0oy6O0O@SuOLMu96#Y4Z`E;u9wRO8K35|y-e1!8Byl_lMOWI8`x?|ZjuDb%oR*H|E zAR7NeFzOC}R5x`wPoXItbv`e;u$^aL*-9zCdc&ynIeZ;IKhMP7!*bAgw)(ph=*v}X z>XT3bibbXPufC0|n|nVlqPMmAV!vjEw)?Cu8!;1ZfvAXN1fp3Yh9i*P2;lr3z4aY2 zvO>weu<3$$J;+;c31|@Eqo6mW0@w=x=u6kk)w-q9(Dfqka2vN2Y%#V)xA`@eXdIek zCqB#byU{vDJLGLBQ<9k2$A~=h27(hjH&^FE9vMS?MB+J1v5(aGtV87{P($kfa*yDR zSxEDyzR|`aKo|%2X;}i5hY^qR$9DF8+iq{cdBXqQ#%nN>ZDvHbzEAM^uqLxjekd+q z7Y3PKBafI^*xS+G+tLn|2LS-8Cj3AROW-$Ko_(X7nj6*n9w5zy>L)7*p1c+MiZ6?K zKs#!%+YwR_lME-(bNvcBxAYnf*xiGmla0!FrfuFmy#KW;S@Pb}5a^JGuk+!G3&)^g zILvG_7zoF*JB`&Ru_55!TqwJ83xSFPPc5-n_>q0mf9aFdc-0Pe3uYK(@qY*4jB`ZT zlxUNZ+pO)!bl4bGpNWp5g5VEYLkC8+t0F0V6^sSsi03QAt8_heAj+lH*b<;EbWq>o zK!gH~ttBXtmM>(;9x~E>18~*%{EaLcJU|B6Bjy@XlvNlRV++tPDws6**YL4(R8r*A zNn4h;AO#pI4Hzhn*(uE=Cm=SC;^<$7+5=6T%wXOhY~I<~DEiajIOGm*;)yrxj(Azs+cOEQHPYVIwoZQj*uhoAU1R-! zJyR@+1^@nJZmpc4NZ=jHD((sZCfmq}tUGD?HWBI`6xh14kxWMz({e&C3K0=0`P%$m zZ!O?P;2|A;f&FgC+qM+l4=IxR{>pu-rYu3n$$KSR7k#LltScU0*>*gr)a@zB=1)NQ;plR1B}R z6G$|HZUKu&m9FZlYUjP4~bksfkAzYI$VxF8AqV z!^K&S{5mlZK5{aeX&blIu5aL81l}D^tmIMMQJ@sz4Dkd_@D2m);)3nvjntaABDyg} z7OVANYZb=+#rEB6ud6iJMu|xq%~+f}{vX7;-;l%+fNYOyV;6o1k!I49=b3`(Qq&q0 z`GhK!Z!v$o|O_cL}&S_VtwKB({1$40*-T8X^>b3eKw+A5Fp!N%e zRi&tFckH>=5ZlxW?RFUJDXIun*d;5Rx~Y~U5L*c9Fw+dodG>WcwI#?(LI! zJ_PARbdZ{<;feTso2ZVpvF?f@`JyhppMovOT4`Ie+mVUBr>-8bO)H^rs9pPpX|Vul z{=QkmDAEGk9L%VkzQ}Tl_dYiS;D5R-O7QHF|NZ4&0V_frLlh3Xp4~LB|EsdY%#v`t z5z^!EL>J_QQq;vz9Nh9{uI(dDcGHpa+|_W%SO`*nL(J}p^a)2}&P*2S!1T{3wh>t5 z!}!*FmVINFW?wS@YDJ<0&;0}sl9e=;o@~%Y1hS`ehr%0M> zU&3DEWB0Z?Qe-}W#C-px)}r?v3h_9#W2KFVqm-y)aVUa14 zk!QQUrsR_@l@~5B5e$J8vYY0S+nVv{&c)<&|C#CB?g|&zHl!$eT6ne+MPs3r!>x11 zfczq}&)9uR{khkjsQlM>9qt?Qwt$;6*5aV z%-E$tdY^V#C;MT38CncaVMDO?7sb{b@cm*L`Zo&MqvviM1PGkhR%vy8D}d}gactFE zYpQ4m3(B4RyVLqF%BMe$Xjssa#R6Y~I-beORb2bK^tZXgxTkYAX2*Dnr z<~`9G9YO&qtS`ZN*<8h|P?ORT2MN>>iKo2QJacu)MW}x9dmANf)eA#{I`@F#@GM@MC*|DU!k z40<{!k{SWnlkfeCw3n*C>eG6+D>xFvT=4$Xhi}R?$h<`$%5yEbT4RuBJ<)!<6IVs_;Z)6+?tORC0`QEGAVI5p6K!TJ}O(fOjdIp_r^Qd`q z9F+h7n)N}nK)_P{F2EDnd?|Rwa7>$#mNKMcrGNNIOL*Y&v(mXz;upR*qPv?0mX{mD3ybp5ySnS4){Q@+#|SZYoozkmy;bN zVQVQFXD}B&5E1jr2Q()tUSbJ9xTWP37d}!Q((_G)Q<%ppuAX8!D;7aLOE#qEKm>xo z=K4nr9%+L*fdy#&6Kwxb$B;k**R>8c{KCe5^$ANturPkpCiLu>=^ zs13tDP(5cLrzMYR?;%&)l7wiN1|dPn!M^T~ljF$Eh-Gu;Xr8pz@x|op66(;uWNmJ& zLNf;V795EoMH^L#N#<#D&n$VwM68DS46@iQbyIcFBVF{Z8e~D>Q=Ue%J+Fig$Eusa z{8=K1?5j2y$!HM)3YaIEde2in=zK4X7eBeL2mbdOME@xa z&kNYOS~hC^jKN-2fP(KuQiL)YmW!)}v+ej&233U%4s6GCHJ*vxD|IYqh+h6U2N2Z% zz*g>Zj2kL?wRi@G=#@u^@u;|ew-(2IhD~ckFt}m>@4ydtw7yO7=XO#})oLEVMm{TH zP_Y%n;rSTzON`Yt4AQ0Wy;aNW!~9?@TY?zvCX9|H24D?@a(v7vBQVD< z`*b8isigI57V^Q}sxmX(0ir+EECb$kFtGkpgMs=CSTl2FPrgcAV>{9$Q&oi%Uo_Ix zIsbw=u(Z#Hd1(Qcv06Xq1;DO_+cx*W6m z+Jt5hG9Qwa>0>K2RiG9hefa?|KE8JZ)IsI;$5^&a3U+Hv^^V=Z_|+qK7~dgmS-A;;bj#^(a&|?U0L-8gs^ct*5ZoLY{8o z7zUIqflN4Za;!>?X=(v09i%VSo@rocYGG*o3p@g?KyZE#)F<~|eMO{`M%0zYmzsTh z0kQ01pk~G!{M9DX_yr%-q=CV4DzJ{`pKF1L2np~oB?$mdYz|T-Y^VrpeSb7%`srfA zavu{wP_#R9%Su~#CFmyk%`z_$A1t|at5^!HUo7rT;qiS)rP8S38uW4U8Fi7i0LNw< z8;wttJa({&Jda>G`eu03!KWE}jz3(JcZO&@4^jOZVf_uWgg{m2TJh!%6@WslLokp) z5opLhf;6+c9gj8nL|rfeO=WsG#2ds!n&FJ$!!iIIfT&M%#gX zhC|!#IRY!Bt!x3_&d2tfwqPK|w$o}D=0|s(y>L6P*S_+gs9bsjyU@KccVooEL!Zum zPElb)^yB|>GZ5*N3c`_@TQiD#RYBjRgJjwfEj(MK9RjysdLr-&6)wdA@D4f)sjpWT zA-k7i*A?mK`@1AFXwlf({9YUh2&k&_(8XxV=@&0!5fZs-{_E>K-z zSPtTXF1_R$yM(j9?87ci?vhq{rd_hM!M?om;XwEK=a&xA0F4#w2mfTW`gw{UGzfj5 z1n!@&e79^3Eb4r@f!kj4XU3z-=G5E&6u#8{{R8FHSs&wJHmFGq&ka5~-q+w-@A1(J zI=p75V|at5Rr-Uq(<@!_1&iFL+n<~tpK5a@6Uerz$b<+2EQ4Mq-aYjAw!x~5qsFy2ikp%BvGdPp0vq9)?8^U<39Bn6*L$oy z^)R@364bQcH8cL|JNNV0;FWYt7;#lJSlAPrD z1|TI$eemdGf5Cp%IJz-OpCmAd`+nO-s99M1R#a99ejCRPVOk zY|HHbx;_RG-rU?FcrrW3GXI?Zdh(-v1AAMQ)90`oPHEzN!|tHhk+O&ZoRBL)$h%{a%`eiw&yea>ay8kt@DL9?@e!ebg!qt z4OYE=o8syBB~3Qo3VnfPuN*@U2>G1a1$-GqXwqDHAQ((gSS6SfQmk-WyT>?bQsp*} zK;cJC|Ma1gleycTSi;dvU{P~*((UR|{P6|+_&%(=G^4*<{MsJ>Uv@^VBi_re^Af-4 zSO33)GGaP^bXZ+?2fy`9u{^uKu$XrJK*+lbq2tyZZEfc_*+~@B+hFbZTCQVu{B!O9 z!bnYB;CLwKWGZ%V_E!P!iG;7?;7tE~>k?i7gjjGqEJ(*~YVbhaL`or3sz*Rd_i>JY^>+)sGL`& zX*AlMf3%$kbo2gM#LqeD7e%Ol^bX?x(mXkSNyhk(9>d15&kKQ7DdURUFXx?UmnZMd zN9bI1b*hn`o8GyjZGNPjgUOLB&&y&|9d$&X&yDFIdFqt z_itq6mo68)gZBBcL2%dL2d;{JXsjytwasOj{*&jb19iUw-<77iyg@qMN;;SR_Hu`& z`1Yg00(bVJNkEjDp)x8aS?Bh4ZrR&uXunP3$-2UNTG0pUX2~P&d;6dzz46lSJ(bC= z5W&l@)P=Faxq)0V&spBEl^peJNZUASP`BmD?zBO20Q_p1!=oX`><^&@!~3z8SUik; z?2mZ6OiN?GHg@Zd+1K^oxth8k@5Dd)AV8qrRlQ#_wAy=ITsAqoIKO{9_LkEvq$OTm zd4`PN(>Es3(B9=jez?PQYn|^BCinOb)1#8Y7~fR4lI15{1GY{(I8WOI!^ihP*Z&g8CXa|^1SUYZx|bv`#lFUn`DR=2nzq%70? zzo-?#{)=BM$3b5B*oVD$#0fq`PV|i|Cqof!fRT{&%oZB zADD(3qX0~rllNA(}p+7AdQ|#lFiP0GaIa$g6T`6vljR^E-#GiSDSr~y}OpbT(HjdZiHDLA?4N> zwmI?G=f$-SABTV4O*psou5VtXP5uGtndH#5YYzUCb~rk8eSXM6&8W>f$(Xw}!FbN& zfY`WYTk`HXMCr!Fcn)6wKG;(g^N)Y`8SQZhrYTLkg-%%lzBC#N0>!@TXZo~HKZf=Zo&prbjNFj z%h2fq(4Ld^G6sFm)R%Sgds!T}$v^=VCKWd1FY^&FzMhCm$nhg(3Bt1kTjz`RaNMsd zgV&13EXnBx^EzjmvW&gc_WNhO;{Wb%kNt7BaQcgl*0qcj=e&RK#r(J@JpLp()Eet~ zPFPp7m>D3*O-%9oQcnAxD>&X;IB%Vvbr$P^QI^gR1J8#;(qHB3746W;({?CzSFvkb zGS6tXH@fcZdhzUm|K_7-w*?^iyr!UU+-yzn)pwT0_^k67+56QU#m?AgHQhAxxN>C! za^)mm=W<0X^<3dU%umfvb7uKkE6{t9dg5dEqpBy(8u#JPpDVocC8c!TxJoa*`JUNf zX5Qy@Z=njOoUc(k&fOO%V}94&xx#(z`IAnmoimV!gXh;I&R9Fe5hEHdC-$_{Ol_apI$q-uhZ=qxlQ8a@F-rzZiJ56Nuk2;?U7-aeX|wbs>0#%oexr1 zZ7dM@2@CxJvs2|5MfA=XeZaBbb!w@}raST>ec*XdO@ijS_1juwk{f?3@blP}HE>ST zS)cQIUu^HEwM{1*0t8F{Du`h>H6IyU^Tu&qM6fMOS6-i=y@#0Uw8AVZY^Qj(?v~y$ zF?F%>o7=K@a1lF9UtYiC@{Z$H8rfOO)W@dGs zYY)Qrba&0h?81ELk!-2P6=>#mo{WS^_#wSsOY^_Flf6nP~Q4)>COX7icYUM zc-m=YDqW{9t~qnb8%(BODYeUWS>T_`h;4h%!+Bp%kY>U8vB6d9z^!1Q02%1M0^)HD z$HYa3i^w7O_icL+vPs!l_-bwpyf0XtDZ2KUi=54yh=Gr0dB14YL9zn!y-xSx3#5Sg z?U4UzuIkDv@ z&i_IG?8XRBR$o{@=KDP^Pw9D)Ma8L?9IdD;N(^u0CcN$%`Cam)PqGQ!`84gU4su!& z-yOAcdHCHE&(f&f7fW*Po(N)NihoaY@w1G)(6aa1;D(|TSyonh4mH^LeZ`8!viggX z72UJNnSXAvTe>W;J{x!W-SIKfic9jn{XvycmmZxk?!CPVAS9^T_YB~Fu!qgew0|aJ zb4SgjQoPI7aewyBoqqtjHzZGA?Fv$1?!CDFZQ;5sy_}3nDzx-EipMu+jRt#<-+xf? z_p!VGo*jI;VukDnAFMxsd2Yf!@n25#pTC=KlJc>a111FxXKW( z`6}pf`lN3O!y1$ayxQU-&~o=2*60Y(xL?uctKX>+$^87e)`^8G^B)f^kL_?uRa?u!0dM&GPR&e%E8)Dk*N&hAk}lA_2KhaL1MY zcj5GkJ*U?n;+vhRUv=q8(50s>(>wk4JUth^*eqaN>t0oC$PfyMY!QP`)%K8UVBytg zpVegmj0uF0Y0~AGnCX#dNB&a{!ZJPNny@MXE2ZYl{Z19p$w_0n0zkJzyIhK4JukV? z>B$C{qkZRQZc6t2A|=~HIjE+uBQ{||gOgb6GRMex8s&L*n?(wv`4^*4H6~Ac$+LS= z6X?ZCd}Ycb!GCJKm0}Fm^?yM%8G)wqrh)O*!!}Um=2xQ$ zPy!s>Y(j%c_tI4RC)nB^YWw?UF(S~S%4uJuzpD!YOprw)wIiGg>YWVrzocUIp&A9e z%`V7E_wDsNWwFIlO~Bu_#}+!PVgz?&MpN(xa$3F$`hEY$3K;8X9i~>`P&KqnDYIiyRUFNMg?BPml76NHnA{PuUDF@>X>I5$}YqGTRmy=7WRT=K@5pq{# zxApe#3%sDCds_pWUI`UolYfZbQhoJOiayTMCHb3jR72$9xs@>@dQ#u6;3a@BTvRv1Y_)qTn&A*2k8cn9lbi*E=Em(+|=3{*E=Qsa8LI zDvY&gZyc$ZkMguo|i7d1maRk`D?VAOp-u4nr~t#`kGbCBr^n<&6gd zrLgg-kPegp6-NYHw@%yCG2%QGm|(N2y8GIap)wNNuYSQ$$N+fbx~_)=&6t|$4wRzG zqBpi^FL0ZD7ah)~%7L1vE+Yp*-BnNoFs7f#Yc|)!D=2J^v!$3wEu(o4gdY-a+} zjOV~X!;B#n%DBi9!=|Tx8VZe94YSEk8!XWhAa7&}!`#g+zitH>e$Zi__hh^qT8#R3 z4z@wqYy`ll<7T+s3xi{6!^5{hs->^wBLKlkf!zT%UO*vRYr)Sk3LEIRMj!n*o0$7x zHajM|)#WNxHyKd?c~2FAhI!~z6`h;g??+h5T);W{doEnDdpQeIY*#61tcUTH?}<+9 zcMt>TYq-}U^#`!jvCF zSSpcBRGJUT%0kpT`B%gu+qcMRK?ECfQ2zIlY#!NBi9+rYDJwhA6FV(udbWZ(k7NJ= z?$q-0AqUvuN^sGsjDwr8_A&4EP7l>=H0SV093?S!c&_Z!@Cb#0R{o5*skw@%-t`wz z;L47j`}wGDL1KmDdI6|6HT|ArBQrMMOm{;-oRI5gU?kIQMXw&8P$BEvIyE@)r6&t; zHF|7ztnh(}qsLsiN57cqnRb+7By|OA9eiTNPoY$EvVqYE?og@7CXw%PsUw5fS1l)n zu|e}>1@qi6&hmiD4`a?x(Sa0t`xed0p#>DuW&7Etp}4;sI<@vo+v#o+8t)7x7?6%w z=1ah?pKRT%ms7t{L6X5mRVD0>vrYb5y^bTo|M9@bzMPF(dIp;9%jjMCH|bWv#E!$C z`g^_px4u^+6E5PTem@<}2O?P=BpDw9b9;tx_A1In{tT6^R&t-G0a&4rwYGY}=X?kS zCj`LGr5K}y*N5EtL=<;aM5M`GbPWy~r?SD|cyqi74JAC1U~utbI@`w*Jj<^(zYBw_ zclba8z~tr)DMk+YI$k4{P&vLw7NGrRAv{bE8P$lI(X;P?5y7)bj5f@(Wxoe|66`p8 zTUqOkl=l`7IzWt)=nXf``IumJgSH!SRxdjdOW?qORxA#`qZ!1xiJ8tUc;6$Sl)g&J zEN4?}f>g*vB?wYzh?&6I-F|z{y5VEfM0j4TEfwfwa}Ww1D2ojNshiqG>%IBr3=x2h z*5G}aUkdax-uaeio`A>;B_W(dOyS)Tiuau*7Mw3S{$sOl8qOu4eLg|nDKd0n_Cu^w zBpjTkzeoR`KtteC`_0N9BO}K9>aL-7*ij}w+$bTVP)Sv=TNtko zxROIqLT{`uRhJ8x!0K@h;_LX9hGB-Fqj@l3$r1qqdJedPbM<TC(Vw328x^#n&Uz(kjE;6xoyHjG~L5jmnBd~^cg&2^5H5o#-&@-^s z!*5>35A*P`8+aK68IJnh26J?6oQ>OhFmZ+8(c+VR2&FYM*0fcj;oK+3B5bnHaEEp{ z=c+vn>Xeu{^3TMLOu+>VX^&NL<0d+DOkn#2c#vu{i8)+sHxsA=^V(t-mvI zca@klYI1kpN4m?*T4P^1X64v=$dco{YLn*2*6YR3-AdD1dYUHLoBA$l_i@2f3Yl9tT9{0TI((w~duh zEecV!+zU0#n`)}hA-VS37Dvqgqv9g^#YshDrN2$bH-B~isFTtv9|8Xr_06NQWH2bi z$*e?oT7ZT6P@?-xRnL3)hy_bdISgQ&zz?K#6KM8|%Br3}rQe3t?eJaKO5P<_l35Sr zv%xkXNr?k~Jc3t!9TzWme92hJ;bj1)&d}9DHX~5}`Y+Xwi|C24 zxUwR$s>pG{;lD1N(0qFen|vc_*HSi6DuD z7ghM(R@>VEl1`qmpb2F1$)3-4EuR9T*@a_1iT*-pDGdIc!sm*Z4P4T#JjikZ`r~Tc z^W`>{i_+LGNl{A$(w0ZoP0U>)gP1SzQok@;pj=A=mGH>^NY?7;WVN!DoQSk62Up0* z67DWjDS#k3ZtP?qA-Sav3aSL#(WnvvK&C-fLNL`oEA9%!qEpO=$l=PQXgp4>ctHrp zaRH=o!C)a-fB>~LN-&D)Msd3=fg-Nge2F@ly8eQ6H z^=bjqu1_V_O`tZso{iB37QX;v44*;soS`#fpN(L_#~wTCxm+E0nAAlR;(Ku>d<+K$+hxQi z1;|=3WUHWKrIak`nrgqCUP~a3>y?k_m=gY9s9Vhe_9{ugVMUM6kiCSU!;8}8qm7}j z8pBCV5#Mu8;i8c%n2!7SQ^3|uen4)kMgD+ZJguSmWo~+BV9686LJGPsklVP}kS2%= z0I&M8HtFTBR8Y>jkThkGB5~`I8LPniOH66(HZDd@0lIQm)5dV~zF`;vv0VxnE7z+X zyl6Hi;_6aBO4}5<+Dj7A@&fp|2*sH40X1E`8z!$rp?lARY`9>f%B%G zKvU{Q=7QRMOi>!~eH5^43S*N4p8gu?#D-2?1fzqhH+|-EVbU^P8**i| z4cqThJ#h3arao#}?~vE7s^x;GAda@(S_Vn#S4Gi^UbP0PK^J2(w0JvV{bvC95KS;! zOB;n)2>5q2z)-G-d@*_V@g%8*4!;D;)$!tcfJ02U{#7oGwK#D(AfL20@6pJyNS475@vfR zaA~H=;|ah z1#cZFe${I0MmxS>{u`YZ%2b9rm079h3*R{>E%|GIzfD@g%|9=(pIH1rz9^L(CmIqw z!c>WE*#N#{}x%f zn=&*D(Xo-nmJ0~jvD8)kV7Y?Zz{V8*j{j}Gc)2kmg`uIXKspL?B ztAtOeKHIbxWnq(Opv>D0#(Nr~%8S|nyKjdEN{ zx}4-DJ5M+dle18av1D1CFsxR}4o8W3{2ZDv*;L?~yAo)BukH@R#VMQjGLPp)LbNOV zmvb2Mg2PV*5j(}gI|IA^AD@Gq_yA4~&Mv~Fd;ot+5aF{x^h|Roht2X4Bi(3%=fY;9 zvP^Rd(&1yu{q%^=pq46n`@fc!g7n7jHTRCu^!SkFhlA~0lCdoG=GP7ke}fZ3ySsC@ ze@YgM4S2Z%OIFwfaDJVV?lk<41k;QahU8D)!mHHYN{ zC=SkIDj^F2w7P+Gtp~6c^z{l;@A}tWt3P{+jc?9?n*DLTe8*rl#;1f#1qZ_=q`flY z=d+k}AKZWnlTBM)7Ox-ghg%~fp4@!o)Q`Z`Fc}hCn9>*#SR!Vg<;ex0FH9%FfjTTM zCx(njNI{eh12N}AYR^ZkJR|Pinqua%SZejRi_=LLoUwW{2{@UytMi>$mafg7Tz(QQ z+po{Cc>iGkfl^F*?~U|PjFS@b*?JNqob1&Bx5XJfy;@qHR`(d^vXN<%3a z2a{J19q#mmOk}tg31!(&C@LqVWdYkRAV~N}v{9#MsrTQhYX=s16D}lwrGZD>C4fB{ zn|xs<`>y#$Q_I~n+sU{%6+Q*PYqAfn6inwy0EvvKji8=?bF~2uRD7#^xR!OuQp?p06FCMU3<+DJVmO+Umi+^Z=W=^v{7HLZp=J6Q{N zpB@OPZluKh2hoM|4eG=i6gR9yOkwOF8}aUvtX0a}o(rRK>;JmzMHavq^3^0#1(CUTdbrLVWp`HXds6*1aD^aXqxWv~?#TqgsrTlm_|7J<3X^{B)zSs% z2NtvN20FOYoGI0jAQb(r*vH#_b!UsUWO}Z$W$kQ?-}kW|sr?WJ@5+ZPB+uUGqz~}% zM9C$G8%sJ>=hc0$uWZROAw?!QmBp>AacFT6JYem8H+%Bk!<(lq7B;MG$y75i-`x4K z1#E&Y^tjGv6R-i`#Fcli;Ytk_7nv3|5Qfg*H~b;QynElneDlPwzh%zh;iIil=e%AH zzWHVQ+(}7jQId5nv+<{_|;ttg{_h!u42_zUQS4sJ|BK-eE&r(-KW{7>02qSsy~f zTs_Sed;&LK9Ow}clW3I3I+W0b27TElGJcm?hxv`DBfX8Q^p`o(USeEjakuwq7YJ?I!vRe(`deTm>WUCXg3Y!^Xpfz5$fZ7)K@T zrC}amq1;69zdIZ5Bopdu)3#j9z7b&l_$08QW8DTBpesnpvp;SxH2=66`gzZeMW%7% zeOZz#VJCyUu+z4A$3hw+8>m+i$z~n4U3j2Z&cfXIF&BRX*xmt*1koHe00NR=gh=PQ z5s~-LbZyxr7B3jKz*g!xnb?bP*F<86-kA3X22+~oChf1;NYX?FBQ`t@`&kXE7)SUo zGN!ARrZlx)`9}_b%lJmyAWJ1F**f)(=6}_KisL)m( zM8*SH26PGOuF{HS%W(`N^^pCD!Q52|b^Kj{3h!yZI zs7vf^Wg3B%6ub$ZC9R80Lnp52^~IYhJOs`PP&JtA^6vnx_7aNntyY-_rMP6nQKZA^UbQf{46l{ev_7sPQ*U*yzH)0 z4So>tfy&soFHzjJx0%PB&4cDXU4IpC|rRKWxtn`tO=z1wYjE#?J2c%_I+-=;fnJ9?h8LUV7!L1qz&hrbYH8SQ!=Dqc2_wdU!Q6cEe*?j*ryRr>b4Tl`Ft^us+BigEM`pop zW6YV+s71O&1Nwt{I4cGBn{k3gGC)kGfqf}BL3{kQ+m9Fns+HQb+78H-UN@ApiH8`G zE2+J9sMhD97T9O523M?py+hrIUj>VlNj+2>kQH%-O)}{2`lwcGgGNeJ^xOkP?+*2M z+Xs;{25EX^3>Gh3%Um48+A;sx4MU7wJIDHp zX72$Rr-tpX*H6+<#$Y|Q3AVTry6BB(k*ZNb#%k0uy)%nmj*9iEOHM_~^26Oeq?R-+ z(g14a~--{GnbiCtiAQAln;8haKtEC@*WG|fB(^*4@QTJt`0 zh0m*)o7-NV+;PAS@O%Q!?rePa`@|4rTJFIF)<%==CF_ zZX3Jk*LzGLjJTn+Ec9Z4H0;IUC3f;)_?>*bEK?m{Z|j;?j$x!n?z(1}jFa4Y^g{VQ zu&v#njE)@8NnzVG`Qq7`L3tbRQphV*4Rjt(2rUS_yL{88^_kyhFdMHz)WC{;R%i{9 z+p8Ra!>P}|Ue7tku9~dd%X|Z3+Jl1#X|)LuYe*fUiGaIq7NGs07=P{Krlhts9Q&b1 zavKYQ5%fNAAz*t18Yj-wcL-hp9^RR>Gx0^Sq3qbuVF)T#ha)3uSbnLQ>jj*+ z)^rAOL9n)lwE`fnP!9aHucVtBzs?)6P-%&(HVb|2a9qB~Ezvm(BNrNR!f#;ZyT}pZY~;>#3aO z#bKhKBt*yk1TG8jmW8oNhWE3g$0c>li%ZdbA0|Ktj944N zQ)oIWHgu_!=pg{vm`_&%X)k6GZ8$0+`H6K+Q)Fsf6e^O%RTdhKFfw|N1OW9}ITH=0 z3sprQx5*ZYnkIRBv~ZWWH1N0AX^D%>b`?w#H+o;V96q3)6~Uo6$&W9ao~!Sc4_!KO zAZ)liVA4P7!sRIr4-(?_;XPh)d^jqE;TDpwIXUCMewnZ<`)&i2l~rLlfYAU(VH+h3 z5PdEXBib7#Sshds2pi5K^7H_!gWPJc=2QL5w&FQSvZa{JTu3cyz;3#nom4o7;WDjr zGtg*aczU))crgpJ`|#^3X;Kn_WqSkSrnG$H6q)mVLLlb&005c{P8g8tAd-Tf?C|!> zVdEk8JP?Rwf9aoV9nWVdbZqu-2@gZj#3~ z>>U;eT5S#w9$tUsP%;6$YPqET4M)Y$mF@u3e5~Smh+nkKnN$0mO$x&=CplzIz5n7m z&rQwL%XU>t@+Xh1Dgi%uN5id1_-&$THZQ~k&1TFLlf|Lej)zg` z-N0P!IO7Fr;gz~P!h&?tC@1@5F8054Qed=y+_3a9+mEMq6}UtX&kIcJVyDvY6)0wVYD7#pXS&HaB|2J_z&u=~ z)?OKo1VQ4g`JyJ~Fy`H%`pZ)w4>4Iv_kS{W1!bd8%0Ufh=kcFTe$hG-KvEtFD2u+KJK3Ux2ARv1Z30Z*J| zI4pIg(Dno$*TN<9*4~LC!Id%6fNohxYt|zen2HJ0trwspFcp(fx)%nw6VU-0Z4!1; zFCvLeU52Hw5>A*Gf;JP(0XF5VgpFCy)^`!+idy6J1ym6v{oLv(B8Ge$dQoSbdCuA# zuh#08xYk6W?29^Ls(G`-m;!}~gMg@T^HE8`t*BoLZT;=A`q?%|ptYxqQ$tFMe}nes zX(=xtM2uMgVp#LS=5)S@+ulRghjG^gyo zYcax@fk}L;u6d`!=Hi8mvKP)6mhuvF_lSpWV9%`-60txCcJ(Yc49V>HH8ZXlFARt> z9+sxh3z?cJKUk}EPgjiDin9!w3wOSa=@pqDTKF)?^A4pR)9=<&9)|LoiXcyk#7K+G z+CBd z!_7sHz8cda<`sVQe1uGRM(f|(56$F`#9L2XDw;-6f~VdTn&J38I_rU9Ghu3tnSEo! zT?$3ySeR&3n`nG25h|hk>tndCu2Ju`v!9aM$5h={*CaUa43~6 z&CH7hu9bEXi23`I!krIb^02`&OK48Xe5kuAIS(9+OR6|pOBrZpv>R!*8x=&Hx#{Qq z;H&0Miq`vWPNR*yzeBn)x=H;@HU0FlqF``q6q~PW1}KvLpK)Z6TzeQ8BB0`LlFjTS z20M9OjE4aWGg*KkiYMV-{Ub4?d1A;I2f+pyIo-*bUK=r7O627>=GV7H09K{$xWpXi zfd6r{G+AD{dHDttqh$Q?t!5@P;9{u2EFv(XxL3cKH#JCQP!VAAsVOfbdD-Pd`a%o> zko(r_USF)&+%3b;FAuK3&Z$?#*pe&bK~S{R`^>WeBy7%LbIEiFQ6{HpEZtID8dNc# zL@5zYH>-#)*at&(K7u3ldf-CKBUskMd!TM+BExA&uS<|wRm%V6Msx4fJK8ZV& zNL-L&c(YRTiI~khM~y8IsNTLak?1RXS3HmpZ~$VpvXYJ7hE*m-CbhZHV{`E zs#{&VJB2#FE?1rfF+J-!G-yeL)DaR?Tg8MUr}Ug zWN^v5?yEgyIvj6JnE*dx*7lT)C*=B6t)u@n){WD&@2KV&S5VgH{)w6(ZISHmUbefc z_uc#n?e**Xw@UnCpo(#!J+gS}iw0rGKc6=S@~Jz(l)v6+r_`ww8>~om5lY2(ichB! zLOqKQ3>E)gN2SN-UYR)D2U$vnCw|wKA}Z6LMSH(?Rxh7f_hvSSa!K4j`0?F`d&Vge zV?^w-6Skm8OkKD-T2R5c&p2N^-a4Sw{?Yo{daEsqj^CN7owAYDT&AtH5g3a1ZxVMT z7aBB|^|ehno~_=K{`uYfG}@Ai;~f)Ri_b0PMZa^p*M}T`|8Jck1{*mO!qiE)(X(=w z(zt&HhR7$6n;+iaSU>mXi}wd~7?AXd*_W5{buDc|-STxIOQ?Z+CXnEXw=XCBri@?L zmRVi<==4hLaBWkhVXD6M$EnXA>#Zj-yOMQ=Kc+EerG7c~;3ZtWa>jb66bSL$v;5<` zU%ap13^1nV=HpFY`$B$rFZqtMBo@dQXct>oFrC(cSkVP+?(zE8I%XBQ4 z$4qJ&HXvS9)n(n{@49mm%e`}7Gwuz#ZJ|1Ri6su+r3X81b6r}xlST8C;KT2~b`~EE zS0ceSYt5DuVup8fxDD1dhUsTKcGFeq$$2}q;WIkwV-76>X|B+Lt3LhtSn+k;jh|va z-_L5a=J;?F_#}7B!L1GP$-5cV=Ffh;#!agXGt^UaMs^uF_&1sV%qM1Y`2g-(1Vj5O8+{yTh3~Pza4S}TX?5|_@!Hc^2(|52WH5CYjc3uY=`!D_d z(;Xi^?s)(G-Le&mEBx54ed~5T0g+3@Z&Ezc&Q`}KZNK8IIJB#XR2p=Yr8IFJ*)-2{+mYE>4!-kW_RB}iER*^*9CC{bAW12=>|E?ShzjLCx#21uu zyBYot9pQxhDSZp8xJRCyR{sIhP5-`j=%Qi8z{X%!upSy{z)8RQ?tZI(Zm!YMRgVTD zEf*LF<|X)NM7BiMSqG)?e{CcL<>^f~_HWm>50jgCVw16FRz#MWS}ecax?tM93a7zU z?2O%O7S$MS`tag)ram4jo%S|Rdo5Eu%9x*Mycr^B#QsmvaxQH!qwCFs zBfC~T(R3l^SJ%Hj*7)fBm8d@509Nv!ZLdGSys_V}*lD}>w>Ni>FTHte`^+ENe&NqH zvr?@#lvzqj*^GZb2fk@0N^`be9PQShhHz)t#~}=s3PZa6J^0x zx@7sHOxGs4spR&i%J?F;Awy}g2}*fT=z5iCkw+D<8X}!TS3WM%i=sB<`ER)2v}cLb z=s@Mt(w+qsnLTcedv(ICO2Yj-Zo|Pwk}Z)L)(X@%v&=d&F3{G#DK60NQ-^-k=CunA zQ>{wG1N(P)Y`VR2jc+ep7iZ>fOV>AlZV3AH|DG_iyB{1 zb#f^7@X@nldk-Hw|M|h;vwKYeuY;a-Qv5vdk*S;Ov{t6~wM{m;$Gmbug z{D0a5R+7_}CHbwYAA5hl*Z2^z`u#$tS<|xrk!Q9_&XPTv`BamJna_?toL#H|NqzOjJN=1UHn9aJ()ocX| zy9L*UI~;kSOWhlSZ}VgJQnZ%;nmk!DHJGY|T-Z+Xif%X0BzVHm-^Q^R@y zCuWNLNS|Tsh;^f*V=GR0gU}L$u9DCjO6@)KZR-D9@U%Cb%mRW5`YMI zmG+=S*H4$-JI4&#$B9}_>dxoD2+;^Y)&>%6RsKDIp5SZM&qj z>7FX8o_da%hLx*lzO)7DxwZo$?w?c($JHzQ7LU2^Irqrg`BoNA6BJtZY!p1dYCSe8%gvg{x=ff&EhU?UXZ5*Myu$2sj`khE~Gzb2p z)LSr8OQ^u;d>+uKa^tYt(QL>? z2T=qVU+W<_;q{s>!sjP}c$T$LKwXDtv!tOirVrP!IZOq*ltLoQS1)ejmEk%G)qH@x z)~F4kvK55rVFBcfs=ymI?NqG@n(awqC!?YBK6h#f^s{&gf{<@k@;!O+4ogkm4qx;2 zI1wf_)=U@Hm$Z+NgwIs0dCCQ3B#p>ON13JU0jLoWZ7Oj%Ln-4}0fH4O&{~IG=T!nS zTcn>06g`1yz8ZWxj45UVG%aacm52y63u%l_9NOl2l{wN41g8f;8fkvK)p zdoHBRX9F^qsR4sd#C#EL1~L-=sT3orEnY8oh#>!_P7vx%JLQcXC>FKwQgG)TD_28> z_!Y-meij*p46Cc}f{J~Z&V_Jjd-@ek|5gb4gOR(}6fgMb3-6$^JLe%7!2m$P&(-YH z=JhrgSIOsRvY{v6>jO=m`plrszb>D&K<6Dyn7hEokwGdMGdgAVg68 z^J{DJ`FAgzv%LC~%r_p5Qad~{M+mu|{v;8fV4?KgM++u$>oHpFKqqaM2oPloiqE|y z-B>w9V~exq+^RQ_^VK#;loY!LzL{>2qG7|fW;CDGX`M=`r>~ljP}4S@_rn5gm$P%` ze`OO`IAm?!Mw28hI`20k&~i|#yVOu*#}Tl#&E$q%x02{CWRc@0o~%7UCJq)(=*{0N z(d8Yv)DW$XnE`1*n6Iuwd^Q7Zg;k2rP~q(^PU<;7Ry79qHL2(#Y-m@qg>s?C;_@C%nS4Ue0BDSfM%|gMPrHOMr`MJuU|4V6#IWi7o3ix z!Rk`-WSSsvt14UP_6X4q3ov6&!1oniFJ1S0U0=QKi_=D{ofb-!jfV?noW`c6MqyNL zAI%EJQ2WMCzMzy5_MD0z~*5nVG}9a5{kuj zg0E+5^G5Dd3bUEu*Qyz4QhB`l739h4TkkrhWa5Cc@f9|~=X1+?6Op?^*Mt;q{!ZX4 zJ+#u%w_F`%PWc+ust7FW-|SB9!%E2dyJ**3Hm=pgm%i9KB4sAyP+=zQjHB2*Z;Uk1 z-(^XgkQ$U@@9TL1#bgo0QcQC>;+;UMi4*Yo60j)8_kHd#e8%eTb?OLUiXh_==tgK@ zHA=0VLIJNnf8NG;0?gCnnl=PGsE z)}Alru^@Ib43!HUPSu$db&mK0YrdgPnlB_2TnN#%_*AIaP6p=TG(27QaU+ZV_b6AG$5D z8$gZL?2!Zvb47KWu4o;;{sFegE%cdN#8UTIOTXu)fGE7Fh0%#-jSQ6h%TznAj2Z<9 z3RMlsci0Ejegw=1V54Y>zCXlO!$jJba$A+85tLL31Sx?fr)8|Q0vk0QI_?Ht2s0xD z7CxQaVF6hUvb+ErvazeDh14sZ)?vOjR-@lfVcXsGeQ}I<0XM)aeKy6}`AAKMB__8a z!wcxnqX}njL)LMf+yP*T`f3iVTu#O5ozQb=Pd00pm;eF2+kB&BkHPcK5gfB}h0nWZ zN5CNTmy)5W$Mdi_SuzHrQ&J8BEKLby_s;K7XJ7(s6X$Ex6|s zVa5hJau{(!WreVnT#f7Q{N5e3Voxj2I!}@_<*YYStJA z^8}58z07{RF62Q?u9*=Zo&CX5%^23;Uyr?iDXmn*PS>eC!h-&vjdozjB8 z*1H+#!(2(ierLbhVdmoO(zV&;5@jQ=ERlZ8zQgUSj7U{VsqV!UR1lRj?<{wOYY-zh0E__N;Vu zd*0#AbKFJ{mW_8dCwOzhOcB+mT!Io@`AGFoQ4K87z0 zig5DX0-P+A)E2FT9<9(>6KUdwoh#vK@ldMD@IJp{y z^z3ym?D<#IM=sEsYXh{z3yqM7rW@Gyf!&<;gKw_mpFD9w|BZ;NSn7R&Q~8^g1k~c& z6Z-HQvJZruT1{$RY1jVrKr5-}`5{6&5^X%?3r&D`B$j1#%7#Jk?yp@gvC8I3r(^Xa zdK{{CL~6!HVFb|dJMTY94T$eA-&aL!dfQI>Fv46nnzMRwD@N5s*-Dtzh3fq=;(E3u zFMsKNC58YXM|P)9B)-SBhB{)zNONMPnQ4#US~#1FU)HPs9X(uBN-Qp|Ru>*&-fTd8{ zxc5=Ww|mpj`?ea&(Q^~@%VN!Yra_HZU6oDax9XDb)j(mXSt_9-l3BjSwWBJnuMIU? zE{=LG+9)^06ZOh{oleye^<#*L%4!m&rs-Q!0Il4YumWeP#3^5QVtz$VYpBh52k$=dZ$emUL4HZfM2OE|Ic4-&wyy6U6#APedB5 z9W+q+8cGgvsiCnl0U(dB9ZL<8`6M%=!TQ_u1O!wR9HusB@DyS?9 zH5idFlWkt@h}W95+{08=c&}tC1l$yf=OT>cY3K1wqW9&5E)^ZULsY3OTz&BuVS^)VK!3XGZrrjikmi7@`0`U2^ z|AkFM>EqMqJe5T}vcJlA(7PFr53{fV)kc3}rcRl~xjBSiSxAtO#eLMU zZ!5YS8I?|q+gM=#^)EQ3I_yi_txfR{zuiQ-W=z9pUOKtTU0L?eeaY{ogkRGr+M5Zn zUoORBzdjQ+F)YU(bJNmP6=2)fphOw^B$Bc?b8ZK(n2;WrbPD_tz>AN)P#;&kb^#d& z)HSc(g_+`F&52e(Ek}vzhA$$|bhcB^wPM7ugB|`@hY+Wf7i0pA(4`eJK%Z|V(?H5{ zXkcP^m#^o^1uMS`k~jA>Upp%gbEBS)dg{Tb^jNjxArBLfmEa-XHMJW{oePc^b{+5p zzG(%Ur@mKxxEudv%g*0FcE0Kz5Q8LL&!lHl0TRp2bC{k!7T=egeJQo{xHYkNiOfI4 zp}QXcM6>#D)0VSqn#dT>zn9l9FH4^go1bmImU$kfvn#fRg$+`oB1FdcrD$rnIz-KER-^PMntI!Ry=QMUu;4pi|Nb%ZBXFqpnY0AMl zMSEv;)kDwSIrOXkDebq0-z?*8U0$ezo!q+b{Lg)J$#dD?XUt%e*)oj+JLwG1ni=VY zyVHY2Sk|1$1c(0wg6p46ub*}Jxsf|B|IyZ@;rWfuKkK&zrBgJT=A0GrQZ9z*Q1uEm z`mgN|)%hYv8>atkm_a!Zlyhj#!9#PsFFKB8h#NJj!Bn1yM)k9dV{d;Q+mrpX%EH4# zNp}-zAf9dH4CQp=q`sSNOVL?=K?~;CD!+Ffezy3cyX^4EbEVG2rWLH(uagIF?nkp|W}&B=2OEOR?Bjb+ zwcI+WmFim)dU}-~De7>km{aZ_Rj~L{p4r?pNA90QuU}XhqkHt>S;xh=wPzBslSrZ% zbZ;9_`7$v=ejG<}#qW}iU-{S2aDU$}eaHT_6c#3DmQ7#%q~EL2$aAB2j`ms??bkP& z7x*nxenPGW1FqKnlEjgmhbFSlK;D*dO<9aVY+j@PsOH^6j``8E5&zGx1{(G>K|>?e zGY;x^mfW}-w>oXt}s6~b{#X|ECP2wO8c%w57Z z@BiAfWdah>b!b0N2>DmCOAtbLOIi?nj^h?z;`2@8qq{;|?v$)dMUxRMh~AK@>ed-JVAbG=q^EtVo`8ESJvJHGQrk(<}8bnRdV!6?P-? z(F_aIa^H-uNrez-@RYa%xG*4qK{|}X`t`TxM(6;PRha&=#Wu`-Ln9e1f9F-EC+{BX zb$!%)>UsgC38*3}JQG2Q)}16Gup5^nguTaPSG5hdvjs)lsaCjOkWWSqIxB7f*~Ctq z`ZUn8Mj~s`sadZ|sf_ znycBEBiCJdS*sy)33Y*$%Ye39yF#MgZCg24XZcR6FhA|Ut1#G(R9n*<1G)q)wCiT&iep}3bFi=1pt5-cY#ffs3LDZY`5jJo8u!to zuL-j1Y3Z|e(6y&|4b5dTv)s&qzw0wikA^u`4xrEUHUw^1=`daVPNvGpcIet6va_;Z zVGV+%BW{f|h;PvC(-pq!+@dgj!5xp}-j@^CoOgyM6pWI9n7Dm#^U7iVfa&%P!OH5P zQ*xoD_1s<>A)!_389?OAVoG%ZPAzEVa&(EP0lMsbVO%KNmS>bh+|Z&M&E9O#78q>6 zmt>4;0k;w8lJU@tCy|z5Ehd{hXSI|N?9A1!k04x(n{oPq7x?wD+{vmKtk{VF3A{O z>#dfowo}2zZMncI+zmVmOFy_w{F=) z!HN}MMWF=%;Yyo>b7$Y1%3kaK{J$%Hz21-*jq-;$OH6|esSmX7lyohH?a*g{Pdu2u zMy?rCJz@i&7^YY;F8c>_EIYAIGh&0Or~H&gCw!0dT-PORW$>fh!4f&hCgvv2m@_2c z+W8vvCI@SZmb=JCQ1%Ojj#k9TT<{fV#smXz>kacxuBop#kHK}+{-}`NFNa0$ee*O* z>m`u_?#PB{B`etd98{7jf40RT#%~``E|Pfq(tJ#V(}{Zq%G)E^5$U~6 zp8W6v@QKs6`W72W%2ggH;LdD)yhRTXau`<3PSfroFc2+ITUl&icVHj0Qb9-217JYM z-v+%_IMogtkw>A`4l_%1Xk7wrFG3TGn=eSND;fXY*8)V@=INk5z;11zw{1>-_P2Ax z-+E$!Fnb+Urmd5kmA<|{$9lfM*0)yv2k%%3R` zsK5`~p1`whhd;6DH9a;mYX{PwA3RN|oKMbCG|k(@aRu1UH56dJ_diay{upUK+tF2T zoVZC!@m@M1Xn*0xlqqi{l0OG$n=WMMQQ!rVZfDy@Hc8z;**SaL2|sNs>MYMrlNn?C zyP%N{i>3n>%u+wuS5eCm=rzMb0gZcq%sQf~@g2)qWa(nHTo~1BqalS0yq`}|ncc^# zUzwH}Bqq;XsFzz~R{BKVyw2pIn6fk6_g>bieD>y9O3|k`OkFD#9KH2OT2^OPiA!UM z<3Pl3V^`=dj26H~f^DIJ2)7NKsjH>zs4kOyRp&y^_-nrlZ%!Hg*X6XYY7nZ@LX+nyrh^}s=1-kT@QV-=+IFZaX3=^oowg*{tO@5(M-+f6xlzgG88D09E3*q4i)&J|8tqdrd>1I#Bb{{H)s zUe)9n<2pA-?_$L%tI)zrHJfusl%MoJ^**K!wRCI+q>p;t+5h|6PoAH^PGAV=v-dN4 z$`UxnJP9%9JZorfJRekg0}pJz`>K^{zIW&VqaM;0vX>t`G;<-J4+=0_#@`+lPCzw_dkpLWF!%LpjZ{Vs9e#o(z8n?A(k{7-a{S_Q7_eTFUk*~6wi z7k7!LugSe2`nz5tN%G+Ssb7OT*&vwLt4v}v_Fr2Bs>;wVA=oTiyOo)SP$YmY5!k}L zyAbz*wF+Cc<=f=%J;ur{8OW$)!zYO$L!vvbr^k~7%2xS@ONmgHhG&-B`1CE7n<<}Q zXVGRd$H6njQF#~H`or}1JsG%1MsSS)QJg5{%5AfXx;$7qQ@kAZBbgLcWCvC>o*2bZuy6YGuxj$z2#r zK3%@RjWClafIIdu6FCU`ETdzJPcqx>ZpV|CN9R_g=eogkoy*YDNk*Pv`Z!tFWJI4Z zk!ARaHg_}PB+orEoOf(8uO?i>&0t50%PyOet*w>$=i2ixRO&mS`CN!T3yL>`DE~_@ z=&mg2mFrpSG0$9P_v!1cIl;Jly5Mel;c#W)k`lNI05hCWNYQUXwmpb0dYN7{K8dWR ztaV`IMyj^FW)*+-EdDBIoNi*Y0YGVHqC#>fEAJai0edNkc1$b; z|7PsTyuWA1O2@}mJ1setjBvx9TPx*Nl{ZUFWJb)wpGZw}WvN$HxtD=WbX8?l)m}T^ zdBbf7X5`waSlsri#+bba?DTRf5jO6^MgtE_>fODi=-aaQRLs6JRR{r8Y)q{>dw<`> zpL@L3*t|M$p$b7;U6NXm&>#Ey?^knk>DmHX+<+c7QbhkmJKn0cMOQz%U-P7e`MVPN zZwgQkyD{Q$n|8K_?a!Kb_iJCXppS-3!pKTCr+{5&=O?5UAcQ+Z@WE0#z`zGDB{6p2 z1-1ql(fHZTupLkgP=N)q;~+|!KC+yYQO7baZdDRuO{$0#WL)~#bz!gwWsU7&o#ue=y9#Jl<@HHTbX_|#;xGkR|0B2o4{im z)wJ$su)(~ZhRE2aayebZZ!nQ)(8Ln$aI(1sZroh0jtt_2g;9GCtn$uMC-?Vm7ba6d zF`$|x8roGMn?WHE(gGDpFU_#oYvsR91TEUb8{KwWnL8D0)t6-!= zcNDNUR<}2MGLeHlTM_U32vb}V6&YWYv&K7d!&g(u-JKs9n4{qRXvnz=^*MWSyhv;rYn1_-3y{)DX+nP&c(*|=1 z`xs!G#l<&mynQDue0Lh=Gy0&mlh@MVI>=-uLY_K|6yMJ^W*a)rWi04LN?K0%&O8++ zIA+|smtSY`%7uDif@nr#_N79G6UXRv7JZ48gijUz=TFDYWx5}3GZ7vGIJ6}XnTHaF zJx*vz6h{}FFdl>hH?K8O!B^ij#cw;C{?LP~+%=27Ua;ll=@Um`M$FokCRQVc(TgK1 z+FX{cF1Nq7?(bc5BQZ>CC4K*ST8D9H>-moAK8EuI^w7SA9A3++gS@Fk3x!-i9QLI8 z5)%vB7PXT*9ve^B%9JMAo=Q4c@^O4AzE_#ItqfgWO%5E-rO&py0xqmTJ* z!#rblyXK(h_#)HWbiitzZHAmBjvk~;@y;1@F5X;xk^Z~P1v)?94hbD-qNWBaV3?gVCTt3r@93+|ssnEW37 zHu#35qp-U7OpL2~(CRMkG#f00!?#?Hg%zWQE`F6_Ig&dKpJkF)7pCs5pF9-T|M>O) zA|E1;)3*G6<-KTl-bUUT+US{r*NDhSraN;-qtD3`*&Rb``bUm5yzoA8!umX;B)cpP z84p7mHLvqcZ%l+WjhFR%p5M_ujiJA~{EW-Z-#**^h8_PG#`tP_llZvyi#@}A=D_sB zrn6?|=^fs8e@z?Yh?C+6SFF5YDUoqU&&;@R#o+JY%3nRUZJztdCk-XND$ODL`14_l zGU3rdL)9QH+;GNJ{@}Fjx6V{8neEcwF?z^=bF#hw>8P7t(!QfG|5otheGP0T6A%~u zLEMD4jy|*#KDyT)o-`%&h5YYM|Ih1s5Pe|{LJ37Wkh|Iph0t*Av6t^Nem8Kb?GB9nU>~ zFrtLTIrsd3$k#D!@3xyiw~tib-`%U)_^=T1QQ8fzWylIg^k!EDQ(3KkL(L9{YVU7! z939m+A1ixp${vWgw_?cTQ-(?HSgY-rQ*CAI#_dp7yZe@gH36RWhYm8a#heT`b+Wb^60)aWfZ*2WYyK9ZG<*8Q0ty$;>%R?@#r4H z?ClJH&@(<|QUMTL`ea;?i_@SQy*G^h_v01Es+Mm@3Q;eAF%5=@>qwN8jMt5`l~(ph z8&2uVy69o7ryu*KwP?5EA|u}Se%p?>rCwW2s*0a)LmJjG|J#a$PIR^>yd!wG&hhE< zUiYrwd{0&wLx1->1|P8bqt|!5KN@`Q=tZUz;>8Sy|HTtb3f@0IRyg$=p^Lo?1z!I< z&uA6WZfW`HY0zIKeE5Db|7{5DDZUw7i=5sN?f(ur8$n<%A{--BXk*8JT%0({BN%_# z`1OZjp6(eF(Q%?nQG7jsF1^5JA#OJ&*dMbM{qp?>&a~}b^{Z~WaVzY3dcAY&;gB&_ z|i!(_StiNZm8m%6>?n5vF&osZ0(uX-+2#C|F8eE_f4aHU&5w#374LV$julx z{FZ9=Dd^+dylFiieb?tb{f1G_9{4l#vl{u6X_C-(<&R5p>UHF-D}RgO^8||@?(KWo zZxL#~MH-!PY1R8&N$ZBGA1S=WE2qBv_L;Of`n6+lo>R?Oh)ypyHMykO!f(!ZR$t}n zMGv%pw>B@zOgulZ|1RTZ*vYCneTpT&DktA*4~`tT^b5}I*y_^JaG1dnjvra_8};J* zh`rA2eSGHWZ#Ncw^#{aQmkv2GzJ2)J{WQP1=1;$cVse+l2U|VA?b`Jve?MEjNDA+{ zd+9G}Dg`#3xbM<7dnQIuipZ|Q*N^u9ySHK5t)B=sThFTH-{(2Sx93cKcb?PMO8d6N zU~+W?fY1?CO42g-uN02@=4hGCma)Re{PXl36S^wHp9L0~&DudUig+GeYCW&kzbfKI zXoX|^{M$+adr$N-aHM`RSlPdaJV(<95(WQPA5dr>us8B`#DRG=v$KsCzKJ}v&@rON z8VRK5I@o*`vms2LpG5t9YH!s0*fVP%U(7aH^dautruP|LkP8vebvsx`QWs5#IGQ}khWIGd|7@&jqWsa8T*nlL?}TVHpJHLA37R;DaUN_=C=lM zQ!9e31!LdWDeMM5YnaEiU)H)ZLo?`~B74zT&z_4_UjlW&_)tsG{)AcQH;sc6H$Ux| zbpf4N_w+*DF|tqEtj7$GEVH7$8-IPvGMTe($<)6C9gNOg0`Mf##3-Oy34PotvIdnW zjfixTZT)%LgoCU2Dv01f(G6XG*v8S|JJ-SO-+b9znHCz&;pzSOjmw@=>;*GG5#B5_ z{4v*$ZS#bM6nTxYHgsnh=uxT=sPg#fRU`X?ukALCR-I8rb?acpnZs>;&8`zCrkgv( zYG5nO-;f$Bec2_K_CJBejbE5!t(>nKdjt11wvR5~xAw^i24(~Xu7|$j>W)wCK9>;g z78Yc2T9c6nLu{jIo}D1#w3FNG`5@A7sE&M{)nZ~ZZEU%5>7kfXtC_~vL6}UvxT{x~ zW8Ylp*sFxYpEt7t7D&w5^JM7U^M33gIB_ZMZ1e(ojPgN!n$kr-^j004Xbb>>k|)`P z^QDQT6S9TPH+IPz57P<{gzVnKeQnmlR z7NzYACAJAP-t^TIHH?*G6)c38ySmi9`JqHpUDV%6KPOqbV>QG+vC*>h+vve_trBX9 zLHT9nYg#NTFBjUKVm21=U=YT+Hw76a*mRR}*BIL`Z!De7 z87=kf#t3Bp9*nMc%V$N5 zcv7VzHf3#gt!R8G6{;k0VnC~`Ok!$4K_nL{V(f}me(-9n)`9=qB}wxfDHc9G_ppxV z>Gh!L;1X}a+M*Q9bag|21od-$FfirpG#rbtrfB%uG_J{qvl@FVG9VFH#}75M{Yt7i z73{hqh4jpCgMXz7$yFtjRI`JZ$~E}+mF4uY9}|>neRUS0bc&DN97uM~lxa_Sji8$Y z4OgJa=78--Sg=7_sb_1WCQE?_eBQ1!Fa>H@WgjCq9BJrBWm;5dBS7fU6cTu~Aefwv zUTBdEG?GlZiO*Ne+Mc^6g^&(@dL(6cYCX@`$iQtInHrMd#0(oRQy}9bI)I%S#v%Gj zQ_FkBn$|Z7_zYwy-vMAS#f#v#cOZ*S@rU4!VKfRoa?u}M2dxQaX!zRCcS+u?@zXEx zpW@`5Wyyk_$u$ALdbyxS8WeOB_n`K7r z^<&XRTp&pU(8;M*qSJyCjuJ|NV|DaZgJ)9Gw@s%kqBF#ZZmUnQ28iQ zY&3Y;!sBac0Id<**?QwTP1>DXz}-S>3oIp$C84#746&6>eUW&j`!Su8D+CTDXNX;KNx6~u}g29eNMO{=^ zBwz=A6?T%Pk8p7FBr%}A5;*`XYgXI$I+${hB+46J>X9)0-9tb^$=G+ z9ZUcJ$$vEui0XF0uT=%eXUyz-=guw5g7bf z@-$0-hFN!J2_9MQ0$W7iRV1Ec=&@T7<3PvxU}f$5Uq zqXAG7N4D0s?J~KYC>#9+D9)IzZ*Z{Mm?qjv54mzCA{^Nm+eNUlq|V6I0M1cXRP8%? z=z$e5k|H`}Z>NgC^15`nb{BEBemA`{5IJ|oilTw5V)sz7*BX+gW{y;?XpbyIRJpi? zLe#Zm=KP{{5wK-)%L^?R3ve9naqQke&Syy9l(5UJyI}|?UY$)j@qZMZdoil?q9c`VLbn3aKd7l1inL zC|&*b`+sLUXFKP;&-?XyJf2VC+Q9_*W8#u(VtdhA=m9xBbi{y++DTy^c9<@ftMMSA zED9av5qwS;w3;+>Ayj9DRqZQ-&qP`}z2WRK7}iCq>{EjZTQ zC5faa*$Cc|7%V%ey>_f7CHlPZJX(QQ@^UCamZjqA149wQj&225@9r>ezLvPOZ|K$_ z4+f!DVp*K)dO&abpKltUwlQ7;?7H{C);xnnZg8>^_fAY}N_j`cb)@z=)a;N@5L6Rm zG;k#pn;6LJ9`8zmT`<~DOwOYeN+Jj@DE&l_I zrF~y~OXD&@uED&9WDoubl9V4QIyP%mrp-|x6QI=7`-#m7aSfRE-9RyyWu2R=l~6sp zv86s}+o57Fvuovc@_hAR!fK%Wv|tu9Gqg)L&-ue6oK<|ky6JmQ4aM~;$r*bH2R5P+ z)Oppb-xG%5K6y?1f8$KVYYaODn<}sipM)?`^d_?L3w09bg;Kx9E9RimzSft`5i7@u z926k^gPn*Y&jeG>67JEaO>rOh5!T`dwGuZF^Os%7X*y`3n|*V#<+NX*&4jHvk8abdQ3C;s zL2j8LT31hii$Pnbt;&~{hwfY@P({anP{76%kop9cAaH|=UfGNWO$WKJbqkJ!+$^4O z=Lm2gqlM0FXNfI(uL^qLDSET3xl^@jtb#DG%{fmbH}8R7o5rZbp|+|DQb$xn3MAa> zJhz}i3jDatxOFKm`W7!hkI4K1G*V>zWWOy^Y@{CFAChjE5)A1Vqmk5sT)?`0)~!P3 zRL%pPMA$K*jto`Oa^k!QrUTVy@|+CYD|F-pa8AS}-%0dO7>rOSfN4R7cyx-Mpf|2o zWdfoqbWEcQl%<%`{elR40Z$uJ9lTtOhKPm`;H1aPTE!(Smr{O54cw0N=AQlMUyx; zt(xJT*U_L210GZb%jS791fLtwzWxP^y66)*1#>XK0Pq!L!3@xYyetkhZqRM*aRben zW^s0=!OkWh-V`cON%YMRtS#FOb8LYbSaUSk>+-swHO_E*Nqcei?Gi1cTq&SLDWPtu zDD*A73PM&}}*~%0yx0Cb)27`nnBS0_S zr$U67Z9qFv@7yylKrVX&=;6@>Zw?E(3qh9n;fEb&yIKmLwo=Om)kek8l@7t4j{>!t z!ZwEdK#O2;pTUYkmVsJ?mmoq(V?;67tzc^K@YAdU54Hw$k9jr%l9#T}6%YSnbAEms zYM|uhicu^8NMGKt0Os$R-B7k@#~UnF6!~!jRetmcsOJ?`1j7Z^w|BSs3UGeh2>{Q& zFJN8q4uXo{b=A&Fk_7o{Id}is%cp`Jiyat=UZDJe!o36;S%Ly40u{pqibjIniP(NP zrn>u=}k>Kg85TNy8>FniOdV+|I+YKX-!C|zP z^@-~04Lkx2d1K7?%D7)xp-mV%8z-<*M;)Z1SFL_n*bJsaDC=C5|8biyTf*+MRNEog z$mro2;^~H=|Agp30}I$?!|VCYfnmtUtVd|CE1|d)^admlsE%H5fzD#0wp|f~T3~+Q z!q0cz=Lp6Pu=2GN>Jd?v@_fP03y;%`Hu9L`EM!Q&AU{KdN>oP&A%KJ%=xmFPyg}G_ zlHBn>SnebzM5jWvD=asWxG4)H-FsYSeYzHaq7%_cy9EY-(|Y3LeWxc@ibUgS>LCTv zVBW+;;U|H4BG;B!Op8V9#=#DlB6I&A%2&{k)x{O+dO4YLSQdFsPq-1Q>#HX^=1X}? z6DQXSD*MCfUnA4?ALY$P?+E=va+0{MR1Iws??59oD&bif+Jn@Y_0XHt*4VOUNM=uPp4dqnxm8Bd3QvTSv;8GSCoCVWi!_sn}-CvsOw0_K=&!1d|M?^f!KtkcH$pH)OGztCMWlf<> znQuM95fTfjoYB?tSGHh6*e~8cdinRcVy2NGgDQJ(=yVvyLFACjYReNGzdw$4Pe$u5 z8@gEg6pPDrJ>|bG3D%{#a3k{KfD8WS==))4{}J>h;f?Y@?(byzV;`afqO*B`9yjRr z@i#AZI$s@~f0?yjK5+uM!?O^T<{oK?)@N5m?RR(_*XA|?d;d+KWrvt=j@E~6E>t7r zE~1lhf<1Kfy#;{)ae-H!R|Z_LrXp7%Vqm$L6`e$*{4R=3R~UR*9u??a>NHp=-V8KP zl?I;Gef!$|bAjGo`Assi0FYx3Ml=BNT$gx&DV6P|XI-H$`jY%s4lp`|Sm@`E_%vLf zoL`NOOB^i+;;ul(0t&?N6X>9^&!2K5vf>ITfQ}Zl#zhyY1-U*Hv>TxxEWFNDd;!+`0y=1LbER-m_d%^cswGjN5SKxL_lW2TD16HRSJ+ z3*94f4JjLP^4?cFVz<0`m!E~WpEGNGkqeR<3r2Wb{~=781T3ClVZxm(+E%c9v#9HN ziFjLcmNu3EJ69yAe8jYd@wJzQ94(avOml)2?l66cf#Uef*Zf+&I$C>J;}87@&)ex9CWnLjn5uS zqy0Yv-hz6cju-i#^?Z%pRN~a|%|0sKHt#`yqoaS@3;wxnU)np5I;6%MKSx6hC_vEYop%dfdUk{6* zv6i!UI zx=XNf`Qlgmjo*6D;V)*vu>5q5Yc)dZ#X~Ty5o7eNKYCDaJL(%$lcHe#^>~%B;5#u| zle);8&{t){-i8*QF5XSqSa7P+P!odrz2n@h6lmg}P*q+zpq6@Z?~5Z;HD+gS3De$$ z?8sw|1*Lmp64~5llJY#H3Viz5uAuL;I53h?Mg8`997tL?(y6#4M8iyjfX5F@@lKkW zKx@bk!3Y3T8Uc__arc%VjGi5DyMZGPRmyf~T|#|`{mKB&MEPR4r| zumg(LL}eb8sn>x}m5<7$h{`>fjWZGt_nU%C=Orc?CsL~xb$?gFQ0E5N=V zN8r#tcNOM{e0G2UlW4%K&Z;E9qWM3B%pZk>tP2Rp7UFMk62uT*Veg?Ms^Lh;xTpt;=Oj%!j%^OCYfMHk!6+pO@%Y{a|j@IYi!8!O46ykiyAT zI2dsf(&Mcqy|S zeG6Ufb~)npkm%INAw`|$bv45fZ#(wzC3MV(jd#5@Em#MEksnp;KS#9SI$}=E^A8;6 zP97zjyL_--%h_la81O7qrZ`*~+;X=0(9u@t*DzYYUz7cT22fC$$d)=cBHc=QKjM(HHgY^z6Y9DB=W}i8V(k zKp+suxe3mPZ8@WFYLFheWQT|rx-l9pdiFfRu2{=u!?XZ|c)cjzg<=1Po#fNB$~o%u z+)um2(rDHr`ILQxVUC6dAZGCL-ts&ZR|w6o>_3b2H+2nu`n~39d5D@+1eeOE=iwuU z2DB8mSe^=_eU}^Io+^L2<3Qp}@W_{9)izENx~-2;^exYHPon+Z`TP%xn+Lj$=6T=$ zD8Kx0`}x^*8zYxE0MLbA6jR;&f$GD5RD&XsB-JOFg^Pv+=gW}vNSk7>mE zShfIt3V=XlurVNGeq)H-zU7bv_qyQV1iSAH5taWpL*L&wqqV98_!ZF@_CVX7q3kpd z&3IVoy${mWSxXYaDrFFZU9-HnWs3P zD^OHq9i`UKSvMU)HZso!OqqUvCaV!(@lRe=_W=vg8sm3%S{GLZ)zP;i&u`U9Z0(hc zHWeGm4U_IYRO&w{dD{`?P@O_|HP6!V4S#=bl!QttQ&7LW=eySVhXdm~OiR_QDPFgg zwp!6|JTeZ4xfS2Dpc}Ii_*6S!a$J5OsgjS<4}L1aI#teJ@LC)3EL7t-eCWa{T^`vh z*v3fgA&1#-9@uD-De+*hD7Km5l&v(5_R4G8l-G76ZtSZ;A=ZE8TsL}-RaI|wQ!&_J zyAGW8F#D8N;1hT`VIgo4P6dIK#B*UVQku_KT9c@5)kWZsLdYroEtM31=bdVl3A1~j zD$v8Wt1S{Y>S(~8SzjZ{TB?Bgz5#t7_VO8g-S83P-M8)U)KaQ|pMqYkirxOD1prfOPQJEzo8>R0j*TjvuMPLgIC+b|=5pT8r0mY$_hV~9 zSaU6JrvuHl^==A{_%ur@s?1x$**ncuAgGINN2_Lbdfmk=nuZzP zhzWd&TDs|&y2mn(sk+j=VxLVn5{mck%@g9wDKM0kVAX~fD5K$yA@by%!4d0v@F>~{ z?hJrNOdH{hc0$J5(IdZDCiLzC0wP&~hTdn0S0aI$&36Yk;6j1@hppB)>kRg8lfZbQ z(?|<(6%`}8uA2l#!|i8>H8-H2vuMaPB&@U8Gch8q^xtg7(a<8 zQtX*_$4qf+<&XyesJF9HCc-7}B#7!7P5tn2(n4b$sJ+EDtg%J0b>Mj4oV-ya`@XLu zA9E{h+I{s;Q`fFurOxT?i4i#e6QP7!>$vb!BGdbjG00G6Q)rKE|GU0~s?=J#bD7#P zlrNN~R?a-PpyBB#EOgrPFc4XD<)}*IWx|s(yr)8Z@V3L38xrOO2)%i80;aLC=iXV` zi5*uPYaZIw=s@q>;xDPjuukaCp51WzN~kcID%7{w!m3u+Y8b0%Fita-t^b2Kz>56Y z@b_C%)ufO;M(v^-qxm(C0q_2o02)#%olMLgmb8W#y52}yAJFiqbe~s4M9PPNE57>c z%_`fC)E{j5ax8dz(xVHfj!oGqluwrM!wp}XS%j>8?YpUjQG6AOP`watF~gmfb_INHgbC7U@HM6 zI4MUnh5h{GABL2edr@wTQySKf?c96rWZ8^u$`fT?$}!q;dA1rCsbN<;`P{kIkcMJde{VD0* zqnm~YHD2E1mXjps-5F`6pN?(mCuta3z0fLIg&(!3I7W80{ML~WUCo&6G$J)OC0;5L zmv*sEC58*MgPPw+;SfCMp%uN4KGT{AFdpCd5@061)2DZlY@Te7{ZT9|FZq6d;d*pL z#Ej6!aP{@6jJq37B)<=;__b!AMtWQp0Gh;|Yu2UO4`CYRUonr2OyG7L4< zD>%nf1P##s-raZKZ!pg1{mx0qs5nmxMNWUL$w-`}TB|U_|9*7rj5H+Ju9VQ46ahT| zCRbxwploh^&ouM;(7M#em|#X~*lQNrjaAFuk!`Cpbd0d!kNrl&rCY(OJ<^kZ6RxK% z7}-1XjsG~0*D%v>aQ6&B%uGRq+$0@ybaGPTgRIt2Fj=zbuoZ6z}+B|Oncp(Mdv%x!`24|)=)deNb4B@ zP*Fo$Y0!GZO&ULX?(4SV!R5?w^2YW3Zw~vWJRz;EB1T(#idOW>U4T$>YVeBNtj9W> zYiI%hXY(i#3xM#Qu_`=nm^OfScRO0-O-QHK>Q1USZ4d2>l4+x4>ue$UE)q5K2M-2U z$+j4u0bI;c*%T%W+e3DzS@-Al zq3vS`>hsgi@g6!a)#T?su0<6L-%S}g2iY9lw z6t!3$_Eo4bgYqx}p!J*90kD$s&S4! zP+8=w#idYJ(dKW3kMJoyzv+A+FBwb9!xbWBhH1JO> z$ggduVph6Q8IS-BP5pNOIj6dqF5>n5@XohIM?i>Vy_1n83lmox}Fve61W}-BJ z(-I&A0FFQcx;P(WSL)ZkXb9;+N8(Do#9R|RLt(<-f8JZ0^1NPAawr+cUWzwl^?6is z$on>XNpIJ$RrYTk-2uS?iP$7B&*t+g=AQ}cZ6GpI4(!1=xXZS)deL>a=a|8%YMO0z zRA)F9B{>mdu4_?f=>EMifFy~wo-&hZf5M?}y?qr<0}40dXu^7s0ulds`+R0(GoRug zv1oyC0DE#fyEl2UV6OxUXh{ebi#+P$qSVB6M~Uy=I~c*RGG@R`QlH1);?*L{>+w^M z@@!Kd^N4|r57JCQ7F^mG7+R|AhJw#wMSmN&xHoO40ux;a^Edau8G9seXh7f2x+!K)pQ=+_1K%If_QZ-f z3UDOtpA3L;vX@@5E||OBy(#DZ8AF}i0i5ixf-K73QkP%rmw3usPi-=mnFxG^gAthy zo@@#=M@K@U(oq>NBb-zeog%zrHrq@-R$xW?r~wZtL>eO@Kn%z>X}cM~AssM$FKEcV zPtB;>JgVx?95eN&!TEmP{t&Wm7=RdVs*@INe-s0pa1V(VgZ%I}%bO*YiAyGI6=KhKI!%{pd69cG< zCI2KMU^}fj-n&a&=s3+pS8b+6cy}fF;YyIq6~IUf4rc`3cEHGIkSluzKWM#YCQLB{ zWms=Zcos@iR$@5c=neGl23c)h$-QONQ}GPTRHUNN)8%JDF&K{Y0@U zj#fV{m;UFrN*=O{6HOB|T~Cr|Fq9f!Nro_tdqn=pN@`bkFAM4W#-pNXZu*IC`pv7ts(%jN7m?axmBiia>KGvIWlqT z?MQ(|gv}%Eg1j$An5xxAuf3f<1dd$tZeC5FyN70rj~os=kTNlj;j`nYNQ!u1ADF%O z66)pa>Kha9O9G!#*dF|&^2x0M8IJ;F^1qYVvxUk7zR>1VP8X~a%MYMc3%@P27GxLS z{2RRU!=O^F<;#T?iApB;vgJW~s1}A+3DU<=0XFL1^8cQGnHnjVzgOj@ez)8iDFl4* zt`cy|xCVl$r7)nb9PubDEwQdmou`$*$wp&itNxc=`q$eGzI@%45nhpYBvL&skf6Cr zb7A{g?Nu*ZiB`6TzrpiOp}L0P@@Jn@g9#zyk5{c}H{NAylG$!jHHqOb;0}$*9cVW_ zX=`?--RuWnOKV&HhTkD79MI(Po(n7lLJgm{H2w>s0U*6cnc_jG!@vKk|5yQ~kz6SgdtF9}45>ZxQaT4G@0 zs@UD7YqG0;>>8q`zTB0xlaFqtVn9gWo*PreFb~}wMLx&e5*Jpx=FpF;hx!@&%sA@k zV)<$y<$M7+!}bu36kzWcv+hRaOdI+4@mH?qZg$E;cybWHXVMaF+A<@J6422Zn4_a# zGrAu8Bz>Dx(bcT%*OvvayuX`?Q8|ELb4Pv-6^0X+{BVMSClNq-k+O4{>Pohs0;pz2 zQ>8dpnDmzAPy86qQv{&Ojn2S?_$JGFoier5)%pO0`?@^2Z zsy%1|M9nA+80pok=G4{p>Wy%;0qXI0*L3EuY0qUJZ*V@P*?nrKw;h_{km2Eg<=c_> zmGt)NVkNpmy^RR5u9!pZft~5+G%4^;@Aq%k>Tv?zS0J&vITsvF>8hKQ4|2ZD$ z*5z^GKg0(1p6$y=*l%n`$`?%L;O z|LicwU^R~_bpg7%J=8pmMtJ8Gu3tNO{kB`bQIcy-FYLO)3g1BRI5^(SlK!0xm14#)k73k-c(GG&bcNwEf_Q1i$dl~*V#1hTBk^m=q?`Ay z?xCO2U|gZB2z&~_n=It#A5;oZaDtk+u6Oqkw160=dPL@<#bXV%ig9R{km%vS*72&0XdPtmx0!DnpYYE2 zDmdhZ0X51KdJh4M?-A61xSsIO;qX9p<#3-`tSh0hcbbrk!a5}4VEr&4h6PY4adx*E zNQ}9x!dXnG$6Pgkj7uzBK>?a;ly%MuVabt~w~sc3T|b%6w}bYnv|UKq&%Z!$1VPB+`NW?D>uDI6WXyZsWk}*^(1xKo2m} zrygw3ud)5K3=~Pr6{`u;Jsnq{8bEUbD&2_nAf${};AzCX>EGFhBOcv0^vDZJ{rIG9 z`;(i;_h){2*=wkGbedIOFsAe(`>j7=O{&7ltxw|bMZOl`JU(1=D^r^ICotLn+T6i7 zTHd(8MRiuE<-@-G(>#``9E5;%< zfF+H~y{LmZCkLBbvCh4ANzIH1=Y)U6;B%8AkOPKg{xSgfSn}8%!;{*{r*@ocQ$E!P zpuI%Yg&HP4zVF(G+8@|<{Jq+@6A#Sws{zwf_KPDaN>0dnM764tD~H3rV%aVA@j0cV7qi@$po;H=^iEi0 z%A-dc;|@Q1l+?XL4obtge07V2BgD#lw=z!^wew_EqA$6y-;xZBJS4d5w$q4qA`8=! zl`)W@xZ_RV2lc$D{R$(zK)cy$?j|^)zntnh+tr@sy8y@es#7|1nPO3FshnU?F@$s% zG6ytPOqr`)fxw{0x!S1{ukwi{%Y;UtS`JFpC~qWKDDN25119Ve4{sv9_R`DyRqGM? z$qfDx$Q@@NZA^lRD;mAj>8RBiCC)!Yv1p5(vHV-HvzK?T%3Tz(Ey`h#+NQv;_#*dl z=D;~*yVL}55uMsxK8M?SJ2ysc7SC}*iVwfV7Uq6@(Nq%s`P%!7&psEhotkx5tLR8X zTZQioF2?#iD-pxmtmMN=lff{4h(#aaG`!j+2I zoz`gRraU00FO7T;HsN=>&52-PTx_=*z5W z!zPi(!*3+b(vHTR-^%dc_Ts09=fi2gZiuI62&2MH#wh78z*=-c>^ACMoK6-CZglo= z6lJTvX0@=1`2IL0MT^T#rY5;PI*dFAhjNw%_ahuW1g(_Sgq~LVx~{$6y9*y-zmdk; zZ15AeAte|lKQ!WcVApW8wVVm?HU)`VZVc;tdVg{cn0H+Gu&2$Iu!W222E z@0u~^cQ1Y14AYJ1Z8yuzMamvDiXu2OARwP;zU2tWK{CVJ6(RvZ12@j20&t7d_dsJR z45KyE4rqy$-p7Z}U-;ns;25*Vb_ec++?zafqy=#B%mY$q_!-{cGdqX#uT1><9yWaM z{#x~RpBYC`?tM=|cp``h=sSJ#(S^^9(3yaO@$)CWr#T8Ye-FNeOOaMmPWBl;O_gd* z;6(Cg_RIE|(mxlITXbl#A9YmD%7dZj&Y3kuNLNVfP03d^PQBk~L<&De$|4!-S>H^; z#9hwY)z>;U&ik_W`rprME@&RLI=^sUUy}`hNzRWjzSzwLZfAPlOT-7>!(*xZ1}m6IZ}+)7+eaGel=wV}-st@->m9 z4Mr<)m=4M8yi8D`oGY`#bI^jvgezAxJ(#VW3qFitplf5T2RoXR^CmRiwM1B^#@(Cd zWGjRGH>kT+NjV=*XHKq`2P~@4j2a?8{NC=zKdntyOHkCr4hA7ECU5Z?!K&-)&S>0r z9t35>ea;j{Ug7SuOhY3%r+(h*IevO2CYu;@Wl+op;J#Ijmv)RM3)(9-<<3MAXghju z=n*)$L{H+$5&_5%KQw#kiHL>u;f`wg90qg2Or=#SUGt#z6Xf8U0w+VERrUvu_xAug}+D&~%4{Rj0jKbnzh ztv}J6kyfP9$$EHxA(>`Ak_y<@6C6zAgM=2EMnlx=ztm_AOLHolH5-*qQ~Xl#3l`VK z5GGzI*kTc@X+0$BP_^m1px%C}IDrNB+>pNkv?3wd0Sr`sqkRA%eJYVm9&`cw zeeZVNmzXwvZy>^e6%E=JyfI*n;B>&+p9XcsI$;-sE*19fid$ZYvdk!@801}oa$mpa zD)3WY5gbkqPWIaV5XksjKh9mVV$nhY^})4n=iPLQ6|P}FV1>@qc{)x8aYhbHeDR12c`uMl)h zkW}IkY~7|iBX1LnrkJ;*2fo<9!o2mruRZ&oBi z(t9x%2sIlB7^>NZdjv9$$UICwIB%l#+4$z$&<&^IlX3tVkYmK9uv^XTKbn_(A?%Y* zcO!656@Zu#!|>PG+9twL0CVG_Oode3jxF|5Fk zoS6G$vFVZ}8AALSu^^?Qr{tDEWuRFR_O=AI!IBg;I0DAYm9ul8&&bs6OSoycB3;98 zdNt77wjqGHP=p8KaEkG`9c^J7M9uy=TrZ7;flvpP%`HFT?50t2b%i)42XWAbe1I zktk9@`}ZorZ4J-yG|}yPAGxc_8YvQG^Kh}LE*FI-XdhvG5XUe7@-a)DABh3X_ISYa z8kWF#bz)wbk}|Pl)RH8%crq>jjPy3R_4H#9DTTsdUC zN#QJl6hw@YB8Ezc{xA){`i~z-svYJhX6U~r>a}Vuto(*uqY|+&@&3nN7Itv^UGXU3 zG7+b0F~Tx>GW}5uM?AIlVZ#hP;xR)c!s&R7JF98T#&vvdb;m+n3m(8dw0jA^GEIkV zq9R1^@DI4g3M9msm*j4ImVpw!X~9)&P3FnrTL249u5-v&!s8|alVfZJT{sBhA}q;? z<#JIW7F4#S+u0a9cFK{e%@O2&;h7m8>o0OwBy)*j#wh1#AM<^TQ5Qv9%#aitIjv zMRG|GlYA`dHz-VF9&u69`Cw9qdEjn~2+`GuE0gw8xUWcVgVf<^sjGpAwssokyR*Wr z!=h=Fw3m5HhZI>cPFk4~qXA>NA^P=HVQ5>MWfU~-NOjbO|HaYe>FHt91N`(OVa8%@ zi~4hxTOGc)6Aw~X#Bl89(_jqid+5^B?;A)D+X+pOT%sN6-vY>h@CKpZHV{tQQWp~j zg8k?;BpueG_#vhpOR5+9Czg}Uho{2`;c*JO@qkVoexV|{JRw96@-%FSx#LGnN?B_W zZ?*Y#FWBVGga>HHdo>IND01yyO>cQg-@asFqr%;8C?EFif@h9~dCP7TOVk`+PIN24 zxU@}@rYUOF?rjb}6GtouZ4ILUzhS!FH>Lf!KIchpxq#=E6-b;3@<-OICPJ9>1`j*> zmqD;67|WPoK8~^ZO`*dbXsF&>Q+yOK?PRp zn{PfguJ#TislJxQ9t~*#meBTBaE+0)-a{k(_Rfk?NNvxP>ioh{)@=5A+e*1{>y-GuvN$hVPq$;T{1 zBbyziv5r!2R^-X=4y5j-Mu%yqZBZtrPiuPnV83$DHMpevT!`JbYx9s(7`KIz!z+H( zH)bt{?G^Md_+cuzpx4gk-Ko)reIVNxcCO(jyt|7EBz9D3=Jmw0~MW|-W zQOmi{RvbEE9z{6UfDARyec@z_8yc(owRbwX_RKVT=@-EqPh>d%2eQsbs{^cLL}=#^ zuy)dm@U(uSoFtMfSJITu-`0pfp_gTG^KNl0;mN_LjnAfoDWW<>_?e@AVF&qVSpEpd zT+sK~iDKuowKX@jG?8=Yp;?+4MwH|WMI7w~7*JP@H^?L_f zC6hgdj~L*|jWNXUAH}&zO-_-Syq4H%>jR>@~J)VVsfoRK6wV~I}0KuBNg zNmcIIrQd|1tdKs}Mi`;XqEhU}z4dYF&TvWJx8JLWYAu5G%%_rRqjl{A(KlZX+|F0M zb&oy_1Mcb4pVh<=mg_9w2jN=t$7~inC$vkd*r_*hnec;%yXkh8Xtx{ ze{d=C;KsiM9sMU;|2DenoBOsj9?=8SQ}Xto+q7a7`}oxHM?ZTWU2T})9Dfpdd~81^ z(4kMk=1*v9{#KROy@vG{%`6}MxjtOE=%O^~?2e>-ICrsxD$jpnBO__S7D9Rnbq>*TQV``UZnC1%kQ33 z59?ol>HF_W6P3UKm{>@I(Z;1>Z%$rk2oKwqXFF5EEdac7}`P^{)$Ie^mAA;Fk->&VF?N(#CrQJDGZa z2+XP@CQ%bYH2QZPf7;JOlyAA?{QT<`kM4udug4dg;D6uzYSXr6^97dZKh>w5FW<~l zfw}wx^I?aUE+mJPzt%;%CP#aA>L2*eD`B`I0Vz`YQ6_o1d+mMx4cCKN%jf%Hq4O4! z57fyQrb_iLH&yaJ-@Nzm+;W=-qJ+1czjEdFxx&oCr5h{14e8tq%3D4HlrmT1t*ZnP zRrGhj(p~y&>+@&%`?8NP4xg0#r~u{2z_RH&l59)_aX%Ko|+r~i-(W^#6;W7qrx=|-`R^;uPhK||qeA-iBcjo?ajRO&U+K6H) z=RE5xscR7CeS%bq$EwhIa^*(HUhp#%9^wEK^w@mlmfS}rB=^rum^4fkiL7VEyH1;Di(|V_^L$EMop^BIz?y^TgxllEOu`5q1r{U{$X7@ zW=9+SYMZ(sQ5h!ym>SH^N4c84VGEFeN*i)a?tjkcP&vB}LqD208@qpZ_la_)X zr{8i?Doc?r-FYfJqmQXpg=)|Fy0aTcNQm4uBMSet8|!3oIwS-}!+)j^t!)PMM?c(( zhTx29Mno8a6Ug;dGysb{R(-MwQbpY%ki3)(Kp&Kwzfn-O)()T3w50=0GIREZCoWc% zW(@#MBY`NuYbtVkeWB&uS-u4jsd94Fg3y?0V8Aax;LT5K*W2{64cFrtKMJc=+KzCF z&)_;dM6K9I&EBZ{_Pjck0mp}@Pli)AGgcKJg(2Hy1j?3!ie%13l?y(V45bc@;PXQG zJS<1KOxoAdmd9A}H9kI{fB_n0o73H3!B@1RMb@>H>z{8bTnaPp){t&3)e0ZE>ge#6 zQxC+9BAQx z41hMq+ePFASyn}mM>6z6?Iqz`{b@LyTxrwh)0*nPaQQ&u>QQ-$tr=b3p^=>SaKk#q zJ!$U8%C)u*eMp$0A~YBo>r()LS7z184C-Y$6?W89>H5i|_z?9bSAzHNl%^ zptruPiux|ROy76#DqRkK!=fe!U3XtiQ|rR5r_|7Sp~H@QA)q|N>Y{R4yLJMOvi$vJ z>7jr6DYB6mp7O@DPBv|udgcSN*jy}@VQ2|E!RUgl3L2FFJCTHj$A7`^`o$r)&^mdj~og z16OTJo+pvhVSnYu5Dx$%tm3su{gS}5;Mfjhw+=J`M5zCbk-{xGFKNtW;rPlpQB}SR zEH}&4ZcdOwk$g_v47aB~Oyc|&29<>qt{ztb6ZgT(OW91KYWsGAx#1v+vUI$SPfY<$ z0gw43?$x+_gaxghwSngT6($bXC)WGB-0?03P?7pDIHjxA7{8UU^X0-&dFl_GT$624 z&)jJ%q=yr4Tp2j=O@J{Ra|0p*@s+`G4SlP*VwJN~z>NQTW_>_sW zviJ6OgBalhI#Svz=Y_k<)|i2{KGSeR)r%EIS-^hW4jR{`Tt!>}ZmX03Y4(U8!LmE% zeFYu7imq3h47dT5X3y~MvC>4^nS(taM%sN_OJm-jPEI)=ZR3d$1}9Xhb1@1sDoGxa zZcHRIb+-i)`hybG^Q`GMyW4SI60X;e>rr`gKtSEy6#IPx@4T_wH1AcnBZzn`PbpY^ zk5VIu^~J_L?sqPwJgRVu3^-lvjk{*80lpy%v=tW1wCkvh^F8R$sCJrDm>Oxg0j9jw z`X0BE0Fw4;tIyDJj7^R1>kpjYbE#+@Hgt{Qx|Q;RD^b?u+g(&xz#yMx8q8G}IOge& z)|p&Yz_&k5P|hQSc-DHSyk?HH&ml;Z5kQAy{I(*3Bd0?X%~kM} zCHDVwfmgxL{Cr-}rt*Hfx8A+GemlgD;57h=$$?#t&%7IY(UxPUjaSo@>@toslm7$= zTyoL~kCZVHfNWb1$zc{IzaCS+Dx0QhUas;0B-SUq()-+3Xv8h{Ulu4Psv zYN{+pZ3SiXA+(eAh1{l}rWA!ED_Eo<_huh|xbE}fm1^IPPkGYY*4es>o7iW4HuFJ> z3ob-`_?1$0_T!F=OQtZ<`Hh*`2y*LVKusirA-YJL_GyL0@{@yW8HQ(%6d*FreUNWE zW~yjRJ0M4xgC*)1nh%E82G~MuWpd!NyenS_wk&9LgVEcPJE{B60`hF?MMPYY(q?>$ zaOTM?;mWp-B-jQ~?12QBhG7YN*nb zB4Vi0)KCRM4NXB10Skx?5EK*@5ERQR%kJ5;`(;1ve=ujxneuy{`@XJ^CFcT@>w7{} znopd&k(5P#`KkO0&$%k<#FJY}w;qUI-alWN*4jQ#3fsD`uDkaB#^>k$Z_s^KvFjHb z6BacNllQ0xy)U|gd-6mlwkaa&jl|EQc0}*#5%tRBwc`nuy4zh77o!#nuSo)9F29%b zw{zk?cXUs?T!S9E;5HkMp8M<_Vc1@DB>L&0vd=-<-Hev=(XEZ=zQ~rGY`Pk5l^|NPc~_Pw>RFN^n0wQKlv1YD8hEdTfD1IX`Bsiw0Y83Gg#!&MMN$YB5uRj$8n zfi@dQW@GukrQla>9xHD1l zaR8yh5W4#m52FN&RMI*VO((#{U0okQUxn$aK~o*I*gAAk;uWZIUs@zn$CVJx7l=CEwMiB=OIc4)*|$7J`QMWtv5c?eqCOmfGEl(9~H}7k0XAR$R0z0ED1`do+GN z7Z6Sd{=#!f6HN2V6a|{pySVcrlitT`LT@n;+MI~MU`T}Fu(p&Zi_UL<0L~zQdNRIo zAsgTwfqJt6CMKsCjuywGH}Mz<_In)4Gt_f8jX38S^QW5FQ3I zQzZ#g_gH-dvXeA-a!TCQ;^Z|9$q3@py?iFD^m=-!3o)4wR99la%w|jBIx;NDrJY%^BQVp~AimCq@cgKgjlKH>;{;@~kAM70VLhYGRq3h|5z$%YET3?Fod zm+M})fR0stU5L4#HS zp=&N2cno%hhfCQ(z?k5}0U(@Q;}(7>hKfW~@W*g!jswU;rNlQh=;^q?)N@AB1R?9l zNjJG8rjKgbX}F_$kWB`DeHFLMUkJWd>nw5o#2LINCh<7{FvCsO_Tu}#U)HrK(4&Bb z-pX0wcv-F=A+IXZq2Bfs7Kj!eU&U|iJnCx1o^j0W=z1Vp03IW_003n^^_6*bNF9-b z^lcLd0KsiT8>^dwrl!(T&&E&hmlg7vk%5z!K^jrb?pe@uwz=j#f7l z+ie1UB}vBSVN5E))ZreUa80*Ac~qwSm`w3W6Fg6 zTPfJKsYRSNM&K76f6qZ;W42l$7=laU-#VNOTSX!rT1D~@hzc%1+ZL>a*UgdRKIfg6 zsX#~r<;prCa7we&96ugrVDY)**IuCo4(^T>#LI0!=-jG}5fqwe5uR%cU*(Tk<=-KQ z%FWfJyCS41HvtYDpm&PsbjrrG16%>`&srl?H`;jqYjWK|EHDfJl=T8iZxgc8R9l|E zHm}hTltR#VGGrH8J@@o(;J@Z|9Lwx(=WjRC5!&VN{wn;&xwDX_dXMQEQn~`ZV^Z)8 zhli0R!e}=iUFq~ab7+iO%fE*1;0iz$f&f?0$zME`2p(Env`yWqe86uRP!8Slc)ITl4Ye*Xb0Ot#xcetr@5OQLQ zo6PnE>fl%n#C);m~yi- zJ!6|L5!nds4rgPHP#;hCK*FR4B{NMb}#py z4keR}?~tF^2CvShMtqRVIRgbi*mWOyxGOMNs<&}eM0`9?`0)!eTL=l_P9B6%PS6_@ z{Kh!$+xWzU03l<%{_33;MZqq*&#*3tTre3h%O0ScAOmyxkIg$1rY515JPD3W{ zyz;0>R}50~9Q08DADBy|XH9>6{ZhoDPeF=cWez=`9rXT-f6Wzq1@(Dj>uy9q8|K^Z zlwHy~29Jg!%uXtUB#x?%60GM7(5a6>)n?5O=u{ykyxjme7a~#b%&3x3hhEEwpVGi@qwOR5lt(+<<&otqKKmu!-~q)@vVwnxkt;t`}}7BTIr8E+HAV~FlR+9PlBQcdiX)uRX}*h*tPR3 z2qqDEZpUKEC3Qe77kIoIdZrJGLSGzVUlRJzxrSU?)hrWwtLXM0sVF+K;QO4h1zd8Ep}~cnh2-~2e*=>kCkTHa z{3$y0F|lhr>l@ove7{NKh*B58f7=(zJ&f1lZ60U`wQ@%aa6iS@HCIixOqwO=JFN-{ z)94af2_i2L-!HW(R!!xT)s|rJTJvxOhAcjdSzx;QOWt3-Uz(uIk-Gm5KNdy!jJvw| z-C6Stbn2THh6h(^5q{YA<@$Hg?3hgHUcyy(lU$D2gKr^*6i}Nf7Q2TyFN;rIZI(`p z;M36)I{6=JH6|hb3lEXMp=wpW$$jl z#CKtOf|8zw@QGLOo?IBtzlEtBWlk=giL?La69 z;F$xkr&iCPPQz@I2yxLVVWd1<8;4ao;0FjvL;*V;x>1QtJw-+qanQpS20DH6Ev>pd zAokLvI$~xQ-41&?PT|jt0U%)({w{TiaiSMS^}D6pne=l_tkFDbr3s+Ty%%!?$<(Pf zPf-JKHay_JlgQx-`Et_icK+T&g6++yGq)=7b>cXu zfnOhD+TtR#iLV_1$F5?sd$c9yQU)Iv11<$-yt4HAqQhBPRY8;jTVZOx)Z}EKf*A`b zTE#x1-Y43_;Fp&rOy-iIwkvt{`v}bH0_pKT_??Oy4FJ4yf-=;Vs|qJO)^RKQO`gV= ztSi`t0)WF$s($G0S593^mzVfes)mJb_I>LVkB`sOnRJi~cC7Er;H9}a!D1>5y5)#Z zime$IYKpaVm{Wa#PSCw#6_BiEsouWfn&af9l4z*2D^!u@z4VMS?|a4HeLonF(6)8E znvv>sKxgvq_6U&csA{LgLKG}%Q5gD3jIE|N3ko4GgLWvTk#l$o4j>@4H^*p51(HCM za*(^Ia-D|6jj_mnk?5oV!LqM>O98ITwCbGq^9CqsI=i`?zNkrbb?^?GUMh{W6E;Lm z&-y%Vcx_-HeJPmko8N{yMiHD@yy2UAsWO1_Rp!T1vY1+w9sfnEe|Y~_p{pHL>fev& z$N{mZ6H^Ptl5$(wQtV$!wlf<#R>;=lk!h%&q@(-t0q=CnsBhp)B*M z1Ow-%?#Guru60SyGqubqA-WyE;}hIPfycX zF{bpt-OGo7eHZsd7d~2z4JbM@$~#)7aB6r{7R%IMe)UMb-4bFxtbg3~PA&l^WfE}r zZk*wLGwy)7Xdp5}`|2gi`;tokJ>v22dRiqYlf`_Qp9p~oMP9c&%4lP8(N&a7*lE7;E7X@9T-hcGR zvv)kRmCx1*<_ilHz?r_ltNJOz&Suf@l9sSNi8knc-kASl*USoX$!Ax(9o}nkOgfD? zVNU6?R&uuD4eg9PBRnfW%~(EH!3K6kKUZ##JuLlnQ23YSw>F}N?Zlh0YFY6pRny9@ z6z-bbNx*88G})K4q`RlSCj*;oUzExQilJsjr}?6XR|*>q>_0DPi|OVMzOl9jm+RDD=V1&u zquMD_1^yt%dej2eDPYA%FMqYUq_|*0aoBqKq$Vy}?b-^)SUP~3W=1TP=~V&PB~GJ{ z8_HFh?YbQ>I_Y1&S1WigGyO2k2NN}XMX#0JNEqVT!Mv+hckNG?eJ{W=3+t%8uP!z$ z*wzi}YOV=bNF9`Sx!4I@yZxH>cft56`n0}=k4^gSV|VVBT3R;-nX|DDzz_{bhX;I7 z*?VE5_DWO}i~d=OsZq{4Y28hik0UXwd0PbH#01B#K*62pDP;jt+l1f(mT%A4T6Z)=^v)kR zn?Iwk*P$@C5_x#t_GuyKihxUyPqopm_k?gbF5pSj^B2AaZM+@oNtXK_BiPEx13fQx z*@Yih^BcT6WuVTyjBzF$DoQwoP+m|85bHm5v3gVPWDQ+W@~jPBi#nl^tUdtt&FoB6bJ9I)mE4PSJ;R3(*u-n1qrBaZ+m?c3bT?lG z?B8{{-$*<%{^3Tc;d7Ont~)j9As9h&dxGMt$~qW#3QvgB?d=KHLOTFSD=fpIoiWZj z)AA;|JN7moAHW~?=Y90p>aDhyJQVMa@L#pYhldFnlY$C-T!WIZiMSz?Kdbt}YBwW**op)oPAU&{; zxUg{Pci&DbuxZUhGM{Lz^>!GIEEV{1IoCADhYAtU>33UXi?3_}Gr1d4`zr4OWg!E z@YEE3ZLjxxC0sMM+)?h^Z@02`Dhr@+LY;--u#CaISj?L<6lW@1AOm$X$7nC}DSBK4 zBn#j3_gx7*9DYNIc09>9i()S)<(3TFOwk~>n1#6k0SgkeHfj0pllHuv8K`DYP$Mo4 zb3`0JHzb}LPq;i$2IPrwf?FwL2%0%6E=)XTw8e+QWyd+;7KNn zm2g-?_O8gzfgWCQ@kAwhT^u<+k|5H;hqD$$_%i76X)G#+kC2@T4 zWk<9=nN@V;nfpZ!IYRwi{u(7sTX5o2d`)g@+ky+_HcwwNA;!Lw*!-8n-gAwc?iW!@vn#;IVKb`JEfaXvaw~Sgm*u4f8;J<_HSCe|Rz>uOk zdXbP5xjj%ILgky7=sOsiXtaPL12#^>6?t2*U86msjLgd866;&A{{q=Hb08lHT^fXH zRk6Fd;_!5u)4FDr6OHqAA3BR*UWsG#^`M5g$W3QD3XFt5l5uFZL0U2JK;5`zRrd#z zWtosEc2p=6RVZx)&UKQs=**lLoJ*)pVY60AcX}6-W%`JDKbh?UiWl1f*V&^1a_N}R z{PO93_XW16SBga@A<3I5rILb(Njff!`)$f@(nm4%vr#Bv_ofOk_Yv&7!>quVyberO zYT#*W(xx6dH33%?dY{b$BZ9KVGTEYb5_b_9p)dFT=r8zGGQ_mDD(rMt3`ZfiV*nL^ zsk#M-GQr$fJIvD1&c{`b$7jei6u5GYGNh4Xgku{(dGoM>2vv;x1}NG6y-< z^nUn)*FqNmXl593qb1hGw~FMjexxlDtu)w*+LF2d5#t_bvxE#Q1l zh8uu*yucQRuHB{^0!+mG60D1QmBt1xV?y z5~X5}YM?*<6}c0^c2ZBbNVo4^LG^TAeN_inn`g`0tk3>$yVIIIYg0sZFpajoNOdTR zXBEt)$eLJYh6^TRhb7%Ge^tez-X|Uo%E+k~aav^a`7n_@dVSvh)M-uut$3O!T(b)H z#0z96uq&!cwgm+A`~^C4pR2g^31yrQtbU}4z zma$FxrCI$@1+-erfwcJjE>FAt7uknifW}Od^zprH+aP3lQkINoVZXIh0yF%k;NGe@fFXrFHv`0M|<&l1<^ESD{C987S@N?*u z@FJ1vH^m%Hfb7X(g2+QUxg2^z>-qLBVG5jnb znff$^)FC^jI+ds>=ch=Z&WkFsgdVk^q5_onT{@|AxL}rM@0{77tE&2yE%Qrl*6Hx( zp^RvEgQEP_#caP$r+3Qx0(Z&KHaLgHqi za{QvD|3%hNCT($W7hBuQ*twoSWmwb8gMDrWA1u$mKjBj-Jonc1ZRGG}-$SV9=h8*J zm>IB(s49XExw9^>9#Q*pCZHPre|b$I0KkPECMRLIi7JJk&uc2xDeh0@+(|JQnH-CJ z^Y)ACul*?c(WIS&Cj{`3zve(b5A3G250>SmfX8A$L1tt&12tKHqtIn^YBBQ5+o-Q0 zn2`_^ahtc>%q}s-ZX}<=jTu(5q(6&xq}%i{=8>O3`@P z7y|Mbdnla91De2ysp2YZ$FZWX0@h;`i2VK@p-wP*Jb6-*tkrU2afKihOSu^F$08bW zOZLSU#@TqCW{xiZJrA9olk{6$?o}x~iPrbaIIWBBTu^D1h@}dB|MCFPRsR054iMw+ z*8Z;R+{;uy!v1n6eVkvdrY<%UrZ#Y=%=jmpAbNby_V*zzJt>(*!^2$j?V3zXrj^A* zCwJo}!G83e7BR_Vx~j-H$NL*sqHf9-aQC{(SGvrJjZW2oN-H2t z*Tz#pt3S^B+6g)i^}np@NZ@~4)l(2<|HrCM{{OJ5m)W=0KE7gf{L|~<|7%rWvX_88 zFFqakKdtJJB8utI-tatydNcgZqxQzBTXt3tK9(NZc@ETB)aU^%yvcdiTmm?mR^Cd)Yq3EInz3t|;Q=hIbc>*h0ZSr6#C zfCj%M_`#ys!@0$&Es3^Iz+Dz2%2ip&wT`My6SVII^YU#BxC)ebHnah05(L3?dT&fI^v+6lw0W#)3?kHdzmg?(j8;FVkTaUi$ zdEK^JqoZOWt^Bn4Do52K>yE;R0OC0n&dx_b)feC{NM3?!HMg&6+*bXD{mhOdUhnD2 z!eHkh}C&jXI;2C+`a0FGYVX;ZEu?0vW>Z?42 z-ZSSWzHS38U{_nX6b7=T#K18rL4(KLP?OdAhwId!O4c&M9d_svEZP=PJMZ2~`wnucfQ6AT)p0|qTG#Tc;KmBgYzIs_ z5{htIpwJC z-Onu30bg@BjKJSih+iio8bXSPlIgRsl<3|7vn?uA4aWyc*j>IJ`Fpu;+r2;a%8P;C zLE!bAxBZH7H4B>?;(gZku5QMw{S@x?_`T=1@NC&MkU8tXdEfDeMi#gQVX3*Cx9f1l ztG|D|KBXO$dm@h>?{^N1u(;!6PQUka<@UFG^py_-*CyYX9((akDqDcL@a^Zf?QLK~ z23f9H1W2qh_rDy+R;Tg!O;%Y@L_V4!){F63O(czS_zj18aiVJRS*Od9d+quNrCim! zFdoV}zEAYdYRUv*hZ{@=Ni(ZEzmycao!cVeWS2%0sD!rD;vu(Y2kdA0NYFvQl1U-W5R*i(F}$_73paQW-rJ9-Pwbrsi6l3m=!dj(ht41duTF~ zM|UH^G!*1)0Om>#Q=pn0mQ>+M2jzOWa6vx?>zlxOUT)R`Lstj#b3&ZWAFWn06c-+{ zuMUUXS6areveshO3+tQ|o%HD@c?{G!N!m5FBlaUcC##tqqcvKmhDZET`1D1FQJg~P==&uZjCEi{m@ zB(GGUNarPUCw}I3X>_B8CfMLGc-!q7cjsW`+~8XD=vl4FW<5Q-!Tq|!^9G;I2Cv5r z2W~%lels-;(XGaWm4A5NQo7j`>fHF`*`pU7KGv6`vKxKzmWf8sK_Gf`-uGw2^U4>W z$og#JVWi`9pTy;Q^sEIRZp7=BR!4Jgc2khDRPK~^J`}@ajp5V>sG{@KT5*=d~|&Gd* z=xENFxNP&28vl@nYspP>T9A|cHDtH1CBJBNLCN&jFg>TG@Ve8Y+QDCsyvABC-}Y6| zNhlg&L}jJ-iha<S;C);v-h=CiaibuSnm}|2yLrYmi8SkTXs5A+%KtnH_S;0@wD_s|8pvK(G3p9Ug#W(#T0(#JHGCQH{QAjX^EPw#5Sa8YHXqh{>0q}6 z!&7UAQLU(QYybxK3y|;S^J#>r!ME`=AhFj|b8CLyxNF&BpH8k&1Sss;MSE9EO%i)( z&E3d&D(#139v%>xiwJsj0IdnR0p!pFE>+I1G`LJ|Hu(rZBlmH!#fB-mEyLlj5w84R zTTFh^*L@iMnPORr`vgLZz&elLi(%B zfB9rcbCih;$D_7w`1(>+0meLIgY|&6Klj=vVK?!jA=`dL(LCz<UF@_(yBkZ8!qT3FsSa9uPQtavSpq0E zXjM{?B(Jn&1h)#b?1RY}*$^4vuwmj``Qs_iee}1W_p@s6smi7(z#Nrqwv=S0l1#Hp z-W!^1v6bY=PIj(K-nW$WVLZuwiS)TeORX^J+AhHxN|0|~iXRGKOs52HrNI4D{ZXkq zsjR2m)BtvB&{8;TE;Y&sIx(G6>|&x^&x3Q@JwjQSCrMM@~1qX2X zFxxJ$d63T~iER~&TPF+M;X5Xd0*a!&Bj;jZ6Y&Y`^vz9hcP?CT0#z_BO0rA00)?{j z!eRbO4nLg)((EzK8Tzy{Ar)tCqBL9ToSAeN{2DCmr^v-|bmm6l{W_K79DWDNna2pk z2Se!Cb*N`LE66gVXbtYPBd4K5PZly~RBVsYGleMP@Csz*W#~u%JZwBCuA04QeDZ9L z>gh$!<>5-){fnSjS{|VS`3nVH;J^-1p;%_d0oE~?%TBT)|NAa}rEPKian416%5RdJ zcW4ccV^M#6z;~tz_R_NryqySL;$aM^bqSLA1s$Uzqoc#ZsF!5X>d&aD5)-N1{IkDw zaSQzUuPF@2(|eCWNQcB6S&M{wm!bR$1^IfB$WTqGiPTfxnjzjcp(U5ETOp%LAoMTc zc`9ya-f7A%&Z;kd9bKG*PQHjPe)SAD8;t`PCB@{X5ayGYiXk~VJFD2$DO3K3Mx_4iAS7!(7@9)yez$JX)ht9iUcq~&DLGd zK#)Il_oF^QMEUBh)m4ajb-JYV{s8#$ggc@ayu2L6@v=xD>=qpGW|beEgDLP# zG^rq}MN?siG%#QyLfPFud2QqrVPgr>rtVnPIh}Y8ZLO#rom&Ou zMg>^s&_9_wQla`3DDb-Y?++r9p(-@;38Z`NV^XeViG_lXf&&8+37r-!^m;j+bsMOa z_p092TjP&$#_{4hnb;zto!WM&Z}dRI{Gd0?f{#XnPk8Tzb28fXMWn8)pvh4DPtX;i zF~g^ue`c?!rz4$Hmuh)j8bDZccULly=+$d&an-y{R8D^F#b?)(EaBoa===KTA3Wbl zHK;Z+vHQ93dl)-19P0+0O>seTnUc#QM7n1kIElt6dp#sWk1=+~6%L(^_H~=%|E?D~ z(;%H>CMQ&15~toqlkes<|_&7i}}O_El${E6R3K7U{|BOI^jaM`soQyu<% zjoh?p5=z}UV)EAKPxvoCBn&_KsLt5tPQo^PJP4&u__GZ4S(vE={zwB|{$O*xe89B^ z53^`}8WZl-*Ya|^H%7*R%3Z~nj@ViQ0P=Z#YxPZogHgd`Ot5>~n;+Etp5Me^ z8Yas_u67*0i;Mwg6|a42KQ7`}lXArA(yb81V^P@7*pwu#=mr#xPyZC0wKC ze1hav`BNPyDRr|G)v4<+p+MamEOf{ONS*E43#!^T;58xe`fp!%Nj&2_W;YKES_HKl zteejg^mvs;Aly){X~&G|Fb;MN?;gY}oFrq0@(B8S;m?T#di0I)_HMzLF8EqYaYdwQ zZo|uM7xk$jxxRz<%3euibQAObK+8%!u)H>vWxi&DxXnm*wa_1m|O>Ju2yH0KFH0>oN z{}Ab9yaW$M{)-oiAk65m=+4;sxqlHJLlS@?JK1jhdzNxg*FqduC>f3H>U22tnsgV!#uBgCWxF+m1u z-_$6xcJxKlkpg8KGtQltJ;9{S$5R?(3%+9?62_Lw#y<6ot-Rg|1&-~n!2MuCUjZRR z7qmgcKO#fxKqhhS3A#6XRmyJ(08*JHivH;UE#pTSUhqvJ+?iS>Pj0Wfqy!U$fj9(3 z=w}ZE{0IHZ#o@g!<1MQba^@>%O*-eG{~R})feLJDtODz`&&WnGFw!KYZ(M5)oF zEI6Tel^#dVewFuR+YF**<3C2@Yz2X@v|O0 zygdY}YdjYd7D7y%(45#=3JTe2LgxiV9Lz}8xg7%jNm2C2=~tmnGC%+N%LKdUur+}W z9=uLP;7zVJoPzTUlYGRFH_*fzP_LhIL8B~i2p8KG28ss&A6F+N*M$D%mJFQ}DRc)= zXT*NU)fk?D4fftnxq&A#;WLs$hQ=cIkM%?W|PCE82Tb?7y`qVB^^yz?Ax|Ba`T zE<*TUxUbm+vssYe2_GC+*5QwQ{&%cP8QNrFY{K?J-Y*apbqQA?=g0V}l4nZIvk)03 z?xf@fViOFu4hmJ*VFtO-4bCf=h0ynGyvrBD9StS;c#nlSF1|}{%?klY}At3D%+}2$!23yy3r77U(Crz}+Y(I?M2k8kzT!`FA;j^E^eVa>Ql-=ev(<#kj5#pChD<+W5SSWkhHws^j zo=Emnh}DEddqjFQmQS!gih?g>-{KN(p8d*uMWF~?-G{%GBVC^V|xlTe}8RnjGG_z+IY% z1Py3c?xXmLom^zVuJJp{td!~A`Ga%Juekliv0yijP>gs$OBqD!d{uAxAlVBVpoaYN zrdMDNd(VqNFM4h8pp%o05%bto>#Agh(Q73hYP0!iGI>-3LZRxq_)rHC*QhbB-g9sa zuo`6mYuWhnEex-<4e%XC02eveBPQOhTJvRl5lQ3pCG8bV(6P|ivuVf-ui(&;M{v4rmBvQu{o;{Z6-nh_29;(%Kq#0B5CiRk27+j z@P@ZGkASfG^N+qPtctA}7&k;?nXi&r!apqQ7z*p(3O6tHlUURH-o#ETt|8ni5H(h9 zS$Rv&ZTB?u+K*jykY>Qvyh&Ss_8o*aZt6!v+oWhLYT(a`vqIrDf&Jc3NL`HEsfYLV zv9MO0ck21*WyK$c3iWrM?3>dVOqoCcTtxe^eGlF#=(|g4(ShLE8Ylgeqi6OLbHwlv z)sC{tzb*V|g0SWR4(xV;t-ozB2{Oj5_N9QEp)QBs_J|XrhYnW+tXvS$WUPBsyl|)d zGi!ze%`gN8_+-V$-~8_Fx&{o5|E%x^;`rVL^}+@`QKI%`8UT%z+@HDwI4gTe zIRx9o0^)mFNg)}q^LD;YKJ9N&gm99+13vlnbD{0}=xS-*pF=2s&AuVs6Pf+&j5lny z`AXzk>IIMv(vuQb^XMz|!xja`!%74%c3ci`Ffcu!bffw!5t&VJI(|gc&e+^?iz%<= zL4BwEYeNzU<*0DqZs?(SNn4F}Al!b2ku*`fevwunD$rmkfFSm=P@6st6>p_T025Md zQ@QUNE>B4W9q$b4isc*+72&i^s_faYt4{ArJb+NUT^;S)3rgc>m}ZEWwt6cCaXEi0 z^c4hcSkY!C$|0kyEq{RjVi1a-^kAfg(&Y!>+NiR>b1GKGg1(bg?}u}H4TK1+n)eH3 zdi(henRzth_s^bI=pPe!#xeS@zh!&8-`zw%n=6$4*vQ^7NA}Ri8a`-7nH7 zJWLn=Pnbyu>yEh!?$bP>?IaZ3?%};F+@j0-SoV^I`P4wW=iKj&U0(iaiXC2o7i|n) zI$sLz@IG=a#lR=*x<`lW5k9*DpUB&b9S0Aa9vyKx_Ru2~B{OVec<97bu%SvW?r6oB zoMcn$p|dr7L5&DM?xx>`Z9b#fe5Q!kD}2Qvw^XziDZlm!=7)aT6ebqKG-1qv0ojH! zjc?BzpDgh5y*G~vD)^Pb$0RAy*sMhB({m=W61%%Xg7*B&Fqk2<8hdx2;Xk8p`Ot)q zDcz(QinTkb!kXn=d(dwFI5+jqc6g)gI;f>n2InFDQXbE;X0}pTPa2=tntnO*-I5*N z&eFveWn~C<=k!Q;FAm)P`Jww*IV@9+e zzJ3Z@z*1g~9+l`@OO)E8-Se(@T>`rw|Lr+3b@*DrktCwuCV?ASK)q`e2SM8T54FQ_W2G51P_%KTh2o}!)XFK~37RP!vF z6_I~c;6$gD%#U%({3Ev{eVU%E=mdMObpYW~r?ry7MEd^Z`R}$2GM+@u@EiybZAaae zikiqgjF9*AB{NN`HL{La2TJS;6-kb^KCOnOeXy*vHF+_S1K7D+hSHPvy_vXp0TJ{e zYaG1HH<_Dez3}w>$y;KKRq|8&AO%I^;oH5*`9%XkN)sMB&L<}et|5X|Y>XXTFHaU; zw+>eG=yEtvzKFk(9IO#sQb0+bJ&JzW=M>WA==Z}_PAn94`s7E)08uv|Eh;GF#Bd5R z(90JpmZFP}7gr!?5#TnHxvOf~DeC0YEAJ3Tj0TOzTAyc@eRLYp6llT50W>_2i!|AE zZybnoDgUYOZ7MXMlel_Z?pSe>@_k}sftQOOaddLrQjVoI_q1Y9*P!Ofn5;ml1=8x$ z5o?&qKE~Kbe_(6L%0_~FppHmcptASK6Oic9 z7{vbF46|8cY#UMw*XX)Cx#hTa?xMyq$6EAYdXasE;liK6@^Z$h31N%DL@&-9evW7781IhtdYf ze8lOE|7~@dWL}Iy1OGgPB&G80KZ`k_xy-srQv|PP#6jB zeDW4`(TuE%jqqK?|kZ2?hfKfd|han36qHedMApFWG<869EnUMgXrt zGV;4WOzk;ytb%)}-gZ}Kb8u8#mH2zIeR-qBn?(B5BSUbbdh0#Fr}Av{;_d^bACEuh z40I`74sp=CVrUJ_ zcJ*^oS*^SAkUegnd;|bVP8*=#RGZ}{u8hsR?7hN+Dba`cto2HR%7vHXT}^sjQeVmM z^a54nzY4Jr!emLZeYMnrkUg*7$c;`{3H)xu82x@zQYKin&bD(ZVd%TFZ(GePUfvdq z=Ya}KD%Ee}kEON_BPm-Xlqg(UhQ>M(*CYaXDPi9KdW4IrOOoW!lFk{vUI=S8basel zy%`QYV594;3e$ShTK+d9Gwb3{(Szj80j_kYM}$^leDs|K5VtEqtm(P z$hV0GkZk#7e>UOXb={OFAaf`uUZOH;^Xk<6*_wTbFCrWa;aq^ng);AwD(B5V#Z^l+ ze;>~LcY~uPb?e%i$`_&c!6LE$+9n&{SPj$uDMsu&+&k3r;Le_xL|SkROH~3S7=cw) zqJxsWw%=KC*!0csief4t^?1kNk`y+Ac8hHeBJK$ydZ(J^>qk-yr+>B>nt z%E|b2O}Mbv(&Fy^VIls%(zfG5JJ3+^jb3)NMc_O~R>6`@Vrm<8%ek{he7d*jeGR6T zUfgPBYt+92g@SmFE25u~yN8NO`uFHY6v!v{vjHn0+Eo7&uVM%xYt;yD5rEv1n_TSG?--4Z{yciW zCPE~vLf{UKDeb1{(AE#eGDVG8GC>$eAJ#!Rv`*bXT)2&<8bHdW-r}&l_0t2dWPUk2 zSYd}}#t6nW54r@{jB~6BF$zcqh(4aw2*>DbnE^cG{4L(0jr0X|MT6w>rs4-GIw-Qy zKpM}M!|p900gB!fQLbq?g14i(6CLNBJiT-37XeiUuDDp8SgAhaB*tPCq2ht&-VWon z-30r=BQYREvP%e(JDObay+C>^Nto?ElwOTmF|C|Qt{%z~$Z4v(cB77X^4U;sP-V`_ zo;-bfy8@!w0%i#Pupn;uW0=X@s*uE7SB9NsCI|NH^zhX}ipj<$sTMdN&$?XU(MY;{ zsTT!6+4VB)@@Mzltskx|d~|Q_e^B-AVKMD*{P$5Kq0K@I3ni#3{G>|V2bkCntHB;?G_f;~)?U%!PX32_^*{!m)YprXNRwbNQ z*FfESD#Qgn-N-&J$E|0e=jsgN1~O$v6MmC*{dQIfZW?3#hLHac?m#iU3GDg*a0j7Q zqm$FDebYO&)vcRQ_rxk;{ei2S*`Z4xch(>5*v5%o^s^$VrfWNI#bY61ZTnHT?yg}sp)W$bH6#M|ZM6aCOsO@i6TKmm6;SLMsmq9*Si~Bt_3tu+j zY0rf-uWxFiH@hxZUoWGBzn>nuMJl|pa^ z*nDo`54~jdJ%iMnM#0^gH30a2^{h3>SW$PUgwkE6N6T&Y#kQ7y79LV7CaxiOh zBqK~vG4t!2*Zc9?VKHRe(pXXTzP-SC{`M)F+J&fsQ$`Db!E3CW$kLH;+Y}yY7y={# zR|#}5>G2yh_a4U7MhRbP0PGor8PWojteq?fdfvw;0)}{(HSqOot1ceb^2dC6N1jV|B_=Q)Yd* zH2i9hs_1K;AqZUid-FZU{gX2#aqAd$#umd`M@!^=h=2V?Kc(&8ZS2MVFV0dYt$B0E zag+b2PLEwZYL)$-x=+{q&zo=ueuw|(p0NA5pRY%}uKOGd{qyegO^g~aq>r&*K6I

ez%l)d`{1o0Nho1}G&ob;w;{(49gl-E#11lDv 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 z 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

^qV~4oRj5uJvEWUCrHcx5(1e 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
*%j#y~k8 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 z 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 z z3Za0Z=#Ye6qrMnfE9{+wMCI`b&&{a=jxTL;g*{0tdrsYG--jVhTR1pGr(PS;^I;Y&#&jFf8e-8Rj=Z|-HrtY6+WP;aJ> zg+%4`suN(U{z%w^Y}-L0g%8r#+|&)i0X&aRO~U~VGzypwtUEa|B-xCor3LYc5^JP% zTuLEP`ACJ;xkkr2+sBP=Um9KRHabC~@->0BrZ;wSE_gt0o`Ru-uj9~4-8E$Wx z6^46E^rbsb9w~ndk)q&(OV>PwKyCnV6IqLI+bk&2=6z*`H-*b~t}*UO4+&w`C`r3S zJMMOB_}Qb-h5(b7uL^GZn~*YTZCX=y(c51h<_0*LqAwk{GeoT6s#BTnTGfekttN@!KA3vDzZiQxCc=2?^iwe2M)o$+eGS|uK(!g zv3_)Wde6YpucO>+1up~F=+`+H+q@XnF5kTwmm}4w=aGlvKR$bE@jI9rX>j;pH;`e* z2Q5Sc4aK5Nru)`$*M!N@n|D*06~8Zr3P@d<^Ho0R-#tk@ZvHTB9{>o-@JS@8D$=6w z@>G?Nzjt2~lst^_9Z~yTjEMN@^;C_kL2vj-mMI$Hl1klf{#zWnUuC!}mSheDXRLav za4CU`q6ZGlOaBb zBDU40SS2_Z7y-g7`cZl#M`7tXqU9~ixT$FJ=q;*^Xv!tCUSqiX=>RjcW_Yr73i!hiVXokP-Y z*?k^YUA7+e>c*ZFwUpbXa!}mBN}t9h znvnzJ`;-drI11S!yzy>~-owJoCv8gn(?&f{csNa`BcJVBexe>qeSUTC3FljJ0`o>* z>GlWf`G0y$@POS$EB(K`UcBcuHJ*9e+tL-@@k%{9_{Px3h@E%3K3lq-|yHJwr7qAtwLYdDNZST5P4w#@3mrQY2MPWi<7axKhycIFYP-R z1D=O$!-TWT=;e2hul@eQ$iBYffAGi5^Bd}GW7j{v@yd&24$IsW!|V=uH5^HJBXc_v zy;^iXt|G^0<8Jni^^?l{O9%I!XhOD#HR5Ty0J(>I^~9FsOR`R+_|~RxlNnz+r|mqz zl=}<-yI9*tF9=)6egH}Ym9Jg6hM@gEIOYEB0sl_`82-lhffAI)hKx7T;;90hP`rL`VjXsD54v!lB2q#u1ob;WxJGNo;AwRj?eEZ}GOrGhvTA(>y7=PfJ!8DjDcd732#^i9AJbb(!lwrcpMS+5>tSsN?LOe>V z7u;*oNS9OT4k)-oz|+%MN`&6kdIJ-VeCO2Rc

W7HSv@cM)FEq<-hxlAa?0o+vJv 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%0AUgH%iC)G)QYPYP~*5T80k+@ z6JNyGjQ=q1Y+3ekbNIDw^=q=+y*Bu9F(%4el>81@_({8t9yI$3Q$<6@e zJphgh&q74$Q6S;iH0!pj!)Jknt36=aOyVt=01jxigRhySY|WgR13i4;|EBt)q5U7W ze!M#J2xi`%OaCZ$Wax#j5wFls{2y)#M?VdSGj!=7Kx5v8@84UQCBUO@O99hH?Xo;Y zy_2Z$m+o+e0F@7M9YDQu`f~w;P;9Z-X3Zx9rnfi^!Vm}u4B$Y3t@s0u;v2a$h%E@U zYe=rBeKMfErU77_a(B*g9b*|RwGi;8nA&VO{6a|x@p3UB&oHJoXq<9sVKQ_d3&H~9v_gt4|}Eae#l zj?kqo=0Vji&gCg!;G_8jn5f(j!Hu!n=&h5re;(rW;JcRl!PI(_BHU(cw*1a5r8rdp zru>az2$v_SM2}o*QsYS-G<}dQ5G4YQ6qKAie>`L%0~!xG0f?Q_tqB>&V~U~Cm6)mw z3%5?ki_WPN-YN46!0PqcjiExAJOUsc*QRcx-s&8Ykq)qSdcl#H5F z5vo~3$vX>(e3Xy?E-bwODya;1OnOS^PJ5x@RRCl;NO0uF!cic2f^zf$h!?#DkHHv5 zwJPy$%k!>QTF?RM%O$w4{$v~gvK}aeAO3jL$T*FC3B0XTw>4VYVJuw-z%=8;0Qj%Q z2v`{da<+efJ7nEw5mJ~-#9Zz|NOW=Q5&01HsUEcB4$WzUa3D13V0dRUO+KRdv37$K z@Q|;fMtGVf@b7~lBmlP~`p}gQwH~~zb9EKAO{vTXD`Jb`{?mWD6$v_`502(-Foi(U z1+!7UtIkF#R=K)_isMfQtze``0OhJhEJ6w=0%0sGF3J9SPp|V75Ir+M2IY=&#|zZY z4o(dl8CdKT6;|#u!%0?SMQYtyf)_0iV(#23SLY8bnc8Mjm<-o!T-QHKZ-6(Bix(+3Z_nMGaRS%GG~4p+o@V?{OT1BiKEXEGVD+Ly7ZeIn;s#nw$p zM73H#6t7E-DVeU@-s3oQRMH;uV@YJ2JgW@H=w{>f^ITv8LT&(z$ZxoH#qqGtQg1K z1%5ff`R5oFk{H+ZbsPTh6@KcyEnMg!=o9-rS%?=vY4gp#k+uF^Gkf<>3N_ zrjR2ZG{k_^FX!21`Ho1@J=C1zPlv$_qv`!Hh=DCIQuAF^|4|8~K!m*>$EU2|DB157(e8F1ru!<-6Pc%!KJ`I!Hz7Z)qQ;(2T00TK& zdFljLK0|P%02AN$0+JQ)*znQkS_ttMdfT@^-)C3A;^^JH$ z3#wW}K>FG^O?i~Wc?>`iy<4ffOtqEuW=yi(Mg(czFibhkjDD~#q_R--qHL4bCgQ&uWSTeO*%%Kmr2Mg?o1 zDcAy}qHct<=Mq4U4ZYmP?G7_enbB+&+;(1ElQf%c-GFrqz>0QAeiBfCHD?rWUqo@d zVhWNSW6224-x{jFPzb2RZIzIhZ<#GE(ar!)Z7_8p1E>9UE)Jn>JZ@Ib(bPTNpC?DUVirAqzfP(`~q}0YapMQ zDx=qF*%&*~q4r{&&Ex3)Ox*qS==+?;`&=<=B@y0OiA9xT73p?a(dNnk;^e4?d~1Iz zj<@E=|IE#Uma|d=_$P8*vg6nrHJ68?jHCe^j3K5od|?7Rc)~Qj5CXFq87j7Hws(U6 z4XMH!!P&u8xxN}A1@^IO_^SDUpJo&NIl$|8OOI}yws!vH%d+pqdaCgm3)%i?(1m`a z3V?$8vgAzZB>}?>P4{Nc;iEX%aiQcD;lUAPwxb_J6G=chcQ*LJjRyO9)y(&a@Oo8P znJql6z^a=FzXJj8e)W)0O;@b@xn#u<3wnB|dz)!#FKrY{Zz_lzy_xEny~Gb+Mh`+* zv}JU6$Y}pz^{|DJF~x^tNtqLe`H284h3@r~$UknKdCiF5Qj6I{<7aQ8&6Axfo=DF} zXQ)1S$mO?fgdn_^HfhX5fNPiTzOnQ!v%cm-g_j$_mo#(pRr$9@;Hr%Bn{h)KypajP zqjAXN6~)J^4d@icLyj1hF_syPgFj7z0ZWx>IQVoi-yH`_jfMd%*cvbI^?H_tW%Df| zQgumLkXo+Zv$^(A7B3h6xSB6RX771$@A?>Oz_(U)6#WtTD-?c=&QBtH@aUP( zEVKR^FkHpO0-2 z_w5*8eq<$+b2QZ_edsZ7#n)Qqj8QZvUAO3UD149sk~e^6P*?@2ye?G>UbK=+Fp(o{ z%v|?QZzZ?0d^sJt8jG?Q=Kbv!C-r_^~Q`x%1aO5Q1O`M8sARqDI2A<_YWo3%=WNkl#u4I%`6a&DPXc7 z3=e8&JRKcs&A`A&_VCjRWn?-uQ5BZ8%ZBS)hk>wctZTTfm+B6}HPr$Z;t{{&A92fh za$=B$Qnn}9tC*aHjn?$1t6|p%4mnTr0;kiR5fCQ-M&!kIA=lm)w4o(X-%J){muttT zw#AA9d4Ro2Jao5+FFjZFs%z(8558S4AGXrl%va|4-fE|G&2(j7`#|h<49Zx1Ui0nw zl_eO^0ppZs`a2`SOnLFc?9@W_)gztI~lApr5L^m z{~|}VkKf8pk-uAFs&?Bb|FUXv`tFQydcI^A>_8yg(>lv$6sZSyZy6$ne+etNm1r^w8uUQB6=FyZJd)`RAw~6-Y}kE|L4cwCTO-BW1ETK^H&h* zzEZtF`FOoYGJ$|PAgL)_s4M@kO!v1KXX1(BZdVG;F+*uc%Zwp*bhIh9< z%xwjAi>(_&!iv_Luf}BUAi%@N_ST9*Kbb-$lRkCPqbzq!;R{Z%>7HydpsvcA$0|W7 z`X$rPxn!zi`)lp*;hpwAlSc4KA_K5~n&ZpkQYK!db5l4klG@>xl9#tgeA${MeX8>P zK18Wzwk-wH`*QCnj;-G}8F#Qd6PLH4cvC`Y@4loO0kB@`l)l-P@nqYcdCv4>TbHa> z%ZC#~++1TgwVuC?EFn<2QbSy$T=-^6*t;uYZgi+FwxgL3*^XE;}D##3#Z#;EC!b@@>vgcYxrBEXZvHaq#8Mw+iJ4MqzwLX zHwBUQJeuOhP0#7Ujc8!wsq8aeSqE00^Z*KI9LP+_KL#y(2k_K{yfGB$Lc4!vYB(SU zLm5+-g=~3IWXsU=kc@Y!pZs2(gxfo0xtl)xkp|mc3J;w^)T&A)S90&A&S&~ww-h3* zS2{9J@|WlCpa-c(n`Abs$akx8$XHW!bPK%R+99L-Eh=kUwosI*TF#9Isj7l*wYw^h zDVh!OoJ#m;Yj)K!kit^&WzReEt)r69-(K+Uob(QmE;S3@_=`j7e1Aio-{2XMTrrR!+ z_`L55L&fRi!omN#-;P}iIM}v)i06ASPWWy@C^f%jnbQK_AI6V~f%j#oe=<1S7UvL8 zel}uqNEcLeC6_-;<5x{?Z}Q!FNBQHpeoQ-%c@%(2MDEF0*yN}WzGX)oW`zo~^;K!YKGEw^J{e@4kxj`fg zfCsadr#^kGDR?>lX}R<{J`_L-S<8~hK+5Nr2ms}K1aAE~=}BzG4c39A&uSHepJqQP zE9RMjHe-fp>A=-I0J!bKmsQ7U z?sVQoR<_Et%?cQh6|u0^P2ac0a~lVEWW2%|r{Z`?Gqta%rdkICQo`HI(Lr*llYdfW zS;rO?-T{v-*b&KWq7VO6+X3Iw+zY>tC_F~G5&25w%kA@QmD6yAX}AtOAag7fvz>pI z_+?|P*mIZ%hiPTsT+xt~KC{#U-}WxV+7*6(L8qyKH5R5dzQR(lK2W1xRM_hMXl|`F z`kl%4c&Yn4WUTSWBA&xmt52VOg9%1L1zSqM?X!|FA&=&2ibC5ENXF!vP zWv*SMCCMuz13{++W*4aw#(d9v$jdmmi&E+LlKmlP^5%QKRTcW~P2qRUB9F!vDDYVz z3=olmi9T&wa-8ROoPRWTJp20hLyO;X*%1fRc}~#pyhhdxhZlPvDIa&w;*8AhTkvw_ z92e`XByV_dIT)&HWQl?X(pYuFU39{r3H{cD&7(yI)(K+aMZ@;oq@ z5mnZW%`&h!P@K)LQPuZ7jVy!8e`F!1jg{a;Hf5aa!~XeF&S?r$6GO8OAQ1(z3pFB`X$ubx^uuaj#U$T$7V zdhTE+@~A^-4sr=rQ{7f^7MX7M*p&NzwXT>HR{jqp5RD^S7gi z_S~(m12UhJ>h#0;7PNNFt%jC1Z)k@kqrMDGn`G=i zBddY`^J~5DzpSgwSJaN+@Nd_AO1|6~{%bqvea1C+TC8bD%{hqyMCmJzRBZ*jda z-!ZvGf;2UT$imUWLE=7x&7DJpyb6PHke_Tkmg{PFosy-s#r)=3LB;u-V;Fm}h#N_q zc^8DDotkuUJ@dyBp@+1GQ{s{gd>6ttTvi9*GQeTDepG8*k0O;KJWyEfX8;ceVhiA2OF9j-_YBnA%IIl$Q z;%ud;0jdSn5$EJracQV5S1xLg!++zsm~B-?p6b!9J<^F@*$lPICw--m@K0i6`i+MI z0i0538*&OKQvhTOKQS&Ryp4@}O-KxU>DMb8Q-D(H2%8L#0lLSO1L_FHpYCdh5Xbjz zrw0LYsFXhi2sJhK7<$8a;kvJuyi;;-jJDn!`y7ch32F5Arg05M3B}w;&M(h1((Zyq zq!i{1s-(G6{cOQtvP>KT_&X@Sl455n6iXH{24ZB9Y5zf@mr z4(WV0r;=<~0REeB>n1g=s3x>5w7^@1C`i5DR|L74vm>Ctev{hky((vfqVhLKwe&@{^{sx=gXneQ%W36=vxnm+`X=i6W!DB_lyNB+au|nK>0cY zkRKAA4EF6i(~kh0_*uKc-c}}MjT@^8!(75#x^KjN!b<^~G;?5RG?J56(kBUhCf;ef zet~@z%Z?cRF0fyt86)8;KCwGMY6<=O38H!$OSS03s5n{vQa!EdhKp&NSW14SVz=k> zf(`Ith9GvE@1y*}EMgR|@XWE1vgp7L{G zuSqD(0^J!9$r~z67JnVxLd(om07kmu_pRcbzj}I~eM0QfPSp3i@4L@>+H-$k@h~To zxk?N$&G|&%HNo#5m5pt6x*lXmR2EtoRyCu#j7ZzkneXY$-Yu#WVDi|3Dqno5}+R;u(Q_DNV|x!^j4YD{Fr! z_~E-T8IHo%ObyBxN^hq^sE84n4u?H~K9f-{c8)#y-;V#>#zthmX9n&&WM7ZexOi%R z`HaEA9s53D5WzQdf%qC1AlIw8Lh6&XId<#GZ8_v)lKt#H??X_o;cc7M&)j%jGq z&*ScHiCzUz<-&qkxunStL0@kR^ANDv{{-tUw63*07?y}? zi3h1%rnpi2$CK&LP=U9f-Hwe$dA zO#%FcgBwY}I-)L2kEK_;4fr@b4>n^q8GKH?ulR|+=wBV2-!0xG726sg*tDZ`D6Z$u z$>{K%%aNyIe?B`#4#yT(wg*La~M|mbry?p@88@p)PGt# zftCqy+|o(F=<&>M{5KM4R-jOp8N^ppdI)waB z)kK-B_gHkjHL5%_jV zqEzKfroS}ck=JJ)(a%!*6>`ryzg*OIZ4G=9eh%3pM!x6)N6|iyr$dYc@9k)Dky^2% zlx_x1E?4N*@ZbS)TDCy+%W(jO(Qsird~LkJLyI0bFQ{OQUq9#(z1~*fhCPvSK<|Dj+yH_U~jdPTrZj8!&(3X^$bC05B-nQ<}li(sEdD z*I?ccdOvEg|2e46!Xcty+Oav9Y3tgO~5{RNbYarbFtdpe=h|f4Q=k zbR8s@#>$Hk70+d$_=U7l!Bmhzp~%lrXN}jTrCF6>Wg-bIB%>|oNz$ODlxqzzAi9TF4z#lI!2(6(qC57*6pae#lr|OA)tFODnTpU_pDoY zuR^5z{q=#onzb)uzL@l`mLyW$PUZ2$kL_}byZqb;B zTSU4@USVUDVF9Zl{yrh~jMQcC&4@F=?vyNIFHOPvlTGAlCB&z0y zzHEUnm9Bp5FeShRviWSUB2grNtRE6AT39(3DiT3k#CvYOL(_n?>wv{R2-iwMEATD# zaF6#IgOkvMBFm5$??59hy`$1= zcbmE&hKN=v??!0Q58b@9gM$bP5G&3-uttfq;lWm^3iL*rX(qK;l;i&BC{wZvJ99px zzd8Yda|FxH2txbOdo1UucI=^XdL*u2Lu*fPFT}SCA%Cg}RV?zH4sj7Zz6t=YrED#C z7HVb5O>@5W!=+oNHl>4E&DA7Vh}-x+uzE0Yb7w6zRG&4(yF?r%xNHo(kTfCteWwG{ zTO>YiGeuASKp^8`NzFjAU=y`C!c|q02>a%0h4iuR4^F_M8;@cDQ1?}{pmab_6%6hO zn^2NL*y%OKrN2tO-xx(3KMRpN%gVGLbcthwJ4Cy|VNPOP$L!&6AsC-OEI-NdB+$cL zpLjV=ac@14KzT0#qzeT114f*q4u}*mJ-td<(aVu;rkZ`mkpA|5WyqN;j?gT}{wYUV zLa|76Qxy^L0AnbSnlH4;aIeeg zSw>48HF{k9Y2W}&1O)FRCDW3-0h!{c+Xgh)%5Lh+9-XNHIE(V==|`s|<hHEqJL`D)3UKE-6a~Y_Px`y7cR;Rr6Mb-RHbRDl`-B9}f#z6tpt+ zcnI=pNdMfc#(Y<6k%Zc4xZWgXX-pNw1{ht~;~5{Ya#g*)qB!!%Z{m@u(2Ey4;%Q5( z7g=WB#nRPYe%>Yfz3nACD+$WAt%!RnrQvNi<9952M(*i%IgEKp(5=9vJpJz59!gHw zGo(z=(7^QRNE@u_oiR16haxl0H{D8Trxn+)_Sdb(tK3#$=U&+K=55`gxzAer=8d%o z%E3Jk1L>Urdg*G&gma3_t|+3C>2?cC*K3wO7M0DcEpOs6dMaCvSZqzXw)OOvP=3#$ z-c4Fp({;;A-7HtnJEM|V*KF@u*xlbq9A{95)K~f^aa6bgEyTgFn}mL7C}5$J zj{5p4WogmL2n-&%=Cs|C=4#owTprj#J9`S!+f@XYeG{5%tQ5h!4yKS454osjfElf{ zi`U(+T6#!PeojD@y3*g(SfHw-6ZL7FQ;@1U7<9;MU&kR2*bQH~WRE8RDB5ud#F8h@ zdU#e?9UGxH=+oxbJo>3${nY*T-v~OgMXKJ6hGw_4(@4Q@szxQYU5|pNW1^sj-dsUb zO!DL#Eyiux^X$f+a}C)9-heZxDiTCBWjO&y1Cv-#ql4p~Y$?wfT_YDITi(B3npAgx z^X!&=J8$lLbAhp+w;9-=Kve-++^XwB(s)0Z`50bNzGJf%4hOv7ckAY%dsZ12dh2^>e7#c$e<%1M7B#M_A|H@5sH+yJNssYRE;Di;kt_LNsG(o&~(% z+&Y1~bo9n1Ahef=`hRLwTU+!tHVmDv=b@8*!)gQ<6ETyOcPFn+a4W71|G+U~rt#bHp>JZni!^uS?1q^XryQMl^oo#RsJN|7q5!bf$w=HGE zIpU4h-?cZ|qzeY|DE}*vbw-u!uqcE(Zh#2K=1+afhjM(W;gNAe^XpgBZ&O7)N+Z*~s6CDCqd=BWgLsFKU_q`S1>6RxA6wpZp&@hm#X#ogI-$*7gR8>*TSj<;2`TvRG zJ1+X1J*8XzMiz+K2HWD+kiNkn0I9%XUHJFfX-;UZa-bB+m_^wB@cQ3r*Ua&42Z297 z5uPSJr-85Ur6@kk?x0W7Qoc%On0xE6+KrP!M+mwSs+6mG5C)XXU6`Q-2r2LOmB<>= z`jb8OyX~+8`YjJOP^ItRivPc2xJrw>Mvsm|(R*`MxX64rwBn=@?9WTfn5Vt6&t%PF zd$u{PHub!`_Uhva=^hX(DlV{_^J(dl(TT!^|P`Fz#Z5GAqcmcR$w6XuSV_#BgU}hTB{%F%(HGj@0gY zqqZNu@gbw?OwCU()b8q@M|wBYCL-*rmx9}bpJq+n^FB#Cp)Y=gcV*nTJBwe&2WNvQ z?m%qk+QpP#Oo8xs(5`T(Dvd9$g?qlqBH)ljcuzwtfv&)DUlPDnQ-eV_ORSn50b9== z-khJtCGdXV45gooL~fG1wtyjCmTIaFRy$IGbG3OSsD3nVu_;^Nkrqn7;1 zrHros$XexN|6TlCS*a^y53l1IGY~cjdSM`po}6*w2YHqs`e1s^T6rC;X6&hc6@I+0nM{`aUMND5FT9ONQFaIEsQ@|NgYdGW`9*C&5|eD?Y@=+ULh*h-0* zSN{qktnlZ}gZo?!EitjpwnqjZNW|(yUk_)0;p$x~pF0Rmb>xJ@Fk}t>f15 zLMdPy(}6-*cgN~XgpeRRQt^9*^i6Ph zqeJk>=-JpxEdWK35=yB{10%A2ihmn@I41b$Jpi?8SA(o_(#xOkYB$b={ql}aZPf6` zt3wE`Q|o$yCT-@v{@BKCt7p3Yu@cUk5O>wR)h|0(A*_V%b^BY*dY-N|ku&lRpW?X_ zBdOI+F9n~WJu!*CZ7SjIs>vh)+VWvqc<{VljqKEqp6 zuhP*u5-k6G3?XS%Rex=23~*?*JRHco0`cZ zgzn4nX#eHU_yr8Z&r}r~rV1w5;c9&_bs)sLi$W23Lvj#1)^+uKE6zce4!53GfvyO_ zfGG$j`}2mv^#%TU%S8h}wL9~GI2qC@tCVb>qc7igL@ujj#^0@-lL|`M)Y&^+`W0i- zoKEJQ7)qI76>aTyJSi4rmM#T%aTGtRGYCV+U(Ah0pK8$NfLM03bNSJCb*r6rAl|-J zD6svopud^2)7y?J@b#8EOym#Qf*AU;H!-An>VoUMLAQLg=xC?qk|Va#SMkamX?{uC zU_$T>!<5SaFLyeZ8ZQzoXwv{4QM zaa*#`SDUXSe>@bfv6~fGyZ7sun#T5v2Jpx{68eLYuOSZPE(_!C$>U37sRGI;lE4JP zK3uD@=e>7XmuKxqe#-+MC-g_xQ$4JK#NJztYSPniA3k!YD(qWJ*`22!DKPlT><<@+ zZr8QV-bevUNE6%x$fDCS6B}#@TrxE?8J8lj0B}HLh`BD6Nl0w@Q?BbtY;^YrxOFS z_#Q)>*lhpgcC4z=HX$U7ROHcKeAWBd$Q7(C+P#&oeO>IcTYAkqRm?Fxu`mRr_MlQ( zZ}o3EL!zZcMSI608WlT9>X9GMyHMO$T8Mkm!)4X3k?-WIJqVUlZc%wBmRj^x3J|px zb%7kgTk4UCY8#c>+WU^FS7dLNU9hqeF z?jr3zVMx2H#nyR|^TIHT0zLgPL^kRhPJ?{KY;Hy&`nmjfl}I!D|}hby|M%J&l$IUyptm#k#`-x4L*nT!q^#W_gb~b56TnExGXL zXq-(zEby(m#a9xfn*_MZCD(BIZ$F3CxV|^@-{^c zY0?#|HL#6s#d~)QYfS{Ia(bTu^h${&H zOn*sjCErsK!Jt6R#I$?5r(dEe%?i5LWtFcsDmc=5iqN^DL27|Ia8tYm5P*TtR&*^x zFq9@=GrimQ#ajfm$g`Rd6I-ZgWOb3?najh)G#-gt_ErqB?Z%zmn>FG!d9ZONlu&s1 zuaAQqYpQehTS5%ib+iDgxqzbBYN)Pa@D;s%ChRRNcuMi zZ+KqPZBx`=x&g<9ahyH_LVwNA_%Pu=O(%G|?+%_1C}sZJQ7(!`05xU6Jg*x2Z$|B$ ze=*d$)x1_pQ*0hhC!5quC4xc9MkI(FAZwr;Hw1mDj}8R?SKcdQ!}3a)hh>Q0qnX=} zisew~^)Vlm>Z+9|3liW(L*tcm0YFl!-8Efe(ZQOmCO8w+5Jy^nq}Q@pmq0Kd@g_${ zjDIq}2Azd*AHyl4fXBfS<)ifRx3c zDyEVu-Z)Obc!q&WA;`to-yg(G5613*V1Y_No=sgTkH6%=gwv=5CL3i$RYUa3Uj3*$ zX+}6o`N$jkJ>QI*T)|rx{E?Oe0LOc1Uvnf!9>A+?1`~cPLeOJikWl3q7gj25Wj%hG z!+}BCNl^?v5uh7KQQi)g0x>w#v2Ui$NJtip+DfK0Yo^pGOZ@FMhusW@_w$YLi4CNEAk(fiJ4uCB#56{i27 z*D9nw#t|BD-b`>4$$5>YncRDpxQ6FEF(cr%m2ga}dRNuoNSU-7dk@v*Klv922Em!I zT@>I*9_|+lXCA(FPn}f?!9>@BKuzR3h_&?UpbmikCpmJj;Ky52gPOL@-4+J4cIz8& z3W}LFzu!yt*DQblvfclL^O%+N{@{V7TCUOJK=vn?$ZU>fdW00Pe9xP1!6bl#6KU=& zeNX(aI09`$;rjNo%zhyi6h@I^(!mZbWSoUrxW(38fc|nGnMVJN!*AI>Pbnf;w#(@` zfJ3cd@^y6QOs0j~90odhA4w(REF7LN?eCw#rMXBE6v^&@bh#zLn*o;ar?cMHsQ_rz zTQAa^FcLeT3jS$him=&1c6t1Jf$4Deoi(2+-DXZZ_6CorgNBN3~kP6Q%X8HgO0CS#1Hr=@q5(`8V zpz+Q0O$wxCR;a8$xvO|9z1BY{d@G4uB=9C(4ggwKABw6A*PU= zAGlR90VjR*i9?_sA44bxU{&+_sHVup3(Pj#kVpy_Hk5-ScWlU{t;&6RR0 z584qIM6z*QF_DFf&L@TUz~uu77Z~tjM$l$FXV;qUi?zgb@a}?M#=Q?DS-*RPc_}7I zp@t>x(7O2`#o5t3M7c+w^$edlZ*(rtJ(es8LRwKd z9SBywdBf~NhAxN!KP9p>WdbW!WX*IGQ5dnWj5N`1%v}Vv zpW<$54m9~LR75UZ`Xwq1>O~=_;9xPtvjd+rPBwgoV-ot{oWCxexP-O+ovow)~7 zO5_xH*Y}}}bX`t6OQg-crWlTq6nIPB7|7QOf>ZMzRifT{03nW1P(#U zJk6fqsM|O%zi&lR!B)ScfwmM)20+z#H+_Cjc~giSlT`QfEWgvhT1LXf7p+0N|M>o; zi#Wl?h&N^=PsY(1p8n~1qQe#iPfL=EE&(D;4i(Dfp=!4XlQh!FzaZW(^Bj@4jcXoQ zrj>Q*fX^|pB>hg3`|abYJ}ZT`gjkK+y7T75n1b11<~i!?sY)ER0qP!KP#v=MrtJ+{ z4wvSAVJAmF2-K;=4En3CyZT!$F9Tm1BZc`Pr^SLK#6r?!392o4#%<|;GAecB&m1^S z8*hURcE#M@BVHiCyivjAkj3Y8=CAMQ^_t!H+>)`KE@Ez|6&G+IGbgk@+BzYrf9R<+ zn-hA=h=CmWYbEQqw*N2A?klRPHtZktP9X^iguO%Wp?3%!X(se4p(7%OCPhTBAYx1C zy@LXlP!vSaPz6B@O{y50B3M9CP*DL@bg2s0nu?H)b#eeBcOkpc4_>ENhdDf`^) zSBD$Dt=TgA*`p_t#&ol19*L^ZdWK;=s=ibsZT`0D7dGlCbEcAkH0G@UI?uk~Tl`6n zzr}X{3>i}DS2*nbKI<=0#6m^tU>mJ}oS}6JeO|4sQ9 z4tO8Q`!bz7`^^5O@!!TNr2x5Cjteed*D}r@vO3bXJKv*q<^0T+?ejgkQ|1TE?!44h zubsR3&uG1DuH}JF$v=g9>9+oVHe(N-$p)XgW}$ViV&2!RqT6ZViS*042QR!mR32S@ zaL?|g`|d_BIVZ|udjFT!9bvFmpBsa?@SjoOx`O4AKhb6Ex{a0d)jvEWKQgRW&d(kG!#xYR z%=h9w)xDn7^`dLHKQP{`ukwH9xBC40!s@%ETbIW;v2Pyju2`yUy!vc``}+KXZAR1A z^FP1-w*36C4QgX?N3-fFXoTjzuI@-E0NS*mJZ-15%(c0M`TYSUWHr_PEKB9JUpsB zjSNku93jWLt^}Cmy&0%naN#~jdbLc58A%5x>Moj;MZb2l`BeyibmfIou>9;^`M-6y zJNI>~jR+v8A1=3E+*y|088FX?Xz4%o!()5VVfh_gdno|00_Y5caWp_ISYksGLZ;_1 zy48c3fR8G5-U>OCD`l3b7_m_^Qm7~#LkuE?j+V;ube`MgWyAP#HTM(|p%X}MXo+v2 zmnxM!P^ujzA*@zCGKSJRk=(K5f?6(>jt& zXgd6!6dQZ+@geJiFRJj>N1&Qp_XU2lj`inl<-gZ3$xKNZgm0gG!tJQf={-Ve7+Av6 zW_~U3_rG5f(^@W3ZeVR(H!5Sn;u3z7MDjV2Cmq$BHUH93msYry(S+|NRUP+t*}a&#iYC#H3D+nb++QS;%)tML}* zrF}@q43Y(?{i!YwVwt|?o%BA3P5`)Ot;tFmJqO(&bNCR?gT{{T@8u1@a{TF|evD)Z z$sP8KmzJ&?vkz&7Y9C#Kqb1rwrVVI%a^@;wnF@2>;71;+*0`avh&m6ojgTD(wGuWQ z;jj!o)lic{-0{s-GM-BX%JXlkkyG5il`FgRNwy$yhYim=an1wG--Q*DeLG;W{Bp$& zmgYgEzauvK^eh5fY7Ze10Bsk`e+r=l_1@d6UYS*A7~R_r9|4hj_(IjS5kKklz=sIK@(!JrLnn6MIX-R|__8yx77 z{)eJJ)Nr+;yD!FjT}RtWr?1&@T;mLE>6v^Zs@4TAh4-0d->uw<)B|l+|MI+aY*dql zvm4Wv3^^jmzCS8Jrys1v!9?mijGg&_1xH6)hhiwP;`K;@#S2}ay>-3!BOxSAuEkgJ zi7Vvx=fbv@O*|ajZRO6nQmvzoKE$70Z|*x@srJw{YTa&Q>wTNOD5|cYR2m}3*&hV} zYj>E8Da3;)*Hg1KbYXJTa{&@BQ_T71EOt@gU)Wn`1ZV-I%^Htclhae5W!iaRG!)zg zOB@55gPhAM{p_~?Rl>whT|2OptGU0%;cJ@lUTP_DQn6eDkdedc!^l1@x0yUT2^3ZO z_#TaB1Q4TtKYuNhC+&daGs|i~EG3pmDRz*Qu?LUb$S2m(Dj3{?I^O0;02)bd>h-FY zDN{V6rI>-{eFIxPs_1^o#P+q&af|eM3hzFD3hHFZgM5A@EW*tB#n`kV`a)Nz!G6-ulEYoEYLaD+Z1phX+l)F zAv~eT`<+@WI7I{wlQYvp3w51pGa{d&=&;c0IE{i@x|3p|$QnjFA7Ep-Un@b@}|&BB)p?+W;G!ID>R5Q%0J1v3abl>{ADm za2;L_NgoR`kpb0Shi6<+61)(b?y;|n>yeMyO}xiI@^{+`ZL~dvzN*#koPc7TGU2iNRa!A123e^i(z7v?mr0+5aP{zl*PSuE%|WkPHd1Miu; zQW1pY39=PYp!*bF6ynus18(cZ7S@(bsOH3ZeId{^b)dFZH1VXa}-3 zF1IT}&(BP3KgO@9=$Mgb9GqzHUk_$G;bC{ILT`g&nk*<`~IM1Sme}}@`XCxL3>2Y?i=N4 z*lc$@`CP8u_)>r@TR3Aoc9+DXEl`+4%uACUiWm3(4g>vAER zj$A=K$5}Fu0xFfnr$U*`7-?Y$KrJA`4fabmfdqpcbpbVU^~Tn-F||-t@q~KoBB?^n z;@UxpYM@Pr8RV9IZbk8Hj`wdfLW=A=Wvx~O@nftT5Iv+`g$awePX4y?B7i;loG`pbs-CZGIU2*q~q0 z;rTcDBrjRp)#zhpHZfLTQ|>CeLrg0L`eez~ULed^W%Tk=V6kD@xs4Q^bFTQ7V`a<~ zbD`xNY$<=J|niU2LFUad$^LLQe+MRA&FkqrY0zXfTccNGLlFpWmRYB5xNLXmdlwI z=<^h?w5iJM?*JnTeq!XFp{v4rX(OH>RbeJq99 z`=w`c#qg1g@S)?j^`Hzn5KD0x(g&ounV(gF00J}rhAh2wKvEaU%LG{cJf7YG7joew#-50FY`2FTh5Bdjsza7qJM6 z#5W^M=ot_NF)Dagh;$MOS!LVsem77#@m*MJON+!#?2X7<&B*&;LfmbKxDgk88D#KSAhYg4r6 zReA5(Es%E???_!X%6U$pjk&00kICA%?*&0E;sZ1{LG0c)B>qvuQF^)m;J$ z42*!GVxAUnpXIPEYp2rfc}5yYWrCXZ&HAnqCU*tA?4 zz`KLU$$~>%kDWk0;vxs<;SpiBUjj(-haJmHBg>WQA^93*4rEwafT_6wI_?1rKY+@P zARnafcrwBld}hM$D2B=P{Xie54b>keDo zDwWk0l2NS0!zu5HS}3Okhz*CJi+DLjQ@vy-z&f}YkT5813m2x5 z!Gscmkr6=wWG1@jLD*V~dM&yi=Dr8AlgL3b)b)H|g#@*yL2%`z+O;+zydoWH#)^dt z=|{mWDnv7;PdhOPQ!Q3H2*3-#?KhRZODnYgc=H&xuGzB`_ozy_z`$uh(S&+VnXNe1 znSV&PPI?omlPF|J_dM2eHtemFFQG2?V}1U8S&-$&txS?T5@>`2FgOA8PY^VoJqG{|e@xXXL{l>l?z?R%z^J`Y zB@ry#YUdsRPVKfBjJHP$OAW#J6)6H{pM-lj*n5EaFbRA{#sg%5gX3cRyDu0lAGPM@ z{5Z&ysq#IW@EKJo(G2|RD3Uw?H;D~*B6fnh0Kaa#z;ZMKRvD|&W%Vs*$CO}$6X_5DpEo*$s_;W(G?%HqzerXqU>=GyAhybDQ0fmFngz$+1gNqW8&%h~ z!Sg4sr+kcf}JME$&k6$lV{@&Q6HYZRM_U7IHQO!FKo7|V`8pb7XP|zY9(3%b1xH-0TR?F(L*` zlAa?dO6U?S920Ebo6!iWI1v=KU~Lm4qwB)kWc){xH5SGfgOh5D;|HN3$->d74OCq0 z5F)5elhKUyK*}!jV9n7+B+yfnP|oD{kEV>1?a1Ku7tA(3K4268e!*e`w$1 zeeOYPe}p?;2#QW?s5VJh}Gs^0R~(UguD5~^)*h2ORH3xi+tM<#`yHCfIZLt zg6=NUVVh|ADnud?f{q{}Il?DMlOHFb_k4f@0K9Y|Op-t+oY^FC47PL+>Y<#39ut{ZTQFsal$lEpKEus?(zVLwz&uI)dd(+Gzb<~KNa=>+GbA)P#WW< zAdEBgk0X5eHu!}spwc8R)XkE2=K*!mugyWVf5Im>dLrUxk;^k!UH;({$V?Lctq1=M zn_pn_&Rpy~J`Ro8tZCaM5g?pvfmsAhba@f-ekmN@Svgp%fGv0q6^DWf_#Gsl z3l#Eb(GgW7aDmxOi$nIY#q8Nwhef`Zv?l^V>MF!mna#cNB>#ue-G=TChVk&jolm(Z~UD*2Nxig#14a$qWlS1a>_$DT=z|{RR5*ST;CRm6UTo(8nyQ~Ct zaC2M)_6-@lgw8gBCt`=592mm(A*n$qP3e~q7jkZz(Quy^45~UT$J@UI?nL7azX;C& zz>Ed>>@&#QpXeMrD!@g5Jkee1A`e`&Q*X9}#ldUFDfLaD0n6%PLBRL zK#%`{8IutCmC%D&p%xOjvkqGAli)W6y}Y{=8Tz5KsI43MDcizY;JyGyLWA5r#m(1J zuwC8^^Fhw2`|gK#t(J=?b6Mou;JuNuzrwt$S=f5?>gt)v*2H~~&aqYbDwh1DQ0zv} zLUc1B?nPn&Dulf%wEQfJ`GQ~uCOn2hmUxUFLSz9zZ4xRu_{Fa96}E79R;h}=^fO4- zekF+m9#dxlCV$=qkwfM-?KYqjnIcB2f!sCR$e-m0UPtaCUYrtC(10|F+SKmxJNjP! zFNFh5K^s8SjU62e!4$}F?vfL26?{>7^v4YzFBVU%?oYY=U(_l5(NDtc7@;cyJqTU4 zM$nrR%*P9SUo@*G@R4Un zcH6YHiEypk)p?5)>!RH*)MpwJ<90R$16{xSKSzr zv^KzhyAH=B(ZpOkgAg-?N={-YvBGPf42LFoY}VXOpM2$xJf#Cq*Y~$Y&fN)HeERu7 zXWYBV8)il|L#3y_e|fj)Ti2QV7Qk#CxE%8APUP+12cx|QLPm^aC2s~i|9`~r=$$9* zCuY`n=k!?yfJKeq-bb&#URy+w6*^_tUK zF;HriwVRnm;-Qb!TjA+l|4dJ8EDz%A3Fo(OIo zmO1S|S`9Zd#HcX*c-Y>4ClbAVc9|1FVMNF$f{zY*fB)`FOBRmz3(o$&J^#RevH6K| zHkPHOHdk#&i~;JOF6@VO7Wf>kiz`(@^Ay3V4(1yE3^+OCefnVh2kflge?QJ%(vP}% z6snA9wookxH+RI`M&)69j%0rJhLA= zAq7voGh0r7=N^DPvzLF?nI8@vxEqM{*AA^X((&u?l@lVfEotAKy;XJzrd-5${=k{L zszAL`&cl=Oza#5w%1l41m(8zZ+uoZi78hKIm<#q9Yj&{B+ zlbpY9_^tm_)^k&n_0$;_g}KXQRNRz2TQ09GnSA+unq+jec&0Jq(Pj!?a=)~rXw2Yd zWXz=5&%Y-)pQ^1tO{@Uqy!+3slGxk5GT9YJzG`3=(ZRrNcTVL7%KeC>t<)$KB#%Gg2PS*2gvkEe8J--hig8So`Cf6V z?ET!}0W*l$ZXRs^uIHoo%Yr#kXqqoP!c8T^YSy)4ivKyxqohVLOzn?VvB-03QJC(5 zpitY}BuxO2V_|t+&Nv6W_b8!wKF=YFD@6HCV)RX5p7k3@;0oFKe&}KSt7q6IBjG`@ z^YUl3Lr3-Yq^os`jR;C@xWuM;UKwmqc6nq}cKk=G=PU9|#%7oJRn(prv(Pl-mY+|{zKeyb-|H-aC$5dqff$R$MB0THhn$#?Zf za!^97@^Rqnl?Z#+M30iOwJV`-?3PV^+~v>FkZLy~U5{p2#&mwu(tZ%>cK-KFlDxLj z!bqeTBhjl?`TJ4toqlqok#bd5oW2h^*`q1ZyD{ETV6P+sctolwwR#u6zY(XT_D%2g zGKI1~?8t$a{xX!tuxOs&mAIElXz4oy{e1wP_UgAUJJ=h)uJ0nZT9lT(;;QXv0#~`> zaEqcDb&YW&I&633=C;YKx&x_v-xpyrm0Qeo9|=T+6d; zb3ibZ+=Eai{U-Pn3s>8zT=aY*hbDO3Mv_&M0$xfrgulG%hp8;@v(k}jdvcZ5hv4Cg z;qDkT&wuuvYG!vSH;ut9Y`v<5brHqN45VO-f#DZ1EJkY&mA_%CX^nx&A?(-mYQp? zQ6`UkanLu4F8=S!yUECMI+|%cZh-dZB+K|>aBD72mPsD@Xo z*#99LxuJ;w_ej8iBxE)hD&&r=Vx%y{{~u)I701?_k1I`1e0(wbzhq;Cg9Lo;@|lqT zAsay@4Be@{VJ?+)C+g)``)%Jl4%Uxgq#w7Rx8mEG2gl0}C&3Zcs#iE2cV2cUJZmWT zjDI`ddj^4%aoN$7%r+o$vA)jcx5MPe03CrQt&CsRKXP-;$!{9N1tk5tCs+lsJq=rs-G>BItf=RSD}{veEhaK53P#kBS!D zne?UNeQplMnB7nqcP`K#b7~pJCZ@9Y--OxBf0pU~_h;wZr-yd|yX=25XJX-KuAd0- z+fivVn%t=@Hd#N`o(j*v%vf6&0rksiQt@1}@e<<^RS(caS;1aOU-ouwacN5?@8esM z!HQrM`7=!3*S`%(oG%cP0%2Wm3yxGx4WPiwR3c!uK}vE}bUG;qxN8bwf#-Y(HlI!W zhj*6_4C$gThd$*A!0lG~y~3-ktRMh#582ueE6%#CoyBJ$$w%Y{lIbeyQQtFDL_U@j zq$&RvtoSOOQLKW9wC|4xOj-hB(L8jXYwHx2yw&xHy0!Y+vfl(HAVZ&OICuGDgR@e} zF8k_fiw%+*CFi~Y&O@7=P^Ac)tNnV^PHvEpF zYpNxNlFx_hexx(tnf4sae8-9-pRTzd9dQy)O(wtAR48DgyV8ZkVdfY*sY;XfnT-@R zry4g&T#@K}1^~Wpx^OlY5UgdxY+GG;$tWdk8ylf>FjJUc7Bf4L%{vw8NW|V-Z)u%X zyaIxAQ@oF&bm0Bzpkyie5+D33)K|A>Dxi_P1P4>B|AU9UB9Gz+tp)hF(W4TS&f#XV zKX!I-oR)r+WPIk=coIhFu~|XKna4j19x9oz$kSqx+%~<$&hz2~k&)e_j0E`?zo|Gl z0yK0bDwM!bO4Y6)T0DYS@EV>P+ZXJHV=|VM90M;QgVVK5%MBeIB3-2d_}J3dN^P!L zOLTHR72gdn(Wq(tCj>u}etIQcma)SX=qDOxH2|GX>K`(3`woaB6%b{neA5Y;BQ@c7 z|NW4C>L<#3L8vsY^cl7uX;UwH-xR)M~*ZOsL7vN+5 zHYw2T!fenn=dw})3mzg(HyB_JvCxHS%Im+8BsRfB8ISbg6Jx!)LtOq@I`k7NHd6MD z3Ilc|E1~-vsic!-z~DC+XJ{kMWTFah4bPC{kSS(-)!=Tr!=SvxW`@J;@<7qZpt32% zFgJN6Sm!XL?!TGkH&HEeZ)8Y2aWk97S0gs;@JO#>Gbh5OM&jAXBcuD9xv@DlQmYQb zrVE>S2@^FkKSzcwe{bf~`D%%1#}O-ut%3}fT6xjY5j)eZ!h)PoJ2J4>(SNJx@b`mTo(Ml=NYK^vOP`Pae*>uh#an` zIBBNaRbXztjf&G$mj8CO*yDP;ZoQ-f!ep51V!eaC({xcq32_oh=G`|oU8au27!+J{ z4tMed3Ye~^0Jh+Y_slhqk}J)o82*KonQDpe^$xBL9+$>uZ<>C;Ma^yK|5(6#%l}km z(e3x%_r|=>#(%#}KdG`~N2RbT49mWl-}Zkt_O#>v_omp~+X1Ui&+adLzmxFzcHqyk zXT86_-=*_6($LQH{SrS|8Lo}NqT}vZz2T|_88Y|H-T%?f%591ccV1lBUHH+_`M4?O^!VZ{pSp9s{9krA)Ly)i z_}MA1q<#F-xX9BB@8A=;F>6#a@SW4o`;%L8Kt|TfFNsPm2Y7EeJ#Y>Ls~l5>tDa+g z{9pZusW*n7x_eIehSuif&t8Oe)0xKX*Z=+g`4GUf=xCQExa1BSvyYV|IG~f7VK+;j>^W?JL+;{_G5P-Z*@l}Y|6)2vjulmUubL*OJe*cr zyE;{5x+-5R8G1Y8a=9A#lYb%EtAK%1-x!TKHz>YX@VrJa71g$3MbrXM7~Bdf+_O3&8F5 z=g<-ZlTW{@zdt(}zDSr-E?k0NdDSM;psN4ph~?9H;q4e6b2_8@tagF&_a&b9islqJ z0DEcBYm;};bXkSQXxI2}OTba%y`&!AJ6GZ9RWy6m_UjqWrEA;O#^*n}@BPiW7x?{d zxWzi@M;2hrRqJ1N6Q=zj1ai_-6Oj&zXov21Nqr-r}y0BZ4fy)d>81 z`S!ox))4(gF8mVQ;U7`;zsz0um%M+qSW_Jx(E$-55BO)YT;MyEbJ|ixrOsY++5-6x ztyZ8#fgK{6e+pB~5h+jt2W&3<9v0kSi}@>q!5*<$CDB8zAi@D*7cSy*iGFjM9w~G| z0fw0sf^@*+hnfv<(1pzF7%6(_D5j82x&xWSg`rGvag4)-7uDwl|E7!YWh1$f**sMa z;u+#KWZgaWa>oFMfSfp@3hh}2h6E!bH&Oz;90T<(+WRS=B!Ujy3`6<}tQ^{--r+}S z>g+Q9PG5?10!T{$9Wg+N14Q0RJ1pk?834Z0We@m4-b9dl>yxS%uD3Npr;DWerE^N+ zFmmX#+|I);Cl%O0t8;h)m!shB{EyQzt{b9q#h?>QsQ?LO3S{iRDZFHCUjb3ohe3;MsG{V2OlUI$- zf4k%G8Njasz|YJ1OC0>Kgmn8_r9O@!QkSo<07UN3&mK(ppZ*U^41Y@uR^Y7I4B!Bp z)F8Ml4ZeW}5Gn*&ut;_f!K+RTpuv1R4U^z76=M*j>wFF})cIhcyT4eCdc3RQT>Od1RwRi&7dcanlVh=!1tB7Zd4$n4na*m9o%Ouq<8l%?RODo%io%_$JS# zsOJ$9q=cFln*fHg2+=85?vgQ#m*|mZd-Jpq1ILX+dhZ1nWtUY<70xZ6M#pjUP3gw4 zm_uhI)Yib)r_I-F;W;y9ND8)q7r1U`Yn@Q>p%sa6_rWyBRk$BHRA`-OxzO&3nc}Sp z^Sj{4Lz*iRrT_>zc=Zy>)Bu31+Iub^%?dt&)GgZMRVIVfyATOUlaNe1-uMD*6E%A( z=~|lAF=+s4L$bV4;K@<4zcxyk;FTW`x(Y`izIR#YFR8LK?dJBV8W2xQ6S48&)sqIU zyxZ`jdY4URVLBw)+jN{83!#R!BO-8~9Ab_;nnjYlK^EjU25I!mo$pX43(DT*)>px+ zHmCUDn>Dl)W_mkXkx_ONj`7-nrQNdjTt;mqBRbWjU!w_P1(y!$so{yX8cVgtCCuhnNo2s6LH|;3Y1AMbzI&gxtPnNAWI2v8p^FPEMiLO z)|;wZ99Tu}efx-_`qKLlElVO#T$=LTo^i%jgL+f2y}|J$%o8hEpdL^p4)u;Y-}7%s zeuS_?AWfDOdnF`a*?bq6QPi` zv0p~*fY`!*>DowDoeh#|vczS&$cx=Mf&oW^c?;44VHef?-bz3RzF{rdFxO->V#B~? zyH!aSVT2VYvE;8ZSxy|7*ey#0_izzgR4B&`Knpn-k7Je}YYbGbl*s8o7??;mw{#E* z?Xi{3x8hp&#_7WgWBug7QKLZRX70E1R3YD!ge4IuSUYyxA>l(f77ys(fmy!JMf~E4 z*Zmu;OV8RV5j(wgFAm3d5n(M1XF>Z&A4MwMPOt$@;c=oJ8iygne(tUABFJ(YqPMw! zI?1+Af>aP9Ghv$K7TKyUbxLIX96aMJh$jKv3ng-Edj|}z%|tfK=L?EgJ#fQjM*Gt6pZDLe=%X*$y)d$LR##) z%gbDP=zz%vKG0AiYxNyUa!uHhlZ=@M8@d-3UF%vJyYnSKHPn7465k zPY8;-&OkIH;O-hrbYhn})IO@%>gQ=)4YPIf5c4L!ZO?0s=f8ml_W>2J8B<slBKVOefLX?G(9>`f0ih~BxSRma1gg9On$3^orQ!h^=9eE~m3`67WK_IrtQ9l% zlpy;H#$eaWafsZWGPp$^#Z8S0EDL;~r{BpT&vKWLH~1xw^O)*k{jk8lhH6FB#AKg@*e)Yw$C^T~~*nV``t=HROwXf+nU!Uuezr(OU1criHw&fu4x zmWZ|kLx8LqKIr{r(SPdTw6nd+%!SgiF;CoNC@oR(4=gV!R{r(KLGekn}jz{(X5f%yJKL`2h@q^Y3?LZ zFh|xj_skX_@Pvjl2k8AA{vUea8){B-b2vzOOb9}Z?HNDh&WoYok-9GHGz=R6R@vi{ zn*#qa^Fu96zscW=&qR;dtA8qU0u zH}JJcVSdx!H>O)0wEO)7%R_20LXHmU2-vd3)DzpOMS&^2%LTA(3GXLO*nSK-$w-qp zElIEyiZ*4XaekXN`t!lNV9WOcCBW8m*l^nWsd6ql3mJ)CjlIyU92Z@1L`dTkh;0$e zxwi^z07L(voc$2~m-@DlRVxpdtRwXwJt=KS?D4w*+IS-NR~Z?`awMSpaQ6@9r$pV~ z!hL&(%{SoY9Qd8b1P?ES*;&HcRt`U<&wKgwtzM^ZaWMb?Ai?>Eem72kSriEzB_Jmu zDX>iDoXB#ew$rDVKFa|cQ9=-_$1MeMM_GpO7fKI_&vSOZGwHBf^$6K_a9+)qPKtKq z70f9Ywqyd`{{<-k0a=qG`FB8VfF~XY5GX9e-B14N zbid3^CFrZ!8$+!Gerr4Tqf zfpLM&7lpM*U%a7hs@$oVVjSj>pcxBJTyjPV;#AhHs+o(=Eys>;f&6tyR{*)_??s}* zVed-5;swdOg20b1OhEPC{S^4^72p`FJc67BcCwfE`1q@nSeh7 z83p`*$VNEbdt=TzOIRy#5JTs|f#Me0DNBWe_NhF8Y600J%$7Uu)0iUe z`Q8N(xy%Qfx zh^X>41V6skv?gDZkz~%U4)dF>B6H`uW|@Gm4xk$UqbPvl88e|w@T;%QX4~%13a&8O zkvt=Zmr!a+lGd%JIgOI^MHL;~o02APXymO#FD!AZWF$fkv!eD>a?Y-K|citeu_wSK=Uo92mY(xw-M|#9HBnk}?O0#jp2-_Xk zA<6U{K7_oR8KDy_p4i-_Cd=0#MpvQJvZ&wFx)mepuBVw!!A)>My94$468&oud)Kt6LO{fisODki zMd}&;kN4OA1dHFllho;97SpwQ^A8jG@dxX3l2F12rJh}sId_FHA*itc zXp9dw`aGyo*YjFdf}vDhQH)}KjOW?VebVTTV&3;&C-DLjtfrn*&#IL80VRi!2l{qE z{l8OrjuYBufZ`G#qV$wX@6I2Rkm2dKu8Ye^?K1~06F(eLuKK-PclQ?q1`hY0{rV97 zy1p=g`0$+Z6a3!u-=BqFuijVp!ZrESV%@_Ff4&ayz4-6v>cfk>yLVq;A{3HN!#H%b z4Gn%M-IB+M!w^Wx#v!TbSPCaebda`f2^c5G4(%RW#VwkKOvqO4FXe5Y~)3zGVE=F38kGj%0^R}ZYjY+H%x5R zeWtQ}2ZKe@w=pMDU9%4%L&REJQY$m2a>8vCT(C<3{^nHfvB465AEvp<)2TeAb8L8? z5FHH=0dT2C=BtT=mB@5Kx=pCOaF>H!;#U#Wa~@NGi2+7x3a>Z3s+jj8|16~Qc(*Pn z*=CA3$_z^L?0IMVij=M-gK}-FcBA+g5Jq7`uzPKgl@#|?IN@Dl4f4H9OkDOsskdV2 zJt%YPe#i&qNwuBg1=HAjn4$atc~@1!nnY6s{!W*_9(2@@$pnv!DV7RnCfio<()SDo zUF9i6NXx9bx>3@y!x=+12CLxHP5Q|tq^gI192lsXB(+2zHk%Aa;VKY-A17oYIxO9n zzO3oR#BFI4lIiiY7GI)AB(Vf^k*VTUgYsmD+`8Oj#83MLVO&K$qC|zr%;&j9J|;q< z2goamUfAOxd;N`jb;HW#e6Qg>=GCaVc{U2=9_g->qFdT#)8OmvU?vqjn#9dJ=dd%Z z^ap33x*~u@_9EV7r`NDK3S?5S%H#u! zKE{dnNXkG$RR#kNh;0KvjM4z7+(y`c1YnyC%89i4Sj)+91@V8Sj-Q@BmHrCq*p(DQ z@yulD`(f#nwk*F-Ys+#g-%CtRP6`xI}1&!P*M$_KNyAno9l2`xEciL+`Yu z3&8n?wPyyT%O)iEnU86$LuFGt|mrC5?Gt@=;z40gJO+Q7iQf#muuC4=(K*S?T{U+3!xaScM1!dgJM-Spe z^Rx#XzoMk@^n|I+Enp;_l5qAAtUJ7mZ_fv*5%pV9UdfVC@9m5$bn%yk?n{_zXXK6Z z3E5?9`CKYHaWm`S2>`6XigkWEEeYHeQ+cF*^k`l@FS4MHYf7Xz53#z=oz!Zgpa zUDGLP3&f{o?ojB)-SY=+1!~E?-FETMC)iY^{v2PjHYQ1-_|t(p9aD|VR_HgC(J{M^ z?*R!2&jIO}Imz@?4V>=6nNc2CS?s^xYg#-C%ZGa|LMal%Ts zX2B-?H!=AFnD$=~pG$r`?ddm9T(|_{<4la1n0>j=C3jcm z>~2MWPQB|ec9!?M-^Sddw1?-KeM25wGAWYfd;jVC)GQsVQ2X9~(Z>2L^6Mgc_s+{- ztM2uR+spP3@66F?mlHPK?~SNv(<(0fUd^A?Q@d14gYBMw`g-^GxM9?er8{G90DbTC zI3V%&Lmq=`Z^kq1lS}@EuzA~LYilsw`Wc543}VE{l=8h;B!wsHR47T#psAQmwV36VUvP{hG7=S}Rsx%ljY1)^B46v=s+z;VoeiD5A!IVd#LQ(a8bh zlmQciEYHFL(~@h#B!*(Sg4xOdHvr^+`{gPC3ZNp>{@;GN1B=<0j1g217-3Znq=O1h zR~(wFhqA@=qh5?O*Kos2R4zD)wA79kt9mvBjJDhuzeEZd``>=~e!U_Uqyd}{U@ak@ z)HoEY9~}FiemS+q>8ewE6a@qhf4&m7ox~OeT>PY+I~t$2M$9xE9PemaOh$OnRX2En zd>N6L#4H%Co-AST3M=E%$yy%B5Y!0#J0%JTz=b2)yO$4ZJ>vGuUrltiu0CPvx9rh_ zv0vObNMv@ZX|{3utRNE++}_%a)#yfYFnO`I@OurjcK+V|F{*CHCf|NI{g^E4Xxd=X*h&rN4i{|TT} znF%iqin-eweDzB-#r2!ygYYSP5U0sDz`@Nh>`J&k*d{?S69d^vie(YOLB)JtuEyAR zvGT#M!h|sqs${y9&EUz)f+^Si2#yrPbKqt2+*AqU(EfFzRiuv5hm~T1OnrV}jxV7` z1yo?WPz_m-#QW}Q!h6TcLpmi(98lN` z6rm&~#>0=rQ;hnm$|+!yjeHK*2}f!P3dW$W(qCiXePk*|p3Gtcas4GOBDx6;s|}5) z2%@d$^lp3&S-X=&t*UHiC6OhO!(zO>F`>%9g$a{lUY&I;y@@A|y-psTMm}wA@;UOk z{ca&uqr;({V`Znkgr?WN-A8=6U!3+43VqS>Njn}h@m4z0@8~D(m@PGL`4KaMQj0S3M!%k zD$0Fut-bcz?d<*DbMCm~eeeAnGLn4foS!*=LNf0@kK3B<8LP8*4*v4U#jpO$WB2fP zU!D*XmDeV{bA#8O`d8MkO$D{RTYDCATY3HYsVBkfFCrG|*I&l0Z@pW8MFM9-z$aUe zZ%k8VuWrnwYQNujO*2#ZI-BKu{Oeqv-_@`4h2ihNF3=NIzAcvJ9{={Hs`Bc$w{>mr zzb!S~R{6f%{N(ueckK(uKjJ#q-+%wWKpj0*&2N{U4)tLFylAx}L}ByOXfB*$hf?bs zGQh7Kqai0+rN}TBlbt^|go6oC>^Z(N# z_usMj+q|5PEtfNkY-X3DW>s~MBh(pHHH;wSyss}23B+0hrzu3&b=ewR&yEH z3f08@!=6H)@`kJ`)N}6)`|5#td1{45<^KDDuAlNJhby$&?%Y2f^{Ie~t<<@_e9Qg0@?Wp<-%$%`Cwjtu*mdmjbo+7qZ-#QH7@sSoWQ)i zi}PCToYfAOeUr77Re{A`d&&~vqkGwOcGf@Vfw|x7NOm4RShxU+V6KP7T}QZa7yxkP zU8P+6mVHSD`^pe+026CoZ5R>h<3_KN;`RBO?l&v?9zddW00x%51ZMD4HF4P7puFIM zr=K{~6>u~_75iA}z*pHyw(NGcNG{b0iAlIpvYgZ=RM7(=DaM)uB`s_Q$Nl<3X`B?Fwe@u7(=ZmmY8sz4y6n=EeQo;c z2m}#H;nEv*PTc^ufUJhtv5>JLsDQV*Qz`&_9_AFF_OY2p_sR3h!zc_2tH$Dhs0nVN zbd1rESZHA83;{%+a-K60Ruxy?Lu0S{0E;;zS&?WOYp0zt;{UQ~{}Bf4K&?=yl1u3* z>2xbw*|$fxW5|`JwjS=^SI_sX`RsAVQ4S%$2Y=Um28hQjw_r42qk|8C+kIH_x(5U{Th;nT?+?J+>NJ<4jXiN!d{C^iUISMmDKV9;JbUo%8ZG0fBXzfMED;8b zM}{FN2Jq5lYoc8vI+)L7hrXJ2q8bazAwo6Rt)Eiu1E3#n<|b?_j|0kR^8>!A0983um*ZlPulBS zPBy(#h&76Z(NLiF%<0+OR-lf1$=)-FEfv%^U{j6G@N3j zPxd0LEq|`&Ig4QP*XD<#e}1BK+*mZTiNc-heGRCdeuH}R_EFc*FAW!OEc@AfpL*7# zusU?({hUW;IHO-5@mKxfs&k@);i!+f4`Pbay*BP&?D-rl!?9?yFQ^t#&tHS5 zX#m7F%*UWDp_fFpaDlCF-nEA8$t%~+0gN4=06>3q=k4=6#$xY)OI$Kt=eyvvpEhG| z>km0L0ib`K{T(A3|60CvM!p6`^0tGU(@{|r4uBqmtJ1Lo7d=kPz6m7@=IJ!di3m_R zS3=kq_$i5!=;cZj6TGhE@GMo7RG6#iq|`2|HivmEDim?k2PYbV&|Va~lS?`2b(;Hj zEJ~b&3XR>VgE!UD<_7{SsJPiDQlFgTUEAZ`sgX7)z~Q#;_mhOnvBBPxR!28<-(@8f z8toh&fQmDYe9Tsw%!wGBIEA|fyEed;zMddqOY}qQsnFtl`qdQGB9vpj3dJFWQ6I!s zXt;W8;-!9cR)q&U9=H<=+!;9T`k6(hl`l0{(8LsHxeM1}8vukH;#c!O?4o+HO&|~n zWatQZ%uoR!+(}Eq9R~&t;?bkx8m1Up1FRI_Y*ZDgnM~ds3 zaoC+IoG1f!HUh^rnwI7r>EoR!%grkN@w{7klI;~L-3|$}^M4Y?LOP>)y-Iucig@#w z1BJZztg$?rgvrHA?XKFjx~S=>3X2mEN+1fn<Yu$5z zaY+g*Ia?QUUC_C{Pm1C9^pmF99Yp|_b*(Yun87iC81&X9+bJ?zjFalpVUiu{;r7O) zem(o(XSpTG9Jc|Y?^m8T=G+61b!;!?T=#IExN;^jmKsvcBiF`#OG{_xlgRK6p4=}v z%|;jMXUw1Bi7c!>3#!rHAF(LACb&;aY@1S$l% zG#heQPqGZ&K|p(xCnr&aHHdP<#hIs4>O@5$3=j>ZiI9D1Bn&oEZBQPEV2Z}b;x+^X zquPrjSCjNnXz4LD%;O^8IJ|K*11jzZ^I+LS%iA)^(l&q?GtiA88M|J?xag<(#eH|o zpM-n(tt_fI&4(v^WjQ{op-*?YWQ%0Mm8>0visLS8jD-|o097G%>-|vkPTZvsOddFw z`2_boC-Yqx!OMJy_o5SA9MUacBH@6#5Kuyapvz4wO8cFTm5a+n@oC?!fR0&T`n2~1 zIhdy}=#-G2>(fe-P!&b5N@Ed8ge1l#8{6eq?b?DP{qI!mnsDapJVkS@&WWnd%dgJw ztS+3YzC0CFpn55Ity)paw#?NKhbxk4D6Fh8h`kL{eOx2_8E96hZH=mJ7c%V5jkPO5 z4)UTHLUp0c+5wBYK9;&y3$?d9>xNzHhQHN~3e`WsbxMVRnF2 z{>iQ{u{ciDNgN6xj$Zg;ntwVSy&lH{xfW=Quu=7aufxQWBTt0H3yNRk|A;h_Gj?du zkX)l{C&;!$GN^eE$z>Jlmzzz*HIoB?;=qnL-#z7GDxV#8CJwm zXztM7vo?+>d|<=Dc2{s6x^<(5JL|So1eN`8N*w^tqr~m*Xia(L%v+!t%R$@PaCReL`_BU z%qHUujy3lho%6B;QJS`p=r-RD>=3;zM*I@&WbE#^#e>aSB8;8x$WJ-vL1Y~c;d*2%T~MGkgFC3y%Ysmo%pq}=?(Qt=cf9(2 zcLOW%9Bf6C#1zE=dFIu|-8%P~SS5R0g&UW;ZN?2@g9B0BHymIoHQj3C*pj90zAJ2T z$J!r8-tz)Fd1HaC>kA&%1#9#9I4SPa zrE{n9{m!Q&xA}B^00!)aC;g{-TjVfFWdFa`+kfKItH%CbZ`VAkbz$w~%4w;6a*f!Z z{7Y|N$?@gfXutyi2g}IaBFnaIKK;|%@;6CH5*zdoz-(;$U2hNPEh@nQ5p1DHY2(~B zpZ;?AX+zxz-6%z@Xoc;~c-3JU%ln<%e7aZV8Uz?(6*}j$^zy#2yolzFSk`roQ5e7l zDC~xcH{`5B7rWTwuo^L{ zqwJhH{t`h`{xCqZL9^kOXA+Y$&K*Zu&r*)%Y&JA_4Pn9oe|WkfQkE}ZHr;IOHU-TK zPH(tV)fxamt{eXt1GLXgz)(IUGQkQ;lmvvbXcQQ0Vd89l(0q&42^q(RJhXBgMo1Vo zEkBwk*TIBh$%62{G6PDjyv-@dVwOkH_X zwG<%F34_rdL#yjr-@dJdiEc&t8`HR0mg?K*YZU#p0vndDF_4PO4Fi0~mK%p;YL}aa zxB2u@Q^j}96We-w(zo_q>+>^9@7kCNitpQJbB?|5Sgfdh-?`kn^uB9lQ1L_e=f}rB z+}N0}{m`?yw)Ej9fKplk`ShTbUbJi-sJFG3SNd^gN*@P))7yS^9|uMLnci+&Uj19W z{b@vhefiUaZM}UJg9Y_Abu8iYLo01iZ-e7uJ_acSP;ZL{6R$jeeh6-ahWY?iCZ&Ts z3XlC0yL*umlZOnS32o$avJ#z*D-FUcdDby58C&w2CGTIgXm$G&N4o|Zu7zt!6U zDiwd|ZES9X&R_KQ)$i}Sf79DLH&+JuPi%f1lD)RMI;{Nx)Z1n|e|(;BKJnwrkCVg9KyOR_6eyETEj{pY{5fDw>GZ* zt=_gO<;vaW)Bo4>_KPX@UwnGLaoX*tX=3k&%;NHx7fG95JGS|Bu{aPQ?kC{x3>oV+ zrPHjy7z9s~9boQD0QvOm?eq&8UYTyqX>z+U7CLDe!d0`T@_)~#|5tiDQifEj4C-y; zsq)foy&cTz!=$jFB%l~@NaT8x498J%T$m8t^3r0QPGr@Hh#H)0Y1TuO1pxR?v5Bwf zTkE@_x6nXDrg$c9Y%loYZz05k1%7FQkc3W&&oRfbsl^(($=Q*I$#|_r3W0qERrv8l z>6dDM13gzO#$Kz(cRA?xQ&Rn8++!^5v`U1O zxg^%I#`XdMmZF(Th%S{OMvy%2RcJb2@(?<{ACQtmqr@P(Wx>MPzrgn>P zPPN>bR01n)fW>F|5y<*{ZK{pjx&fm}dP6{mz-*r{LZXGmAeY=2@$hupy%+Df!eG%~ zRA5hJj<7sz=^pP?jN%`Hum>%KEFI?Oh!T1QTrDm69K**R1HeUANX=i$cPI^aBm@71 zPggSNw$GDbZ%}pG9GDI$wNfuz={>b`nYLoVktmge<^VEhKCzK*d5Fgoyp?b&R`qh6 zH~={1p0inz(5-Ae%yML<@+)RgPFyF9R@_JKYpe*aI#fV>W-QzH$QdSSyR)x(m}h`R zs>yOM3yuHGOI6E6xT@Cm^|VwU&Hm$CXqKV6f_i5ZprIkDiMv(As+8V4a_Q7@JcjO0 zf>OH|AJl#qH$B3fOKcduL``ch+jSa4uA9L)MD$(O*MDOj{cW7i-cn_D;BC@lNDD9; zQk@?D{9xC&M-6E$b$$nyTqW(qT1Q&0hTmU0@;a`nhrP8Sy=kHpO2nGusA2%oK9-=# z)^GiS-w}xSKM^D_)Ntm*z!=+c+e#(f;5DOjM3~R9??;D1kn$W?U^25jK!AWz_bdGP z$t6XM5y03bkhy%7J&rxVrS-=5)2O37#saTKEIG>-CdmW%A?J{x9j8bRp|?HotWWOk zR??bx_l;GG$}?(0c*2Cs4A`Js`_LgOSM|B1Mi9y8%9DYWJBXiDuAsast3pG)~`-N4H$OYRWlg_31ek?p!-gH zE(rkOiSxGm7WpdpC_EC9G#qH@f;AyNbGB| z({ZE+pvEF1?2sV|{89`>5*+2*I~wUWDZrA& zr9X=5W-747v+h2aAY%v>!V8{d$`>zy=sBEVOA0}YLkaNCc=@lU6!sN}(PSbL3VV_$ z*GSiJ+`{9+6REfig$pzcBu}n*T}sb1GQ&k;g+GB>3U42^fpYr8AguZ!)O+3sg+4(N zsJIvF+O-5PC?|i6IsWToYh*La8QM{e71Cf9gwU>*N5W*U;hZ#M5r#)NM^l@hkO30J zsM0FvNm9m1XZJxhjQ@oINriP-Qu@$^8J)CQm$dnaw8gx%x9w@mlWFfa(pCg6uIgO; z>~e7};^Ic$#c%BwHzzOt+_(q`(%N62InGbC;3vdCNd+aOVEf^pYx_VM|45dmdXhER zJbkYhMc|D(J7eF?wsgE;#<9;xC)o^{$ivp*8A_jM3U}1yBX{dgW+;5RfNTx@&=7ie z>l3VDjr~0_^X_$Mja;V7r$fc%#~4l-U9XedZC=E4WZ7u~vA=v-{yE2xwBU3`b z{?x9-Y>7;<8HU7>B=u5_9GNS~odG#JGIIi-<{bZ;6C#)!rkjh9WUnLS%8X}6bmaP# zq4moH?C)?D;*fB=QveBZ9nU6fcQWRyLZ`Fn&PHUFEiMfJl1B4p`gm2;PCAkjVI{eF z@+viO?p@k!&qvt+T8NYfdr7roRmX7!@f?_Vfh^~lyOa6syQGDZ3NBOfy93l7jbg8S zE#U5Fn_{pv>@U3AQ8@gxaO7*@s9@1U-J*#@MUNwkCNC9Dbrd~+TJ%!a^a zpKuvraQVb)(c43Nsm+%+)q#qc%WIxce?;nPwb-9)t@;2Pun&IzA7uk=x- zU^|uUG6^*o59^C-17*XDdu`WV`a1mRaip7s7zsfW1x=}5^isUMK%Rh{u~&weS(MW6 zF`dx^D^CMR?;T!aj%M&t0g@0n8b$ANfdf3O@F}rrilo{jMl9u#M_6NqD0?C(80 zkZi?n)KOI^BPGoqj`ZXnvcYRW4+(%VT~GJdPm6Y1&Qw_Bw{9u(kmsOU_yNH9vLYVb zya^s{6sEl+_Lp7!5-*DP^K}wU(4<0&*M6%@aLs#b)?{ zgml;rTyvi_SF`QA_SwKWC>mN6VrY<}A4Wq?Nx-34b$Og&$HsgY&uJAJUeo}lqe?nv z*+HB}3hP&X=)=0jsTy#cZ0=*>be5u^Ih{8%(Bg6Q(Eh)V>HdXmNLXSwj*Zy|#&l-G z3MHg?GwpX8CU6*p)NbP(eA;M-d-VSUFZf6yg#&BXu|cTCbob7}Fg!Pf+qUz}pr|u&3J@D}%LG77f@r_L@qB@?d{?UST5H%r7%5$C?mfMu*I4}27!%3g!V zi4GYYeUVX4^AETeyV-YNy$HT(;@9ehm-k`~!coGIU zRUPO~HON015ld)F(y7Sar5u>oF9N9APzZ2#OeAdYtFK#o^oDzje|pRALs^VcgtF{* z(sLsm9ViFHcq|`aAgpxB!i(}gaG|_BC=UVh;A};SbjX6yH4Qv2ga8Y{-bYeR_edWm zmbrvg(OmFiECMJl)p9#=6RsUxL3DFTx;*e!QpBElic2?}^O3na9qUaf>os_L(A7eu zROX8X7uwnh)o0csxL8AEt97|;@wo7^HP4Jvro_Fs^0ihMxP}$Dc^9*HOSB{T-023g z`d{sD%^{Kg%H!5+s+ z1jKh=K{YQA-O5_JK5$GDT4Qj!&2ov^XK6M7ZMcfO+8zqnC75?W=Q&SDP)Y9=Nq@ zzChq--s`7H4(YFMAOxgTr!yNWZbzro+Rz&W5bmfua$W|3@=&ikhJuOe?W+$|#liKq zX^aC7jUB9=Q!n^B>~DQN|H<&YR@c|9`ypx93m2>w^qzekiMXn)|GaS_eD>=D68kCp zXAlkp;cuhbltg{dqSaYGi9f=W2Jkah3HteF(Y~h&YG|<%?#A@|Gug^zoNos&#R^X? z&UnJrXx=%UhX&9nwxbu?Wk7>zi2h~f@n{M~%IHyNLNUMIEW6VqwY0~RRzjbd0c0fu zgcrSEaYrthTVx~E;Zh4xWe<+Z1D{AZ=70Q&3tLm1%;jMob7jFw6+(1$7#mw_HyG0u zu`RX&I%jSm{HEQ$WDS2`V>Lbfn(l7Gq+O2ZO+$DdUOBwviS`QRIBGka^BIW}&68T6 z-KBQ+Lo%Fq!J*$n!u{x*p(fca&n7}=`6^#J-AkeZ`qB#6PjbMXtY-{ESLLDZ+ zUG3(}VK1u=A*Dxqvl!V@Cf1B&n@?09g*P@45>{Y^*Q$BUrcU_(a4Y)|HL!Aa%HU|P zu?wXe%6Bbfwh&K?ZDgH=Iu^ZQMRQ2Coq%UuPvJNLkYZ)`ky%y)#}^TXaOnvAY}hy{ zYEJ6g?8r|`*el=>+!V(p<@{xIi~uXK-kcHM+8DCwSnMN0*p&}j_JCsV z#8EdToEKWVu1~>D6~0xFK+IN;JA@}JMy~D4av}?O;1LnV(yyBDx-}Q$j~+dr@HQlQ zQLKy;O_%u~i<>h+=mQ5QE6?-H*nwSv%sH91Gv~m_<4FZcm`nH)?J$6cIqm{J<;qlo zpe7!tNhHfO!DbAEp?0VoGZ~m14nY)Z^P>o>pODGLAqp;ycr%W<5CJ`e?e1XT>#nO+)?N{2k8aJu8pn3SqMFi7ChJZ_XH z2_`0h{TAz#HjYfn90O*8;K+VDn*AH=R!@0pi=Xw$?eqC zNov~G29+j|l%bQ9<&u;Wk(8I0G(dK5zZIFUqaK#)$>iIek?Xl+x_eFe_RnR5i{@)423QgP_)9k6`dI7;IK~;S=k(xj zlX7IjMc7k0i&-v>&+zI9TB?MpiW<97GuMpmaqc%Xcf-K>3fg@Fn_USPP9AqiCQd+J zy5liF9|rKic}ho0XW-ei(=!4L*baNccM+_W&jd)TIkKrI@$bsZbXdJekXPKJn`IiA zWqv8kq9e=dX_ocZEL*{Bd);iuL)lK4q~~X{T?I|bxqaQ>$TSLSU?`cD z;~#10xnFW)j28j`p}JfI0O??q5v(hrvI3PMhC6a8f+ktFQr!On7?-kqJ?D@4Y^Xj)#94W^n z!TJ1|WVB2blY-S+{QVT?aq|D);}kz2BGn3>;ueDlfD1oBwZ~I&Z)=K^fqnuHV~cp$ zRA{JmELt_4(1!y28E>y$O2+pgUqb*`qj(%)9C?Fxpw40d3Oe`_Z)z0nlyuDgy@Ox- zRC(nvjP+NaPP1(=KeF`-PE$`T5DXBq?{&_URIhLRuM%_rc#8is2S4O= z?0@0l|LrNBcXu@fi4x&sv_kMoAG9-79=qEbZPFR-1UQ3bbR z%=PrpaEv*qX8}T@u2o>D@x%k1xcV)!Qlq%ta3SaQ4PD)!^pqmue*WHeUD=F37G{c- zh!7rs$vMJk_04wrp+|3uMHHo#C{oAv3A&Wjt@%sfHWCp^0uU&QV#eS}q2Yzd$f@z- z1{WgqJcd<@O-eT-iwU*-jz!otL4(=6W66TkGC!`EWzYZ^xtA9(hhWGnlzn^L=aM9d zf-5U1bffK<#OXsa(s`w9qIi&)(^W>r`QqCd@dWyiRY!I*-VuPZDcRodHki+UA#zXN zKA|P#7cp0<_as1@layI>(jg~$7V{u#>bi9~9N6>W=~gMhB8j*e#7QVVMIJ;<7?0^K zK8skf!ZS&zB1iwnRDk5(WB6-fM*Hqq8c59H*{aRW^2e=f2>o4-C#;JayJZ5DATA zhihKb>*rS*Ws++4!cpZ^ggju&!bro$iB7wowAgitr>+l|7N6yzd8L1NUWxDW$2xyA z%M$L5hv>2c^?}a!rXK&{;Qw`DW(jdIZpf=mCN^<5u)@v+7iNaaokTM3J)hT-X1^yr zB#?my_5k!`R!r$h?llB2p;yA|`PGQqiag5}1IT?is^A^BMzylu8vzX}(P~;Kox1Rz zjXf!d5ILOSz*^5&wiRbn0%dB&nSmRBbR8$6c3oYk_d*P~FjM#h4m$Fp=0E~B&5GSY z$1tKE#{$^Ka^t140!!~HxX~5*LV;^xCYEt#Jdh(2EY(@5#V#>|ZGyG%OlV{_2M^J+ z`vNmvT#GgNXd*-u>0rmsLk%k3oK7SvW4MS*X81AK7MAJwwKtv%V7yk?SB6Q6o;AA9r5*fQReyBSYP>;OgYyJ&Sb8YI_XAuDfes*4V&;KgkYC*YR)K@F3uUWGe z;9i|t;rETfxSgmn#CO>}L&>jZ=#mpPC`1i@BwonlfKJO}zIvJC8R&=nhlq#;D{VV> zD4;w~JrAMB$p9Y1HG6Gf>S~5!RbLJA1g@V}aZTr*_`08RZY^2pby><00YZWlrCPac zPQ4`$^#YkIFuGasa)ZZ^h4jUQs%a&Y#DLsp&ka%#6>vg*f4MQz*0X;9!@2L@UjZEL z43u@qfzzHyXh2Z!r-fLx6oXOdN3uNs<*Q;dp4X5Vjg4@Ec@GZO+6V|Ywh~+F63g@ z^9Aem&SyW~M?C0yxejg*egE-+#L>+}*=!8Nn`AD>z)0isq`~oLg(=R@?m$+S`m|a2 z_%)m7giR1szq6m>qM*5zF`$b1oGfjqKMJ6U9sEVe<$3s59JCMch?zaRAb7@+*22Ed~E57^?(;C@)`>66=IfVCoa z1Xc1Mu!UB6djL?At$g<&J*Opvtmi>^cspIpZ0471`syYLmMdak0wuLV*;tRba~V?8 z?+N@m)qL*i?!0cSG#Z~mPS#9OG50jO(+zCGg?@)EQlzI3X)W_96FP@fRS6$35<%Op zY5Sth;O;ONcE+jI1!3nplJ$+wFG~kdMDSGWTK~Z8|FBiaPU_zHv^c&ETip1*{(sV` zmUG&`+>um9g2VSzjH4tSLD$rjyaF*yRV__N7LS2=J)XAhn(A-!_0j@mjH@iR2pAR~ z%oM2~;8Ucbd)eZa&4v6M(i`qUaqp~@sQ?sxU+6!BEk3Vm;i@*)mUfz+1_1a?u-p)0 zXavwd^kTKG`uo`ao3O?2c9RKrjLwK&}M9BKf)x%q~UJQKC@H+E7 z+rd$k6z;!MZuqyS+WrH^AZ#K0Ab~JN&D^tUAL039{Z;{t!1p>6ge@BU8WVV-K7&0g z0}=Z`*R)pU{GVJ?a|Tps+chQ5#+4H$K=TTkCuE?3t3h72#`49yP&krq@L1QFsAF!< zq9>Xq;Pf@1=Dx^?Ln zilZg}JO;>}QLu-L)m2&G@i9ZDd|sBR+&0QC6>*7=0cf9#;lx-NLH$}x;b(&mO37;7 zIS>^lBR|Yw_xKHEFSZ&B%jv)LIEE&}N4+2qSHJ7H*BaB{V&@-pM+VO@#HumNRTBkw zV&us9#`btZow-$)E*)=UYlt#MbL{{~TxS|MRr23lK?95eNitdPIq{0@;)Mb?E{N7K zV;EnlgC(Og9seq_Jfdm*^5^HzSR+)o9>mxuAvntH0!o|7e%~BI!3HH-DRQ*)Ky68= zq<5qtQHMHJ1@EBPx8MWp1TQh*g6Qg=nnz_fPdl1QR^bgKfRW6;3n&69fQ`6lFT=|$ zP`x{?7={7xk3a9-}cd2Nw<{yYZgxI1^OI-#Ct&*GJXw<;dhhh2akd0{PY zp@vhIdZfTYC1&VI*L%ln>h4?&bbe*g;#)qU*vf@QykX(XfYNC(H>QkWDNR#2tz(c2 zNfza>$^K+)Y}(wE;uO6oji%Y8$68_@K@j1|^5jIQa`?W>n!H#?&m2se^S_eAsxnLj z#{h$qi8$M1TX+9D2Ka5Qjlp&`B+>HM7~s&C=ewEH?DH&fVt3}A?tTdY!j0EEC+FC8 z=>^~z;1j)7=KFB7W@E{y5*Fxw7|@)Dlc<2Ca)hBy-#%8VFiS^&zJKkUPyekSt95Ae z(b)4IgKz*B%20}xpt#APH{X(PpzT&DM!o|u7+Z1o4GKR;7*o;3#W%cO;l%f2I98)P zU;dDV6Vtn=`MNf4!T2mHg)FOleOT?}Z>UXs56eAgCfrW)9AUcPpl@)W5Q^s2{vWiS zY<>hhciFv5Gr`*di!OF5xW+6UJom_IWlmFIQ;7ihXinvD<#EN}vm*h%QYPG6fae(- zrBr|<*80>GYQF5%eW@VlCFq*+9j_2lAX`toYr&m9Mn43bf0E^aSI=`Ue9#QzVW6FL zqsasuDakU1gcP{UnV)SOFX-Q4!W!}rt`TiW&U4&XX-|>l6_xZ=x#OTYddkRXZh>Dj z1xr9_xGoxX|2tb2i^s`eV>{fIWy>5|BjmO8CbTc)oNv`7~6Xa82ds>g+4vGutOihb?8gjFb z4KfEgAnZcHMRZ#p-C-`hJ0r;w97yn;vuzDpt`q*yvhb-owj-W>J<4Q-961>9B68;S z{-rn0(YK#u!)!MCgnzD3ZMtXpA8ZWn{`rx1v3pk5=IdQIF!y-SJ+J-X>&PGFhHnqX zb&6$G_Eg(n(^Am)7(M5FwzPt@Vn;c+mLa6^-b^!=a@+o3SGZ$4Z_~X;EPei`3E$rN zbPX^q1F847Vn0dqCVsI#>iDoSw`lrmf(#e$k$j}#N2~WeM_K#HUlu*d;|IAKNbkb? zpV;sSJaVIHkM8@qv14AH*0?oGvIh^c zm4OwBkgc=D)p}sWhh*1IQch)10LJzU3>+ntu!qEC!;oxFG=Rqr?6)+ZvtH!s1zJt43v!DCT! zszj8_j0@y#A2yvmF)5mW;Ct8zyznE-mS&JZrK;Lu>I1jv5HqES zsC4v8-nd$erpush(^R3b+#uA#0!72K=|LEiIg5Xf+%I$9GF5jyMRgXOWl_*0i~@vT6<2P@y9(t}?>;B$>nndrNYKlrs#ZN4YNQbf~D(L3&hzTQav_2&6}i z3ngYBuHb;~=>&j~%(sI-QAZ!nj)*kp=YS?^ri}%I$f(F`xj}7k5;~j(fQylC58e2M zj7F{?__@647ZX_c8hmeoFTRjyNugvUC-}0}rtQ9q!whj&PX&vfYDcJeFVbmr2f>$g zF&vX(AT+%nksSyZ!q52_FLJZujCa=8Immu&vIMMV$Q?sI(<+Bl+0lQkxbiJ4kJKf} zBUfQ_-B7G3E?yMb-&lcxXOGokm;jz2bgGnH9bNgXop6t=pRD>;$xX?e8#L@bU7mWz zkop*~)q3!wLvZq@U$U6IZBr--=3(b#5IX=XR(1@k^`C|t#ldy}5S0GnoKXvs6?)b4 zH^Xjw68dwQ+<|HfXK)gFkUc}?ODe0c#W(?TfoHG3pH-&TNYS@b(PcPuTSOniTv{3m z1qk*hW*-zs`670P7(77sLCfRlHP&-1DB7*^g8}Nb@5UHtbd7Y=UPKnmPTHmT;e-m} zRQ)Wcw0m&E!Nw6@4aRlyPk<47T5J4$5ObpiUK?oYq=} zHd~Y($588hwV%-~(cZi^d41exV&zBj*P5&Tm0|ZTezxS<%ipd*8-^Ts1wN7Y!Ab&y zBsh5y0+?!0g~mgkpFeAWu&ugUkU+-1Gqe(U!9+UEX53mdokeMdTn#Ue!}@)mQ`aLJ z@t7QVX$cE&`7Od%Obp`GjtuaSy(>k`vCJq0b<+Ul zqH#h5xyq!r@Wwo)rijgtx|6{zm;l>YG6yA#?PMx^IIP$E8cGn*kW^6-D>Zn#7|+WO zPqo6U3^;b!EFX|m4_7l1nIARLU>WF!AG$)@QBlVs`S=1$$$N6!@SKW6Dsbrl0i55N zA3j3@T%(Q^88Up`?k8;_T3E>Wl5zRm6M#7TqYT#%-iLIPxM-Pf2WzLA$SnJrqnqEE zg#;YM>Bomq3LiQ94p&Y2x%y_MI}E18?fKT_?2~)(L+H|dtu zW2I%~zRQe51N2JCOTE>m*DoJ<5RYixTTp7$X94I#0d5msrEk%bhxlhhYQ&O8vzQQa z$RoWwJ=xcn9FUA0DQMnHt(FX-6e+CRbI8)p&Ng37?GACIfTL}RptkS$P=s13uAgv* zxwJV70Mlz6S9hsb137mJdx*)?~UmY3vkj_c3*oT z^vDs?5dHl7&vgbz&q|`rKV;`%#kJDr$6L3pZ<7yt*4iHYcz+u^5+WwQmDzD-al&o) z>n)y!$MpTQW6{O7Z93n-+i0$SWxWf@#kT%f2cL7g0lD{spR@({fo{mYbtauRBw-v* zq8DXvJRu!ih2aF`6mgNlGY1y8}=BT!yQgO6hX0}MV1wCqKQ zpqZ1GvW{#g0Lbmdx0gt+jPe>w5?B!oYRKHe87ZoWw6$j>Zni(25EE@TQ^r z+bb!fSB{+`3yY^sJsiux_lCv>kYB;DTQ0T|T_AorUVCkK=^o$}td@VEXYYE-*q2XB zVCK8e{?Sjw|L&RZzrimn=OW=0n4swGx+G0tvq;-naH$c01lkm{4l^!WWwD?5I`~R%9 z)y>re8)Fm=;uC|?MFF`IfFw~_r*8NX3V?&mSHYDO_*q-U?Uj^2wYL7jNZihR{}+rz za3$r~MA#oIDL-X6DF5k7N^IQ#w!Bis16k8{8Go>@>#r**|6?cQU+~NGOXnf@kptgT zj`HY$`%!}@!~lHkE-bi`l6Db$Xoy1KTV$+>!$`c~t0LFUa@e9){#Z!?TU&BgB`nSn zd&3%O(ZX_&t4Aig)d3=_4-Uq=*OZ1HZHR2d4Jm8^At^gtFCtkDAb@~}@f^euFV%jC z`wCcN;W?JP`&(~A!U~+C52TDmBLv*a6834tv3v0x5t#u1O{_5oe9V9sUJBF29&--R z9}{{Of!oaozYw{3ScJ(mrR0f=Ct{^mSBWIbrg(a?#!E;IV7~jCTE;D5BZ-9-B$>dK z+2_zNG7kXuTyTjH^C4k-jK#At5B6&@bFyyRuZpbZ_(YMf=fLv0%sF%SNI0WiY*n5t zTFOg~lDc^40LyZ{dXEz1F6rr&H4+IX#Kih*tu#*FS%gk3kL^4-K$){8XwlGq2@yIO z?`TArvXFr;WJUA|O`<5%b|K!=bSq=c8xI>lbzpDp%z?=XhhqH=3?L_(Pdh%(^?Ay>1OmD4U+0Nl3t4%rm&$J0DL{cY$}T z9!cw*R#H(m3}%BVC2?%n2EDf8;$TMVx&w?7(Rwu75!yu6w*Umf|KYy+y9b|A@xG9E zfp2D|X*h zHPO;=OIp6WPmr-Sc*c)OfwUhlkl+p>dLHE+QjNUF-w7qQ4;&Wh8p?OC>!p{e-Elg} zaocjEj+8rIlrIpJ_hKMGgPOjLKH?r{xzM}pxvOpHH~|EJy0Pim>m(0-QPS6TR=xeh zz@N}Zh1ysD#j7G(J3#VrI^27sAJ48P0FsZK1sen0Ao*zfTuP@Q41Xj~62RM=Cv@i- z3;Tv<{URT|bM$huK=N_6ahrT(5Q%U#9D(nv;{ZC*;qqq7Z{%axBE^L`R+z@)=#(n@Wy4+jxCX9x^J zNi*W^Q$DLnz9B6AUg=>@eUqXg@X?8P>GD_u%uZo$Huk+`$2bRiV1j)db%)FCyQ^9p zg6mTxmN+wV15hekCiVv~t1K?vrBpYtm9m=N;H2EeWYxokJ$-?Y<0K`o-ldlC8})fH}VnAeNAf6P2=20cul`NGMZ+J zCsiu}Ab0rd$_^T#$mYWicOURMcACL3QuV7`k;G?roH?8S zHM*$MZDm+B?EWR5C^8Remy_(d^D;X|_n22>8gbo(30A=2GjsmoPTUs9UgEb{a{!)v zEu9Nsh62NDyvK1QLImlQRVxuOcGux2M+W4ZcN}Z|f`p2(3e3fd%y&){iatXpp{cuG zJXC+VdYWyBr%3BR$$Tj)8x&Q6SaqFP4VPH0h*-8N=fLulIuR;3ez$Y2I;#9`N%K0n z(m2ps9QO>e*lukZs;tF9x&7?@RiYie4w@@RXT^UvGnn)c+n$>ggbekqXBq?6L@lF}NH(w>*n*`8u@ z#jkrK<;^(uN;_{qI(2YE2iy~I2eHIn)SZpg5rGS%Iu{}kP(E&Man552}v%npEVP}A+JKtT(qq5y1f0uFjW__LF3lLF$|()H2gQ%m*6 zjZF9Ee>*R5&9`m%k9mQ&yK4#3S)(8RC+7tw)0ogv`$$KFzpymVwfB zF_)CF>%IG^L=QWSXX6_;7=lPRaz^&PvS`=ATaodsE@;f5Asv@d+kGb@VvUDGj7G-{ z@a6<4ur&bydcz*})FqE|5ok^s_Bbk=o#)&+xm)+|kdqG%KNo1oyLC^r@sH>4W2~1Z-f==!9n%$7LL}P?bI!G_i|D8SD{9t}G zw%W(KgNIGYv2vl5&vx#$NJ-OvnytZGf}HL|C|h&2?JdzQ&y3quVs%&;#1I7pKDzXX zmCru}u#u$1+7D28067z9?VR2;?|R+xOI9pS9@G|HPH(M|cA?H&*7E6H*R>`Oikaao`OwAQeo-L8%y0WpHC14*0KLvgF4P2a66QQxbcx!zN zs>Vaba#{Xg?7in#6aT}%Ica1P0wke@okW zm;6Xyi|Dks^=A-oDl6cXXQ|JFJ~tp$HMjUfvZpZUqrQeHRMb z>S{S!Q)p0QCHP-Q!9&Yi2Jg6({*oy_Cyul7EM=9^B@vUU`^2ljMefQQPUj} z=1@aD3{A5#dTmT?EP&Sw6&T$D!yjK03Z^`RBOkg)Wd>z`!Xy0_bqt3 zX;lOCV6y+s*g{a%Bxc_L{T|0DvF?BW;(hh%wc+=1M}9t?{_3k6LBw83-*LJkqocT{}*SSbzWZ@cl=)P|5q{jO^ zr*?0AdK=RG_M$FY0jGBPsjLg)U|-4y_8Mi_xJDVqs(w7O%X%7jg}WJ=gySNMJ7lYR z#oq>`<=@}SX=j)Bt-%I(of4%Wu{qc15&&vJVf4<#c z{qu8eFHB&s!HLhqrJ<(M5)8I`>zck8Gc01G*WkpYy`EN_FD=l1lKlGS1cgcY|ML>$ zFJAZ;FZ_!a{>2Ob;)Q?l!oPUoU%c=yUicR;RQ*2+8h`P^|KIO{|Kf%JH)@{0c;SD$ zDgWYyfAPXd_y5@g|HTXc;)Q?l!oPUo{~BKSpRcz6@7Nvx;)Vaeusi<63z2{E!oPUo zU%c=yUicR;{EHX<#S8zxffpkGtrz{p3;*JUfAPY*pO-l{LKqmsW+`~=en#nRpfq- zAi((m5+jKcnp9jyH|)ule?`-AWCho-vhY!F>@Y4UeXI6vY2blCZ!=s6V@Ziq4fv!1 zfc~R*l_X7sqsQQ(U%Mq`y9h-{8C#0;nhuFI4t=quS_`;74PobL%CXNNEwCmdaPQu^ z?5%Qus5EP>`BHl@rnFds8o5ipmvjbW?qO}_<17U{?s?^k#U#4oOdXgLK{S0zh%CYU zU^N>_^jN|c089QpGWAm=CT5FIo3mSJ*m#v^ODK;+xe{It0uuA}fa%%Kaxn>NZL9kK zHebqp%N@IL_=~zurUIpy`RfHX6RgYfy0e(#G=+mrVkzs%3oc+1u!N)0uYaa+B?*L0 zOsPw^c-!5jb9NM%&>f0hWVm#>=>#*WStlvgAq$Ql0NBc!6CMKk^h_FQq*P8R{M~<2 zk<8ARFBqqrz%<`d7f&8`J)9ig4U^$dL*S(@6Q>2v+AkH{QtE4sfVXJc9cf*E;iR)g zb29C&nKq1FX_1CuLoNF8KANP^%DW9awkO6&LpQJy>vUZee8Q=pLZ~ds$O~T{R-0}p zd=w+iQ=n@l*W@06xoUaZC@QTVyF7b^*|^y+a*pAx!U~D=YGSO)@r`{yi!QsqgN%^P zCYv4&xwt{6hn&rU=Al_V(j6=14HjSCG8vLDaS8yV3<^sy4uk;a-emNnrfVPUeC^oe z48`5R68*8d%eOv=y5-Q8EEON4!qa+Q7D*BMO+fc2rSDrVRZ;;Vn!$92+X0@crZuj& zQNI|EScPSjr-y%$jhqPxqcnL;uvn=lB5to_7`gM zc+v?%Zu4s*QYD2fB^|bzK0SToqDQu7=zN-0;gu^Ou;wS5q1~n6ZYz8RhhSPWYxhlZJI2JYbHwxgv040b2nVN{PdC}!T z$!6e|viyfM-TG5+@DrW1_OZDaX%^TGfQZe)deZ-x2+&)}vQh7{p2Ej43FK@pY&6a0 zUay^WPDmt?13aWrEr3PO5ZHiIQXu|jPRcH8{$UUepY2e2CX^x^?h0~%uqCNv*n2!E zv*04=XcD6o-lBq{LZD&9T|j++0)&L4QKh{`+k`H`N?<^ruz zPKZ3OtiV#LTBZALDJ2J6UqLL)TU#f50ih0@C@e56>{Z<{d-<#n2vGV5jgXeE92+X| zzM3%wU#`iU^Cgy0w$L1OR|}n};^VM_F6W&@7yjfd%y=@~6)Hxivax^xp9~~5!;Vw^ zs&r2gALzZCfl^f3og`i<<(Z~_EW`eB2rlVjx2OkK`f<4Cs$=J7tnFgRPuvXzwW zH=}i&+2y^#59b+0M(zRFwikC7nTN>&C3rqLk8Q!p;pQ{DwLH>Gg;#!M?2swzkxpW9 za&p#bA+Y@hP)GqyxJ&}48CA()KJK(xk{yhqXG|qu=fe?L;fs<&YwRpT>|AFk^RR$-q zH6az$E}c%4nxt+`p$J@`cPT!g=8hZ9N&&)VO&6LBZ3JMen(QM^HSv+fW&*DhBBg3NPM;oe4+o8g#iWmup zX(ja~7I)k+?BX@dTZ%(hIzc45l(t)me*NT2sr8YC)pMYH*x(aQm9q6>1nMHo5?O_x z({;VYDAt_~%N>a(-mL*oSEFR#R7I)4P5W$?&*$2g@irNQk7(=GB9;}>tHJAU1^Qo|1<&Af|4_S0^gsx{gfh3KV$LqpHyjG(mMleuxf$CHk*D z3%o#DF@iK=;#B&%D`U<^TP2C(!_yPUr9>uvRAZo1WdX&`O$-buf?dA@l{PtOZNg;3 z(bpq5Kv%0$C|%Y}u?Sc3h2+^fPlMmZNwGinuh|PDbDkFB8bWE$)H9a^%k6m%UPgDy-*vw$iPT<`Ya?_XA?y_|{ z75DiuH0KIm0(-Pz3RKlaUtwgYUVQ)WmO~Gh&=ac}k!2Co@Ul58#4`k16)c9^5L`F6 zufqk=)}<3Z)ty~u=ACMR7!Ul$2)}yfU?x!&4ynboAo20IHp*POx~)^-h>@HT5s;n! zzSZNq0Bhl;9e*2jhvX|SJ5Fg9id5wAcAI$%!(%t5p7QC|9cmnfG7K7k}ls@B{hy!;dVX-}Gg7+vJG-bM`_d=_0k>_MD-~oO}HWZmr;bo7{2#+=m3& zb8N{+?YYk;bCv4%WpjA4B#G1UUeEuNinO?rp-AGvW`Lh0m+EkyHVJ^Sveij|#!~FU ze^QaMAS|H{4|B!MAp~HV0R5Jq-kXQ-N|jV9z}ptMM5sy!;1vdNT8skK#|7&8l+Hdp zsRM`oUZ8WhQ17vhRs(*08BV*b&_t=o%(loPpvbB$o42~ndha28uW7pV_acf?aiG)j zC%E0_WbA4roBE&TOITr=*MFKXn?6D8m2kI7kQET8$vWZp{Y1#yoMwvhLF{h17IZTc zea!?LF8^PtNZG@BIKL6FT7(M`YIgt<(}a`9zMo{HfG2!Bw;F!B8B}X#b2>_MY)^Es zU4uvZzWl+Gm z8CDq}t1C!oEIW1mZBCUx?mPq5ei)aTfja{N_z|_!A>fCHYQ;++D1^W$`8U>5k#DmK zBXGvVz4AU@n*kt>i3UQ}LL==sU10O2Xk4cd@o4Mm#m8qNlTO1RsC*&55QSqmtNd(1 zI}%SHk=O*UJl*^H4Af2-UV0#+1MG1<2`oX}$H6f@tV|59TL(L*org1pN@I67eDf~8 zasvLNl4!SCc^b-UffzMIKpPXeu5uGBbVC7z*R|#s2F-q8RnS1Pb=56v++~~(QKZ=R z28YvyNMox>$<>TOck!pFH!q_|%@AulRWbn624dh{KC1FKv`dDJ&q0`}V!joW>;~Q0 zh*LfYC7la3E~}1xQX2@1u1(~to2n2gN3>aWlohNP!od=1018xjYpuqN;(>*{xa4|% zG6_e4rmZ%HD(cG_2v~|UmC%B!gQfMQjXH4Y+t2rxHwDH+hLR!s zm1Xl4R0RS_zvck_nfg3Cf{Ph0pRTHsdG2;&)2!XaH6P2yB*>n@NP7u$Ibo>^t~?>W zN%K*Q7#>o><3f(xEJ2~}I3vpTSp?AGl=)#b zvJu;L_M}p)!_&)NEokB=7&N~4yh-T~bXytFCKrmVwZ!VbgG9W&>}!9eJYG>nP`CPW zn+7pno>K`W!F=r7V54m_W%!n6q2H;iF9*wQLO~rLF=v zo|1i-g-0`y=V3V()2)>^t~WiEKgo{Oz{Q`{@wtLJcHzj4b`^X$a81Ybq()0^?4DYM znf3pa-ROOK*$QmaQpwSPTx)T~o)@CrSh(>FF9!gAj&@n~U59*VB@}Y(=qgdde1u#@ zLF1Bf;mujHT{rul-f9StM=U{JqX9%n^+!D%dd#|3L6v^hB~M1GENq(@JUWyu-j&lpv&DY>i9K#{M+wqP8a*28aVRMJ z+-`@yOthlmVH|s=NYzx)_=laJo)K7q|X# z4{xzABW1vSWUZtEp+F2j7pRnG=D?@7>FhrOVTzogtq z!JNNXaW^;MCS~SkYtB_IQmx#mENXlI=Xt}+O?L-XPv~dkaZ51E7@Rp)=O_S_5!)%B zpqgt}tR1}jYuMAZM-3-gO2LIMVcSQBoMxc@_Wb9VdrQv>W<9XWPw*#+*o|yS4U8mZ zKU#O@3gRE^5E3VCa?=wx@Tp?NG$4i83QVS$X&PGZ%&v#zF>5ENZ0gC=M7vw zGoU?mVq?*G;LV3O0`6dahBaqeyp$aLkDgvbt%5@ z#F0F)HO=U0TO4$H(+6c-vcY8W?;>3y!Sm)|)CR19?%m53eD3zgRh}ojDVMdU6_Yat ziB8*Z^+6kdd+YwX(PR3g&9kUFjeC3)dg;P}3pbw{_^A2@J?+jF;7&fh_5QqS$f0L- zy#&=)p@g1`e1t!5f1 zg}0Fc&fh6)DxFsNQ*i3N+;K4>;Lwcv^MXACh~}R&bZqs{k9u+JnqAltb*C zHM^CKwLL4i0eev(naxtPI}$7xT4uyKrN$mL-#IrPwf#o*Y)~jSWAB_-UN-66oOYMU zXjJz3`3dhcuP*3iVmXo_CV*+2tU%?c_4d2lkG(cMTu0_W(&hm)7IGx__5Qdl<3D%= z086RE=`#5a*f$A(-qbNj8GCRt#5N7cjz6nAu5P@8t8GRPcV2 zxA@uxQWwmI39}*QA2Efx2fnSnmw__@wymhws3%8Q$ID*J7+wV6v3RF9+q#Y}T$kqh zZNM6hoY)o}m4%B}k+>^Upl>B5KeYjOf_~iU+Pjet8R4v0Mb?v#p197wzBEkDrun|g z>gU^H`)2>tjPCppK2Pv9pi##c?n(Fd-Q?Qn^=UvHGv6;lKYe(8=A%(kS^;K)G_r6^ z^#gM6m`zl|!p*@UdsU z*3#J*KSu0y`~;G7las2SgxupMO9ekWKK|&uEgLADEmaq*`M@+nmVXIJr~%$OOZ{)1IuCL^Dc3Sbm0N=-=AG$}Pl9>HgpmL+evQ(Wrv zlAfow;TT-WcP(Y4?Rkb)=KIR6#4xBatZVj_N4ce8++@h+H(qBp1egIco9CHTF1hM1 z<%zpJaGJ%AY048Xv*Z=s89jD>Qf%wMH=Uz*EJGh%N`Bs{|IX6$@#W|n%H*G4_det& zyaqmp6`TqsH{)y3dsa9$wCvB41`7p{EGMOd0dm#X za`$O*B1m^0%e3Fg>!{tR=CgEXYIRJYT#RzsP{3Qys-4(Oe}I|-P6XJ#;y4xhNi}LA zB>+)3k17xeg{@yOP(d5O?pOchzqLwLYCGGvaM#GL3O*DNjb%@JGHSCrEh{StzQ8mL zhuG$k4N!r71M#4J?Ld=ng!qN-Z#LEyi1?b-u zoRw4?HJI5ddQ4oqX}|$*1FQbWm$NMZwu4`@leQDF3dYvPw>lx6hE^6^va6TEJO#ed zwMwIgsaz$U;pGE}Sc{+9O`H^*;CmG_UlbTxOg!B`{&i9H1=?-M{ zGXar#;2avSxvy5f%JP8T*5;+FE8*G&HC2j<3i|2l(%$_znS9~ATdqR?(@Mg{tx*!d z+)1_%x3=x!OYoKQhW;7y73I5`*vT?h2;4uwWQv|Hz!C$+(6VUs7V_F(=aW|VDilBf zHzxzaBH7+w$;mBZDK#q8B?(_CLTKK}OmC)y;}{GD$0&jJQ9k^2O9^HV9>L{t{LCK* zVe!<4GM86aEQH`wFK?SCtlWe0*+sTvQqw+%gh-o~nh*}0%iwV|U2VG8O6YpPGeeRl z^IVz&mIC<@mLM^pDo(CKW(0YWn;=s(vquF8yD+RVmg}B8t$&u{s-=?DC20ZTYU1Gm z+5xmReKvqjdX3O`KoRYhQqc<9x*^lu3cjvsG_;T1t2_N_Nv-L@dSaBWtvZbXxDg0< zb=W@vh{2~!uZPt~0A@hAe~TS=DFm80gl-=y#a{04@hx6W?J}2Imb&$Y9g_kB6t&Ix zkd)0N)2Ll)HD(zWiQyiGKF%bKT@>5N9_M)UbGI>p7R^-ac1`Xm2ADpTSP^mD_mR)85P{{hF{1e- zXT{G9kSX4L9E;+~<*gJ1q(FgNIdZhBWC=^1Fr?ZEJ}hn_`%>j4&9A<7o*uA_9pQ7Q z(cjOQq;W`f3?wxk@qK<6J~HL$mF*Kykto{pT)dx|N2H zqgjw=I~jQ%Ee&^-5!K_FG0sUWsM#$z7Ev#h*)O?vhC?|f_kGrl`3~owJcqaxK41zF zp@C=PS|$V|pxzAn&osGR`%^g8i@6b)?ACSj>z4$+(dXCArP*gfFuo=e+l?L(3$!@g zT@l#OwbN;nrLs*%0!WeTbd*#8x1ExT;U=+zIgItvT4vzuARO7Ul#-~nf2wmG!YZc+ zoCkkmGrpJ#v|OF3-OJbwabX+x#_%D93pab{q~&1^*6YKg$Ey1LZ1aOU`)BRC0+?Yhi_)DtRW4|x@bAm1l4W#yU* z%?@2A^gwYb-%sJPDn!Ah^L#=2PVu%?bgw~bC27l{-5XV3 zW=@wo6r+Kz8j0^0BGZ|Jw?6^LQE%aHdnMSU70O-JvX6)D%|>TNh^H;1ov|J#9tL0H zCF|(@1JaoGgZ@|ir3YU5>=&`smMDtMU2#;MhCARQ$Y@n(<*M9W|6?bt*m6qZhZ(car1 zO?QkC5P2r!(mp56>AwrZ^q@fCRo5-k<%McqVbG!7=|#P<1;jvK^2L?N26=o`#>ib# z?8$!Q6J^Y{{uPobBb9riFs&tv7ZZ&TP5gkfLnc>9r^*MwdVAJF4#ZeRKb~BC_T-jsQX`Z!RPtu_X zV0`sCdHd1+tMa=Ht&2HYev?o+Q8Plr4;aGFXzskmPVx51`u^x$Klay`U*WfDIz}Q# zmt;{IPq0xkwm(&&wGPo;c~)xLErQu}@q)ULggw^2`un#iU8Yo({Qhd@ROLm+k<7FQ zCFvpnm{vG*nXg8HG+o}XcJlNY23R$xMrMP*5~^86pyXro%u=C(4M%24Q99>Dl?YPQ z4n*>Gip#Tp8!~d?9SIUGf>xU}%r@y(3_7 zXm_5CWjx`6H;k=M&Y5_}*YyC^_V8;>_|RI3NZn| z)HyjM3pl|6&Ob5up^RGplD#ViRa}rMwL;qa&xYc5h-141z_O?F_}|OHsUv`7zf%st zxq<>_Diy5~`KL8Ic|s0irIp`|1Nu)Q1ZR2`Llr~C214R z`F>}*M_rh|#FgEd3Iv*34q82tk3Gk40|0V8cQ7FH?oa&M!#-=IJ5$sxVA@CQ=X?2~ zvHX&Vw=K%k9ED_l#CH*I8WK>Te}Cmp!1&GDQZ_ycvT78=;0jE1Z2K~jy7Ks$8988N ze0h4J0w=bz(Z-115A1%+Q8VkxH*qcxsjQu@$4vtfJ5UN{khaTU9u(j;p=3ccvP{X5 z$8R%DU5w@^iYS>Okkct(PZ4--EH5Jr+ZYRKtdy4%Ai=av7*j4z(j9{WwxEE097PEm z_iYYV*Q2sx{4(X-C>NfA=NE78ExMcQkG;NRoilkigGk{vyQlTL_%>)E4cPB?MCj^V|`-*8k{Ye>0r}+l~AQ=D-iF~*WWU`)j z+DOKI0(E@Sgk+2Hf6x~#EQnZ=*Fmt;V|=-+F9;zpfuCji(=d3U|j{ysW(cLB#GM+PBF-Vwru;JC_-Xq9EQT$^9@HkU~ z3ygn(E2Nn4zl?(}Nyz>F-t_mI35Unr!tpAVr&kw@x&EgXyC38?7v&J|rTgO{>>F=9 zK*W4y7W1C#fr)J{eLiUuf|b!sfnS;pGP!*Vmz|L~xh1cD%Xa;-fSNqH_t&!eubixR zF4lt?VS9{+6xR7OwrW3&x$^LG!Gk?PnTf!71_Q~T78FeS?A@EG!B+-Y5~eP4cHbLo z#>$laC$iY`fu+1thwqd?**o@tk^}G=0PybswN@^PrY-Law(NKDUl2avdGdqhQOV6d z{Q0dJrT(kwN3+QN(2%CQ6hCkYgh+nc#%DF=hw#o#bL4nnBZqhC34>3V%q(prST=fJ znJiyJ5Zpobxqwr@K^M==tS>n)DBb7k^FuFy@p|=H0Cv3)7dnG^v>D7h3Kk}VH+E&h z*F@d*oK0{*A*#0^gu^}hFsuKe$e&~X>T%nar&q$C_A~qVBN9fxBtL*KKQ=RlUz8&} z_hR{WdNbGAo&O^GLWWR**r8C#hF?B~vV*XXSfc)+xG54K4Y5xLuROae<*r%Ew_$dd zmvW6(Amq}{^-M@!`=-78f}?hwZ<`VAZ^63JoLfg9^BFFcZ6LZ`>m(snm(ZC-2wW|0 zh5-!ylO_*iLMcNo&*xlr9s_{a2zGKQGLx_^+a}%fiS%Jwrjr}UJH>S%Nal@bbxh?2 zZ3flnr*iamWb%P^Axc~uvpiN{@rrFdJ8kA@=B6FAR}(LO2R;2|lff(9nIGkn@g;NI z1hx^6YF*^7Z*R+d%!jr2jm!sL7c`al7x}74Xiwy4M{UmThu=*~jed_RNxfO1hsff$ zLHwaR0bnD><4@WQ;nMG{eAMNgY9V{+GyDGooUS+cYF3mu$srY|FB=xj^LZa z+y#i5Zxw7{2x-f zr<&Q(#WS|GF9|MV>3V*FYAAo(wHrzLX9Kk9cayXg?m=Gm<&~Mr5f1iL_VXo-$ebV6 z{<4Jl@*X?wR2PI$&*9UC@X%H>8^qBG{#t={Ut0$R%RY?|KfRe}cktCVbsGv|JK)9V zzZz9N0Pgs}cZ=c!A2L4^!hn(I!-7q1qI1`#K>gDh)lxhtZ=+4{6Ya= zMpx%;X0zmrDDd8UbochXd^RjB4}5kp|Dg_g6;3KTDcBw~JH8UVP%)+PeMZl|(iWKK z&iJb!{kLXfAz6Q}$qJv1^nO_UgFX8tT;;=u4A$hv+8kTv>@s~%5wIsiZy#A&DkTn; zFfH*$)WRcN_%)Xv-@eaU30eLX^C)^EYh@&3Wmvf}E9vyO_Ja@bZA))~jD#p8D`_cx zB^ahp^%^*zp5^ zVdj$3(9R{bH=opvv(W9zO2No(!to3up7dWN&2UxKlpWr^0AKc-R@@G75&Cg zc8e*vpmfR+nV7qxzkox@)N{HO;xr;Z(+_<+L9Ir{l7mh-Xmpuy;Yy&2$wPA1+Gtcc1Q zu9b{8MkPj0em=^_PqGWkO3*9Y(^y%GY>wYIwgS_9q@4lnjJ?l%2~*8_ISe9|Agq1- zq4|(r80SW)xnd1wbsn9h6agWv17MGw_FAD)D_=CsdZbwF!*!C1AjcY!`DQNcw_zCu zeA5~P*@c7TKL4779Vi1J`})v)-7TjW4K9R!%H!Ph$YWv*6innIJ)| z(Rg@(2ti`mQ09;L2rR>-AxoHr5xgXR|3W8bUFgHMzA4L;$$TtTxQWeEcnxCoYBmvn zmg#Zk&m69qe4QV4t*~#?=HB6pW?#qn1geq$NDQae~4D+9q^KM-l<`I=W zO!%Go0xuK&fp4ga=Q)K_e9%8>K{%YH$5rxwogs+L<_91sNqiHCIf6~lJ9^KHe^4zm z`yPMQm9TJQAHQD)#SZ7W07p;vrwJI}Gl6F!WKF;uI#9oDDmb%8F|*?%*ggoK-uUNC z$dCSzXXmWIgp;5KA7RaZoZkG?r7dNfH_Ep;xQaM)DH2sOcGh_gV_mo!fmb)8q^Lvq zYCCA3h`=L%28dDkXK+Fp+2GpxhW)R(CC)g(=N_A$hRF@oAzA~Z&?5IFYxUZj~Zlj@8KX*xz zPf+i~;WKw)G$o&f)#mCwkf6}o#F;>6b9co2%(v7C%O8CC zq|(gLEH!D%<(EMlNN|Y%$xhK7xY7pGv=qi(tEuP^VuK&VLENTYy1Fnm&Vy0bRJZc9 zXUGDWW@#zTNLlUb)_n37kRp&gT~@58)Rpl9OOEak?6YVSym8xVNA8x)eLkQ@M!uaV zfWcN|&K{)G3bVrhi=vKaE!!?o|NK-BR8lEyataC%c42vPMDcD{^b+x1!p8W~uEtZt z0I+r#*7~+ypOjXgpZrC8foihyFsRNvd>V?hN@dps`-Pm`A`y?11dNe4#~OIZ_e;8U z;i}}`ON?~Z2zF?YOl|p6Tm01Nh-0Ak9EG>_M;kd?n}p&2j(pvA{^r%J6mmezfFu#Ut|tS z29ZBFbrz3yN!~3oPm0nT?~~i&yi44=hmKu0z9um0wbZv5*>S!?zkZbxDdy@uA%*SuF0sWiS0n|xK`BSCZcaZY zWny%8`7V^Qzb+6Qu{8#KXlF98%GG%!3n9dRCnP&)1529}C1^D8r9O$>Ln_%k;3Bcv zcx1Gei+6H0C?BC_1R}7i=TJHT(K0O5B>-7jK!9do?bl54A7$O3)eo*4omEIOC;fc~bo$N_YKfDiC@;<~@D&-}^rkeJgA>z9pPE*4J+7-?DN0FIq ziS@8TXtdLDq!LBxSdy~m+Fvnk!`e8X!y9;#ZZTUK;gOuPZ=@Rc8YsuQXd*d2BmknYWTOmJOu7{5@Cjbqw$8S2NefXi1&UJi4PXbv{IpZ|h#Z>W0GUq8+?j|eky7z#p z9>Bb;c}H<%RcLC+ACTxZ(;P#kAprp!Rb03YpaIp|hkYdXuPZ3JNA^-{o?3%Yv3cEL zEnkv3Fb9_74dwwdR7m;SI;Pe2JWTFx3T7`JcEWI3qQS9}K#d~EUmBe-ig)P;FJ8wh zj+}sJ&+sMJWuJZ1B|;oiySE8f&A}A|68mC6R3N+Y%Ck+zHRF7r)3&vNs5H z$6xB+dX@ZEpPE?xlxuL3^m2F*o2QeSHF;mxFA*}a_1g8h?|2D$Tcb06W(xRUCHCP@ z2f#pV>Z5~*j)8X|kYtTV{3LsmmM)r3?XMM5+c^#KT(z~}HCU(Hd}vgZaH6{nc53|U zDqNl5+-~1U++w3IZG!@ue`0HM0kO8gI9mq)=yzk-f$S}SfV&6;^vqGNYNKw_SoMV_ zxzUR4?EGuRsvzup4`we1G|*0cm`CfeANb_7y{Xs&O{~&~j2?=8=Wcn#cE~}&{LGV6 z>hdq64W0z`mq1wcYhjiCoSy#jJ1N+)E~WJmUiSeq>y35yO1i3*j$a^i{^Ne)VVj+& zw<&rS>X{E;)z~{#eONZ8Z-h`ZKXX}F=N?%$`HgZR&Pkl2^r~>Fl>8&btiCp{ z;RI*+t-{h)_R|?Fx3s(Ni>zeX}X_fYAUJ2#z0%6$YrS^a}mw~=E@=104&vd9o* z8(Di|`G*&ojX$O{X?)B<3Y_-D*YZ_Kbr}~Ia9XMT?zcF`Kv%t@W?Ywd)8{Lz8s0Z*T%AwC41UFofD_Xtd3$Ar^V&Jb05D^=}i=pPwP zDcPGxXg^Rrn#FD^#ZGFfG%%U2!2*5Q5c$|HN#fS6gktAslTK}eO(E0Q1I($u5Cg1~7#%AbN{0k&Ebib}rc_BoSI1GH;taoPx3 zsK}*lR#jTdRNC4{b$MDq8`_aXBhD%TMsTgpR61m}#~EZQp9cLvEoTc~B%`W$i7k&nACc7cbvVQqPRrr5nBB5O^I z&Ox%!^DJ>;05e|fD8 z`aSKSJhaaU4eI~=^f;%m;!y>hzgZyk@K|&EXT`&dd8$uX&*q#yi?W&giUXd7PGVFT zWy5l>rkGtC6b!AVgZo!GP>iOP5ly^w#%^yWncA&?Z|fFxPSpNVH9mEn55?^d8CW_K zY*J0P$fSv0c^At$>qP`f>&ExGsL55Is7GMO6(&<6SE{Sm+-#DMma znuMzNKyHtF;)R_y`s$LnQ08G$+*j`_*$%kxf*+fBy`7eY=#O+3^6KX*J?4OYVE~3! zhha**AD)4XV)gkPoDKVaO2!Na74AS$OH7q<@Ch2~F)sn6Dx$TdY+cUt3w~G zFPDxyzd~33;@ZKdWyNJ2ptE5H&^OgyX)N~R3u1KJ%las%8`FBnO6R=8Kws>uLo*rB zzzCXvfRW2^3Awim6`A}?xA2FHejv0SZ17I$^C&JXD5QxgQM#W2svM=PH%%r5kfB9l z!f+)Q^)JNCRm6y29sn?5{reX+pKai&ZBTcPqK~rtu1!aT6QF%Uij<$Yi4JFf8jE#l z@SqK5+wqF7SF#@l(=nkg*mbnYNY^k75zqzrr?xlJ9G{E%7Ep2^P0Hb&hu>;6osfEA zC4|muY}V^~oa5pB3%z^m3l%r1EkT;>s{OGn0ygx(RYOI!rxVm^yAlD6l*QA zVI~MkVR`)!Mao7KAf}09*-cRt?{#Uo$Lli$z@*)9ydZP_Pk6>OEu3Q7T4OH88sID0RkKA)TrNVlCv~MvLMzKRB-d z!4;>1H^>5?-_M>HmL-BMGw(cNg9Uy7PLH#b8Oy0gWr)%|7Y85;J>Gs$|3mpVX71vSl!BY&bdgInb>E)hM4U21)%*WW5lhy5~*DCNTdB`@ZB>Wah*-V!y61Q;~$qh(v}Xssy}AwZGy zpx8Ni+Q~r4Oj_g`HX*UN+TuJyKw?CrO(KgI@XFLjN1<%J94Jt_p6++9E@F(|^v=@+ zLG^|^Q}#RaE_)pB%4I~8K^EGj~0yUC9n z@Ec?S>%Z+NemH7sFMjR9-f1!a+7`YofAG>D+Vbb|9rwkKdlF)5KF8(uuxzD(eDM|5 zRQ>p<#+MVp6RT5SjnMyGu#C#MO1DrMmBN~ zhsQ|vwAxyDiVg-^JPn#|3b}Fhc$@mD_Cb?#S&XML(OT}YZw|V}mW5|q9oY6QtBY2& z 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 W2!Hu<+B&FhBr*ALhbc@}{`)_%E84*T literal 0 HcmV?d00001 diff --git a/.zprezto/modules/prompt/external/async/README.md b/.zprezto/modules/prompt/external/async/README.md index 3f2b060..1541368 100644 --- a/.zprezto/modules/prompt/external/async/README.md +++ b/.zprezto/modules/prompt/external/async/README.md @@ -60,10 +60,18 @@ Simply stops a worker and all active jobs will be terminated immediately. Start a new asynchronous job on specified worker, assumes the worker is running. +#### `async_worker_eval []` + +Evaluate a command (like async_job) inside the async worker, then worker environment can be manipulated. For example, issuing a cd command will change the PWD of the worker which will then be inherited by all future async jobs. + +Output will be returned via callback, job name will be [async/eval]. + #### `async_process_results ` Get results from finished 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. +If the async process buffer becomes corrupt, the callback will be invoked with the first argument being `[async]` (job name), non-zero return code and fifth argument describing the error (stderr). + The `callback_function` is called with the following parameters: * `$1` job name, e.g. the function passed to async_job diff --git a/.zprezto/modules/prompt/external/async/async.zsh b/.zprezto/modules/prompt/external/async/async.zsh index 1257029..415da26 100644 --- a/.zprezto/modules/prompt/external/async/async.zsh +++ b/.zprezto/modules/prompt/external/async/async.zsh @@ -3,15 +3,26 @@ # # zsh-async # -# version: 1.6.2 +# version: 1.7.1 # author: Mathias Fredriksson # url: https://github.com/mafredri/zsh-async # -typeset -g ASYNC_VERSION=1.6.2 +typeset -g ASYNC_VERSION=1.7.1 # Produce debug output from zsh-async when set to 1. typeset -g ASYNC_DEBUG=${ASYNC_DEBUG:-0} +# Execute commands that can manipulate the environment inside the async worker. Return output via callback. +_async_eval() { + local ASYNC_JOB_NAME + # Rename job to _async_eval and redirect all eval output to cat running + # in _async_job. Here, stdout and stderr are not separated for + # simplicity, this could be improved in the future. + { + eval "$@" + } &> >(ASYNC_JOB_NAME=[async/eval] _async_job 'cat') +} + # Wrapper for jobs executed by the async worker, gives output in parseable format with execution time _async_job() { # Disable xtrace as it would mangle the output. @@ -26,6 +37,7 @@ _async_job() { # block, after the command block has completed, the stdin for `cat` is # closed, causing stderr to be appended with a $'\0' at the end to mark the # end of output from this job. + local jobname=${ASYNC_JOB_NAME:-$1} local stdout stderr ret tok { stdout=$(eval "$@") @@ -36,7 +48,7 @@ _async_job() { read -r -k 1 -p tok || exit 1 # Return output ( ). - print -r -n - ${(q)1} $ret ${(q)stdout} $duration + print -r -n - $'\0'${(q)jobname} $ret ${(q)stdout} $duration } 2> >(stderr=$(cat) && print -r -n - " "${(q)stderr}$'\0') # Unlock mutex by inserting a token. @@ -80,7 +92,7 @@ _async_worker() { unset $zsh_hook_functions # And hooks with registered functions. unset zsh_hooks zsh_hook_functions # Cleanup. - child_exit() { + close_idle_coproc() { local -a pids pids=(${${(v)jobstates##*:*:}%\=*}) @@ -90,6 +102,10 @@ _async_worker() { coproc : coproc_pid=0 fi + } + + child_exit() { + close_idle_coproc # On older version of zsh (pre 5.2) we notify the parent through a # SIGWINCH signal because `zpty` did not return a file descriptor (fd) @@ -132,7 +148,7 @@ _async_worker() { coproc_pid=0 # Reset pid. } - local request + local request do_eval=0 local -a cmd while :; do # Wait for jobs sent by async_job. @@ -147,8 +163,9 @@ _async_worker() { # Check for non-job commands sent to worker case $request in - _unset_trap) notify_parent=0; continue;; - _killjobs) killjobs; continue;; + _unset_trap) notify_parent=0; continue;; + _killjobs) killjobs; continue;; + _async_eval*) do_eval=1;; esac # Parse the request using shell parsing (z) to allow commands @@ -181,18 +198,34 @@ _async_worker() { print -n -p "t" fi - # Run job in background, completed jobs are printed to stdout. - _async_job $cmd & - # Store pid because zsh job manager is extremely unflexible (show jobname as non-unique '$job')... - storage[$job]="$!" + if (( do_eval )); then + shift cmd # Strip _async_eval from cmd. + _async_eval $cmd + else + # Run job in background, completed jobs are printed to stdout. + _async_job $cmd & + # Store pid because zsh job manager is extremely unflexible (show jobname as non-unique '$job')... + storage[$job]="$!" + fi processing=0 # Disable guard. + + if (( do_eval )); then + do_eval=0 + + # When there are no active jobs we can't rely on the CHLD trap to + # manage the coproc lifetime. + close_idle_coproc + fi 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. +# Get results from finished 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. +# +# If the async process buffer becomes corrupt, the callback will be invoked with the first argument being `[async]` (job +# name), non-zero return code and fifth argument describing the error (stderr). # # usage: # async_process_results @@ -245,13 +278,15 @@ async_process_results() { if (( $#items == 5 )); then items+=($has_next) $callback "${(@)items}" # Send all parsed items to the callback. + (( num_processed++ )) + elif [[ -z $items ]]; then + # Empty items occur between results due to double-null ($'\0\0') + # caused by commands being both pre and suffixed with null. else # In case of corrupt data, invoke callback with *async* as job # name, non-zero exit status and an error message on stderr. - $callback "async" 1 "" 0 "$0:$LINENO: error: bad format, got ${#items} items (${(q)items})" $has_next + $callback "[async]" 1 "" 0 "$0:$LINENO: error: bad format, got ${#items} items (${(q)items})" $has_next fi - - (( num_processed++ )) done done @@ -297,6 +332,30 @@ async_job() { zpty -w $worker "$cmd"$'\0' } +# +# Evaluate a command (like async_job) inside the async worker, then worker environment can be manipulated. For example, +# issuing a cd command will change the PWD of the worker which will then be inherited by all future async jobs. +# +# Output will be returned via callback, job name will be [async/eval]. +# +# usage: +# async_worker_eval [] +# +async_worker_eval() { + setopt localoptions noshwordsplit noksharrays noposixidentifiers noposixstrings + + local worker=$1; shift + + local -a cmd + cmd=("$@") + if (( $#cmd > 1 )); then + cmd=(${(q)cmd}) # Quote special characters in multi argument commands. + fi + + # Quote the cmd in case RC_EXPAND_PARAM is set. + zpty -w $worker "_async_eval $cmd"$'\0' +} + # This function traps notification signals and calls all registered callbacks _async_notify_trap() { setopt localoptions noshwordsplit diff --git a/.zprezto/modules/prompt/external/async/async_test.zsh b/.zprezto/modules/prompt/external/async/async_test.zsh index 0791fc7..17376b5 100644 --- a/.zprezto/modules/prompt/external/async/async_test.zsh +++ b/.zprezto/modules/prompt/external/async/async_test.zsh @@ -7,8 +7,8 @@ test__async_job_print_hi() { local line local -a out line=$(_async_job print hi) - # Remove trailing null, parse, unquote and interpret as array. - line=$line[1,$#line-1] + # Remove leading/trailing null, parse, unquote and interpret as array. + line=$line[2,$#line-1] out=("${(@Q)${(z)line}}") coproc exit @@ -396,8 +396,10 @@ test_async_flush_jobs() { # TODO: Confirm that they no longer exist in the process tree. local output output="${(Q)$(ASYNC_DEBUG=1 async_flush_jobs test)}" - [[ $output = *'print_four 0 4'* ]] || { - t_error "want discarded output 'print_four 0 4' when ASYNC_DEBUG=1, got ${(Vq-)output}" + # NOTE(mafredri): First 'p' in print_four is lost when null-prefixing + # _async_job output. + [[ $output = *'rint_four 0 4'* ]] || { + t_error "want discarded output 'rint_four 0 4' when ASYNC_DEBUG=1, got ${(Vq-)output}" } # Check that the killed job did not produce output. @@ -430,6 +432,35 @@ test_async_worker_survives_termination_of_other_worker() { (( $#result == 6 )) || t_error "wanted a result, got (${(@Vq)result})" } +test_async_worker_update_pwd() { + local -a result + local eval_out + cb() { + if [[ $1 == '[async/eval]' ]]; then + eval_out="$3" + else + result+=("$3") + fi + } + + async_start_worker test1 + t_defer async_stop_worker test1 + + async_job test1 'print $PWD' + async_worker_eval test1 'print -n foo; cd ..; print -n bar; print -n -u2 baz' + async_job test1 'print $PWD' + + start=$EPOCHREALTIME + while (( EPOCHREALTIME - start < 2.0 && $#result < 3 )); do + async_process_results test1 cb + done + + (( $#result == 2 )) || t_error "wanted 2 results, got ${#result}" + [[ $eval_out = foobarbaz ]] || t_error "wanted async_worker_eval to output foobarbaz, got ${(q)eval_out}" + [[ -n $result[2] ]] || t_error "wanted second pwd to be non-empty" + [[ $result[1] != $result[2] ]] || t_error "wanted worker to change pwd, was ${(q)result[1]}, got ${(q)result[2]}" +} + setopt_helper() { setopt localoptions $1 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/CHANGELOG.md b/.zprezto/modules/prompt/external/powerlevel9k/CHANGELOG.md index 02341f4..b40ce50 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/CHANGELOG.md +++ b/.zprezto/modules/prompt/external/powerlevel9k/CHANGELOG.md @@ -1,3 +1,21 @@ +## v0.6.6 + +- The `rbenv` segment is no longer a default segment in the LPROMPT. +- PR #959 - Fixing issue in v0.6.5 where we changed some color codes. +- PR #934 - Add Tests +- PR #884 - test-in-docker: fix with newer ZSH versions +- PR #928 - [Docs] Add etc state description in dir docs +- PR #937 - Use SUDO_COMMAND to check for sudo +- PR #925 - [Bugfix] Resolve #918 Transparent background +- PR #923 - Fix font issue debugging script +- PR #921 - Add missing colors to fix color comparison +- PR #951 - Add fallback icon for missing linux distro icons +- PR #956 - Fix broken link in readme +- Fixed #936 - fallback icons for Linux distros +- Fixed #926 - `etc` state for `dir` segment in docs +- Fixed #852 - `sudo` detection got crazy, there. sorry, everyone. +- Fixed #927 - more default color issues. + ## v0.6.5 - Multiple PRs: General fixes to README, improved documentation. diff --git a/.zprezto/modules/prompt/external/powerlevel9k/README.md b/.zprezto/modules/prompt/external/powerlevel9k/README.md index 90680ac..2b037bd 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/README.md +++ b/.zprezto/modules/prompt/external/powerlevel9k/README.md @@ -70,7 +70,7 @@ variables to your `~/.zshrc`. | Variable | Default Value | Description | |----------|---------------|-------------| -|`POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`|`(context dir rbenv vcs)`|Segment list for left prompt| +|`POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`|`(context dir vcs)`|Segment list for left prompt| |`POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`|`(status root_indicator background_jobs history time)`|Segment list for right prompt| @@ -78,7 +78,7 @@ The table above shows the default values, so if you wanted to set these variables manually, you would put the following in your `~/.zshrc`: ```zsh -POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) +POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir vcs) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time) ``` #### Available Prompt Segments @@ -357,13 +357,24 @@ end of the hostname. |`POWERLEVEL9K_ALWAYS_SHOW_USER`|false|Always show the username, but conditionalize the hostname.| |`POWERLEVEL9K_CONTEXT_TEMPLATE`|%n@%m|Default context prompt (username@machine). Refer to the [ZSH Documentation](http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html) for all possible expansions, including deeper host depths.| +This segment can have different states. They might help you to visualize your +different privileges. Read more about styling with states [here](https://github.com/bhilburn/powerlevel9k/wiki/Stylizing-Your-Prompt#special-segment-colors). + +| State | Meaning | +|---------------|----------------------------------------------------------| +| `DEFAULT` | You are a normal user | +| `ROOT` | You are the root user | +| `SUDO` | You are using elevated rights | +| `REMOTE_SUDO` | You are SSH'ed into the machine and have elevated rights | +| `REMOTE` | You are SSH'ed into the machine | + ##### date The `date` segment shows the current system date. | Variable | Default Value | Description | |----------|---------------|-------------| -|`POWERLEVEL9K_DATE_FORMAT`|`%D{%d.%m.%y}`|[ZSH time format](http://zsh.sourceforge.net/Doc/Release Prompt-Expansion.html) to use in this segment.| +|`POWERLEVEL9K_DATE_FORMAT`|`%D{%d.%m.%y}`|[ZSH time format](http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Date-and-time) to use in this segment.| ##### dir @@ -375,12 +386,14 @@ Powerline" fonts, there are additional glyphs, as well: | None | None | ![](https://cloud.githubusercontent.com/assets/1544760/12183451/40ec4016-b58f-11e5-9b9e-74e2b2f0b8b3.png) | At the root of your home folder | | None | None | ![](https://cloud.githubusercontent.com/assets/1544760/12369315/8a5d762c-bbf5-11e5-8a20-ca1179f48d6c.png) | Within a subfolder of your home directory | | None | None | ![](https://cloud.githubusercontent.com/assets/1544760/12183452/40f79286-b58f-11e5-9b8c-ed1343a07b08.png) | Outside of your home folder | +| None | None | ⚙ | Within the `/etc` directory | To turn off these icons you could set these variables to an empty string. ```zsh POWERLEVEL9K_HOME_ICON='' POWERLEVEL9K_HOME_SUB_ICON='' POWERLEVEL9K_FOLDER_ICON='' +POWERLEVEL9K_ETC_ICON='' ``` You can limit the output to a certain length by truncating long paths. Customizations available are: @@ -561,6 +574,19 @@ Variable | Default Value | Description | |----------|---------------|-------------| |`POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW`|`false`|Set to true if you wish to show the rbenv segment even if the current Ruby version is the same as the global Ruby version| +##### pyenv + +This segment shows the version of Python being used when using `pyenv` to change your current Python stack. + +The `PYENV_VERSION` environment variable will be used if specified. Otherwise it figures out the version being used by taking the output of the `pyenv version-name` command. + +* If `pyenv` is not in $PATH, nothing will be shown. +* If the current Python version is the same as the global Python version, nothing will be shown. + +| Variable | Default Value | Description | +|----------|---------------|-------------| +|`POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW`|`false`|Set to true if you wish to show the pyenv segment even if the current Python version is the same as the global Python version| + ##### rspec_stats See [Unit Test Ratios](#unit-test-ratios), below. diff --git a/.zprezto/modules/prompt/external/powerlevel9k/TESTS.md b/.zprezto/modules/prompt/external/powerlevel9k/TESTS.md index eb5db70..b57c4d6 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/TESTS.md +++ b/.zprezto/modules/prompt/external/powerlevel9k/TESTS.md @@ -1,25 +1,45 @@ -# Structure +# Tests -The Unit-Tests do not follow exactly the file structure of Powerlevel9k itself. +## Automated Tests -## Basic Tests +The Unit-Tests do not follow exactly the file structure of Powerlevel9k itself, +but we try to reflect the structure as much as possible. All tests are located +under `test/`. Segment specific tests under `test/segments/` (one file per +segment). -Basic Tests belong in `test/powerlevel9k.spec` if they test basic functionality of -Powerlevel9k itself. Basic functions from the `functions` directory have their -Tests in separate files under `test/functions`. +### Installation -## Segment Tests +In order to execute the tests you need to install `shunit2`, which is a +submodule. To install the submodule, you can execute +`git submodule init && git submodule update`. -These Tests tend to be more complex in setup than the basic tests. To avoid ending -up in a huge single file, there is one file per segment in `test/segments`. +### Executing tests -# Manual Testing +The tests are shell scripts on their own. So you can execute them right away. +To execute all tests you could just execute `./test/suite.spec`. + +### General Test Structure + +The tests usually have a `setUp()` function which is executed before every +test function. Speaking of, test functions must be prefixed with `test`. In +the tests, you can do [different Assertions](https://github.com/kward/shunit2#-asserts). +It is always a good idea to mock the program you want to test (just have a +look at other tests), so that the testrunner does not have to have all +programs installed. + +### Travis + +We use [Travis](https://travis-ci.org/) for Continuous Integration. This +service executes our tests after every push. For now, we need to tell travis +where to find the tests, which is what happens in the `.travis.yml` file. + +## Manual Testing If unit tests are not sufficient (e.g. you have an issue with your prompt that occurs only in a specific ZSH framework) then you can use either Docker or or our Vagrant. -## Docker +### Docker This is the easiest to use _if_ you have Docker already installed and running. @@ -42,7 +62,7 @@ You can get Docker at . **Note:** Not all frameworks work with all versions of ZSH (or the underlying OS). -## Vagrant +### Vagrant Currently there are two test VMs. `test-vm` is an Ubuntu machine with several pre-installed ZSH frameworks. And there is `test-bsd-vm` which is a FreeBSD! diff --git a/.zprezto/modules/prompt/external/powerlevel9k/debug/font-issues.zsh b/.zprezto/modules/prompt/external/powerlevel9k/debug/font-issues.zsh index 166a6ac..82f8e60 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/debug/font-issues.zsh +++ b/.zprezto/modules/prompt/external/powerlevel9k/debug/font-issues.zsh @@ -1,111 +1,236 @@ #!/usr/bin/env zsh #vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 +source functions/colors.zsh +source functions/icons.zsh +source functions/utilities.zsh +# Map our $OS to neofetch $os +os="$OS" + + +trim() { + set -f + # shellcheck disable=2048,2086 + set -- $* + printf '%s\n' "${*//[[:space:]]/}" + set +f +} + +get_ppid() { + # Get parent process ID of PID. + case "$os" in + "Windows") + ppid="$(ps -p "${1:-$PPID}" | awk '{printf $2}')" + ppid="${ppid/PPID}" + ;; + + "Linux") + ppid="$(grep -i -F "PPid:" "/proc/${1:-$PPID}/status")" + ppid="$(trim "${ppid/PPid:}")" + ;; + + *) + ppid="$(ps -p "${1:-$PPID}" -o ppid=)" + ;; + esac + + printf "%s" "$ppid" +} + +get_process_name() { + # Get PID name. + case "$os" in + "Windows") + name="$(ps -p "${1:-$PPID}" | awk '{printf $8}')" + name="${name/COMMAND}" + name="${name/*\/}" + ;; + + "Linux") + name="$(< "/proc/${1:-$PPID}/comm")" + ;; + + *) + name="$(ps -p "${1:-$PPID}" -o comm=)" + ;; + esac + + printf "%s" "$name" +} + # Taken from NeoFetch (slightly modified) get_term() { local term + # If function was run, stop here. - #((term_run == 1)) && return + # ((term_run == 1)) && return # Workaround for macOS systems that # don't support the block below. case "$TERM_PROGRAM" in - "iTerm.app") term="iTerm2" ;; + "iTerm.app") term="iTerm2" ;; "Terminal.app") term="Apple Terminal" ;; - "Hyper") term="HyperTerm" ;; - *) term="${TERM_PROGRAM/\.app}" ;; + "Hyper") term="HyperTerm" ;; + *) term="${TERM_PROGRAM/\.app}" ;; esac + # Most likely TosWin2 on FreeMiNT - quick check + [[ "$TERM" == "tw52" || "$TERM" == "tw100" ]] && \ + term="TosWin2" + + [[ "$SSH_CONNECTION" ]] && \ + term="$SSH_TTY" + # Check $PPID for terminal emulator. while [[ -z "$term" ]]; do parent="$(get_ppid "$parent")" + [[ -z "$parent" ]] && break name="$(get_process_name "$parent")" case "${name// }" in - "${SHELL/*\/}" | *"sh" | "tmux"* | "screen" | "su"*) ;; - "login"* | *"Login"* | "init" | "(init)") term="$(tty)" ;; - "ruby" | "1" | "systemd" | "sshd"* | "python"* | "USER"*"PID"*) break ;; + "${SHELL/*\/}"|*"sh"|"screen"|"su"*) ;; + + "login"*|*"Login"*|"init"|"(init)") + term="$(tty)" + ;; + + "ruby"|"1"|"tmux"*|"systemd"|"sshd"*|"python"*|"USER"*"PID"*|"kdeinit"*|"launchd"*) + break + ;; + "gnome-terminal-") term="gnome-terminal" ;; - *) term="${name##*/}" ;; + "urxvtd") term="urxvt" ;; + *"nvim") term="Neovim Terminal" ;; + *"NeoVimServer"*) term="VimR Terminal" ;; + *) term="${name##*/}" ;; esac done # Log that the function was run. - #term_run=1 + # term_run=1 echo "${term}" } get_term_font() { local term="${1}" - #((term_run != 1)) && get_term + # ((term_run != 1)) && get_term case "$term" in "alacritty"*) - term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${XDG_CONFIG_HOME}/alacritty/alacritty.yml")" + shopt -s nullglob + confs=({$XDG_CONFIG_HOME,$HOME}/{alacritty,}/{.,}alacritty.ym?) + shopt -u nullglob + + [[ -f "${confs[0]}" ]] || return + + term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${confs[0]}")" term_font="${term_font/*family:}" term_font="${term_font/$'\n'*}" term_font="${term_font/\#*}" ;; "Apple_Terminal") - term_font="$(osascript -e 'tell application "Terminal" to font name of window frontmost')" + term_font="$(osascript </dev/null | grep -c "Guid") - for idx in $(seq 0 "${profilesCount}"); do - local profileName=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Name:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null) - if [[ "${profileName}" == "${currentProfileName}" ]]; then + profiles_count="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:'" "$font_file" | \ + grep -w -c "Guid")" + + for ((i=0; i /etc/locale.gen +RUN locale-gen "en_US.UTF-8" + +COPY docker/fred-sudoers /etc/sudoers.d/fred + +USER fred +WORKDIR /home/fred +ENV LANG=en_US.UTF-8 +ENV TERM=xterm-256color +ENV DEFAULT_USER=fred +ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true + +RUN touch .zshrc + +CMD ["/bin/zsh", "-l"] diff --git a/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.4.2/Dockerfile b/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.4.2/Dockerfile new file mode 100644 index 0000000..8984c10 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.4.2/Dockerfile @@ -0,0 +1,35 @@ +FROM ubuntu:18.04 + +RUN \ + apt-get update && \ + echo 'golang-go golang-go/dashboard boolean false' | debconf-set-selections && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + curl \ + git \ + zsh=5.4.2-3ubuntu3 \ + mercurial \ + subversion \ + golang \ + jq \ + nodejs \ + ruby \ + python \ + python-virtualenv \ + sudo \ + locales + +RUN adduser --shell /bin/zsh --gecos 'fred' --disabled-password fred +RUN locale-gen "en_US.UTF-8" + +COPY docker/fred-sudoers /etc/sudoers.d/fred + +USER fred +WORKDIR /home/fred +ENV LANG=en_US.UTF-8 +ENV TERM=xterm-256color +ENV DEFAULT_USER=fred +ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true + +RUN touch .zshrc + +CMD ["/bin/zsh", "-l"] diff --git a/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.5.1/Dockerfile b/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.5.1/Dockerfile new file mode 100644 index 0000000..85fc570 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/docker/base-5.5.1/Dockerfile @@ -0,0 +1,35 @@ +FROM ubuntu:18.10 + +RUN \ + apt-get update && \ + echo 'golang-go golang-go/dashboard boolean false' | debconf-set-selections && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + curl \ + git \ + zsh=5.5.1-1ubuntu1 \ + mercurial \ + subversion \ + golang \ + jq \ + nodejs \ + ruby \ + python \ + python-virtualenv \ + sudo \ + locales + +RUN adduser --shell /bin/zsh --gecos 'fred' --disabled-password fred +RUN locale-gen "en_US.UTF-8" + +COPY docker/fred-sudoers /etc/sudoers.d/fred + +USER fred +WORKDIR /home/fred +ENV LANG=en_US.UTF-8 +ENV TERM=xterm-256color +ENV DEFAULT_USER=fred +ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true + +RUN touch .zshrc + +CMD ["/bin/zsh", "-l"] diff --git a/.zprezto/modules/prompt/external/powerlevel9k/docker/prezto/install.zsh b/.zprezto/modules/prompt/external/powerlevel9k/docker/prezto/install.zsh index 9cca57e..2b2e878 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/docker/prezto/install.zsh +++ b/.zprezto/modules/prompt/external/powerlevel9k/docker/prezto/install.zsh @@ -9,7 +9,7 @@ for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do ln -nsf "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" done -ln -s "${HOME}/p9k/powerlevel9k.zsh-theme" \ +ln -snf "${HOME}/p9k/powerlevel9k.zsh-theme" \ "${HOME}/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup" echo "zstyle ':prezto:module:prompt' theme 'powerlevel9k'" \ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/Dockerfile b/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/Dockerfile new file mode 100644 index 0000000..a51a306 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/Dockerfile @@ -0,0 +1,7 @@ +ARG base +FROM p9k:${base} + +COPY docker/zshing/install.zsh /tmp/ +RUN zsh /tmp/install.zsh + +COPY ./ p9k/ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/install.zsh b/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/install.zsh new file mode 100644 index 0000000..8f92699 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/docker/zshing/install.zsh @@ -0,0 +1,16 @@ +#!zsh + +# install zshing https://github.com/zakariaGatter/zshing +git clone https://github.com/zakariaGatter/zshing.git ~/.zshing/zshing + +# Link P9K in zshing directory +ln -nsf ~/p9k ~/.zshing/powerlevel9k + +{ + echo + echo 'ZSHING_PLUGINS=( + "bhilburn/powerlevel9k" + )' + echo + echo "source ~/.zshing/zshing/zshing.zsh" +} >> ~/.zshrc diff --git a/.zprezto/modules/prompt/external/powerlevel9k/functions/colors.zsh b/.zprezto/modules/prompt/external/powerlevel9k/functions/colors.zsh index e98bfd4..80abb6b 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/functions/colors.zsh +++ b/.zprezto/modules/prompt/external/powerlevel9k/functions/colors.zsh @@ -6,6 +6,270 @@ # https://github.com/bhilburn/powerlevel9k ################################################################ +typeset -gAh __P9K_COLORS +# https://jonasjacek.github.io/colors/ +# use color names by default to allow dark/light themes to adjust colors based on names +__P9K_COLORS=( + black 000 + red 001 + green 002 + yellow 003 + blue 004 + magenta 005 + cyan 006 + white 007 + grey 008 + maroon 009 + lime 010 + olive 011 + navy 012 + fuchsia 013 + purple 013 + aqua 014 + teal 014 + silver 015 + grey0 016 + navyblue 017 + darkblue 018 + blue3 019 + blue3 020 + blue1 021 + darkgreen 022 + deepskyblue4 023 + deepskyblue4 024 + deepskyblue4 025 + dodgerblue3 026 + dodgerblue2 027 + green4 028 + springgreen4 029 + turquoise4 030 + deepskyblue3 031 + deepskyblue3 032 + dodgerblue1 033 + green3 034 + springgreen3 035 + darkcyan 036 + lightseagreen 037 + deepskyblue2 038 + deepskyblue1 039 + green3 040 + springgreen3 041 + springgreen2 042 + cyan3 043 + darkturquoise 044 + turquoise2 045 + green1 046 + springgreen2 047 + springgreen1 048 + mediumspringgreen 049 + cyan2 050 + cyan1 051 + darkred 052 + deeppink4 053 + purple4 054 + purple4 055 + purple3 056 + blueviolet 057 + orange4 058 + grey37 059 + mediumpurple4 060 + slateblue3 061 + slateblue3 062 + royalblue1 063 + chartreuse4 064 + darkseagreen4 065 + paleturquoise4 066 + steelblue 067 + steelblue3 068 + cornflowerblue 069 + chartreuse3 070 + darkseagreen4 071 + cadetblue 072 + cadetblue 073 + skyblue3 074 + steelblue1 075 + chartreuse3 076 + palegreen3 077 + seagreen3 078 + aquamarine3 079 + mediumturquoise 080 + steelblue1 081 + chartreuse2 082 + seagreen2 083 + seagreen1 084 + seagreen1 085 + aquamarine1 086 + darkslategray2 087 + darkred 088 + deeppink4 089 + darkmagenta 090 + darkmagenta 091 + darkviolet 092 + purple 093 + orange4 094 + lightpink4 095 + plum4 096 + mediumpurple3 097 + mediumpurple3 098 + slateblue1 099 + yellow4 100 + wheat4 101 + grey53 102 + lightslategrey 103 + mediumpurple 104 + lightslateblue 105 + yellow4 106 + darkolivegreen3 107 + darkseagreen 108 + lightskyblue3 109 + lightskyblue3 110 + skyblue2 111 + chartreuse2 112 + darkolivegreen3 113 + palegreen3 114 + darkseagreen3 115 + darkslategray3 116 + skyblue1 117 + chartreuse1 118 + lightgreen 119 + lightgreen 120 + palegreen1 121 + aquamarine1 122 + darkslategray1 123 + red3 124 + deeppink4 125 + mediumvioletred 126 + magenta3 127 + darkviolet 128 + purple 129 + darkorange3 130 + indianred 131 + hotpink3 132 + mediumorchid3 133 + mediumorchid 134 + mediumpurple2 135 + darkgoldenrod 136 + lightsalmon3 137 + rosybrown 138 + grey63 139 + mediumpurple2 140 + mediumpurple1 141 + gold3 142 + darkkhaki 143 + navajowhite3 144 + grey69 145 + lightsteelblue3 146 + lightsteelblue 147 + yellow3 148 + darkolivegreen3 149 + darkseagreen3 150 + darkseagreen2 151 + lightcyan3 152 + lightskyblue1 153 + greenyellow 154 + darkolivegreen2 155 + palegreen1 156 + darkseagreen2 157 + darkseagreen1 158 + paleturquoise1 159 + red3 160 + deeppink3 161 + deeppink3 162 + magenta3 163 + magenta3 164 + magenta2 165 + darkorange3 166 + indianred 167 + hotpink3 168 + hotpink2 169 + orchid 170 + mediumorchid1 171 + orange3 172 + lightsalmon3 173 + lightpink3 174 + pink3 175 + plum3 176 + violet 177 + gold3 178 + lightgoldenrod3 179 + tan 180 + mistyrose3 181 + thistle3 182 + plum2 183 + yellow3 184 + khaki3 185 + lightgoldenrod2 186 + lightyellow3 187 + grey84 188 + lightsteelblue1 189 + yellow2 190 + darkolivegreen1 191 + darkolivegreen1 192 + darkseagreen1 193 + honeydew2 194 + lightcyan1 195 + red1 196 + deeppink2 197 + deeppink1 198 + deeppink1 199 + magenta2 200 + magenta1 201 + orangered1 202 + indianred1 203 + indianred1 204 + hotpink 205 + hotpink 206 + mediumorchid1 207 + darkorange 208 + salmon1 209 + lightcoral 210 + palevioletred1 211 + orchid2 212 + orchid1 213 + orange1 214 + sandybrown 215 + lightsalmon1 216 + lightpink1 217 + pink1 218 + plum1 219 + gold1 220 + lightgoldenrod2 221 + lightgoldenrod2 222 + navajowhite1 223 + mistyrose1 224 + thistle1 225 + yellow1 226 + lightgoldenrod1 227 + khaki1 228 + wheat1 229 + cornsilk1 230 + grey100 231 + grey3 232 + grey7 233 + grey11 234 + grey15 235 + grey19 236 + grey23 237 + grey27 238 + grey30 239 + grey35 240 + grey39 241 + grey42 242 + grey46 243 + grey50 244 + grey54 245 + grey58 246 + grey62 247 + grey66 248 + grey70 249 + grey74 250 + grey78 251 + grey82 252 + grey85 253 + grey89 254 + grey93 255 +) + function termColors() { if [[ $POWERLEVEL9K_IGNORE_TERM_COLORS == true ]]; then return @@ -28,339 +292,56 @@ function termColors() { # get the proper color code if it does not exist as a name. function getColor() { - # no need to check numerical values - if [[ "$1" = <-> ]]; then - if [[ "$1" = <8-15> ]]; then - 1=$(($1 - 8)) - fi - else - # named color added to parameter expansion print -P to test if the name exists in terminal - local named="%K{$1}" - # https://misc.flogisoft.com/bash/tip_colors_and_formatting - local default="$'\033'\[49m" - # http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html - local quoted=$(printf "%q" $(print -P "$named")) - if [[ $quoted = "$'\033'\[49m" && $1 != "black" ]]; then - # color not found, so try to get the code - 1=$(getColorCode $1) - fi + # If Color is not numerical, try to get the color code. + if [[ "$1" != <-> ]]; then + 1=$(getColorCode $1) fi echo -n "$1" } # empty paramenter resets (stops) background color function backgroundColor() { - if [[ -z $1 ]]; then - echo -n "%k" - else - echo -n "%K{$(getColor $1)}" - fi + echo -n "%K{$(getColor $1)}" } # empty paramenter resets (stops) foreground color function foregroundColor() { - if [[ -z $1 ]]; then - echo -n "%f" - else - echo -n "%F{$(getColor $1)}" - fi + echo -n "%F{$(getColor $1)}" } # Get numerical color codes. That way we translate ANSI codes # into ZSH-Style color codes. function getColorCode() { - # Check if given value is already numerical - if [[ "$1" = <-> ]]; then - # ANSI color codes distinguish between "foreground" - # and "background" colors. We don't need to do that, - # as ZSH uses a 256 color space anyway. - if [[ "$1" = <8-15> ]]; then - echo -n $(($1 - 8)) - else - echo -n "$1" - fi - else - typeset -A codes - # https://jonasjacek.github.io/colors/ - # use color names by default to allow dark/light themes to adjust colors based on names - codes[black]=000 - codes[maroon]=001 - codes[green]=002 - codes[olive]=003 - codes[navy]=004 - codes[purple]=005 - codes[teal]=006 - codes[silver]=007 - codes[grey]=008 - codes[red]=009 - codes[lime]=010 - codes[yellow]=011 - codes[blue]=012 - codes[fuchsia]=013 - codes[aqua]=014 - codes[white]=015 - codes[grey0]=016 - codes[navyblue]=017 - codes[darkblue]=018 - codes[blue3]=019 - codes[blue3]=020 - codes[blue1]=021 - codes[darkgreen]=022 - codes[deepskyblue4]=023 - codes[deepskyblue4]=024 - codes[deepskyblue4]=025 - codes[dodgerblue3]=026 - codes[dodgerblue2]=027 - codes[green4]=028 - codes[springgreen4]=029 - codes[turquoise4]=030 - codes[deepskyblue3]=031 - codes[deepskyblue3]=032 - codes[dodgerblue1]=033 - codes[green3]=034 - codes[springgreen3]=035 - codes[darkcyan]=036 - codes[lightseagreen]=037 - codes[deepskyblue2]=038 - codes[deepskyblue1]=039 - codes[green3]=040 - codes[springgreen3]=041 - codes[springgreen2]=042 - codes[cyan3]=043 - codes[darkturquoise]=044 - codes[turquoise2]=045 - codes[green1]=046 - codes[springgreen2]=047 - codes[springgreen1]=048 - codes[mediumspringgreen]=049 - codes[cyan2]=050 - codes[cyan1]=051 - codes[darkred]=052 - codes[deeppink4]=053 - codes[purple4]=054 - codes[purple4]=055 - codes[purple3]=056 - codes[blueviolet]=057 - codes[orange4]=058 - codes[grey37]=059 - codes[mediumpurple4]=060 - codes[slateblue3]=061 - codes[slateblue3]=062 - codes[royalblue1]=063 - codes[chartreuse4]=064 - codes[darkseagreen4]=065 - codes[paleturquoise4]=066 - codes[steelblue]=067 - codes[steelblue3]=068 - codes[cornflowerblue]=069 - codes[chartreuse3]=070 - codes[darkseagreen4]=071 - codes[cadetblue]=072 - codes[cadetblue]=073 - codes[skyblue3]=074 - codes[steelblue1]=075 - codes[chartreuse3]=076 - codes[palegreen3]=077 - codes[seagreen3]=078 - codes[aquamarine3]=079 - codes[mediumturquoise]=080 - codes[steelblue1]=081 - codes[chartreuse2]=082 - codes[seagreen2]=083 - codes[seagreen1]=084 - codes[seagreen1]=085 - codes[aquamarine1]=086 - codes[darkslategray2]=087 - codes[darkred]=088 - codes[deeppink4]=089 - codes[darkmagenta]=090 - codes[darkmagenta]=091 - codes[darkviolet]=092 - codes[purple]=093 - codes[orange4]=094 - codes[lightpink4]=095 - codes[plum4]=096 - codes[mediumpurple3]=097 - codes[mediumpurple3]=098 - codes[slateblue1]=099 - codes[yellow4]=100 - codes[wheat4]=101 - codes[grey53]=102 - codes[lightslategrey]=103 - codes[mediumpurple]=104 - codes[lightslateblue]=105 - codes[yellow4]=106 - codes[darkolivegreen3]=107 - codes[darkseagreen]=108 - codes[lightskyblue3]=109 - codes[lightskyblue3]=110 - codes[skyblue2]=111 - codes[chartreuse2]=112 - codes[darkolivegreen3]=113 - codes[palegreen3]=114 - codes[darkseagreen3]=115 - codes[darkslategray3]=116 - codes[skyblue1]=117 - codes[chartreuse1]=118 - codes[lightgreen]=119 - codes[lightgreen]=120 - codes[palegreen1]=121 - codes[aquamarine1]=122 - codes[darkslategray1]=123 - codes[red3]=124 - codes[deeppink4]=125 - codes[mediumvioletred]=126 - codes[magenta3]=127 - codes[darkviolet]=128 - codes[purple]=129 - codes[darkorange3]=130 - codes[indianred]=131 - codes[hotpink3]=132 - codes[mediumorchid3]=133 - codes[mediumorchid]=134 - codes[mediumpurple2]=135 - codes[darkgoldenrod]=136 - codes[lightsalmon3]=137 - codes[rosybrown]=138 - codes[grey63]=139 - codes[mediumpurple2]=140 - codes[mediumpurple1]=141 - codes[gold3]=142 - codes[darkkhaki]=143 - codes[navajowhite3]=144 - codes[grey69]=145 - codes[lightsteelblue3]=146 - codes[lightsteelblue]=147 - codes[yellow3]=148 - codes[darkolivegreen3]=149 - codes[darkseagreen3]=150 - codes[darkseagreen2]=151 - codes[lightcyan3]=152 - codes[lightskyblue1]=153 - codes[greenyellow]=154 - codes[darkolivegreen2]=155 - codes[palegreen1]=156 - codes[darkseagreen2]=157 - codes[darkseagreen1]=158 - codes[paleturquoise1]=159 - codes[red3]=160 - codes[deeppink3]=161 - codes[deeppink3]=162 - codes[magenta3]=163 - codes[magenta3]=164 - codes[magenta2]=165 - codes[darkorange3]=166 - codes[indianred]=167 - codes[hotpink3]=168 - codes[hotpink2]=169 - codes[orchid]=170 - codes[mediumorchid1]=171 - codes[orange3]=172 - codes[lightsalmon3]=173 - codes[lightpink3]=174 - codes[pink3]=175 - codes[plum3]=176 - codes[violet]=177 - codes[gold3]=178 - codes[lightgoldenrod3]=179 - codes[tan]=180 - codes[mistyrose3]=181 - codes[thistle3]=182 - codes[plum2]=183 - codes[yellow3]=184 - codes[khaki3]=185 - codes[lightgoldenrod2]=186 - codes[lightyellow3]=187 - codes[grey84]=188 - codes[lightsteelblue1]=189 - codes[yellow2]=190 - codes[darkolivegreen1]=191 - codes[darkolivegreen1]=192 - codes[darkseagreen1]=193 - codes[honeydew2]=194 - codes[lightcyan1]=195 - codes[red1]=196 - codes[deeppink2]=197 - codes[deeppink1]=198 - codes[deeppink1]=199 - codes[magenta2]=200 - codes[magenta1]=201 - codes[orangered1]=202 - codes[indianred1]=203 - codes[indianred1]=204 - codes[hotpink]=205 - codes[hotpink]=206 - codes[mediumorchid1]=207 - codes[darkorange]=208 - codes[salmon1]=209 - codes[lightcoral]=210 - codes[palevioletred1]=211 - codes[orchid2]=212 - codes[orchid1]=213 - codes[orange1]=214 - codes[sandybrown]=215 - codes[lightsalmon1]=216 - codes[lightpink1]=217 - codes[pink1]=218 - codes[plum1]=219 - codes[gold1]=220 - codes[lightgoldenrod2]=221 - codes[lightgoldenrod2]=222 - codes[navajowhite1]=223 - codes[mistyrose1]=224 - codes[thistle1]=225 - codes[yellow1]=226 - codes[lightgoldenrod1]=227 - codes[khaki1]=228 - codes[wheat1]=229 - codes[cornsilk1]=230 - codes[grey100]=231 - codes[grey3]=232 - codes[grey7]=233 - codes[grey11]=234 - codes[grey15]=235 - codes[grey19]=236 - codes[grey23]=237 - codes[grey27]=238 - codes[grey30]=239 - codes[grey35]=240 - codes[grey39]=241 - codes[grey42]=242 - codes[grey46]=243 - codes[grey50]=244 - codes[grey54]=245 - codes[grey58]=246 - codes[grey62]=247 - codes[grey66]=248 - codes[grey70]=249 - codes[grey74]=250 - codes[grey78]=251 - codes[grey82]=252 - codes[grey85]=253 - codes[grey89]=254 - codes[grey93]=255 + # Early exit: Check if given value is already numerical + if [[ "$1" == <-> ]]; then + # Pad color with zeroes + echo -n "${(l:3::0:)1}" + return + fi - # for testing purposes in terminal - if [[ "$1" == "foreground" ]]; then - # call via `getColorCode foreground` - for i in "${(k@)codes}"; do - print -P "$(foregroundColor $i)$(getColor $i) - $i$(foregroundColor)" - done - elif [[ "$1" == "background" ]]; then - # call via `getColorCode background` - for i in "${(k@)codes}"; do - print -P "$(backgroundColor $i)$(getColor $i) - $i$(backgroundColor)" - done - else - #[[ -n "$1" ]] bg="%K{$1}" || bg="%k" - # Strip eventual "bg-" prefixes - 1=${1#bg-} - # Strip eventual "fg-" prefixes - 1=${1#fg-} - # Strip eventual "br" prefixes ("bright" colors) - 1=${1#br} - echo -n $codes[$1] - fi + local colorName="${1}" + # Check if value is none with any case. + if [[ "${(L)colorName}" == "none" ]]; then + echo -n 'none' + elif [[ "${colorName}" == "foreground" ]]; then + # for testing purposes in terminal + # call via `getColorCode foreground` + for i in "${(k@)__P9K_COLORS}"; do + print -P "$(foregroundColor $i)$(getColor $i) - $i%f" + done + elif [[ "${colorName}" == "background" ]]; then + # call via `getColorCode background` + for i in "${(k@)__P9K_COLORS}"; do + print -P "$(backgroundColor $i)$(getColor $i) - $i%k" + done + else + # Strip eventual "bg-" prefixes + colorName=${colorName#bg-} + # Strip eventual "fg-" prefixes + colorName=${colorName#fg-} + # Strip eventual "br" prefixes ("bright" colors) + colorName=${colorName#br} + echo -n $__P9K_COLORS[$colorName] fi } diff --git a/.zprezto/modules/prompt/external/powerlevel9k/functions/icons.zsh b/.zprezto/modules/prompt/external/powerlevel9k/functions/icons.zsh index 358f958..d8661e6 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/functions/icons.zsh +++ b/.zprezto/modules/prompt/external/powerlevel9k/functions/icons.zsh @@ -48,24 +48,24 @@ case $POWERLEVEL9K_MODE in FREEBSD_ICON $'\U1F608 ' # 😈 ANDROID_ICON $'\uE270' #  LINUX_ICON $'\uE271' #  - LINUX_ARCH_ICON 'Arc' - LINUX_DEBIAN_ICON 'Deb' - LINUX_UBUNTU_ICON 'Ubu' - LINUX_CENTOS_ICON 'Cen' - LINUX_COREOS_ICON 'Cor' - LINUX_ELEMENTARY_ICON 'Elm' - LINUX_MINT_ICON 'LMi' - LINUX_FEDORA_ICON 'Fed' - LINUX_GENTOO_ICON 'Gen' - LINUX_MAGEIA_ICON 'Mag' - LINUX_NIXOS_ICON 'Nix' - LINUX_MANJARO_ICON 'Man' - LINUX_DEVUAN_ICON 'Dev' - LINUX_ALPINE_ICON 'Alp' - LINUX_AOSC_ICON 'Aos' - LINUX_OPENSUSE_ICON 'OSu' - LINUX_SABAYON_ICON 'Sab' - LINUX_SLACKWARE_ICON 'Sla' + LINUX_ARCH_ICON $'\uE271' #  + LINUX_DEBIAN_ICON $'\uE271' #  + LINUX_UBUNTU_ICON $'\uE271' #  + LINUX_CENTOS_ICON $'\uE271' #  + LINUX_COREOS_ICON $'\uE271' #  + LINUX_ELEMENTARY_ICON $'\uE271' #  + LINUX_MINT_ICON $'\uE271' #  + LINUX_FEDORA_ICON $'\uE271' #  + LINUX_GENTOO_ICON $'\uE271' #  + LINUX_MAGEIA_ICON $'\uE271' #  + LINUX_NIXOS_ICON $'\uE271' #  + LINUX_MANJARO_ICON $'\uE271' #  + LINUX_DEVUAN_ICON $'\uE271' #  + LINUX_ALPINE_ICON $'\uE271' #  + LINUX_AOSC_ICON $'\uE271' #  + LINUX_OPENSUSE_ICON $'\uE271' #  + LINUX_SABAYON_ICON $'\uE271' #  + LINUX_SLACKWARE_ICON $'\uE271' #  SUNOS_ICON $'\U1F31E ' # 🌞 HOME_ICON $'\uE12C' #  HOME_SUB_ICON $'\uE18D' #  @@ -148,24 +148,24 @@ case $POWERLEVEL9K_MODE in FREEBSD_ICON $'\U1F608 ' # 😈 ANDROID_ICON $'\uE17B' #  LINUX_ICON $'\uF17C' #  - LINUX_ARCH_ICON 'Arc' - LINUX_DEBIAN_ICON 'Deb' - LINUX_UBUNTU_ICON 'Ubu' - LINUX_CENTOS_ICON 'Cen' - LINUX_COREOS_ICON 'Cor' - LINUX_ELEMENTARY_ICON 'Elm' - LINUX_MINT_ICON 'LMi' - LINUX_FEDORA_ICON 'Fed' - LINUX_GENTOO_ICON 'Gen' - LINUX_MAGEIA_ICON 'Mag' - LINUX_NIXOS_ICON 'Nix' - LINUX_MANJARO_ICON 'Man' - LINUX_DEVUAN_ICON 'Dev' - LINUX_ALPINE_ICON 'Alp' - LINUX_AOSC_ICON 'Aos' - LINUX_OPENSUSE_ICON 'OSu' - LINUX_SABAYON_ICON 'Sab' - LINUX_SLACKWARE_ICON 'Sla' + LINUX_ARCH_ICON $'\uF17C' #  + LINUX_DEBIAN_ICON $'\uF17C' #  + LINUX_UBUNTU_ICON $'\uF17C' #  + LINUX_CENTOS_ICON $'\uF17C' #  + LINUX_COREOS_ICON $'\uF17C' #  + LINUX_ELEMENTARY_ICON $'\uF17C' #  + LINUX_MINT_ICON $'\uF17C' #  + LINUX_FEDORA_ICON $'\uF17C' #  + LINUX_GENTOO_ICON $'\uF17C' #  + LINUX_MAGEIA_ICON $'\uF17C' #  + LINUX_NIXOS_ICON $'\uF17C' #  + LINUX_MANJARO_ICON $'\uF17C' #  + LINUX_DEVUAN_ICON $'\uF17C' #  + LINUX_ALPINE_ICON $'\uF17C' #  + LINUX_AOSC_ICON $'\uF17C' #  + LINUX_OPENSUSE_ICON $'\uF17C' #  + LINUX_SABAYON_ICON $'\uF17C' #  + LINUX_SLACKWARE_ICON $'\uF17C' #  SUNOS_ICON $'\uF185 ' #  HOME_ICON $'\uF015' #  HOME_SUB_ICON $'\uF07C' #  @@ -250,24 +250,24 @@ case $POWERLEVEL9K_MODE in APPLE_ICON '\u'$CODEPOINT_OF_AWESOME_APPLE #  FREEBSD_ICON $'\U1F608 ' # 😈 LINUX_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  - LINUX_ARCH_ICON 'Arc' - LINUX_DEBIAN_ICON 'Deb' - LINUX_UBUNTU_ICON 'Ubu' - LINUX_CENTOS_ICON 'Cen' - LINUX_COREOS_ICON 'Cor' - LINUX_ELEMENTARY_ICON 'Elm' - LINUX_MINT_ICON 'LMi' - LINUX_FEDORA_ICON 'Fed' - LINUX_GENTOO_ICON 'Gen' - LINUX_MAGEIA_ICON 'Mag' - LINUX_NIXOS_ICON 'Nix' - LINUX_MANJARO_ICON 'Man' - LINUX_DEVUAN_ICON 'Dev' - LINUX_ALPINE_ICON 'Alp' - LINUX_AOSC_ICON 'Aos' - LINUX_OPENSUSE_ICON 'OSu' - LINUX_SABAYON_ICON 'Sab' - LINUX_SLACKWARE_ICON 'Sla' + LINUX_ARCH_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_DEBIAN_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_UBUNTU_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_CENTOS_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_COREOS_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_ELEMENTARY_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_MINT_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_FEDORA_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_GENTOO_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_MAGEIA_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_NIXOS_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_MANJARO_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_DEVUAN_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_ALPINE_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_AOSC_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_OPENSUSE_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_SABAYON_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  + LINUX_SLACKWARE_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX #  SUNOS_ICON '\u'$CODEPOINT_OF_AWESOME_SUN_O' ' #  HOME_ICON '\u'$CODEPOINT_OF_AWESOME_HOME #  HOME_SUB_ICON '\u'$CODEPOINT_OF_AWESOME_FOLDER_OPEN #  diff --git a/.zprezto/modules/prompt/external/powerlevel9k/functions/utilities.zsh b/.zprezto/modules/prompt/external/powerlevel9k/functions/utilities.zsh index 69fd2ec..127007f 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/functions/utilities.zsh +++ b/.zprezto/modules/prompt/external/powerlevel9k/functions/utilities.zsh @@ -9,9 +9,7 @@ # Exits with 0 if a variable has been previously defined (even if empty) # Takes the name of a variable that should be checked. function defined() { - local varname="$1" - - typeset -p "$varname" > /dev/null 2>&1 + [[ ! -z "${(tP)1}" ]] } # Given the name of a variable and a default value, sets the variable diff --git a/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme b/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme index c1ea754..3c3303f 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme +++ b/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme @@ -111,45 +111,54 @@ CURRENT_BG='NONE' set_default last_left_element_index 1 set_default POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS " " left_prompt_segment() { + local segment_name="${1}" local current_index=$2 # Check if the segment should be joined with the previous one local joined segmentShouldBeJoined $current_index $last_left_element_index "$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS" && joined=true || joined=false + # Colors + local backgroundColor="${3}" + local foregroundColor="${4}" + # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND + local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)${segment_name}#prompt_}_BACKGROUND local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" + [[ -n $BG_COLOR_MODIFIER ]] && backgroundColor="$BG_COLOR_MODIFIER" # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND + local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)${segment_name}#prompt_}_FOREGROUND local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" + [[ -n $FG_COLOR_MODIFIER ]] && foregroundColor="$FG_COLOR_MODIFIER" - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" + # Get color codes here to save some calls later on + backgroundColor="$(getColorCode ${backgroundColor})" + foregroundColor="$(getColorCode ${foregroundColor})" - if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$3" "$CURRENT_BG"; then - echo -n "$bg%F{$CURRENT_BG}" + local background foreground + [[ -n "${backgroundColor}" ]] && background="$(backgroundColor ${backgroundColor})" || background="%k" + [[ -n "${foregroundColor}" ]] && foreground="$(foregroundColor ${foregroundColor})" || foreground="%f" + + if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "${backgroundColor}" "$CURRENT_BG"; then + echo -n "${background}%F{$CURRENT_BG}" if [[ $joined == false ]]; then # Middle segment echo -n "$(print_icon 'LEFT_SEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" fi - elif isSameColor "$CURRENT_BG" "$3"; then + elif isSameColor "$CURRENT_BG" "${backgroundColor}"; then # Middle segment with same color as previous segment # We take the current foreground color as color for our # subsegment (or the default color). This should have # enough contrast. local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" - echo -n "${bg}${complement}" + [[ -n "${foregroundColor}" ]] && complement="${foreground}" || complement="$(foregroundColor $DEFAULT_COLOR)" + echo -n "${background}${complement}" if [[ $joined == false ]]; then echo -n "$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" fi else # First segment - echo -n "${bg}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" + echo -n "${background}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" fi local visual_identifier @@ -161,26 +170,26 @@ left_prompt_segment() { # we need to color both the visual identifier and the whitespace. [[ -n "$5" ]] && visual_identifier="$visual_identifier " # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" + local visual_identifier_color_variable=POWERLEVEL9K_${(U)${segment_name}#prompt_}_VISUAL_IDENTIFIER_COLOR + set_default $visual_identifier_color_variable "${foregroundColor}" + visual_identifier="$(foregroundColor ${(P)visual_identifier_color_variable})${visual_identifier}%f" fi fi # Print the visual identifier echo -n "${visual_identifier}" # Print the content of the segment, if there is any - [[ -n "$5" ]] && echo -n "${fg}${5}" + [[ -n "$5" ]] && echo -n "${foreground}${5}" echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS}" - CURRENT_BG=$3 + CURRENT_BG="${backgroundColor}" last_left_element_index=$current_index } # End the left prompt, closes the final segment. left_prompt_end() { if [[ -n $CURRENT_BG ]]; then - echo -n "%k%F{$CURRENT_BG}$(print_icon 'LEFT_SEGMENT_SEPARATOR')" + echo -n "%k$(foregroundColor ${CURRENT_BG})$(print_icon 'LEFT_SEGMENT_SEPARATOR')" else echo -n "%k" fi @@ -203,25 +212,34 @@ CURRENT_RIGHT_BG='NONE' set_default last_right_element_index 1 set_default POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS " " right_prompt_segment() { + local segment_name="${1}" local current_index=$2 # Check if the segment should be joined with the previous one local joined segmentShouldBeJoined $current_index $last_right_element_index "$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS" && joined=true || joined=false + # Colors + local backgroundColor="${3}" + local foregroundColor="${4}" + # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND + local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)${segment_name}#prompt_}_BACKGROUND local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" + [[ -n $BG_COLOR_MODIFIER ]] && backgroundColor="$BG_COLOR_MODIFIER" # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND + local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)${segment_name}#prompt_}_FOREGROUND local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" + [[ -n $FG_COLOR_MODIFIER ]] && foregroundColor="$FG_COLOR_MODIFIER" - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" + # Get color codes here to save some calls later on + backgroundColor="$(getColorCode ${backgroundColor})" + foregroundColor="$(getColorCode ${foregroundColor})" + + local background foreground + [[ -n "${backgroundColor}" ]] && background="$(backgroundColor ${backgroundColor})" || background="%k" + [[ -n "${foregroundColor}" ]] && foreground="$(foregroundColor ${foregroundColor})" || foreground="%f" # If CURRENT_RIGHT_BG is "NONE", we are the first right segment. @@ -231,17 +249,17 @@ right_prompt_segment() { fi if [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]]; then - if isSameColor "$CURRENT_RIGHT_BG" "$3"; then + if isSameColor "$CURRENT_RIGHT_BG" "${backgroundColor}"; then # Middle segment with same color as previous segment # We take the current foreground color as color for our # subsegment (or the default color). This should have # enough contrast. local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" + [[ -n "${foregroundColor}" ]] && complement="${foreground}" || complement="$(foregroundColor $DEFAULT_COLOR)" echo -n "$complement$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f" else - # Use the new BG color for the foreground with separator - echo -n "$(foregroundColor $3)$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f" + # Use the new Background Color as the foreground of the segment separator + echo -n "$(foregroundColor ${backgroundColor})$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f" fi fi @@ -254,13 +272,13 @@ right_prompt_segment() { # we need to color both the visual identifier and the whitespace. [[ -n "$5" ]] && visual_identifier=" $visual_identifier" # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" + local visual_identifier_color_variable=POWERLEVEL9K_${(U)${segment_name}#prompt_}_VISUAL_IDENTIFIER_COLOR + set_default $visual_identifier_color_variable "${foregroundColor}" + visual_identifier="$(foregroundColor ${(P)visual_identifier_color_variable})${visual_identifier}%f" fi fi - echo -n "${bg}${fg}" + echo -n "${background}${foreground}" # Print whitespace only if segment is not joined or first right segment [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]] && echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS}" @@ -270,7 +288,7 @@ right_prompt_segment() { # Print the visual identifier echo -n "${visual_identifier}" - CURRENT_RIGHT_BG=$3 + CURRENT_RIGHT_BG="${backgroundColor}" last_right_element_index=$current_index } @@ -278,11 +296,6 @@ right_prompt_segment() { # Prompt Segment Definitions ################################################################ -# The `CURRENT_BG` variable is used to remember what the last BG color used was -# when building the left-hand prompt. Because the RPROMPT is created from -# right-left but reads the opposite, this isn't necessary for the other side. -CURRENT_BG='NONE' - ################################################################ # Anaconda Environment prompt_anaconda() { @@ -409,12 +422,13 @@ prompt_battery() { 'charged' 'green' 'disconnected' "$DEFAULT_COLOR_INVERTED" ) + local ROOT_PREFIX="${4}" # Set default values if the user did not configure them set_default POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 - if [[ $OS =~ OSX && -f /usr/bin/pmset && -x /usr/bin/pmset ]]; then + if [[ $OS =~ OSX && -f "${ROOT_PREFIX}"/usr/bin/pmset && -x "${ROOT_PREFIX}"/usr/bin/pmset ]]; then # obtain battery information from system - local raw_data="$(pmset -g batt | awk 'FNR==2{print}')" + local raw_data="$(${ROOT_PREFIX}/usr/bin/pmset -g batt | awk 'FNR==2{print}')" # return if there is no battery on system [[ -z $(echo $raw_data | grep "InternalBattery") ]] && return @@ -446,7 +460,7 @@ prompt_battery() { fi if [[ "$OS" == 'Linux' ]] || [[ "$OS" == 'Android' ]]; then - local sysp="/sys/class/power_supply" + local sysp="${ROOT_PREFIX}/sys/class/power_supply" # Reported BAT0 or BAT1 depending on kernel version [[ -a $sysp/BAT0 ]] && local bat=$sysp/BAT0 @@ -468,8 +482,8 @@ prompt_battery() { [[ $bat_percent =~ 100 ]] && current_state="charged" [[ $bat_percent -lt 100 ]] && current_state="charging" fi - if [[ -f /usr/bin/acpi ]]; then - local time_remaining=$(acpi | awk '{ print $5 }') + if [[ -f ${ROOT_PREFIX}/usr/bin/acpi ]]; then + local time_remaining=$(${ROOT_PREFIX}/usr/bin/acpi | awk '{ print $5 }') if [[ $time_remaining =~ rate ]]; then local tstring="..." elif [[ $time_remaining =~ "[[:digit:]]+" ]]; then @@ -498,7 +512,7 @@ prompt_battery() { fi fi # return if POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD is set and the battery percentage is greater or equal - if [[ -v "POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD" && "${bat_percent}" -ge $POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD ]]; then + if defined POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD && [[ "${bat_percent}" -ge $POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD ]]; then return fi @@ -623,12 +637,12 @@ prompt_context() { if [[ $(print -P "%#") == '#' ]]; then current_state="ROOT" elif [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then - if sudo -n true 2>/dev/null; then + if [[ -n "$SUDO_COMMAND" ]]; then current_state="REMOTE_SUDO" else current_state="REMOTE" fi - elif sudo -n true 2>/dev/null; then + elif [[ -n "$SUDO_COMMAND" ]]; then current_state="SUDO" fi @@ -651,7 +665,7 @@ prompt_user() { "FOREGROUND_COLOR" "yellow" "VISUAL_IDENTIFIER" "ROOT_ICON" ) - elif sudo -n true 2>/dev/null; then + elif [[ -n "$SUDO_COMMAND" ]]; then user_state=( "STATE" "SUDO" "CONTENT" "${POWERLEVEL9K_USER_TEMPLATE}" @@ -702,11 +716,13 @@ prompt_host() { # The 'custom` prompt provides a way for users to invoke commands and display # the output in a segment. prompt_custom() { - local command=POWERLEVEL9K_CUSTOM_$3:u + local segment_name="${3:u}" + # Get content of custom segment + local command="POWERLEVEL9K_CUSTOM_${segment_name}" local segment_content="$(eval ${(P)command})" if [[ -n $segment_content ]]; then - "$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" + "$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" "CUSTOM_${segment_name}_ICON" fi } @@ -744,6 +760,31 @@ prompt_command_execution_time() { fi } +################################################################ +# Determine the unique path - this is needed for the +# truncate_to_unique strategy. +# +function getUniqueFolder() { + local trunc_path directory test_dir test_dir_length + local -a matching + local -a paths + local cur_path='/' + paths=(${(s:/:)1}) + for directory in ${paths[@]}; do + test_dir='' + for (( i=0; i < ${#directory}; i++ )); do + test_dir+="${directory:$i:1}" + matching=("$cur_path"/"$test_dir"*/) + if [[ ${#matching[@]} -eq 1 ]]; then + break + fi + done + trunc_path+="$test_dir/" + cur_path+="$directory/" + done + echo "${trunc_path: : -1}" +} + ################################################################ # Dir: current working directory # Parameters: @@ -811,23 +852,10 @@ prompt_dir() { # for each parent path component find the shortest unique beginning # characters sequence. Source: https://stackoverflow.com/a/45336078 if (( ${#current_path} > 1 )); then # root and home are exceptions and won't have paths - local matching - local cur_path='/' - [[ $current_path != "~"* ]] && trunc_path='/' || trunc_path='' - for directory in ${paths[@]}; do - test_dir='' - for (( i=0; i<${#directory}; i++ )); do - test_dir+="${directory:$i:1}" - matching=("$cur_path"/"$test_dir"*/) - if [[ ${#matching[@]} -eq 1 ]]; then - break - fi - done - trunc_path+="$test_dir/" - cur_path+="$directory/" - done - [[ $current_path == "~"* ]] && trunc_path="~/$trunc_path" - current_path="${trunc_path: : -1}" + # cheating here to retain ~ as home folder + local home_path="$(getUniqueFolder $HOME)" + trunc_path="$(getUniqueFolder $PWD)" + [[ $current_path == "~"* ]] && current_path="~${trunc_path//${home_path}/}" || current_path="/${trunc_path}" fi ;; truncate_with_folder_marker) @@ -1043,18 +1071,14 @@ prompt_history() { ################################################################ # Detection for virtualization (systemd based systems only) prompt_detect_virt() { - if ! command -v systemd-detect-virt > /dev/null; then - return - fi - local virt=$(systemd-detect-virt) + local virt=$(systemd-detect-virt 2> /dev/null) if [[ "$virt" == "none" ]]; then if [[ "$(ls -di / | grep -o 2)" != "2" ]]; then virt="chroot" - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" - else - ; fi - else + fi + + if [[ -n "${virt}" ]]; then "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" fi } @@ -1089,18 +1113,20 @@ prompt_ip() { else if defined POWERLEVEL9K_IP_INTERFACE; then # Get the IP address of the specified interface. - ip=$(ip -4 a show "$POWERLEVEL9K_IP_INTERFACE" | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*") + ip=$(ip -4 a show "$POWERLEVEL9K_IP_INTERFACE" | grep -o "inet\s*[0-9.]*" | grep -o -E "[0-9.]+") else local interfaces callback # Get all network interface names that are up - interfaces=$(ip link ls up | grep -o -E ":\s+[a-z0-9]+:" | grep -v "lo" | grep -o "[a-z0-9]*") - callback='ip -4 a show $item | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*"' + interfaces=$(ip link ls up | grep -o -E ":\s+[a-z0-9]+:" | grep -v "lo" | grep -o -E "[a-z0-9]+") + callback='ip -4 a show $item | grep -o "inet\s*[0-9.]*" | grep -o -E "[0-9.]+"' ip=$(getRelevantItem "$interfaces" "$callback") fi fi - "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'NETWORK_ICON' + if [[ -n "$ip" ]]; then + "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'NETWORK_ICON' + fi } ################################################################ @@ -1118,11 +1144,10 @@ prompt_vpn_ip() { ################################################################ # Segment to display laravel version prompt_laravel_version() { - local laravel_version="$(php artisan --version 2>/dev/null)" - if [[ -n "${laravel_version}" ]]; then - # Remove unrelevant infos - laravel_version="${laravel_version//Laravel Framework version /}" - + local laravel_version="$(php artisan --version 2> /dev/null)" + if [[ -n "${laravel_version}" && "${laravel_version}" =~ "Laravel Framework" ]]; then + # Strip out everything but the version + laravel_version="${laravel_version//Laravel Framework /}" "$1_prompt_segment" "$0" "$2" "maroon" "white" "${laravel_version}" 'LARAVEL_ICON' fi } @@ -1131,6 +1156,7 @@ prompt_laravel_version() { # Segment to display load set_default POWERLEVEL9K_LOAD_WHICH 5 prompt_load() { + local ROOT_PREFIX="${4}" # The load segment can have three different states local current_state="unknown" local load_select=2 @@ -1166,7 +1192,7 @@ prompt_load() { fi ;; *) - load_avg=$(cut -d" " -f${load_select} /proc/loadavg) + load_avg=$(cut -d" " -f${load_select} ${ROOT_PREFIX}/proc/loadavg) cores=$(nproc) esac @@ -1239,6 +1265,7 @@ prompt_php_version() { ################################################################ # Segment to display free RAM and used Swap prompt_ram() { + local ROOT_PREFIX="${4}" local base='' local ramfree=0 if [[ "$OS" == "OSX" ]]; then @@ -1250,9 +1277,9 @@ prompt_ram() { ramfree=$(( ramfree * 4096 )) else if [[ "$OS" == "BSD" ]]; then - ramfree=$(grep 'avail memory' /var/run/dmesg.boot | awk '{print $4}') + ramfree=$(grep 'avail memory' ${ROOT_PREFIX}/var/run/dmesg.boot | awk '{print $4}') else - ramfree=$(grep -o -E "MemAvailable:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") + ramfree=$(grep -o -E "MemAvailable:\s+[0-9]+" ${ROOT_PREFIX}/proc/meminfo | grep -o -E "[0-9]+") base='K' fi fi @@ -1260,21 +1287,19 @@ prompt_ram() { "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "$(printSizeHumanReadable "$ramfree" $base)" 'RAM_ICON' } - +################################################################ +# Segment to display rbenv information +# https://github.com/rbenv/rbenv#choosing-the-ruby-version set_default POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW false -# rbenv information prompt_rbenv() { - if command which rbenv 2>/dev/null >&2; then + if [[ -n "$RBENV_VERSION" ]]; then + "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$RBENV_VERSION" 'RUBY_ICON' + elif [ $commands[rbenv] ]; then local rbenv_version_name="$(rbenv version-name)" local rbenv_global="$(rbenv global)" - - # Don't show anything if the current Ruby is the same as the global Ruby - # unless `POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW` is set. - if [[ $rbenv_version_name == $rbenv_global && "$POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW" = false ]]; then - return + if [[ "${rbenv_version_name}" != "${rbenv_global}" || "${POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW}" == "true" ]]; then + "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' fi - - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' fi } @@ -1419,6 +1444,7 @@ prompt_status() { ################################################################ # Segment to display Swap information prompt_swap() { + local ROOT_PREFIX="${4}" local swap_used=0 local base='' @@ -1433,8 +1459,8 @@ prompt_swap() { base=$(echo "$raw_swap_used" | grep -o "[A-Z]*$") else - swap_total=$(grep -o -E "SwapTotal:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - swap_free=$(grep -o -E "SwapFree:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") + swap_total=$(grep -o -E "SwapTotal:\s+[0-9]+" ${ROOT_PREFIX}/proc/meminfo | grep -o -E "[0-9]+") + swap_free=$(grep -o -E "SwapFree:\s+[0-9]+" ${ROOT_PREFIX}/proc/meminfo | grep -o -E "[0-9]+") swap_used=$(( swap_total - swap_free )) base='K' fi @@ -1607,7 +1633,7 @@ set_default POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL" prompt_vi_mode() { case ${KEYMAP} in vicmd) - "$1_prompt_segment" "$0_NORMAL" "$2" "$DEFAULT_COLOR" "default" "$POWERLEVEL9K_VI_COMMAND_MODE_STRING" + "$1_prompt_segment" "$0_NORMAL" "$2" "$DEFAULT_COLOR" "white" "$POWERLEVEL9K_VI_COMMAND_MODE_STRING" ;; main|viins|*) if [[ -z $POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then return; fi @@ -1628,11 +1654,22 @@ prompt_virtualenv() { } ################################################################ -# pyenv: current active python version (with restrictions) +# Segment to display pyenv information # https://github.com/pyenv/pyenv#choosing-the-python-version +set_default POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW false prompt_pyenv() { if [[ -n "$PYENV_VERSION" ]]; then "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$PYENV_VERSION" 'PYTHON_ICON' + elif [ $commands[pyenv] ]; then + local pyenv_version_name="$(pyenv version-name)" + local pyenv_global="system" + local pyenv_root="$(pyenv root)" + if [[ -f "${pyenv_root}/version" ]]; then + pyenv_global="$(pyenv version-file-read ${pyenv_root}/version)" + fi + if [[ "${pyenv_version_name}" != "${pyenv_global}" || "${POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW}" == "true" ]]; then + "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$pyenv_version_name" 'PYTHON_ICON' + fi fi } @@ -1779,10 +1816,16 @@ powerlevel9k_preexec() { set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false powerlevel9k_prepare_prompts() { - local RETVAL RPROMPT_PREFIX RPROMPT_SUFFIX + # Return values. These need to be global, because + # they are used in prompt_status. Also, we need + # to get the return value of the last command at + # very first in this function. Do not move the + # lines down, otherwise the last command is not + # what you expected it to be. RETVAL=$? RETVALS=( "$pipestatus[@]" ) + local RPROMPT_SUFFIX RPROMPT_PREFIX _P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START)) # Reset start time @@ -1868,7 +1911,7 @@ prompt_powerlevel9k_setup() { fi fi - defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) + defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir vcs) defined POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS || POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time) # Display a warning if deprecated segments are in use. diff --git a/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup b/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup deleted file mode 100755 index c1ea754..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup +++ /dev/null @@ -1,1912 +0,0 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# powerlevel9k Theme -# https://github.com/bhilburn/powerlevel9k -# -# This theme was inspired by agnoster's Theme: -# https://gist.github.com/3712874 -################################################################ - -################################################################ -# For basic documentation, please refer to the README.md in the top-level -# directory. For more detailed documentation, refer to the project wiki, hosted -# on Github: https://github.com/bhilburn/powerlevel9k/wiki -# -# There are a lot of easy ways you can customize your prompt segments and -# theming with simple variables defined in your `~/.zshrc`. -################################################################ - -## Turn on for Debugging -#PS4='%s%f%b%k%F{blue}%{λ%}%L %F{240}%N:%i%(?.. %F{red}%?) %1(_.%F{yellow}%-1_ .)%s%f%b%k ' -#zstyle ':vcs_info:*+*:*' debug true -#set -o xtrace - -# Try to set the installation path -if [[ -n "$POWERLEVEL9K_INSTALLATION_DIR" ]]; then - p9k_directory=${POWERLEVEL9K_INSTALLATION_DIR:A} -else - if [[ "${(%):-%N}" == '(eval)' ]]; then - if [[ "$0" == '-antigen-load' ]] && [[ -r "${PWD}/powerlevel9k.zsh-theme" ]]; then - # Antigen uses eval to load things so it can change the plugin (!!) - # https://github.com/zsh-users/antigen/issues/581 - p9k_directory=$PWD - else - print -P "%F{red}You must set POWERLEVEL9K_INSTALLATION_DIR work from within an (eval).%f" - return 1 - fi - else - # Get the path to file this code is executing in; then - # get the absolute path and strip the filename. - # See https://stackoverflow.com/a/28336473/108857 - p9k_directory=${${(%):-%x}:A:h} - fi -fi - -################################################################ -# Source icon functions -################################################################ - -source "${p9k_directory}/functions/icons.zsh" - -################################################################ -# Source utility functions -################################################################ - -source "${p9k_directory}/functions/utilities.zsh" - -################################################################ -# Source color functions -################################################################ - -source "${p9k_directory}/functions/colors.zsh" - -################################################################ -# Source VCS_INFO hooks / helper functions -################################################################ - -source "${p9k_directory}/functions/vcs.zsh" - -# cleanup temporary variables. -unset p9k_directory - -################################################################ -# Color Scheme -################################################################ - -if [[ "$POWERLEVEL9K_COLOR_SCHEME" == "light" ]]; then - DEFAULT_COLOR=white - DEFAULT_COLOR_INVERTED=black -else - DEFAULT_COLOR=black - DEFAULT_COLOR_INVERTED=white -fi - -################################################################ -# Prompt Segment Constructors -# -# Methodology behind user-defined variables overwriting colors: -# The first parameter to the segment constructors is the calling function's -# name. From this function name, we strip the "prompt_"-prefix and -# uppercase it. This is then prefixed with "POWERLEVEL9K_" and suffixed -# with either "_BACKGROUND" or "_FOREGROUND", thus giving us the variable -# name. So each new segment is user-overwritten by a variable following -# this naming convention. -################################################################ - -# The `CURRENT_BG` variable is used to remember what the last BG color used was -# when building the left-hand prompt. Because the RPROMPT is created from -# right-left but reads the opposite, this isn't necessary for the other side. -CURRENT_BG='NONE' - -# Begin a left prompt segment -# Takes four arguments: -# * $1: Name of the function that was originally invoked (mandatory). -# Necessary, to make the dynamic color-overwrite mechanism work. -# * $2: The array index of the current segment -# * $3: Background color -# * $4: Foreground color -# * $5: The segment content -# * $6: An identifying icon (must be a key of the icons array) -# The latter three can be omitted, -set_default last_left_element_index 1 -set_default POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS " " -left_prompt_segment() { - local current_index=$2 - # Check if the segment should be joined with the previous one - local joined - segmentShouldBeJoined $current_index $last_left_element_index "$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS" && joined=true || joined=false - - # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND - local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" - - # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND - local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" - - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" - - if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$3" "$CURRENT_BG"; then - echo -n "$bg%F{$CURRENT_BG}" - if [[ $joined == false ]]; then - # Middle segment - echo -n "$(print_icon 'LEFT_SEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - elif isSameColor "$CURRENT_BG" "$3"; then - # Middle segment with same color as previous segment - # We take the current foreground color as color for our - # subsegment (or the default color). This should have - # enough contrast. - local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" - echo -n "${bg}${complement}" - if [[ $joined == false ]]; then - echo -n "$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - else - # First segment - echo -n "${bg}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - - local visual_identifier - if [[ -n $6 ]]; then - visual_identifier="$(print_icon $6)" - if [[ -n "$visual_identifier" ]]; then - # Add an whitespace if we print more than just the visual identifier. - # To avoid cutting off the visual identifier in some terminal emulators (e.g., Konsole, st), - # we need to color both the visual identifier and the whitespace. - [[ -n "$5" ]] && visual_identifier="$visual_identifier " - # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" - fi - fi - - # Print the visual identifier - echo -n "${visual_identifier}" - # Print the content of the segment, if there is any - [[ -n "$5" ]] && echo -n "${fg}${5}" - echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS}" - - CURRENT_BG=$3 - last_left_element_index=$current_index -} - -# End the left prompt, closes the final segment. -left_prompt_end() { - if [[ -n $CURRENT_BG ]]; then - echo -n "%k%F{$CURRENT_BG}$(print_icon 'LEFT_SEGMENT_SEPARATOR')" - else - echo -n "%k" - fi - echo -n "%f$(print_icon 'LEFT_SEGMENT_END_SEPARATOR')" - CURRENT_BG='' -} - -CURRENT_RIGHT_BG='NONE' - -# Begin a right prompt segment -# Takes four arguments: -# * $1: Name of the function that was originally invoked (mandatory). -# Necessary, to make the dynamic color-overwrite mechanism work. -# * $2: The array index of the current segment -# * $3: Background color -# * $4: Foreground color -# * $5: The segment content -# * $6: An identifying icon (must be a key of the icons array) -# No ending for the right prompt segment is needed (unlike the left prompt, above). -set_default last_right_element_index 1 -set_default POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS " " -right_prompt_segment() { - local current_index=$2 - - # Check if the segment should be joined with the previous one - local joined - segmentShouldBeJoined $current_index $last_right_element_index "$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS" && joined=true || joined=false - - # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND - local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" - - # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND - local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" - - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" - - # If CURRENT_RIGHT_BG is "NONE", we are the first right segment. - - if [[ "$CURRENT_RIGHT_BG" != "NONE" ]]; then - # This is the closing whitespace for the previous segment - echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS}%f" - fi - - if [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]]; then - if isSameColor "$CURRENT_RIGHT_BG" "$3"; then - # Middle segment with same color as previous segment - # We take the current foreground color as color for our - # subsegment (or the default color). This should have - # enough contrast. - local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" - echo -n "$complement$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f" - else - # Use the new BG color for the foreground with separator - echo -n "$(foregroundColor $3)$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f" - fi - fi - - local visual_identifier - if [[ -n "$6" ]]; then - visual_identifier="$(print_icon $6)" - if [[ -n "$visual_identifier" ]]; then - # Add an whitespace if we print more than just the visual identifier. - # To avoid cutting off the visual identifier in some terminal emulators (e.g., Konsole, st), - # we need to color both the visual identifier and the whitespace. - [[ -n "$5" ]] && visual_identifier=" $visual_identifier" - # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" - fi - fi - - echo -n "${bg}${fg}" - - # Print whitespace only if segment is not joined or first right segment - [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]] && echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS}" - - # Print segment content if there is any - [[ -n "$5" ]] && echo -n "${5}" - # Print the visual identifier - echo -n "${visual_identifier}" - - CURRENT_RIGHT_BG=$3 - last_right_element_index=$current_index -} - -################################################################ -# Prompt Segment Definitions -################################################################ - -# The `CURRENT_BG` variable is used to remember what the last BG color used was -# when building the left-hand prompt. Because the RPROMPT is created from -# right-left but reads the opposite, this isn't necessary for the other side. -CURRENT_BG='NONE' - -################################################################ -# Anaconda Environment -prompt_anaconda() { - # Depending on the conda version, either might be set. This - # variant works even if both are set. - local _path=$CONDA_ENV_PATH$CONDA_PREFIX - if ! [ -z "$_path" ]; then - # config - can be overwritten in users' zshrc file. - set_default POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "(" - set_default POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")" - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$POWERLEVEL9K_ANACONDA_LEFT_DELIMITER$(basename $_path)$POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER" 'PYTHON_ICON' - fi -} - -################################################################ -# AWS Profile -prompt_aws() { - local aws_profile="${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}" - - if [[ -n "$aws_profile" ]]; then - "$1_prompt_segment" "$0" "$2" red white "$aws_profile" 'AWS_ICON' - fi -} - -################################################################ -# Current Elastic Beanstalk environment -prompt_aws_eb_env() { - local eb_env=$(grep environment .elasticbeanstalk/config.yml 2> /dev/null | awk '{print $2}') - - if [[ -n "$eb_env" ]]; then - "$1_prompt_segment" "$0" "$2" black green "$eb_env" 'AWS_EB_ICON' - fi -} - -################################################################ -# Segment to indicate background jobs with an icon. -set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE true -set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS false -prompt_background_jobs() { - local background_jobs_number=${$(jobs -l | wc -l)// /} - local wrong_lines=`jobs -l | awk '/pwd now/{ count++ } END {print count}'` - if [[ wrong_lines -gt 0 ]]; then - background_jobs_number=$(( $background_jobs_number - $wrong_lines )) - fi - if [[ background_jobs_number -gt 0 ]]; then - local background_jobs_number_print="" - if [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE" == "true" ]] && ([[ "$background_jobs_number" -gt 1 ]] || [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS" == "true" ]]); then - background_jobs_number_print="$background_jobs_number" - fi - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "cyan" "$background_jobs_number_print" 'BACKGROUND_JOBS_ICON' - fi -} - -################################################################ -# A newline in your prompt, so you can segments on multiple lines. -prompt_newline() { - local lws newline - [[ "$1" == "right" ]] && return - newline=$'\n' - lws=$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS - if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then - newline="${newline}$(print_icon 'MULTILINE_NEWLINE_PROMPT_PREFIX')" - fi - POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS= - "$1_prompt_segment" \ - "$0" \ - "$2" \ - "NONE" "NONE" "${newline}" - POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS=$lws -} - -################################################################ -# Segment that indicates usage level of current partition. -set_default POWERLEVEL9K_DISK_USAGE_ONLY_WARNING false -set_default POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90 -set_default POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95 -prompt_disk_usage() { - local current_state="unknown" - typeset -AH hdd_usage_forecolors - hdd_usage_forecolors=( - 'normal' 'yellow' - 'warning' "$DEFAULT_COLOR" - 'critical' 'white' - ) - typeset -AH hdd_usage_backcolors - hdd_usage_backcolors=( - 'normal' $DEFAULT_COLOR - 'warning' 'yellow' - 'critical' 'red' - ) - - local disk_usage="${$(\df -P . | sed -n '2p' | awk '{ print $5 }')%%\%}" - - if [ "$disk_usage" -ge "$POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL" ]; then - current_state='warning' - if [ "$disk_usage" -ge "$POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL" ]; then - current_state='critical' - fi - else - if [[ "$POWERLEVEL9K_DISK_USAGE_ONLY_WARNING" == true ]]; then - current_state='' - return - fi - current_state='normal' - fi - - local message="${disk_usage}%%" - - # Draw the prompt_segment - if [[ -n $disk_usage ]]; then - "$1_prompt_segment" "${0}_${current_state}" "$2" "${hdd_usage_backcolors[$current_state]}" "${hdd_usage_forecolors[$current_state]}" "$message" 'DISK_ICON' - fi -} - -################################################################ -# Segment that displays the battery status in levels and colors -prompt_battery() { - # The battery can have four different states - default to 'unknown'. - local current_state='unknown' - typeset -AH battery_states - battery_states=( - 'low' 'red' - 'charging' 'yellow' - 'charged' 'green' - 'disconnected' "$DEFAULT_COLOR_INVERTED" - ) - # Set default values if the user did not configure them - set_default POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 - - if [[ $OS =~ OSX && -f /usr/bin/pmset && -x /usr/bin/pmset ]]; then - # obtain battery information from system - local raw_data="$(pmset -g batt | awk 'FNR==2{print}')" - # return if there is no battery on system - [[ -z $(echo $raw_data | grep "InternalBattery") ]] && return - - # Time remaining on battery operation (charging/discharging) - local tstring=$(echo $raw_data | awk -F ';' '{print $3}' | awk '{print $1}') - # If time has not been calculated by system yet - [[ $tstring =~ '(\(no|not)' ]] && tstring="..." - - # percent of battery charged - typeset -i 10 bat_percent - bat_percent=$(echo $raw_data | grep -o '[0-9]*%' | sed 's/%//') - - local remain="" - # Logic for string output - case $(echo $raw_data | awk -F ';' '{print $2}' | awk '{$1=$1};1') in - # for a short time after attaching power, status will be 'AC attached;' - 'charging'|'finishing charge'|'AC attached') - current_state="charging" - remain=" ($tstring)" - ;; - 'discharging') - [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" - remain=" ($tstring)" - ;; - *) - current_state="charged" - ;; - esac - fi - - if [[ "$OS" == 'Linux' ]] || [[ "$OS" == 'Android' ]]; then - local sysp="/sys/class/power_supply" - - # Reported BAT0 or BAT1 depending on kernel version - [[ -a $sysp/BAT0 ]] && local bat=$sysp/BAT0 - [[ -a $sysp/BAT1 ]] && local bat=$sysp/BAT1 - - # Android-related - # Tested on: Moto G falcon (CM 13.0) - [[ -a $sysp/battery ]] && local bat=$sysp/battery - - # Return if no battery found - [[ -z $bat ]] && return - local capacity=$(cat $bat/capacity) - local battery_status=$(cat $bat/status) - [[ $capacity -gt 100 ]] && local bat_percent=100 || local bat_percent=$capacity - [[ $battery_status =~ Charging || $battery_status =~ Full ]] && local connected=true - if [[ -z $connected ]]; then - [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" - else - [[ $bat_percent =~ 100 ]] && current_state="charged" - [[ $bat_percent -lt 100 ]] && current_state="charging" - fi - if [[ -f /usr/bin/acpi ]]; then - local time_remaining=$(acpi | awk '{ print $5 }') - if [[ $time_remaining =~ rate ]]; then - local tstring="..." - elif [[ $time_remaining =~ "[[:digit:]]+" ]]; then - local tstring=${(f)$(date -u -d "$(echo $time_remaining)" +%k:%M 2> /dev/null)} - fi - fi - [[ -n $tstring ]] && local remain=" ($tstring)" - fi - - local message - # Default behavior: Be verbose! - set_default POWERLEVEL9K_BATTERY_VERBOSE true - if [[ "$POWERLEVEL9K_BATTERY_VERBOSE" == true ]]; then - message="$bat_percent%%$remain" - else - message="$bat_percent%%" - fi - - # override default icon if we are using battery stages - if [[ -n "$POWERLEVEL9K_BATTERY_STAGES" ]]; then - local segment=$(( 100.0 / (${#POWERLEVEL9K_BATTERY_STAGES} - 1 ) )) - if [[ $segment > 1 ]]; then - local offset=$(( ($bat_percent / $segment) + 1 )) - # check if the stages are in an array or a string - [[ "${(t)POWERLEVEL9K_BATTERY_STAGES}" =~ "array" ]] && POWERLEVEL9K_BATTERY_ICON="$POWERLEVEL9K_BATTERY_STAGES[$offset]" || POWERLEVEL9K_BATTERY_ICON=${POWERLEVEL9K_BATTERY_STAGES:$offset:1} - fi - fi - # return if POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD is set and the battery percentage is greater or equal - if [[ -v "POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD" && "${bat_percent}" -ge $POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD ]]; then - return - fi - - # override the default color if we are using a color level array - if [[ -n "$POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND" ]] && [[ "${(t)POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND}" =~ "array" ]]; then - local segment=$(( 100.0 / (${#POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND} - 1 ) )) - local offset=$(( ($bat_percent / $segment) + 1 )) - "$1_prompt_segment" "$0_${current_state}" "$2" "${POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND[$offset]}" "${battery_states[$current_state]}" "${message}" "BATTERY_ICON" - else - # Draw the prompt_segment - "$1_prompt_segment" "$0_${current_state}" "$2" "${DEFAULT_COLOR}" "${battery_states[$current_state]}" "${message}" "BATTERY_ICON" - fi -} - -################################################################ -# Public IP segment -# Parameters: -# * $1 Alignment: string - left|right -# * $2 Index: integer -# * $3 Joined: bool - If the segment should be joined -prompt_public_ip() { - # set default values for segment - set_default POWERLEVEL9K_PUBLIC_IP_TIMEOUT "300" - set_default POWERLEVEL9K_PUBLIC_IP_NONE "" - set_default POWERLEVEL9K_PUBLIC_IP_FILE "/tmp/p9k_public_ip" - set_default POWERLEVEL9K_PUBLIC_IP_HOST "http://ident.me" - defined POWERLEVEL9K_PUBLIC_IP_METHODS || POWERLEVEL9K_PUBLIC_IP_METHODS=(dig curl wget) - - # Do we need a fresh IP? - local refresh_ip=false - if [[ -f $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then - typeset -i timediff - # if saved IP is more than - if [[ "$OS" == "OSX" ]]; then - timediff=$(($(date +%s) - $(stat -f "%m" $POWERLEVEL9K_PUBLIC_IP_FILE))) - else - timediff=$(($(date +%s) - $(date -r $POWERLEVEL9K_PUBLIC_IP_FILE +%s))) - fi - [[ $timediff -gt $POWERLEVEL9K_PUBLIC_IP_TIMEOUT ]] && refresh_ip=true - # If tmp file is empty get a fresh IP - [[ -z $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) ]] && refresh_ip=true - [[ -n $POWERLEVEL9K_PUBLIC_IP_NONE ]] && [[ $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) =~ "$POWERLEVEL9K_PUBLIC_IP_NONE" ]] && refresh_ip=true - else - touch $POWERLEVEL9K_PUBLIC_IP_FILE && refresh_ip=true - fi - - # grab a fresh IP if needed - local fresh_ip - if [[ $refresh_ip =~ true && -w $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then - for method in "${POWERLEVEL9K_PUBLIC_IP_METHODS[@]}"; do - case $method in - 'dig') - fresh_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2> /dev/null)" - [[ "$fresh_ip" =~ ^\; ]] && unset fresh_ip - ;; - 'curl') - fresh_ip="$(curl --max-time 10 -w '\n' "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)" - ;; - 'wget') - fresh_ip="$(wget -T 10 -qO- "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)" - ;; - esac - # If we found a fresh IP, break loop. - if [[ -n "${fresh_ip}" ]]; then - break; - fi - done - - # write IP to tmp file or clear tmp file if an IP was not retrieved - # Redirection with `>!`. From the manpage: Same as >, except that the file - # is truncated to zero length if it exists, even if CLOBBER is unset. - # If the file already exists, and a simple `>` redirection and CLOBBER - # unset, ZSH will produce an error. - [[ -n "${fresh_ip}" ]] && echo $fresh_ip >! $POWERLEVEL9K_PUBLIC_IP_FILE || echo $POWERLEVEL9K_PUBLIC_IP_NONE >! $POWERLEVEL9K_PUBLIC_IP_FILE - fi - - # read public IP saved to tmp file - local public_ip="$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)" - - # Draw the prompt segment - if [[ -n $public_ip ]]; then - icon='PUBLIC_IP_ICON' - # Check VPN is on if VPN interface is set - if [[ -n $POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then - for vpn_iface in $(/sbin/ifconfig | grep -e ^"$POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE" | cut -d":" -f1) - do - icon='VPN_ICON' - break - done - fi - $1_prompt_segment "$0" "$2" "$DEFAULT_COLOR" "$DEFAULT_COLOR_INVERTED" "${public_ip}" "$icon" - fi -} - -################################################################ -# Context: user@hostname (who am I and where am I) -# Note that if $DEFAULT_USER is not set, this prompt segment will always print -set_default POWERLEVEL9K_ALWAYS_SHOW_CONTEXT false -set_default POWERLEVEL9K_ALWAYS_SHOW_USER false -set_default POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m" -prompt_context() { - local current_state="DEFAULT" - typeset -AH context_states - context_states=( - "ROOT" "yellow" - "SUDO" "yellow" - "DEFAULT" "yellow" - "REMOTE" "yellow" - "REMOTE_SUDO" "yellow" - ) - - local content="" - - if [[ "$POWERLEVEL9K_ALWAYS_SHOW_CONTEXT" == true ]] || [[ "$(whoami)" != "$DEFAULT_USER" ]] || [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then - content="${POWERLEVEL9K_CONTEXT_TEMPLATE}" - elif [[ "$POWERLEVEL9K_ALWAYS_SHOW_USER" == true ]]; then - content="$(whoami)" - else - return - fi - - if [[ $(print -P "%#") == '#' ]]; then - current_state="ROOT" - elif [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then - if sudo -n true 2>/dev/null; then - current_state="REMOTE_SUDO" - else - current_state="REMOTE" - fi - elif sudo -n true 2>/dev/null; then - current_state="SUDO" - fi - - "$1_prompt_segment" "${0}_${current_state}" "$2" "$DEFAULT_COLOR" "${context_states[$current_state]}" "${content}" -} - -################################################################ -# User: user (who am I) -# Note that if $DEFAULT_USER is not set, this prompt segment will always print -set_default POWERLEVEL9K_USER_TEMPLATE "%n" -prompt_user() { - local current_state="DEFAULT" - typeset -AH user_state - if [[ "$POWERLEVEL9K_ALWAYS_SHOW_USER" == true ]] || [[ "$(whoami)" != "$DEFAULT_USER" ]]; then - if [[ $(print -P "%#") == '#' ]]; then - user_state=( - "STATE" "ROOT" - "CONTENT" "${POWERLEVEL9K_USER_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "ROOT_ICON" - ) - elif sudo -n true 2>/dev/null; then - user_state=( - "STATE" "SUDO" - "CONTENT" "${POWERLEVEL9K_USER_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "SUDO_ICON" - ) - else - user_state=( - "STATE" "DEFAULT" - "CONTENT" "$(whoami)" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "USER_ICON" - ) - fi - "$1_prompt_segment" "${0}_${user_state[STATE]}" "$2" "${user_state[BACKGROUND_COLOR]}" "${user_state[FOREGROUND_COLOR]}" "${user_state[CONTENT]}" "${user_state[VISUAL_IDENTIFIER]}" - fi -} - -################################################################ -# Host: machine (where am I) -set_default POWERLEVEL9K_HOST_TEMPLATE "%m" -prompt_host() { - local current_state="LOCAL" - typeset -AH host_state - if [[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]; then - host_state=( - "STATE" "REMOTE" - "CONTENT" "${POWERLEVEL9K_HOST_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "SSH_ICON" - ) - else - host_state=( - "STATE" "LOCAL" - "CONTENT" "${POWERLEVEL9K_HOST_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "HOST_ICON" - ) - fi - "$1_prompt_segment" "$0_${host_state[STATE]}" "$2" "${host_state[BACKGROUND_COLOR]}" "${host_state[FOREGROUND_COLOR]}" "${host_state[CONTENT]}" "${host_state[VISUAL_IDENTIFIER]}" -} - -################################################################ -# The 'custom` prompt provides a way for users to invoke commands and display -# the output in a segment. -prompt_custom() { - local command=POWERLEVEL9K_CUSTOM_$3:u - local segment_content="$(eval ${(P)command})" - - if [[ -n $segment_content ]]; then - "$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" - fi -} - -################################################################ -# Display the duration the command needed to run. -prompt_command_execution_time() { - set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3 - set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2 - - # Print time in human readable format - # For that use `strftime` and convert - # the duration (float) to an seconds - # (integer). - # See http://unix.stackexchange.com/a/89748 - local humanReadableDuration - if (( _P9K_COMMAND_DURATION > 3600 )); then - humanReadableDuration=$(TZ=GMT; strftime '%H:%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) ))) - elif (( _P9K_COMMAND_DURATION > 60 )); then - humanReadableDuration=$(TZ=GMT; strftime '%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) ))) - else - # If the command executed in seconds, print as float. - # Convert to float - if [[ "${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION}" == "0" ]]; then - # If user does not want microseconds, then we need to convert - # the duration to an integer. - typeset -i humanReadableDuration - else - typeset -F ${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION} humanReadableDuration - fi - humanReadableDuration=$_P9K_COMMAND_DURATION - fi - - if (( _P9K_COMMAND_DURATION >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )); then - "$1_prompt_segment" "$0" "$2" "red" "yellow1" "${humanReadableDuration}" 'EXECUTION_TIME_ICON' - fi -} - -################################################################ -# Dir: current working directory -# Parameters: -# * $1 Alignment: string - left|right -# * $2 Index: integer -set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/" -set_default POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~" -set_default POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD false -prompt_dir() { - # using $PWD instead of "$(print -P '%~')" to allow use of POWERLEVEL9K_DIR_PATH_ABSOLUTE - local current_path=$PWD # WAS: local current_path="$(print -P '%~')" - # check if the user wants to use absolute paths or "~" paths - [[ ${(L)POWERLEVEL9K_DIR_PATH_ABSOLUTE} != "true" ]] && current_path=${current_path//$HOME/"~"} - # declare all local variables - local paths directory test_dir test_dir_length trunc_path threshhold - # if we are not in "~" or "/", split the paths into an array and exclude "~" - (( ${#current_path} > 1 )) && paths=(${(s:/:)${current_path//"~\/"/}}) || paths=() - # only run the code if SHORTEN_DIR_LENGTH is set, or we are using the two strategies that don't rely on it. - if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_folder_marker" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_to_last" ]]; then - set_default POWERLEVEL9K_SHORTEN_DELIMITER "\u2026" - # convert delimiter from unicode to literal character, so that we can get the correct length later - local delim=$(echo -n $POWERLEVEL9K_SHORTEN_DELIMITER) - - case "$POWERLEVEL9K_SHORTEN_STRATEGY" in - truncate_absolute_chars) - if [ ${#current_path} -gt $(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH + ${#POWERLEVEL9K_SHORTEN_DELIMITER} )) ]; then - current_path=$POWERLEVEL9K_SHORTEN_DELIMITER${current_path:(-POWERLEVEL9K_SHORTEN_DIR_LENGTH)} - fi - ;; - truncate_middle) - # truncate characters from the middle of the path - current_path=$(truncatePath $current_path $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER "middle") - ;; - truncate_from_right) - # truncate characters from the right of the path - current_path=$(truncatePath "$current_path" $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER) - ;; - truncate_absolute) - # truncate all characters except the last POWERLEVEL9K_SHORTEN_DIR_LENGTH characters - if [ ${#current_path} -gt $(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH + ${#POWERLEVEL9K_SHORTEN_DELIMITER} )) ]; then - current_path=$POWERLEVEL9K_SHORTEN_DELIMITER${current_path:(-POWERLEVEL9K_SHORTEN_DIR_LENGTH)} - fi - ;; - truncate_to_last) - # truncate all characters before the current directory - current_path=${current_path##*/} - ;; - truncate_to_first_and_last) - if (( ${#current_path} > 1 )) && (( ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} > 0 )); then - threshhold=$(( ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} * 2)) - # if we are in "~", add it back into the paths array - [[ $current_path == '~'* ]] && paths=("~" "${paths[@]}") - if (( ${#paths} > $threshhold )); then - local num=$(( ${#paths} - ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} )) - # repace the middle elements - for (( i=$POWERLEVEL9K_SHORTEN_DIR_LENGTH; i<$num; i++ )); do - paths[$i+1]=$POWERLEVEL9K_SHORTEN_DELIMITER - done - [[ $current_path != '~'* ]] && current_path="/" || current_path="" - current_path+="${(j:/:)paths}" - fi - fi - ;; - truncate_to_unique) - # for each parent path component find the shortest unique beginning - # characters sequence. Source: https://stackoverflow.com/a/45336078 - if (( ${#current_path} > 1 )); then # root and home are exceptions and won't have paths - local matching - local cur_path='/' - [[ $current_path != "~"* ]] && trunc_path='/' || trunc_path='' - for directory in ${paths[@]}; do - test_dir='' - for (( i=0; i<${#directory}; i++ )); do - test_dir+="${directory:$i:1}" - matching=("$cur_path"/"$test_dir"*/) - if [[ ${#matching[@]} -eq 1 ]]; then - break - fi - done - trunc_path+="$test_dir/" - cur_path+="$directory/" - done - [[ $current_path == "~"* ]] && trunc_path="~/$trunc_path" - current_path="${trunc_path: : -1}" - fi - ;; - truncate_with_folder_marker) - if (( ${#paths} > 0 )); then # root and home are exceptions and won't have paths, so skip this - local last_marked_folder marked_folder - set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER ".shorten_folder_marker" - - # Search for the folder marker in the parent directories and - # buildup a pattern that is removed from the current path - # later on. - for marked_folder in $(upsearch $POWERLEVEL9K_SHORTEN_FOLDER_MARKER); do - if [[ "$marked_folder" == "/" ]]; then - # If we reached root folder, stop upsearch. - trunc_path="/" - elif [[ "$marked_folder" == "$HOME" ]]; then - # If we reached home folder, stop upsearch. - trunc_path="~" - elif [[ "${marked_folder%/*}" == $last_marked_folder ]]; then - trunc_path="${trunc_path%/}/${marked_folder##*/}" - else - trunc_path="${trunc_path%/}/$POWERLEVEL9K_SHORTEN_DELIMITER/${marked_folder##*/}" - fi - last_marked_folder=$marked_folder - done - - # Replace the shortest possible match of the marked folder from - # the current path. - current_path=$trunc_path${current_path#${last_marked_folder}*} - fi - ;; - truncate_with_package_name) - local name repo_path package_path current_dir zero - - # Get the path of the Git repo, which should have the package.json file - if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == "true" ]]; then - # Get path from the root of the git repository to the current dir - local gitPath=$(git rev-parse --show-prefix) - # Remove trailing slash from git path, so that we can - # remove that git path from the pwd. - gitPath=${gitPath%/} - package_path=${$(pwd)%%$gitPath} - # Remove trailing slash - package_path=${package_path%/} - elif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) == "true" ]]; then - package_path=${$(pwd)%%/.git*} - fi - - # Replace the shortest possible match of the marked folder from - # the current path. Remove the amount of characters up to the - # folder marker from the left. Count only the visible characters - # in the path (this is done by the "zero" pattern; see - # http://stackoverflow.com/a/40855342/5586433). - local zero='%([BSUbfksu]|([FB]|){*})' - trunc_path=$(pwd) - # Then, find the length of the package_path string, and save the - # subdirectory path as a substring of the current directory's path from 0 - # to the length of the package path's string - subdirectory_path=$(truncatePath "${trunc_path:${#${(S%%)package_path//$~zero/}}}" $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER) - # Parse the 'name' from the package.json; if there are any problems, just - # print the file path - defined POWERLEVEL9K_DIR_PACKAGE_FILES || POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json) - - local pkgFile="unknown" - for file in "${POWERLEVEL9K_DIR_PACKAGE_FILES[@]}"; do - if [[ -f "${package_path}/${file}" ]]; then - pkgFile="${package_path}/${file}" - break; - fi - done - - local packageName=$(jq '.name' ${pkgFile} 2> /dev/null \ - || node -e 'console.log(require(process.argv[1]).name);' ${pkgFile} 2>/dev/null \ - || cat "${pkgFile}" 2> /dev/null | grep -m 1 "\"name\"" | awk -F ':' '{print $2}' | awk -F '"' '{print $2}' 2>/dev/null \ - ) - if [[ -n "${packageName}" ]]; then - # Instead of printing out the full path, print out the name of the package - # from the package.json and append the current subdirectory - current_path="`echo $packageName | tr -d '"'`$subdirectory_path" - fi - ;; - *) - if [[ $current_path != "~" ]]; then - current_path="$(print -P "%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c")" - fi - ;; - esac - fi - - # save state of path for highlighting and bold options - local path_opt=$current_path - - typeset -AH dir_states - dir_states=( - "DEFAULT" "FOLDER_ICON" - "HOME" "HOME_ICON" - "HOME_SUBFOLDER" "HOME_SUB_ICON" - "NOT_WRITABLE" "LOCK_ICON" - "ETC" "ETC_ICON" - ) - local state_path="$(print -P '%~')" - local current_state="DEFAULT" - if [[ $state_path == '/etc'* ]]; then - current_state='ETC' - elif [[ "${POWERLEVEL9K_DIR_SHOW_WRITABLE}" == true && ! -w "$PWD" ]]; then - current_state="NOT_WRITABLE" - elif [[ $state_path == '~' ]]; then - current_state="HOME" - elif [[ $state_path == '~'* ]]; then - current_state="HOME_SUBFOLDER" - fi - - # declare variables used for bold and state colors - local bld_on bld_off dir_state_foreground dir_state_user_foreground - # test if user wants the last directory printed in bold - if [[ "${(L)POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD}" == "true" ]]; then - bld_on="%B" - bld_off="%b" - else - bld_on="" - bld_off="" - fi - # determine is the user has set a last directory color - local dir_state_user_foreground=POWERLEVEL9K_DIR_${current_state}_FOREGROUND - local dir_state_foreground=${(P)dir_state_user_foreground} - [[ -z ${dir_state_foreground} ]] && dir_state_foreground="${DEFAULT_COLOR}" - - local dir_name base_name - # use ZSH substitution to get the dirname and basename instead of calling external functions - dir_name=${path_opt%/*} - base_name=${path_opt##*/} - - # if the user wants the last directory colored... - if [[ -n ${POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND} ]]; then - # it the path is "/" or "~" - if [[ $path_opt == "/" || $path_opt == "~" ]]; then - current_path="${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${current_path}${bld_off}" - else # has a subfolder - # test if dirname != basename - they are equal if we use truncate_to_last or truncate_absolute - if [[ $dir_name != $base_name ]]; then - current_path="${dir_name}/${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${base_name}${bld_off}" - else - current_path="${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${base_name}${bld_off}" - fi - fi - else # no coloring - # it the path is "/" or "~" - if [[ $path_opt == "/" || $path_opt == "~" ]]; then - current_path="${bld_on}${current_path}${bld_off}" - else # has a subfolder - # test if dirname != basename - they are equal if we use truncate_to_last or truncate_absolute - if [[ $dir_name != $base_name ]]; then - current_path="${dir_name}/${bld_on}${base_name}${bld_off}" - else - current_path="${bld_on}${base_name}${bld_off}" - fi - fi - fi - - # check if we need to omit the first character and only do it if we are not in "~" or "/" - if [[ "${POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER}" == "true" && $path_opt != "/" && $path_opt != "~" ]]; then - current_path="${current_path[2,-1]}" - fi - - # check if the user wants the separator colored. - if [[ -n ${POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND} && $path_opt != "/" ]]; then - # because this contains color changing codes, it is easier to set a variable for what should be replaced - local repl="%F{$POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND}/%F{$dir_state_foreground}" - # escape the / with a \ - current_path=${current_path//\//$repl} - fi - - if [[ "${POWERLEVEL9K_DIR_PATH_SEPARATOR}" != "/" && $path_opt != "/" ]]; then - current_path=${current_path//\//$POWERLEVEL9K_DIR_PATH_SEPARATOR} - fi - - if [[ "${POWERLEVEL9K_HOME_FOLDER_ABBREVIATION}" != "~" && ! "${(L)POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER}" == "true" ]]; then - # use :s to only replace the first occurance - current_path=${current_path:s/~/$POWERLEVEL9K_HOME_FOLDER_ABBREVIATION} - fi - - "$1_prompt_segment" "$0_${current_state}" "$2" "blue" "$DEFAULT_COLOR" "${current_path}" "${dir_states[$current_state]}" -} - -################################################################ -# Docker machine -prompt_docker_machine() { - local docker_machine="$DOCKER_MACHINE_NAME" - - if [[ -n "$docker_machine" ]]; then - "$1_prompt_segment" "$0" "$2" "magenta" "$DEFAULT_COLOR" "$docker_machine" 'SERVER_ICON' - fi -} - -################################################################ -# GO prompt -prompt_go_version() { - local go_version - local go_path - go_version=$(go version 2>/dev/null | sed -E "s/.*(go[0-9.]*).*/\1/") - go_path=$(go env GOPATH 2>/dev/null) - - if [[ -n "$go_version" && "${PWD##$go_path}" != "$PWD" ]]; then - "$1_prompt_segment" "$0" "$2" "green" "grey93" "$go_version" "GO_ICON" - fi -} - -################################################################ -# Command number (in local history) -prompt_history() { - "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" '%h' -} - -################################################################ -# Detection for virtualization (systemd based systems only) -prompt_detect_virt() { - if ! command -v systemd-detect-virt > /dev/null; then - return - fi - local virt=$(systemd-detect-virt) - if [[ "$virt" == "none" ]]; then - if [[ "$(ls -di / | grep -o 2)" != "2" ]]; then - virt="chroot" - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" - else - ; - fi - else - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" - fi -} - -################################################################ -# Test icons -prompt_icons_test() { - for key in ${(@k)icons}; do - # The lower color spectrum in ZSH makes big steps. Choosing - # the next color has enough contrast to read. - local random_color=$((RANDOM % 8)) - local next_color=$((random_color+1)) - "$1_prompt_segment" "$0" "$2" "$random_color" "$next_color" "$key" "$key" - done -} - -################################################################ -# Segment to display the current IP address -prompt_ip() { - if [[ "$OS" == "OSX" ]]; then - if defined POWERLEVEL9K_IP_INTERFACE; then - # Get the IP address of the specified interface. - ip=$(ipconfig getifaddr "$POWERLEVEL9K_IP_INTERFACE") - else - local interfaces callback - # Get network interface names ordered by service precedence. - interfaces=$(networksetup -listnetworkserviceorder | grep -o "Device:\s*[a-z0-9]*" | grep -o -E '[a-z0-9]*$') - callback='ipconfig getifaddr $item' - - ip=$(getRelevantItem "$interfaces" "$callback") - fi - else - if defined POWERLEVEL9K_IP_INTERFACE; then - # Get the IP address of the specified interface. - ip=$(ip -4 a show "$POWERLEVEL9K_IP_INTERFACE" | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*") - else - local interfaces callback - # Get all network interface names that are up - interfaces=$(ip link ls up | grep -o -E ":\s+[a-z0-9]+:" | grep -v "lo" | grep -o "[a-z0-9]*") - callback='ip -4 a show $item | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*"' - - ip=$(getRelevantItem "$interfaces" "$callback") - fi - fi - - "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'NETWORK_ICON' -} - -################################################################ -# Segment to display if VPN is active -set_default POWERLEVEL9K_VPN_IP_INTERFACE "tun" -# prompt if vpn active -prompt_vpn_ip() { - for vpn_iface in $(/sbin/ifconfig | grep -e ^"$POWERLEVEL9K_VPN_IP_INTERFACE" | cut -d":" -f1) - do - ip=$(/sbin/ifconfig "$vpn_iface" | grep -o "inet\s.*" | cut -d' ' -f2) - "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'VPN_ICON' - done -} - -################################################################ -# Segment to display laravel version -prompt_laravel_version() { - local laravel_version="$(php artisan --version 2>/dev/null)" - if [[ -n "${laravel_version}" ]]; then - # Remove unrelevant infos - laravel_version="${laravel_version//Laravel Framework version /}" - - "$1_prompt_segment" "$0" "$2" "maroon" "white" "${laravel_version}" 'LARAVEL_ICON' - fi -} - -################################################################ -# Segment to display load -set_default POWERLEVEL9K_LOAD_WHICH 5 -prompt_load() { - # The load segment can have three different states - local current_state="unknown" - local load_select=2 - local load_avg - local cores - - typeset -AH load_states - load_states=( - 'critical' 'red' - 'warning' 'yellow' - 'normal' 'green' - ) - - case "$POWERLEVEL9K_LOAD_WHICH" in - 1) - load_select=1 - ;; - 5) - load_select=2 - ;; - 15) - load_select=3 - ;; - esac - - case "$OS" in - OSX|BSD) - load_avg=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | sed -n ${load_select}p) - if [[ "$OS" == "OSX" ]]; then - cores=$(sysctl -n hw.logicalcpu) - else - cores=$(sysctl -n hw.ncpu) - fi - ;; - *) - load_avg=$(cut -d" " -f${load_select} /proc/loadavg) - cores=$(nproc) - esac - - # Replace comma - load_avg=${load_avg//,/.} - - if [[ "$load_avg" -gt $((${cores} * 0.7)) ]]; then - current_state="critical" - elif [[ "$load_avg" -gt $((${cores} * 0.5)) ]]; then - current_state="warning" - else - current_state="normal" - fi - - "$1_prompt_segment" "${0}_${current_state}" "$2" "${load_states[$current_state]}" "$DEFAULT_COLOR" "$load_avg" 'LOAD_ICON' -} - -################################################################ -# Segment to diplay Node version -prompt_node_version() { - local node_version=$(node -v 2>/dev/null) - [[ -z "${node_version}" ]] && return - - "$1_prompt_segment" "$0" "$2" "green" "white" "${node_version:1}" 'NODE_ICON' -} - -################################################################ -# Segment to display Node version from NVM -# Only prints the segment if different than the default value -prompt_nvm() { - local node_version nvm_default - (( $+functions[nvm_version] )) || return - - node_version=$(nvm_version current) - [[ -z "${node_version}" || ${node_version} == "none" ]] && return - - nvm_default=$(nvm_version default) - [[ "$node_version" =~ "$nvm_default" ]] && return - - $1_prompt_segment "$0" "$2" "magenta" "black" "${node_version:1}" 'NODE_ICON' -} - -################################################################ -# Segment to display NodeEnv -prompt_nodeenv() { - local nodeenv_path="$NODE_VIRTUAL_ENV" - if [[ -n "$nodeenv_path" && "$NODE_VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then - local info="$(node -v)[$(basename "$nodeenv_path")]" - "$1_prompt_segment" "$0" "$2" "black" "green" "$info" 'NODE_ICON' - fi -} - -################################################################ -# Segment to print a little OS icon -prompt_os_icon() { - "$1_prompt_segment" "$0" "$2" "black" "white" "$OS_ICON" -} - -################################################################ -# Segment to display PHP version number -prompt_php_version() { - local php_version - php_version=$(php -v 2>&1 | grep -oe "^PHP\s*[0-9.]*") - - if [[ -n "$php_version" ]]; then - "$1_prompt_segment" "$0" "$2" "fuchsia" "grey93" "$php_version" - fi -} - -################################################################ -# Segment to display free RAM and used Swap -prompt_ram() { - local base='' - local ramfree=0 - if [[ "$OS" == "OSX" ]]; then - # Available = Free + Inactive - # See https://support.apple.com/en-us/HT201538 - ramfree=$(vm_stat | grep "Pages free" | grep -o -E '[0-9]+') - ramfree=$((ramfree + $(vm_stat | grep "Pages inactive" | grep -o -E '[0-9]+'))) - # Convert pages into Bytes - ramfree=$(( ramfree * 4096 )) - else - if [[ "$OS" == "BSD" ]]; then - ramfree=$(grep 'avail memory' /var/run/dmesg.boot | awk '{print $4}') - else - ramfree=$(grep -o -E "MemAvailable:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - base='K' - fi - fi - - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "$(printSizeHumanReadable "$ramfree" $base)" 'RAM_ICON' -} - - -set_default POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW false -# rbenv information -prompt_rbenv() { - if command which rbenv 2>/dev/null >&2; then - local rbenv_version_name="$(rbenv version-name)" - local rbenv_global="$(rbenv global)" - - # Don't show anything if the current Ruby is the same as the global Ruby - # unless `POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW` is set. - if [[ $rbenv_version_name == $rbenv_global && "$POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW" = false ]]; then - return - fi - - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to display chruby information -# see https://github.com/postmodern/chruby/issues/245 for chruby_auto issue with ZSH -prompt_chruby() { - # Uses $RUBY_VERSION and $RUBY_ENGINE set by chruby - set_default POWERLEVEL9K_CHRUBY_SHOW_VERSION true - set_default POWERLEVEL9K_CHRUBY_SHOW_ENGINE true - local chruby_label="" - - if [[ "$POWERLEVEL9K_CHRUBY_SHOW_ENGINE" == true ]]; then - chruby_label+="$RUBY_ENGINE " - fi - if [[ "$POWERLEVEL9K_CHRUBY_SHOW_VERSION" == true ]]; then - chruby_label+="$RUBY_VERSION" - fi - - # Truncate trailing spaces - chruby_label="${chruby_label%"${chruby_label##*[![:space:]]}"}" - - # Don't show anything if the chruby did not change the default ruby - if [[ "$RUBY_ENGINE" != "" ]]; then - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "${chruby_label}" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to print an icon if user is root. -prompt_root_indicator() { - if [[ "$UID" -eq 0 ]]; then - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "" 'ROOT_ICON' - fi -} - -################################################################ -# Segment to display Rust version number -prompt_rust_version() { - local rust_version - rust_version=$(command rustc --version 2>/dev/null) - # Remove "rustc " (including the whitespace) from the beginning - # of the version string and remove everything after the next - # whitespace. This way we'll end up with only the version. - rust_version=${${rust_version/rustc /}%% *} - - if [[ -n "$rust_version" ]]; then - "$1_prompt_segment" "$0" "$2" "darkorange" "$DEFAULT_COLOR" "$rust_version" 'RUST_ICON' - fi -} - -# RSpec test ratio -prompt_rspec_stats() { - if [[ (-d app && -d spec) ]]; then - local code_amount tests_amount - code_amount=$(ls -1 app/**/*.rb | wc -l) - tests_amount=$(ls -1 spec/**/*.rb | wc -l) - - build_test_stats "$1" "$0" "$2" "$code_amount" "$tests_amount" "RSpec" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Ruby Version Manager information -prompt_rvm() { - local version_and_gemset=${rvm_env_string/ruby-} - - if [[ -n "$version_and_gemset" ]]; then - "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$version_and_gemset" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to display SSH icon when connected -prompt_ssh() { - if [[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]; then - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "" 'SSH_ICON' - fi -} - -################################################################ -# Status: When an error occur, return the error code, or a cross icon if option is set -# Display an ok icon when no error occur, or hide the segment if option is set to false -# -set_default POWERLEVEL9K_STATUS_CROSS false -set_default POWERLEVEL9K_STATUS_OK true -set_default POWERLEVEL9K_STATUS_SHOW_PIPESTATUS true -set_default POWERLEVEL9K_STATUS_HIDE_SIGNAME false -# old options, retro compatibility -set_default POWERLEVEL9K_STATUS_VERBOSE true -set_default POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE false - -exit_code_or_status() { - local ec=$1 - if [[ "$POWERLEVEL9K_STATUS_HIDE_SIGNAME" = true ]]; then - echo "$ec" - elif (( ec <= 128 )); then - echo "$ec" - else - local sig=$(( ec - 128 )) - local idx=$(( sig + 1 )) - echo "SIG${signals[$idx]}(${sig})" - fi -} - -prompt_status() { - local ec_text - local ec_sum - local ec - - if [[ $POWERLEVEL9K_STATUS_SHOW_PIPESTATUS == true ]]; then - if (( $#RETVALS > 1 )); then - ec_text=$(exit_code_or_status "${RETVALS[1]}") - ec_sum=${RETVALS[1]} - else - ec_text=$(exit_code_or_status "${RETVAL}") - ec_sum=${RETVAL} - fi - - for ec in "${(@)RETVALS[2,-1]}"; do - ec_text="${ec_text}|$(exit_code_or_status "$ec")" - ec_sum=$(( $ec_sum + $ec )) - done - else - # We use RETVAL instead of the right-most RETVALS item because - # PIPE_FAIL may be set. - ec_text=$(exit_code_or_status "${RETVAL}") - ec_sum=${RETVAL} - fi - - if (( ec_sum > 0 )); then - if [[ "$POWERLEVEL9K_STATUS_CROSS" == false && "$POWERLEVEL9K_STATUS_VERBOSE" == true ]]; then - "$1_prompt_segment" "$0_ERROR" "$2" "red" "yellow1" "$ec_text" 'CARRIAGE_RETURN_ICON' - else - "$1_prompt_segment" "$0_ERROR" "$2" "$DEFAULT_COLOR" "red" "" 'FAIL_ICON' - fi - elif [[ "$POWERLEVEL9K_STATUS_OK" == true ]] && [[ "$POWERLEVEL9K_STATUS_VERBOSE" == true || "$POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE" == true ]]; then - "$1_prompt_segment" "$0_OK" "$2" "$DEFAULT_COLOR" "green" "" 'OK_ICON' - fi -} - -################################################################ -# Segment to display Swap information -prompt_swap() { - local swap_used=0 - local base='' - - if [[ "$OS" == "OSX" ]]; then - local raw_swap_used - raw_swap_used=$(sysctl vm.swapusage | grep -o "used\s*=\s*[0-9,.A-Z]*" | grep -o "[0-9,.A-Z]*$") - - typeset -F 2 swap_used - swap_used=${$(echo $raw_swap_used | grep -o "[0-9,.]*")//,/.} - # Replace comma - swap_used=${swap_used//,/.} - - base=$(echo "$raw_swap_used" | grep -o "[A-Z]*$") - else - swap_total=$(grep -o -E "SwapTotal:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - swap_free=$(grep -o -E "SwapFree:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - swap_used=$(( swap_total - swap_free )) - base='K' - fi - - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "$(printSizeHumanReadable "$swap_used" $base)" 'SWAP_ICON' -} - -################################################################ -# Symfony2-PHPUnit test ratio -prompt_symfony2_tests() { - if [[ (-d src && -d app && -f app/AppKernel.php) ]]; then - local code_amount tests_amount - code_amount=$(ls -1 src/**/*.php | grep -vc Tests) - tests_amount=$(ls -1 src/**/*.php | grep -c Tests) - - build_test_stats "$1" "$0" "$2" "$code_amount" "$tests_amount" "SF2" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Symfony2-Version -prompt_symfony2_version() { - if [[ -f app/bootstrap.php.cache ]]; then - local symfony2_version - symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g') - "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$symfony2_version" 'SYMFONY_ICON' - fi -} - -################################################################ -# Show a ratio of tests vs code -build_test_stats() { - local code_amount="$4" - local tests_amount="$5"+0.00001 - local headline="$6" - - # Set float precision to 2 digits: - typeset -F 2 ratio - local ratio=$(( (tests_amount/code_amount) * 100 )) - - (( ratio >= 75 )) && "$1_prompt_segment" "${2}_GOOD" "$3" "cyan" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" - (( ratio >= 50 && ratio < 75 )) && "$1_prompt_segment" "$2_AVG" "$3" "yellow" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" - (( ratio < 50 )) && "$1_prompt_segment" "$2_BAD" "$3" "red" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" -} - -################################################################ -# System time -prompt_time() { - set_default POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}" - - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_TIME_FORMAT" "TIME_ICON" -} - -################################################################ -# System date -prompt_date() { - set_default POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}" - - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_DATE_FORMAT" "DATE_ICON" -} - -################################################################ -# todo.sh: shows the number of tasks in your todo.sh file -prompt_todo() { - if $(hash todo.sh 2>&-); then - count=$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }') - if [[ "$count" = <-> ]]; then - "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" "$count" 'TODO_ICON' - fi - fi -} - -################################################################ -# VCS segment: shows the state of your repository, if you are in a folder under -# version control -set_default POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND "red" -# Default: Just display the first 8 characters of our changeset-ID. -set_default POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH "8" -powerlevel9k_vcs_init() { - if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then - POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH" - fi - - # Load VCS_INFO - autoload -Uz vcs_info - - VCS_WORKDIR_DIRTY=false - VCS_WORKDIR_HALF_DIRTY=false - - # The vcs segment can have three different states - defaults to 'clean'. - typeset -gAH vcs_states - vcs_states=( - 'clean' 'green' - 'modified' 'yellow' - 'untracked' 'green' - ) - - VCS_CHANGESET_PREFIX='' - if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then - VCS_CHANGESET_PREFIX="$(print_icon 'VCS_COMMIT_ICON')%0.$POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH""i " - fi - - zstyle ':vcs_info:*' enable git hg svn - zstyle ':vcs_info:*' check-for-changes true - - VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%b%c%u%m" - zstyle ':vcs_info:*' formats "$VCS_DEFAULT_FORMAT" - - zstyle ':vcs_info:*' actionformats "%b %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f" - - zstyle ':vcs_info:*' stagedstr " $(print_icon 'VCS_STAGED_ICON')" - zstyle ':vcs_info:*' unstagedstr " $(print_icon 'VCS_UNSTAGED_ICON')" - - defined POWERLEVEL9K_VCS_GIT_HOOKS || POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname) - zstyle ':vcs_info:git*+set-message:*' hooks $POWERLEVEL9K_VCS_GIT_HOOKS - defined POWERLEVEL9K_VCS_HG_HOOKS || POWERLEVEL9K_VCS_HG_HOOKS=(vcs-detect-changes) - zstyle ':vcs_info:hg*+set-message:*' hooks $POWERLEVEL9K_VCS_HG_HOOKS - defined POWERLEVEL9K_VCS_SVN_HOOKS || POWERLEVEL9K_VCS_SVN_HOOKS=(vcs-detect-changes svn-detect-changes) - zstyle ':vcs_info:svn*+set-message:*' hooks $POWERLEVEL9K_VCS_SVN_HOOKS - - # For Hg, only show the branch name - zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b" - # The `get-revision` function must be turned on for dirty-check to work for Hg - zstyle ':vcs_info:hg*:*' get-revision true - zstyle ':vcs_info:hg*:*' get-bookmarks true - zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks - - # For svn, only - # TODO fix the %b (branch) format for svn. Using %b breaks - # color-encoding of the foreground for the rest of the powerline. - zstyle ':vcs_info:svn*:*' formats "$VCS_CHANGESET_PREFIX%c%u" - zstyle ':vcs_info:svn*:*' actionformats "$VCS_CHANGESET_PREFIX%c%u %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f" - - if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then - zstyle ':vcs_info:*' get-revision true - fi -} - -################################################################ -# Segment to show VCS information -prompt_vcs() { - VCS_WORKDIR_DIRTY=false - VCS_WORKDIR_HALF_DIRTY=false - local current_state="" - - # Actually invoke vcs_info manually to gather all information. - vcs_info - local vcs_prompt="${vcs_info_msg_0_}" - - if [[ -n "$vcs_prompt" ]]; then - if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then - # $vcs_visual_identifier gets set in +vi-vcs-detect-changes in functions/vcs.zsh, - # as we have there access to vcs_info internal hooks. - current_state='modified' - else - if [[ "$VCS_WORKDIR_HALF_DIRTY" == true ]]; then - current_state='untracked' - else - current_state='clean' - fi - fi - "$1_prompt_segment" "${0}_${(U)current_state}" "$2" "${vcs_states[$current_state]}" "$DEFAULT_COLOR" "$vcs_prompt" "$vcs_visual_identifier" - fi -} - -################################################################ -# Vi Mode: show editing mode (NORMAL|INSERT) -set_default POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT" -set_default POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL" -prompt_vi_mode() { - case ${KEYMAP} in - vicmd) - "$1_prompt_segment" "$0_NORMAL" "$2" "$DEFAULT_COLOR" "default" "$POWERLEVEL9K_VI_COMMAND_MODE_STRING" - ;; - main|viins|*) - if [[ -z $POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then return; fi - "$1_prompt_segment" "$0_INSERT" "$2" "$DEFAULT_COLOR" "blue" "$POWERLEVEL9K_VI_INSERT_MODE_STRING" - ;; - esac -} - -################################################################ -# Virtualenv: current working virtualenv -# More information on virtualenv (Python): -# https://virtualenv.pypa.io/en/latest/ -prompt_virtualenv() { - local virtualenv_path="$VIRTUAL_ENV" - if [[ -n "$virtualenv_path" && "$VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$(basename "$virtualenv_path")" 'PYTHON_ICON' - fi -} - -################################################################ -# pyenv: current active python version (with restrictions) -# https://github.com/pyenv/pyenv#choosing-the-python-version -prompt_pyenv() { - if [[ -n "$PYENV_VERSION" ]]; then - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$PYENV_VERSION" 'PYTHON_ICON' - fi -} - -################################################################ -# Display openfoam information -prompt_openfoam() { - local wm_project_version="$WM_PROJECT_VERSION" - local wm_fork="$WM_FORK" - if [[ -n "$wm_project_version" ]] && [[ -z "$wm_fork" ]] ; then - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "OF: $(basename "$wm_project_version")" - elif [[ -n "$wm_project_version" ]] && [[ -n "$wm_fork" ]] ; then - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "F-X: $(basename "$wm_project_version")" - fi -} - -################################################################ -# Segment to display Swift version -prompt_swift_version() { - # Get the first number as this is probably the "main" version number.. - local swift_version=$(swift --version 2>/dev/null | grep -o -E "[0-9.]+" | head -n 1) - [[ -z "${swift_version}" ]] && return - - "$1_prompt_segment" "$0" "$2" "magenta" "white" "${swift_version}" 'SWIFT_ICON' -} - -################################################################ -# dir_writable: Display information about the user's permission to write in the current directory -prompt_dir_writable() { - if [[ ! -w "$PWD" ]]; then - "$1_prompt_segment" "$0_FORBIDDEN" "$2" "red" "yellow1" "" 'LOCK_ICON' - fi -} - -################################################################ -# Kubernetes Current Context/Namespace -prompt_kubecontext() { - local kubectl_version="$(kubectl version --client 2>/dev/null)" - - if [[ -n "$kubectl_version" ]]; then - # Get the current Kuberenetes context - local cur_ctx=$(kubectl config view -o=jsonpath='{.current-context}') - cur_namespace="$(kubectl config view -o=jsonpath="{.contexts[?(@.name==\"${cur_ctx}\")].context.namespace}")" - # If the namespace comes back empty set it default. - if [[ -z "${cur_namespace}" ]]; then - cur_namespace="default" - fi - - local k8s_final_text="" - - if [[ "$cur_ctx" == "$cur_namespace" ]]; then - # No reason to print out the same identificator twice - k8s_final_text="$cur_ctx" - else - k8s_final_text="$cur_ctx/$cur_namespace" - fi - - "$1_prompt_segment" "$0" "$2" "magenta" "white" "$k8s_final_text" "KUBERNETES_ICON" - fi -} - -################################################################ -# Dropbox status -prompt_dropbox() { - # The first column is just the directory, so cut it - local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" - - # Only show if the folder is tracked and dropbox is running - if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then - # If "up to date", only show the icon - if [[ "$dropbox_status" =~ 'up to date' ]]; then - dropbox_status="" - fi - - "$1_prompt_segment" "$0" "$2" "white" "blue" "$dropbox_status" "DROPBOX_ICON" - fi -} - -# print Java version number -prompt_java_version() { - local java_version - # Stupid: Java prints its version on STDERR. - # The first version ouput will print nothing, we just - # use it to transport whether the command was successful. - # If yes, we parse the version string (and need to - # redirect the stderr to stdout to make the pipe work). - java_version=$(java -version 2>/dev/null && java -fullversion 2>&1 | cut -d '"' -f 2) - - if [[ -n "$java_version" ]]; then - "$1_prompt_segment" "$0" "$2" "red" "white" "$java_version" "JAVA_ICON" - fi -} - -################################################################ -# Prompt processing and drawing -################################################################ -# Main prompt -build_left_prompt() { - local index=1 - local element - for element in "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[@]}"; do - # Remove joined information in direct calls - element=${element%_joined} - - # Check if it is a custom command, otherwise interpet it as - # a prompt. - if [[ $element[0,7] =~ "custom_" ]]; then - "prompt_custom" "left" "$index" $element[8,-1] - else - "prompt_$element" "left" "$index" - fi - - index=$((index + 1)) - done - - left_prompt_end -} - -# Right prompt -build_right_prompt() { - local index=1 - local element - for element in "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[@]}"; do - # Remove joined information in direct calls - element=${element%_joined} - - # Check if it is a custom command, otherwise interpet it as - # a prompt. - if [[ $element[0,7] =~ "custom_" ]]; then - "prompt_custom" "right" "$index" $element[8,-1] - else - "prompt_$element" "right" "$index" - fi - - index=$((index + 1)) - done - - # Clear to the end of the line - echo -n "%E" -} - -powerlevel9k_preexec() { - _P9K_TIMER_START=$EPOCHREALTIME -} - -set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false -powerlevel9k_prepare_prompts() { - local RETVAL RPROMPT_PREFIX RPROMPT_SUFFIX - RETVAL=$? - RETVALS=( "$pipestatus[@]" ) - - _P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START)) - - # Reset start time - _P9K_TIMER_START=0x7FFFFFFF - - if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then - PROMPT='$(print_icon 'MULTILINE_FIRST_PROMPT_PREFIX')%f%b%k$(build_left_prompt) -$(print_icon 'MULTILINE_LAST_PROMPT_PREFIX')' - if [[ "$POWERLEVEL9K_RPROMPT_ON_NEWLINE" != true ]]; then - # The right prompt should be on the same line as the first line of the left - # prompt. To do so, there is just a quite ugly workaround: Before zsh draws - # the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we - # advise it to go one line down. See: - # http://superuser.com/questions/357107/zsh-right-justify-in-ps1 - local LC_ALL="" LC_CTYPE="en_US.UTF-8" # Set the right locale to protect special characters - RPROMPT_PREFIX='%{'$'\e[1A''%}' # one line up - RPROMPT_SUFFIX='%{'$'\e[1B''%}' # one line down - else - RPROMPT_PREFIX='' - RPROMPT_SUFFIX='' - fi - else - PROMPT='%f%b%k$(build_left_prompt)' - RPROMPT_PREFIX='' - RPROMPT_SUFFIX='' - fi - - if [[ "$POWERLEVEL9K_DISABLE_RPROMPT" != true ]]; then - RPROMPT="${RPROMPT_PREFIX}"'%f%b%k$(build_right_prompt)%{$reset_color%}'"${RPROMPT_SUFFIX}" - fi - -local NEWLINE=' -' - - if [[ $POWERLEVEL9K_PROMPT_ADD_NEWLINE == true ]]; then - NEWLINES="" - repeat ${POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT:-1} { NEWLINES+=$NEWLINE } - PROMPT="$NEWLINES$PROMPT" - fi - - # Allow iTerm integration to work - [[ $ITERM_SHELL_INTEGRATION_INSTALLED == "Yes" ]] && PROMPT="%{$(iterm2_prompt_mark)%}$PROMPT" -} - -zle-keymap-select () { - zle reset-prompt - zle -R -} - -set_default POWERLEVEL9K_IGNORE_TERM_COLORS false -set_default POWERLEVEL9K_IGNORE_TERM_LANG false - -prompt_powerlevel9k_setup() { - # The value below was set to better support 32-bit CPUs. - # It's the maximum _signed_ integer value on 32-bit CPUs. - # Please don't change it until 19 January of 2038. ;) - - # Disable false display of command execution time - _P9K_TIMER_START=0x7FFFFFFF - - # The prompt function will set these prompt_* options after the setup function - # returns. We need prompt_subst so we can safely run commands in the prompt - # without them being double expanded and we need prompt_percent to expand the - # common percent escape sequences. - prompt_opts=(cr percent sp subst) - - # Borrowed from promptinit, sets the prompt options in case the theme was - # not initialized via promptinit. - setopt noprompt{bang,cr,percent,sp,subst} "prompt${^prompt_opts[@]}" - - # Display a warning if the terminal does not support 256 colors - termColors - - # If the terminal `LANG` is set to `C`, this theme will not work at all. - if [[ $POWERLEVEL9K_IGNORE_TERM_LANG == false ]]; then - local term_lang - term_lang=$(echo $LANG) - if [[ $term_lang == 'C' ]]; then - print -P "\t%F{red}WARNING!%f Your terminal's 'LANG' is set to 'C', which breaks this theme!" - print -P "\t%F{red}WARNING!%f Please set your 'LANG' to a UTF-8 language, like 'en_US.UTF-8'" - print -P "\t%F{red}WARNING!%f _before_ loading this theme in your \~\.zshrc. Putting" - print -P "\t%F{red}WARNING!%f %F{blue}export LANG=\"en_US.UTF-8\"%f at the top of your \~\/.zshrc is sufficient." - fi - fi - - defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) - defined POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS || POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time) - - # Display a warning if deprecated segments are in use. - typeset -AH deprecated_segments - # old => new - deprecated_segments=( - 'longstatus' 'status' - ) - print_deprecation_warning deprecated_segments - - # initialize colors - autoload -U colors && colors - - if segment_in_use "vcs"; then - powerlevel9k_vcs_init - fi - - # initialize timing functions - zmodload zsh/datetime - - # Initialize math functions - zmodload zsh/mathfunc - - # initialize hooks - autoload -Uz add-zsh-hook - - # prepare prompts - add-zsh-hook precmd powerlevel9k_prepare_prompts - add-zsh-hook preexec powerlevel9k_preexec - - zle -N zle-keymap-select -} - -prompt_powerlevel9k_teardown() { - add-zsh-hook -D precmd powerlevel9k_\* - add-zsh-hook -D preexec powerlevel9k_\* - PROMPT='%m%# ' - RPROMPT= -} - -prompt_powerlevel9k_setup "$@" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup b/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup new file mode 120000 index 0000000..311575f --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/prompt_powerlevel9k_setup @@ -0,0 +1 @@ +powerlevel9k.zsh-theme \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/CODE_OF_CONDUCT.md b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..dc906ab --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at kate.ward@forestent.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/LICENSE b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/README.md b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/README.md new file mode 100644 index 0000000..e0f92f2 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/README.md @@ -0,0 +1,434 @@ +# shUnit2 + +shUnit2 is a [xUnit](http://en.wikipedia.org/wiki/XUnit) unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to [JUnit](http://www.junit.org), [PyUnit](http://pyunit.sourceforge.net), etc.. If you have ever had the desire to write a unit test for a shell script, shUnit2 can do the job. + +[![Travis CI](https://img.shields.io/travis/kward/shunit2.svg)](https://travis-ci.org/kward/shunit2) + +## Table of Contents +* [Introduction](#introduction) + * [Credits / Contributors](#credits-contributors) + * [Feedback](#feedback) +* [Quickstart](#quickstart) +* [Function Reference](#function-reference) + * [General Info](#general-info) + * [Asserts](#asserts) + * [Failures](#failures) + * [Setup/Teardown](#setup-teardown) + * [Skipping](#skipping) + * [Suites](#suites) +* [Advanced Usage](#advanced-usage) + * [Some constants you can use](#some-constants-you-can-use) + * [Error Handling](#error-handling) + * [Including Line Numbers in Asserts (Macros)](#including-line-numbers-in-asserts-macros) + * [Test Skipping](#test-skipping) +* [Appendix](#appendix) + * [Getting help](#getting-help) + * [Zsh](#zsh) + +--- +## Introduction +shUnit2 was originally developed to provide a consistent testing solution for [log4sh][log4sh], a shell based logging framework similar to [log4j](http://logging.apache.org). During the development of that product, a repeated problem of having things work just fine under one shell (`/bin/bash` on Linux to be specific), and then not working under another shell (`/bin/sh` on Solaris) kept coming up. Although several simple tests were run, they were not adequate and did not catch some corner cases. The decision was finally made to write a proper unit test framework after multiple brown-bag releases were made. _Research was done to look for an existing product that met the testing requirements, but no adequate product was found._ + +Tested Operating Systems (varies over time) + +* Cygwin +* FreeBSD (user supported) +* Linux (Gentoo, Ubuntu) +* Mac OS X +* Solaris 8, 9, 10 (inc. OpenSolaris) + +Tested Shells + +* Bourne Shell (__sh__) +* BASH - GNU Bourne Again SHell (__bash__) +* DASH (__dash__) +* Korn Shell (__ksh__) +* pdksh - Public Domain Korn Shell (__pdksh__) +* zsh - Zsh (__zsh__) (since 2.1.2) _please see the Zsh shell errata for more information_ + +See the appropriate Release Notes for this release (`doc/RELEASE_NOTES-X.X.X.txt`) for the list of actual versions tested. + +### Credits / Contributors +A list of contributors to shUnit2 can be found in `doc/contributors.md`. Many thanks go out to all those who have contributed to make this a better tool. + +shUnit2 is the original product of many hours of work by Kate Ward, the primary author of the code. For related software, check out https://github.com/kward. + +### Feedback +Feedback is most certainly welcome for this document. Send your additions, comments and criticisms to the shunit2-users@google.com mailing list. + +--- + +## Quickstart +This section will give a very quick start to running unit tests with shUnit2. More information is located in later sections. + +Here is a quick sample script to show how easy it is to write a unit test in shell. _Note: the script as it stands expects that you are running it from the "examples" directory._ + +```sh +#! /bin/sh +# file: examples/equality_test.sh + +testEquality() { + assertEquals 1 1 +} + +# Load shUnit2. +. ./shunit2 +``` + +Running the unit test should give results similar to the following. + +```console +$ cd examples +$ ./equality_test.sh +testEquality + +Ran 1 test. + +OK +``` + +W00t! You've just run your first successful unit test. So, what just happened? Quite a bit really, and it all happened simply by sourcing the `shunit2` library. The basic functionality for the script above goes like this: + +* When shUnit2 is sourced, it will walk through any functions defined whose name starts with the string `test`, and add those to an internal list of tests to execute. Once a list of test functions to be run has been determined, shunit2 will go to work. +* Before any tests are executed, shUnit2 again looks for a function, this time one named `oneTimeSetUp()`. If it exists, it will be run. This function is normally used to setup the environment for all tests to be run. Things like creating directories for output or setting environment variables are good to place here. Just so you know, you can also declare a corresponding function named `oneTimeTearDown()` function that does the same thing, but once all the tests have been completed. It is good for removing temporary directories, etc. +* shUnit2 is now ready to run tests. Before doing so though, it again looks for another function that might be declared, one named `setUp()`. If the function exists, it will be run before each test. It is good for resetting the environment so that each test starts with a clean slate. **At this stage, the first test is finally run.** The success of the test is recorded for a report that will be generated later. After the test is run, shUnit2 looks for a final function that might be declared, one named `tearDown()`. If it exists, it will be run after each test. It is a good place for cleaning up after each test, maybe doing things like removing files that were created, or removing directories. This set of steps, `setUp() > test() > tearDown()`, is repeated for all of the available tests. +* Once all the work is done, shUnit2 will generate the nice report you saw above. A summary of all the successes and failures will be given so that you know how well your code is doing. + +We should now try adding a test that fails. Change your unit test to look like this. + +```sh +#! /bin/sh +# file: examples/party_test.sh + +testEquality() { + assertEquals 1 1 +} + +testPartyLikeItIs1999() { + year=`date '+%Y'` + assertEquals "It's not 1999 :-(" '1999' "${year}" +} + +# Load shUnit2. +. ./shunit2 +``` + +So, what did you get? I guess it told you that this isn't 1999. Bummer, eh? Hopefully, you noticed a couple of things that were different about the second test. First, we added an optional message that the user will see if the assert fails. Second, we did comparisons of strings instead of integers as in the first test. It doesn't matter whether you are testing for equality of strings or integers. Both work equally well with shUnit2. + +Hopefully, this is enough to get you started with unit testing. If you want a ton more examples, take a look at the tests provided with [log4sh][log4sh] or [shFlags][shflags]. Both provide excellent examples of more advanced usage. shUnit2 was after all written to meet the unit testing need that [log4sh][log4sh] had. + +--- + +## Function Reference + +### General Info + +Any string values passed should be properly quoted -- they should must be surrounded by single-quote (`'`) or double-quote (`"`) characters -- so that the shell will properly parse them. + +### Asserts + +`assertEquals [message] expected actual` + +Asserts that _expected_ and _actual_ are equal to one another. The _expected_ and _actual_ values can be either strings or integer values as both will be treated as strings. The _message_ is optional, and must be quoted. + +`assertNotEquals [message] unexpected actual` + +Asserts that _unexpected_ and _actual_ are not equal to one another. The _unexpected_ and _actual_ values can be either strings or integer values as both will be treaded as strings. The _message_ is optional, and must be quoted. + +`assertSame [message] expected actual` + +This function is functionally equivalent to `assertEquals`. + +`assertNotSame [message] unexpected actual` + +This function is functionally equivalent to `assertNotEquals`. + +`assertNull [message] value` + +Asserts that _value_ is _null_, or in shell terms, a zero-length string. The _value_ must be a string as an integer value does not translate into a zero-length string. The _message_ is optional, and must be quoted. + +`assertNotNull [message] value` + +Asserts that _value_ is _not null_, or in shell terms, a non-empty string. The _value_ may be a string or an integer as the later will be parsed as a non-empty string value. The _message_ is optional, and must be quoted. + +`assertTrue [message] condition` + +Asserts that a given shell test _condition_ is _true_. The condition can be as simple as a shell _true_ value (the value `0` -- equivalent to `${SHUNIT_TRUE}`), or a more sophisticated shell conditional expression. The _message_ is optional, and must be quoted. + +A sophisticated shell conditional expression is equivalent to what the __if__ or __while__ shell built-ins would use (more specifically, what the __test__ command would use). Testing for example whether some value is greater than another value can be done this way. + +`assertTrue "[ 34 -gt 23 ]"` + +Testing for the ability to read a file can also be done. This particular test will fail. + +`assertTrue 'test failed' "[ -r /some/non-existant/file' ]"` + +As the expressions are standard shell __test__ expressions, it is possible to string multiple expressions together with `-a` and `-o` in the standard fashion. This test will succeed as the entire expression evaluates to _true_. + +`assertTrue 'test failed' '[ 1 -eq 1 -a 2 -eq 2 ]'` + +_One word of warning: be very careful with your quoting as shell is not the most forgiving of bad quoting, and things will fail in strange ways._ + +`assertFalse [message] condition` + +Asserts that a given shell test _condition_ is _false_. The condition can be as simple as a shell _false_ value (the value `1` -- equivalent to `${SHUNIT_FALSE}`), or a more sophisticated shell conditional expression. The _message_ is optional, and must be quoted. + +_For examples of more sophisticated expressions, see `assertTrue`._ + +### Failures + +Just to clarify, failures __do not__ test the various arguments against one another. Failures simply fail, optionally with a message, and that is all they do. If you need to test arguments against one another, use asserts. + +If all failures do is fail, why might one use them? There are times when you may have some very complicated logic that you need to test, and the simple asserts provided are simply not adequate. You can do your own validation of the code, use an `assertTrue ${SHUNIT_TRUE}` if your own tests succeeded, and use a failure to record a failure. + +`fail [message]` + +Fails the test immediately. The _message_ is optional, and must be quoted. + +`failNotEquals [message] unexpected actual` + +Fails the test immediately, reporting that the _unexpected_ and _actual_ values are not equal to one another. The _message_ is optional, and must be quoted. + +_Note: no actual comparison of unexpected and actual is done._ + +`failSame [message] expected actual` + +Fails the test immediately, reporting that the _expected_ and _actual_ values are the same. The _message_ is optional, and must be quoted. + +_Note: no actual comparison of expected and actual is done._ + +`failNotSame [message] expected actual` + +Fails the test immediately, reporting that the _expected_ and _actual_ values are not the same. The _message_ is optional, and must be quoted. + +_Note: no actual comparison of expected and actual is done._ + +### Setup/Teardown + +`oneTimeSetUp` + +This function can be be optionally overridden by the user in their test suite. + +If this function exists, it will be called once before any tests are run. It is useful to prepare a common environment for all tests. + +`oneTimeTearDown` + +This function can be be optionally overridden by the user in their test suite. + +If this function exists, it will be called once after all tests are completed. It is useful to clean up the environment after all tests. + +`setUp` + +This function can be be optionally overridden by the user in their test suite. + +If this function exists, it will be called before each test is run. It is useful to reset the environment before each test. + +`tearDown` + +This function can be be optionally overridden by the user in their test suite. + +If this function exists, it will be called after each test completes. It is useful to clean up the environment after each test. + +### Skipping + +`startSkipping` + +This function forces the remaining _assert_ and _fail_ functions to be "skipped", i.e. they will have no effect. Each function skipped will be recorded so that the total of asserts and fails will not be altered. + +`endSkipping` + +This function returns calls to the _assert_ and _fail_ functions to their default behavior, i.e. they will be called. + +`isSkipping` + +This function returns the current state of skipping. It can be compared against `${SHUNIT_TRUE}` or `${SHUNIT_FALSE}` if desired. + +### Suites + +The default behavior of shUnit2 is that all tests will be found dynamically. If you have a specific set of tests you want to run, or you don't want to use the standard naming scheme of prefixing your tests with `test`, these functions are for you. Most users will never use them though. + +`suite` + +This function can be optionally overridden by the user in their test suite. + +If this function exists, it will be called when `shunit2` is sourced. If it does not exist, shUnit2 will search the parent script for all functions beginning with the word `test`, and they will be added dynamically to the test suite. + +`suite_addTest name` + +This function adds a function named _name_ to the list of tests scheduled for execution as part of this test suite. This function should only be called from within the `suite()` function. + +--- + +## Advanced Usage + +### Some constants you can use + +There are several constants provided by shUnit2 as variables that might be of use to you. + +*Predefined* + +| Constant | Value | +| --------------- | ----- | +| SHUNIT\_TRUE | Standard shell `true` value (the integer value 0). | +| SHUNIT\_FALSE | Standard shell `false` value (the integer value 1). | +| SHUNIT\_ERROR | The integer value 2. | +| SHUNIT\_TMPDIR | Path to temporary directory that will be automatically cleaned up upon exit of shUnit2. | +| SHUNIT\_VERSION | The version of shUnit2 you are running. | + +*User defined* + +| Constant | Value | +| ----------------- | ----- | +| SHUNIT\_CMD\_EXPR | Override which `expr` command is used. By default `expr` is used, except on BSD systems where `gexpr` is used. | +| SHUNIT\_COLOR | Enable colorized output. Options are 'auto', 'always', or 'never', with 'auto' being the default. | +| SHUNIT\_PARENT | The filename of the shell script containing the tests. This is needed specifically for Zsh support. | +| SHUNIT\_TEST\_PREFIX | Define this variable to add a prefix in front of each test name that is output in the test report. | + +### Error handling + +The constants values `SHUNIT_TRUE`, `SHUNIT_FALSE`, and `SHUNIT_ERROR` are returned from nearly every function to indicate the success or failure of the function. Additionally the variable `flags_error` is filled with a detailed error message if any function returns with a `SHUNIT_ERROR` value. + +### Including Line Numbers in Asserts (Macros) + +If you include lots of assert statements in an individual test function, it can become difficult to determine exactly which assert was thrown unless your messages are unique. To help somewhat, line numbers can be included in the assert messages. To enable this, a special shell "macro" must be used rather than the standard assert calls. _Shell doesn't actually have macros; the name is used here as the operation is similar to a standard macro._ + +For example, to include line numbers for a `assertEquals()` function call, replace the `assertEquals()` with `${_ASSERT_EQUALS_}`. + +_**Example** -- Asserts with and without line numbers_ +```sh +#! /bin/sh +# file: examples/lineno_test.sh + +testLineNo() { + # This assert will have line numbers included (e.g. "ASSERT:[123] ..."). + echo "ae: ${_ASSERT_EQUALS_}" + ${_ASSERT_EQUALS_} 'not equal' 1 2 + + # This assert will not have line numbers included (e.g. "ASSERT: ..."). + assertEquals 'not equal' 1 2 +} + +# Load shUnit2. +. ./shunit2 +``` + +Notes: + +1. Due to how shell parses command-line arguments, all strings used with macros should be quoted twice. Namely, single-quotes must be converted to single-double-quotes, and vice-versa. If the string being passed is absolutely for sure not empty, the extra quoting is not necessary.

Normal `assertEquals` call.
`assertEquals 'some message' 'x' ''`

Macro `_ASSERT_EQUALS_` call. Note the extra quoting around the _message_ and the _null_ value.
`_ASSERT_EQUALS_ '"some message"' 'x' '""'` + +1. Line numbers are not supported in all shells. If a shell does not support them, no errors will be thrown. Supported shells include: __bash__ (>=3.0), __ksh__, __pdksh__, and __zsh__. + +### Test Skipping + +There are times where the test code you have written is just not applicable to the system you are running on. This section describes how to skip these tests but maintain the total test count. + +Probably the easiest example would be shell code that is meant to run under the __bash__ shell, but the unit test is running under the Bourne shell. There are things that just won't work. The following test code demonstrates two sample functions, one that will be run under any shell, and the another that will run only under the __bash__ shell. + +_**Example** -- math include_ +```sh +# file: examples/math.inc. + +add_generic() { + num_a=$1 + num_b=$2 + + expr $1 + $2 +} + +add_bash() { + num_a=$1 + num_b=$2 + + echo $(($1 + $2)) +} +``` + +And here is a corresponding unit test that correctly skips the `add_bash()` function when the unit test is not running under the __bash__ shell. + +_**Example** -- math unit test_ +```sh +#! /bin/sh +# file: examples/math_test.sh + +testAdding() { + result=`add_generic 1 2` + assertEquals \ + "the result of '${result}' was wrong" \ + 3 "${result}" + + # Disable non-generic tests. + [ -z "${BASH_VERSION:-}" ] && startSkipping + + result=`add_bash 1 2` + assertEquals \ + "the result of '${result}' was wrong" \ + 3 "${result}" +} + +oneTimeSetUp() { + # Load include to test. + . ./math.inc +} + +# Load and run shUnit2. +. ./shunit2 +``` + +Running the above test under the __bash__ shell will result in the following output. + +```console +$ /bin/bash math_test.sh +testAdding + +Ran 1 test. + +OK +``` + +But, running the test under any other Unix shell will result in the following output. + +```console +$ /bin/ksh math_test.sh +testAdding + +Ran 1 test. + +OK (skipped=1) +``` + +As you can see, the total number of tests has not changed, but the report indicates that some tests were skipped. + +Skipping can be controlled with the following functions: `startSkipping()`, `endSkipping()`, and `isSkipping()`. Once skipping is enabled, it will remain enabled until the end of the current test function call, after which skipping is disabled. + +--- + +## Appendix + +### Getting Help + +For help, please send requests to either the shunit2-users@googlegroups.com mailing list (archives available on the web at http://groups.google.com/group/shunit2-users) or directly to Kate Ward . + +### Zsh + +For compatibility with Zsh, there is one requirement that must be met -- the `shwordsplit` option must be set. There are three ways to accomplish this. + +1. In the unit-test script, add the following shell code snippet before sourcing the `shunit2` library. + +```sh +setopt shwordsplit +``` + +1. When invoking __zsh__ from either the command-line or as a script with `#!`, add the `-y` parameter. + +```sh +#! /bin/zsh -y +``` + +1. When invoking __zsh__ from the command-line, add `-o shwordsplit --` as parameters before the script name. + +```console +$ zsh -o shwordsplit -- some_script +``` + +[log4sh]: https://github.com/kward/log4sh +[shflags]: https://github.com/kward/shflags diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/CHANGES-2.1.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/CHANGES-2.1.md similarity index 56% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/CHANGES-2.1.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/CHANGES-2.1.md index 8cde2f3..5c3fdf0 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/CHANGES-2.1.txt +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/CHANGES-2.1.md @@ -1,14 +1,53 @@ -Changes in shUnit2 2.1.X -======================== +# shUnit2 2.1.x Changes -Changes with 2.1.7 ------------------- +## Changes with 2.1.8 -Updated the LGPL license from http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt. +### Enhancements + +Issue #29. Add support for user defined prefix for test names. A prefix can be added by defining the `SHUNIT_TEST_PREFIX` variable. + +Issue #78. Added an example for using suite tests. + +Run continuous integration additionally against Ubuntu Trusty. + +### Bug fixes + +Issue #84. Treat syntax errors in functions as test failures. + +Issue #77. Fail tests when the environment functions (e.g. `setup()` or `tearDown()`) fail. + +## Changes with 2.1.7 + +### Bug fixes + +Issue #69. shUnit2 should not exit with 0 when it has (syntax) errors. + +### Enhancements + +Issue #54. Shell commands prefixed with '\' so that they can be stubbed in +tests. + +Issue #68. Ran all code through [ShellCheck](http://www.shellcheck.net/). + +Issue #60. Continuous integration tests now run with +[Travis CI](https://travis-ci.org/kward/shunit2). + +Issue #56. Added color support. Color is enabled automatically when supported, +but can be disabled by defining the SHUNIT_COLOR environment variable before +sourcing shunit2. Accepted values are `always`, `auto` (the default), and +`none`. + +Issue #35. Add colored output. + +### Other + +Moved code to GitHub (https://github.com/kward/shunit2), and restructured to +be more GitHub like. + +Changed to the Apache 2.0 license. -Changes with 2.1.6 ------------------- +## Changes with 2.1.6 Removed all references to the DocBook documentation. @@ -18,11 +57,11 @@ Fixed error message in fail() that stated wrong number of required arguments. Updated lib/versions. -Fixed bug in _shunit_mktempDir() where a failure occurred when the 'od' command -was not present in /usr/bin. +Fixed bug in `_shunit_mktempDir()` where a failure occurred when the 'od' +command was not present in `/usr/bin`. -Renamed shunit_tmpDir variable to SHUNIT_TMPDIR to closer match the standard -TMPDIR variable. +Renamed `shunit_tmpDir` variable to `SHUNIT_TMPDIR` to closer match the standard +`TMPDIR` variable. Added support for calling shunit2 as an executable, in addition to the existing method of sourcing it in as a library. This allows users to keep tests working @@ -32,56 +71,55 @@ distribution. Issue #14: Improved handling of some strange chars (e.g. single and double quotes) in messages. -Issue# 27: Fixed error message for assertSame(). +Issue# 27: Fixed error message for `assertSame()`. Issue# 25: Added check and error message to user when phantom functions are -written to a partition mounted with noexec. +written to a partition mounted with `noexec`. -Issue# 11: Added support for defining functions like 'function someFunction()'. +Issue# 11: Added support for defining functions like `function someFunction()`. -Changes with 2.1.5 ------------------- +## Changes with 2.1.5 Issue# 1: Fixed bug pointed out by R Bernstein in the trap code where certain types of exit conditions did not generate the ending report. -Issue# 2: Added assertNotEquals() assert. +Issue# 2: Added `assertNotEquals()` assert. Issue# 3: Moved check for unset variables out of shUnit2 into the unit tests. Testing poorly written software blows up if this check is in, but it is only -interesting for shUnit2 itself. Added shunit_test_output.sh unit test for this. -Some shells still do not catch such errors properly (e.g. Bourne shell and BASH -2.x). +interesting for shUnit2 itself. Added `shunit_test_output.sh` unit test for +this. Some shells still do not catch such errors properly (e.g. Bourne shell and +BASH 2.x). Added new custom assert in test_helpers to check for output to STDOUT, and none to STDERR. -Replaced fatal message in the temp directory creation with a _shunit_fatal() +Replaced fatal message in the temp directory creation with a `_shunit_fatal()` function call. Fixed test_output unit test so it works now that the 'set -u' stuff was removed for Issue# 3. -Flushed out the coding standards in the README.txt a bit more, and brought the +Flushed out the coding standards in the `README.txt` a bit more, and brought the shunit2 code up to par with the documented standards. Issue# 4: Completely changed the reporting output to be a closer match for JUnit and PyUnit. As a result, tests are counted separately from assertions. -Provide public shunit_tmpDir variable that can be used by unit test scripts that -need automated and guaranteed cleanup. +Provide public `shunit_tmpDir` variable that can be used by unit test scripts +that need automated and guaranteed cleanup. Issue# 7: Fixed duplicated printing of messages passed to asserts. -Per code review, fixed wording of failSame() and failNotSame() messages. +Per code review, fixed wording of `failSame()` and `failNotSame()` messages. -Replaced version_info.sh with versions library and made appropriate changes in +Replaced `version_info.sh` with versions library and made appropriate changes in other scripts to use it. -Added gen_test_results.sh to make releases easier. +Added `gen_test_results.sh` to make releases easier. -Fixed bugs in shlib_relToAbsPath() in shlib. +Fixed bugs in `shlib_relToAbsPath()` in shlib. Converted DocBook documentation to reStructuredText for easier maintenance. The DocBook documentation is now considered obsolete, and will be removed in a @@ -97,10 +135,9 @@ When an invalid number of arguments is passed to a function, the invalid number is returned to the user so they are more aware of what the cause might be. -Changes with 2.1.4 ------------------- +## Changes with 2.1.4 -Removed the _shunit_functionExists() function as it was dead code. +Removed the `_shunit_functionExists()` function as it was dead code. Fixed zsh version number check in version_info. @@ -123,11 +160,10 @@ result. Improved zsh version and option checks. -Renamed the __SHUNIT_VERSION variable to SHUNIT_VERSION. +Renamed the `__SHUNIT_VERSION` variable to `SHUNIT_VERSION`. -Changes with 2.1.3 ------------------- +## Changes with 2.1.3 Added some explicit variable defaults, even though the variables are set, as they sometimes behave strange when the script is canceled. @@ -141,29 +177,27 @@ considered failures, and do not affect the exit code. Changed detection of STDERR output in unit tests. -Changes with 2.1.2 ------------------- +## Changes with 2.1.2 Unset additional variables that were missed. Added checks and workarounds to improve zsh compatibility. -Added some argument count checks ``assertEquals()``, ``assertNull()``, and -``assertSame()`` +Added some argument count checks `assertEquals()`, `assertNull()`, and +`assertSame()`. -Changes with 2.1.1 ------------------- +## Changes with 2.1.1 -Fixed bug where ``fail()`` was not honoring skipping. +Fixed bug where `fail()` was not honoring skipping. -Fixed problem with ``docs-docbook-prep`` target that prevented it from working. +Fixed problem with `docs-docbook-prep` target that prevented it from working. (Thanks to Bryan Larsen for pointing this out.) -Changed the test in ``assertFalse()`` so that any non-zero value registers as +Changed the test in `assertFalse()` so that any non-zero value registers as false. (Credits to Bryan Larsen) -Major fiddling to bring more in line with `JUnit `. Asserts +Major fiddling to bring more in line with [JUnit](http://junit.org/). Asserts give better output when no message is given, and failures now just fail. It was pointed out that the simple 'failed' message for a failed assert was not @@ -172,7 +206,7 @@ provide the user with an expected vs actual result. The code was revised somewhat to bring closer into alignment with JUnit (v4.3.1 specifically) so that it feels more "normal". (Credits to Richard Jensen) -As part of the JUnit realignment, it was noticed that fail*() functions in +As part of the JUnit realignment, it was noticed that `fail*()` functions in JUnit don't actually do any comparisons themselves. They only generate a failure message. Updated the code to match. @@ -193,29 +227,27 @@ Fixed the method of percent calculation for the report to get achieve better accuracy. -Changes with 2.1.0 (since 2.0.1) --------------------------------- +## Changes with 2.1.0 (since 2.0.1) This release is a branch of the 2.0.1 release. -Moving to `reStructured Text `_ for +Moving to [reStructured Text](http://docutils.sourceforge.net/rst.html) for the documentation. -Fixed problem with ``fail()``. The failure message was not properly printed. +Fixed problem with `fail()`. The failure message was not properly printed. -Fixed the ``Makefile`` so that the DocBook XML and XSLT files would be +Fixed the `Makefile` so that the DocBook XML and XSLT files would be downloaded before parsing can continue. -Renamed the internal ``__SHUNIT_TRUE`` and ``__SHUNIT_FALSE`` variables to -``SHUNIT_TRUE`` and ``SHUNIT_FALSE`` so that unit tests can "use" them. +Renamed the internal `__SHUNIT_TRUE` and `__SHUNIT_FALSE` variables to +`SHUNIT_TRUE` and `SHUNIT_FALSE` so that unit tests can "use" them. Added support for test "skipping". If skipping is turned on with the -``startSkip()`` function, ``assert`` and ``fail`` functions will return -immediately, and the skip will be recorded. +`startSkip()` function, `assert` and `fail` functions will return immediately, +and the skip will be recorded. The report output format was changed to include the percentage for each test result, rather than just those successful. -.. $Revision$ .. vim:fileencoding=latin1:ft=text:spell:tw=80 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.0.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.0.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.0.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.0.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.1.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.1.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.1.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.1.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.2.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.2.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.2.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.2.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.3.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.3.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.3.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.3.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.4.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.4.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.4.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.4.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.5.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.5.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.5.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.5.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.6.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.6.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/RELEASE_NOTES-2.1.6.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.6.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.7.md b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.7.md new file mode 100644 index 0000000..6497942 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/RELEASE_NOTES-2.1.7.md @@ -0,0 +1,62 @@ +# shUnit2 2.1.7 Release Notes + +https://github.com/kward/shunit2 + +This release contains bug fixes and enhancements. It is the first release since moving to GitHub. Users can now clone the latest version at any time. + +See the `CHANGES-2.1.md` file for a full list of changes. + + +## New Features + +Colorized output, based on popular demand. shUnit2 output is now colorized based on the result of the asserts. + + +## Changes and Enhancements + +With the move to GitHub, the shUnit2 unit tests are run on every commit using the [Travis CI][TravisCI] continuous integration framework. Additionally, all code is run through [ShellCheck](http:/www.shellcheck.net/) on every commit. + +[TravisCI]: https://travis-ci.org/kward/shunit2 + +Shell commands in shUnit2 are prefixed with '\' so that they can be stubbed in tests. + + +## Bug Fixes + +shUnit2 no longer exits with an 'OK' result if there were syntax errors due to incorrect usage of the assert commands. + + +## Deprecated Features + +None. + + +## Known Bugs and Issues + +Zsh requires the `shwordsplit` option to be set. See the documentation for examples of how to do this. + +Line numbers in assert messages do not work properly with BASH 2.x. + +The Bourne shell of Solaris, BASH 2.x, and Zsh 3.0.x do not properly catch the +SIGTERM signal. As such, shell interpreter failures due to such things as +unbound variables cannot be caught. (See `shunit_test_misc.sh`) + + +## Tested Platforms + +Continuous integration testing is provided by [Travis CI][TravisCI]. + +Tested OSes: + +- Linux +- macOS + +Tested shells: + +- /bin/sh +- ash +- bash +- dash +- ksh +- pdksh +- zsh diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/TODO.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/TODO.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/TODO.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/TODO.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/contributors.md b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/contributors.md new file mode 100644 index 0000000..7adae22 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/contributors.md @@ -0,0 +1,15 @@ +The original author of shunit2 is Kate Ward. The following people have +contributed in some way or another to shunit2. + +- [Alex Harvey](https://github.com/alexharv074) +- Bryan Larsen +- [David Acacio](https://github.com/dacacioa) +- Kevin Van Horn +- [Maciej Bliziński](https://github.com/automatthias) +- Mario Sparada +- Mathias Goldau +- Richard Jensen +- Rob Holland +- Rocky Bernstein +- [rugk](https://github.com/rugk) +- wood4321 (of code.google.com) diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/design_doc.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/design_doc.txt similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/design_doc.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/design_doc.txt diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.html b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.html similarity index 99% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.html rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.html index 3ef771b..4285223 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.html +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.html @@ -530,7 +530,7 @@ assertTrue "[ 34 -gt 23 ]"

Testing for the ability to read a file can also be done. This particular test will fail.

-assertTrue 'test failed' "[ -r /some/non-existant/file' ]"
+assertTrue 'test failed' "[ -r /some/non-existent/file' ]"
 

As the expressions are standard shell test expressions, it is possible to string multiple expressions together with -a and -o in the standard diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.txt similarity index 98% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.txt rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.txt index 034c6fc..537e2eb 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/shunit2.txt +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/doc/shunit2.txt @@ -51,9 +51,9 @@ See the appropriate Release Notes for this release Credits / Contributors ---------------------- -A list of contributors to shUnit2 can be found in the source archive in -``doc/contributors.txt``. Many thanks go out to all those who have contributed -to make this a better tool. +A list of contributors to shUnit2 can be found in ``doc/contributors.md``. +Many thanks go out to all those who have contributed to make this a better +tool. shUnit2 is the original product of many hours of work by Kate Ward, the primary author of the code. For other products by her, look up log4sh_ or shFlags_, or @@ -214,7 +214,7 @@ Asserts Testing for the ability to read a file can also be done. This particular test will fail. :: - assertTrue 'test failed' "[ -r /some/non-existant/file' ]" + assertTrue 'test failed' "[ -r /some/non-existent/file' ]" As the expressions are standard shell **test** expressions, it is possible to string multiple expressions together with ``-a`` and ``-o`` in the standard @@ -358,6 +358,8 @@ Predefined User defined ================== =========================================================== +``SHUNIT_COLOR`` Set this flag to control colored output support. Accepted + values are ``always``, ``auto`` (the default), and ``none``. ``SHUNIT_PARENT`` The filename of the shell script containing the tests. This is needed specifically for Zsh support. ================== =========================================================== diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/equality_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/equality_test.sh similarity index 55% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/equality_test.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/equality_test.sh index e0d68a5..7b56640 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/equality_test.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/equality_test.sh @@ -1,10 +1,9 @@ #! /bin/sh # file: examples/equality_test.sh -testEquality() -{ +testEquality() { assertEquals 1 1 } -# load shunit2 -. ../src/shunit2 +# Load and run shUnit2. +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/lineno_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/lineno_test.sh new file mode 100755 index 0000000..11ddfc8 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/lineno_test.sh @@ -0,0 +1,15 @@ +#! /bin/sh +# file: examples/lineno_test.sh + +testLineNo() { + # This assert will have line numbers included (e.g. "ASSERT:[123] ...") if + # they are supported. + echo "_ASSERT_EQUALS_ macro value: ${_ASSERT_EQUALS_}" + ${_ASSERT_EQUALS_} '"not equal"' 1 2 + + # This assert will not have line numbers included (e.g. "ASSERT: ..."). + assertEquals 'not equal' 1 2 +} + +# Load and run shUnit2. +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/math.inc b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/math.inc similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/math.inc rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/math.inc diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/math_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/math_test.sh similarity index 64% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/math_test.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/math_test.sh index 41be5ff..c6d0029 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/math_test.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/math_test.sh @@ -1,14 +1,13 @@ #! /bin/sh -# available as examples/math_test.sh +# file: examples/math_test.sh -testAdding() -{ +testAdding() { result=`add_generic 1 2` assertEquals \ "the result of '${result}' was wrong" \ 3 "${result}" - # disable non-generic tests + # Disable non-generic tests. [ -z "${BASH_VERSION:-}" ] && startSkipping result=`add_bash 1 2` @@ -17,11 +16,10 @@ testAdding() 3 "${result}" } -oneTimeSetUp() -{ - # load include to test +oneTimeSetUp() { + # Load include to test. . ./math.inc } -# load and run shUnit2 -. ../src/shunit2 +# Load and run shUnit2. +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/mkdir_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mkdir_test.sh similarity index 77% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/mkdir_test.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mkdir_test.sh index 28d8d94..ca980d9 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/mkdir_test.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mkdir_test.sh @@ -12,12 +12,7 @@ # example, we will test several aspects of the the mkdir command, but the # techniques could be used for any existing shell script. -#----------------------------------------------------------------------------- -# suite tests -# - -testMissingDirectoryCreation() -{ +testMissingDirectoryCreation() { ${mkdirCmd} "${testDir}" >${stdoutF} 2>${stderrF} rtrn=$? th_assertTrueWithNoOutput ${rtrn} "${stdoutF}" "${stderrF}" @@ -25,12 +20,11 @@ testMissingDirectoryCreation() assertTrue 'directory missing' "[ -d '${testDir}' ]" } -testExistingDirectoryCreationFails() -{ - # create a directory to test against +testExistingDirectoryCreationFails() { + # Create a directory to test against. ${mkdirCmd} "${testDir}" - # test for expected failure while trying to create directory that exists + # Test for expected failure while trying to create directory that exists. ${mkdirCmd} "${testDir}" >${stdoutF} 2>${stderrF} rtrn=$? assertFalse 'expecting return code of 1 (false)' ${rtrn} @@ -40,8 +34,7 @@ testExistingDirectoryCreationFails() assertTrue 'directory missing' "[ -d '${testDir}' ]" } -testRecursiveDirectoryCreation() -{ +testRecursiveDirectoryCreation() { testDir2="${testDir}/test2" ${mkdirCmd} -p "${testDir2}" >${stdoutF} 2>${stderrF} @@ -52,12 +45,7 @@ testRecursiveDirectoryCreation() assertTrue 'second directory missing' "[ -d '${testDir2}' ]" } -#----------------------------------------------------------------------------- -# suite functions -# - -th_assertTrueWithNoOutput() -{ +th_assertTrueWithNoOutput() { th_return_=$1 th_stdout_=$2 th_stderr_=$3 @@ -68,8 +56,7 @@ th_assertTrueWithNoOutput() unset th_return_ th_stdout_ th_stderr_ } -oneTimeSetUp() -{ +oneTimeSetUp() { outputDir="${SHUNIT_TMPDIR}/output" mkdir "${outputDir}" stdoutF="${outputDir}/stdout" @@ -79,11 +66,10 @@ oneTimeSetUp() testDir="${SHUNIT_TMPDIR}/some_test_dir" } -tearDown() -{ +tearDown() { rm -fr "${testDir}" } -# load and run shUnit2 +# Load and run shUnit2. [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 -. ../src/shunit2 +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file.sh new file mode 100755 index 0000000..812e448 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# +# shUnit2 example for mocking files. +# +# This example demonstrates two different mechanisms for mocking files on the +# system. The first method is preferred for testing specific aspects of a file, +# and the second method is preferred when multiple tests need access to the +# same mock data. +# +# When mocking files, the key thing of importance is providing the code under +# test with the correct file to read. The best practice for writing code where +# files need to be mocked is either: +# - Pass the filename to be tested into a function and test that function, or +# - Provide a function that returns the name of the filename to be read. +# +# The first case is preferred whenever possible as it allows the unit test to +# be explicit about what is being tested. The second case is useful when the +# first case is not achievable. +# +# For the second case, there are two common methods to mock the filename +# returned by the function: +# - Provide a special value (e.g. a mock variable) that is only available +# during testing, or +# - Override something (e.g. the constant) in the test script. +# +# The first case is preferred as it doesn't require the unit test to alter code +# in any way. Yes, it means that the code itself knows that it is under test, +# and it behaves slightly differently than under normal conditions, but a +# visual inspection of the code by the developer should be sufficient to +# validate proper functionality of such a simple function. + +# Treat unset variables as an error. +set -u + +PASSWD='/etc/passwd' + +# Read the root UID from the passwd filename provided as the first argument. +root_uid_from_passed_filename() { + filename=$1 + root_uid "${filename}" + unset filename +} + + +# Read the root UID from the passwd filename derived by call to the +# passwd_filename() function. +root_uid_from_derived_filename() { + root_uid "$(passwd_filename)" +} + +passwd_filename() { + if [ -n "${MOCK_PASSWD:-}" ]; then + echo "${MOCK_PASSWD}" # Mock file for testing. + return + fi + echo "${PASSWD}" +} + + +# Extract the root UID. +root_uid() { awk -F: 'u==$1{print $3}' u=root "$1"; } + + +main() { + echo "root_uid_from_passed_filename:" + root_uid_from_passed_filename "${PASSWD}" + + echo + + echo "root_uid_from_derived_filename:" + root_uid_from_derived_filename +} + + +# Execute main() if this is run in standalone mode (i.e. not in a unit test). +ARGV0="$(basename "$0")" +argv0="$(echo "${ARGV0}" |sed 's/_test$//;s/_test\.sh$//')" +if [ "${ARGV0}" = "${argv0}" ]; then + main "$@" +fi diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file_test.sh new file mode 100755 index 0000000..1da8dd2 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/mock_file_test.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# +# shUnit2 example for mocking files. + +MOCK_PASSWD='' # This will be overridden in oneTimeSetUp(). + +test_root_uid_from_passed_filename() { + result="$(root_uid_from_passed_filename "${MOCK_PASSWD}")" + assertEquals 'unexpected root uid' '0' "${result}" +} + +test_root_uid_from_derived_filename() { + result="$(root_uid_from_derived_filename)" + assertEquals 'unexpected root uid' '0' "${result}" +} + +oneTimeSetUp() { + # Provide a mock passwd file for testing. This will be cleaned up + # automatically by shUnit2. + MOCK_PASSWD="${SHUNIT_TMPDIR}/passwd" + cat <"${MOCK_PASSWD}" +nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false +root:*:0:0:System Administrator:/var/root:/bin/sh +daemon:*:1:1:System Services:/var/root:/usr/bin/false +EOF + + # Load script under test. + . './mock_file.sh' +} + +# Load and run shUnit2. +[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/party_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/party_test.sh new file mode 100755 index 0000000..41bd124 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/party_test.sh @@ -0,0 +1,16 @@ +#! /bin/sh +# file: examples/party_test.sh +# +# This test is mostly for fun. Technically, it is a bad example of a unit test +# because of the temporal requirement, namely that the year be 1999. A better +# test would have been to pass in both a known-bad and known-good year into a +# function, and test for the expected result. + +testPartyLikeItIs1999() { + year=`date '+%Y'` + assertEquals "It's not 1999 :-(" \ + '1999' "${year}" +} + +# Load and run shUnit2. +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/suite_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/suite_test.sh new file mode 100755 index 0000000..278c3a0 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/examples/suite_test.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# file: examples/suite_test.sh +# +# This test demonstrates the use of suites. Note: the suite functionality is +# deprecated as of v2.1.0, and will be removed in a future major release. + +# suite is a special function called by shUnit2 to setup a suite of tests. It +# enables a developer to call a set of functions that contain tests without +# needing to rename the functions to start with "test". +# +# Tests that are to be called from within `suite()` are added to the list of +# executable tests by means of the `suite_addTest()` function. +suite() { + # Add the suite_test_one() function to the list of executable tests. + suite_addTest suite_test_one + + # Call the suite_test_two() function, but note that the test results will not + # be added to the global stats, and therefore not reported at the end of the + # unit test execution. + suite_test_two +} + +suite_test_one() { + assertEquals 1 1 +} + +suite_test_two() { + assertNotEquals 1 2 +} + +# Load and run shUnit2. +. ../shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/gen_test_report.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/gen_test_report.sh new file mode 100755 index 0000000..28da021 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/gen_test_report.sh @@ -0,0 +1,88 @@ +#! /bin/sh +# vim:et:ft=sh:sts=2:sw=2 +# +# This script runs the provided unit tests and sends the output to the +# appropriate file. +# +# Copyright 2008-2017 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 +# +# Source following. +# shellcheck disable=SC1090,SC1091 +# FLAGS variables are dynamically created. +# shellcheck disable=SC2154 +# Disagree with [ p ] && [ q ] vs [ p -a -q ] recommendation. +# shellcheck disable=SC2166 + +# Treat unset variables as an error. +set -u + +die() { + [ $# -gt 0 ] && echo "error: $*" >&2 + exit 1 +} + +BASE_DIR=$(dirname "$0") +LIB_DIR="${BASE_DIR}/lib" + +### Load libraries. +. "${LIB_DIR}/shflags" || die 'unable to load shflags library' +. "${LIB_DIR}/shlib" || die 'unable to load shlib library' +. "${LIB_DIR}/versions" || die 'unable to load versions library' + +# Redefining BASE_DIR now that we have the shlib functions. We need BASE_DIR so +# that we can properly load things, even in the event that this script is called +# from a different directory. +BASE_DIR=$(shlib_relToAbsPath "${BASE_DIR}") + +# Define flags. +os_name=$(versions_osName |sed 's/ /_/g') +os_version=$(versions_osVersion) + +DEFINE_boolean force false 'force overwrite' f +DEFINE_string output_dir "${TMPDIR}" 'output dir' d +DEFINE_string output_file "${os_name}-${os_version}.txt" 'output file' o +DEFINE_string runner 'test_runner' 'unit test runner' r +DEFINE_boolean dry_run false "suppress logging to a file" n + +main() { + # Determine output filename. + # shellcheck disable=SC2154 + output="${FLAGS_output_dir:+${FLAGS_output_dir}/}${FLAGS_output_file}" + output=$(shlib_relToAbsPath "${output}") + + # Checks. + if [ "${FLAGS_dry_run}" -eq "${FLAGS_FALSE}" -a -f "${output}" ]; then + if [ "${FLAGS_force}" -eq "${FLAGS_TRUE}" ]; then + rm -f "${output}" + else + echo "not overwriting '${output}'" >&2 + exit "${FLAGS_ERROR}" + fi + fi + if [ "${FLAGS_dry_run}" -eq "${FLAGS_FALSE}" ]; then + touch "${output}" 2>/dev/null || die "unable to write to '${output}'" + fi + + # Run tests. + ( + if [ "${FLAGS_dry_run}" -eq "${FLAGS_FALSE}" ]; then + "./${FLAGS_runner}" |tee "${output}" + else + "./${FLAGS_runner}" + fi + ) + + if [ "${FLAGS_dry_run}" -eq "${FLAGS_FALSE}" ]; then + echo >&2 + echo "Output written to '${output}'." >&2 + fi +} + +FLAGS "$@" || exit $? +[ "${FLAGS_help}" -eq "${FLAGS_FALSE}" ] || exit +eval set -- "${FLAGS_ARGV}" +main "${@:-}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/shflags b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/shflags similarity index 70% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/shflags rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/shflags index 9e69e64..70cdea4 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/shflags +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/shflags @@ -1,33 +1,33 @@ -# $Id: shflags 189 2013-01-15 00:13:10Z kate.ward@forestent.com $ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) +# Copyright 2008-2017 Kate Ward. All Rights Reserved. +# Released under the Apache License 2.0 license. +# http://www.apache.org/licenses/LICENSE-2.0 # # shFlags -- Advanced command-line flag library for Unix shell scripts. -# http://code.google.com/p/shflags/ +# https://github.com/kward/shflags # # Author: kate.ward@forestent.com (Kate Ward) # -# This module implements something like the google-gflags library available -# from http://code.google.com/p/google-gflags/. +# This module implements something like the gflags library available +# from https://github.com/gflags/gflags. # # FLAG TYPES: This is a list of the DEFINE_*'s that you can do. All flags take # a name, default value, help-string, and optional 'short' name (one-letter -# name). Some flags have other arguments, which are described with the flag. +# name). Some flags have other arguments, which are described with the flag. # -# DEFINE_string: takes any input, and intreprets it as a string. +# DEFINE_string: takes any input, and interprets it as a string. # # DEFINE_boolean: does not take any arguments. Say --myflag to set # FLAGS_myflag to true, or --nomyflag to set FLAGS_myflag to false. For short # flags, passing the flag on the command-line negates the default value, i.e. # if the default is true, passing the flag sets the value to false. # -# DEFINE_float: takes an input and intreprets it as a floating point number. As +# DEFINE_float: takes an input and interprets it as a floating point number. As # shell does not support floats per-se, the input is merely validated as # being a valid floating point value. # -# DEFINE_integer: takes an input and intreprets it as an integer. +# DEFINE_integer: takes an input and interprets it as an integer. # # SPECIAL FLAGS: There are a few flags that have special meaning: # --help (or -?) prints a list of all the flags in a human-readable fashion @@ -81,28 +81,49 @@ # # Notes: # - lists of strings are space separated, and a null value is the '~' char. +# +### ShellCheck (http://www.shellcheck.net/) +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 +# [ p -a q ] are well defined enough (vs [ p ] && [ q ]). +# shellcheck disable=SC2166 -# return if FLAGS already loaded +# Return if FLAGS already loaded. [ -n "${FLAGS_VERSION:-}" ] && return 0 -FLAGS_VERSION='1.0.4pre' +FLAGS_VERSION='1.2.3pre' -# return values that scripts can use +# Return values that scripts can use. FLAGS_TRUE=0 FLAGS_FALSE=1 FLAGS_ERROR=2 -# determine some reasonable command defaults -__FLAGS_UNAME_S=`uname -s` -case "${__FLAGS_UNAME_S}" in - BSD) __FLAGS_EXPR_CMD='gexpr' ;; - *) __FLAGS_EXPR_CMD='expr' ;; -esac +# Logging levels. +FLAGS_LEVEL_DEBUG=0 +FLAGS_LEVEL_INFO=1 +FLAGS_LEVEL_WARN=2 +FLAGS_LEVEL_ERROR=3 +FLAGS_LEVEL_FATAL=4 +__FLAGS_LEVEL_DEFAULT=${FLAGS_LEVEL_WARN} -# commands a user can override if needed +# Determine some reasonable command defaults. +__FLAGS_EXPR_CMD='expr --' +__FLAGS_UNAME_S=`uname -s` +if [ "${__FLAGS_UNAME_S}" = 'BSD' ]; then + __FLAGS_EXPR_CMD='gexpr --' +else + _flags_output_=`${__FLAGS_EXPR_CMD} 2>&1` + if [ $? -eq ${FLAGS_TRUE} -a "${_flags_output_}" = '--' ]; then + # We are likely running inside BusyBox. + __FLAGS_EXPR_CMD='expr' + fi + unset _flags_output_ +fi + +# Commands a user can override if desired. FLAGS_EXPR_CMD=${FLAGS_EXPR_CMD:-${__FLAGS_EXPR_CMD}} FLAGS_GETOPT_CMD=${FLAGS_GETOPT_CMD:-getopt} -# specific shell checks +# Specific shell checks. if [ -n "${ZSH_VERSION:-}" ]; then setopt |grep "^shwordsplit$" >/dev/null if [ $? -ne ${FLAGS_TRUE} ]; then @@ -114,7 +135,7 @@ if [ -n "${ZSH_VERSION:-}" ]; then fi fi -# can we use built-ins? +# Can we use built-ins? ( echo "${FLAGS_TRUE#0}"; ) >/dev/null 2>&1 if [ $? -eq ${FLAGS_TRUE} ]; then __FLAGS_USE_BUILTIN=${FLAGS_TRUE} @@ -122,32 +143,32 @@ else __FLAGS_USE_BUILTIN=${FLAGS_FALSE} fi + # -# constants +# Constants. # -# reserved flag names +# Reserved flag names. __FLAGS_RESERVED_LIST=' ARGC ARGV ERROR FALSE GETOPT_CMD HELP PARENT TRUE ' __FLAGS_RESERVED_LIST="${__FLAGS_RESERVED_LIST} VERSION " -# getopt version +# Determined getopt version (standard or enhanced). __FLAGS_GETOPT_VERS_STD=0 __FLAGS_GETOPT_VERS_ENH=1 -__FLAGS_GETOPT_VERS_BSD=2 -${FLAGS_GETOPT_CMD} >/dev/null 2>&1 -case $? in - 0) __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_STD} ;; # bsd getopt - 2) - # TODO(kward): look into '-T' option to test the internal getopt() version - if [ "`${FLAGS_GETOPT_CMD} --version`" = '-- ' ]; then - __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_STD} - else - __FLAGS_GETOPT_VERS=${__FLAGS_GETOPT_VERS_ENH} - fi - ;; - *) _flags_fatal 'unable to determine getopt version' ;; -esac +# shellcheck disable=SC2120 +_flags_getopt_vers() { + _flags_getopt_cmd_=${1:-${FLAGS_GETOPT_CMD}} + case "`${_flags_getopt_cmd_} -lfoo '' --foo 2>&1`" in + ' -- --foo') echo ${__FLAGS_GETOPT_VERS_STD} ;; + ' --foo --') echo ${__FLAGS_GETOPT_VERS_ENH} ;; + # Unrecognized output. Assuming standard getopt version. + *) echo ${__FLAGS_GETOPT_VERS_STD} ;; + esac + unset _flags_getopt_cmd_ +} +# shellcheck disable=SC2119 +__FLAGS_GETOPT_VERS=`_flags_getopt_vers` # getopt optstring lengths __FLAGS_OPTSTR_SHORT=0 @@ -155,65 +176,102 @@ __FLAGS_OPTSTR_LONG=1 __FLAGS_NULL='~' -# flag info strings +# Flag info strings. __FLAGS_INFO_DEFAULT='default' __FLAGS_INFO_HELP='help' __FLAGS_INFO_SHORT='short' __FLAGS_INFO_TYPE='type' -# flag lengths +# Flag lengths. __FLAGS_LEN_SHORT=0 __FLAGS_LEN_LONG=1 -# flag types +# Flag types. __FLAGS_TYPE_NONE=0 __FLAGS_TYPE_BOOLEAN=1 __FLAGS_TYPE_FLOAT=2 __FLAGS_TYPE_INTEGER=3 __FLAGS_TYPE_STRING=4 -# set the constants readonly +# Set the constants readonly. __flags_constants=`set |awk -F= '/^FLAGS_/ || /^__FLAGS_/ {print $1}'` for __flags_const in ${__flags_constants}; do - # skip certain flags + # Skip certain flags. case ${__flags_const} in FLAGS_HELP) continue ;; FLAGS_PARENT) continue ;; esac - # set flag readonly + # Set flag readonly. if [ -z "${ZSH_VERSION:-}" ]; then - readonly ${__flags_const} - else # handle zsh - case ${ZSH_VERSION} in - [123].*) readonly ${__flags_const} ;; - *) readonly -g ${__flags_const} ;; # declare readonly constants globally - esac + readonly "${__flags_const}" + continue fi + case ${ZSH_VERSION} in + [123].*) readonly "${__flags_const}" ;; + *) readonly -g "${__flags_const}" ;; # Declare readonly constants globally. + esac done unset __flags_const __flags_constants # -# internal variables +# Internal variables. # -# space separated lists -__flags_boolNames=' ' # boolean flag names -__flags_longNames=' ' # long flag names -__flags_shortNames=' ' # short flag names -__flags_definedNames=' ' # defined flag names (used for validation) +# Space separated lists. +__flags_boolNames=' ' # Boolean flag names. +__flags_longNames=' ' # Long flag names. +__flags_shortNames=' ' # Short flag names. +__flags_definedNames=' ' # Defined flag names (used for validation). -__flags_columns='' # screen width in columns -__flags_opts='' # temporary storage for parsed getopt flags +__flags_columns='' # Screen width in columns. +__flags_level=0 # Default logging level. +__flags_opts='' # Temporary storage for parsed getopt flags. #------------------------------------------------------------------------------ -# private functions +# Private functions. # -# logging functions -_flags_debug() { echo "flags:DEBUG $@" >&2; } -_flags_warn() { echo "flags:WARN $@" >&2; } -_flags_error() { echo "flags:ERROR $@" >&2; } -_flags_fatal() { echo "flags:FATAL $@" >&2; exit ${FLAGS_ERROR}; } +# Logging functions. +_flags_debug() { + [ ${__flags_level} -le ${FLAGS_LEVEL_DEBUG} ] || return + echo "flags:DEBUG $*" >&2 +} +_flags_info() { + [ ${__flags_level} -le ${FLAGS_LEVEL_INFO} ] || return + echo "flags:INFO $*" >&2 +} +_flags_warn() { + [ ${__flags_level} -le ${FLAGS_LEVEL_WARN} ] || return + echo "flags:WARN $*" >&2 +} +_flags_error() { + [ ${__flags_level} -le ${FLAGS_LEVEL_ERROR} ] || return + echo "flags:ERROR $*" >&2 +} +_flags_fatal() { + [ ${__flags_level} -le ${FLAGS_LEVEL_FATAL} ] || return + echo "flags:FATAL $*" >&2 + exit ${FLAGS_ERROR} +} + +# Get the logging level. +flags_loggingLevel() { echo ${__flags_level}; } + +# Set the logging level. +# +# Args: +# _flags_level_: integer: new logging level +# Returns: +# nothing +flags_setLoggingLevel() { + [ $# -ne 1 ] && _flags_fatal "flags_setLevel(): logging level missing" + _flags_level_=$1 + [ "${_flags_level_}" -ge "${FLAGS_LEVEL_DEBUG}" \ + -a "${_flags_level_}" -le "${FLAGS_LEVEL_FATAL}" ] \ + || _flags_fatal "Invalid logging level '${_flags_level_}' specified." + __flags_level=$1 + unset _flags_level_ +} # Define a flag. # @@ -226,15 +284,14 @@ _flags_fatal() { echo "flags:FATAL $@" >&2; exit ${FLAGS_ERROR}; } # __flags_flagname_type - the type of flag (one of __FLAGS_TYPE_*) # # Args: -# _flags__type: integer: internal type of flag (__FLAGS_TYPE_*) -# _flags__name: string: long flag name -# _flags__default: default flag value -# _flags__help: string: help string -# _flags__short: string: (optional) short flag name +# _flags_type_: integer: internal type of flag (__FLAGS_TYPE_*) +# _flags_name_: string: long flag name +# _flags_default_: default flag value +# _flags_help_: string: help string +# _flags_short_: string: (optional) short flag name # Returns: # integer: success of operation, or error -_flags_define() -{ +_flags_define() { if [ $# -lt 4 ]; then flags_error='DEFINE error: too few arguments' flags_return=${FLAGS_ERROR} @@ -245,50 +302,54 @@ _flags_define() _flags_type_=$1 _flags_name_=$2 _flags_default_=$3 - _flags_help_=$4 + _flags_help_=${4:-§} # Special value '§' indicates no help string provided. _flags_short_=${5:-${__FLAGS_NULL}} - _flags_return_=${FLAGS_TRUE} - _flags_usName_=`_flags_underscoreName ${_flags_name_}` + _flags_debug "type:${_flags_type_} name:${_flags_name_}" \ + "default:'${_flags_default_}' help:'${_flags_help_}'" \ + "short:${_flags_short_}" - # check whether the flag name is reserved - _flags_itemInList ${_flags_usName_} "${__FLAGS_RESERVED_LIST}" + _flags_return_=${FLAGS_TRUE} + _flags_usName_="`_flags_underscoreName "${_flags_name_}"`" + + # Check whether the flag name is reserved. + _flags_itemInList "${_flags_usName_}" "${__FLAGS_RESERVED_LIST}" if [ $? -eq ${FLAGS_TRUE} ]; then flags_error="flag name (${_flags_name_}) is reserved" _flags_return_=${FLAGS_ERROR} fi - # require short option for getopt that don't support long options + # Require short option for getopt that don't support long options. if [ ${_flags_return_} -eq ${FLAGS_TRUE} \ - -a ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} \ + -a "${__FLAGS_GETOPT_VERS}" -ne "${__FLAGS_GETOPT_VERS_ENH}" \ -a "${_flags_short_}" = "${__FLAGS_NULL}" ] then flags_error="short flag required for (${_flags_name_}) on this platform" _flags_return_=${FLAGS_ERROR} fi - # check for existing long name definition + # Check for existing long name definition. if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then - if _flags_itemInList ${_flags_usName_} ${__flags_definedNames}; then + if _flags_itemInList "${_flags_usName_}" "${__flags_definedNames}"; then flags_error="definition for ([no]${_flags_name_}) already exists" _flags_warn "${flags_error}" _flags_return_=${FLAGS_FALSE} fi fi - # check for existing short name definition + # Check for existing short name definition. if [ ${_flags_return_} -eq ${FLAGS_TRUE} \ -a "${_flags_short_}" != "${__FLAGS_NULL}" ] then - if _flags_itemInList "${_flags_short_}" ${__flags_shortNames}; then + if _flags_itemInList "${_flags_short_}" "${__flags_shortNames}"; then flags_error="flag short name (${_flags_short_}) already defined" _flags_warn "${flags_error}" _flags_return_=${FLAGS_FALSE} fi fi - # handle default value. note, on several occasions the 'if' portion of an - # if/then/else contains just a ':' which does nothing. a binary reversal via + # Handle default value. Note, on several occasions the 'if' portion of an + # if/then/else contains just a ':' which does nothing. A binary reversal via # '!' is not done because it does not work on all shells. if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then case ${_flags_type_} in @@ -322,7 +383,7 @@ _flags_define() fi ;; - ${__FLAGS_TYPE_STRING}) ;; # everything in shell is a valid string + ${__FLAGS_TYPE_STRING}) ;; # Everything in shell is a valid string. *) flags_error="unrecognized flag type '${_flags_type_}'" @@ -332,7 +393,7 @@ _flags_define() fi if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then - # store flag information + # Store flag information. eval "FLAGS_${_flags_usName_}='${_flags_default_}'" eval "__flags_${_flags_usName_}_${__FLAGS_INFO_TYPE}=${_flags_type_}" eval "__flags_${_flags_usName_}_${__FLAGS_INFO_DEFAULT}=\ @@ -343,12 +404,12 @@ _flags_define() # append flag names to name lists __flags_shortNames="${__flags_shortNames}${_flags_short_} " __flags_longNames="${__flags_longNames}${_flags_name_} " - [ ${_flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] && \ + [ "${_flags_type_}" -eq "${__FLAGS_TYPE_BOOLEAN}" ] && \ __flags_boolNames="${__flags_boolNames}no${_flags_name_} " - # append flag names to defined names for later validation checks + # Append flag names to defined names for later validation checks. __flags_definedNames="${__flags_definedNames}${_flags_usName_} " - [ ${_flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] && \ + [ "${_flags_type_}" -eq "${__FLAGS_TYPE_BOOLEAN}" ] && \ __flags_definedNames="${__flags_definedNames}no${_flags_usName_} " fi @@ -365,9 +426,8 @@ _flags_define() # unnamed: string: log flag name # Output: # string: underscored name -_flags_underscoreName() -{ - echo $1 |tr '-' '_' +_flags_underscoreName() { + echo "$1" |tr '-' '_' } # Return valid getopt options using currently defined list of long options. @@ -381,24 +441,23 @@ _flags_underscoreName() # string: generated option string for getopt # Returns: # boolean: success of operation (always returns True) -_flags_genOptStr() -{ +_flags_genOptStr() { _flags_optStrType_=$1 _flags_opts_='' for _flags_name_ in ${__flags_longNames}; do - _flags_usName_=`_flags_underscoreName ${_flags_name_}` - _flags_type_=`_flags_getFlagInfo ${_flags_usName_} ${__FLAGS_INFO_TYPE}` + _flags_usName_="`_flags_underscoreName "${_flags_name_}"`" + _flags_type_="`_flags_getFlagInfo "${_flags_usName_}" "${__FLAGS_INFO_TYPE}"`" [ $? -eq ${FLAGS_TRUE} ] || _flags_fatal 'call to _flags_type_ failed' case ${_flags_optStrType_} in ${__FLAGS_OPTSTR_SHORT}) - _flags_shortName_=`_flags_getFlagInfo \ - ${_flags_usName_} ${__FLAGS_INFO_SHORT}` + _flags_shortName_="`_flags_getFlagInfo \ + "${_flags_usName_}" "${__FLAGS_INFO_SHORT}"`" if [ "${_flags_shortName_}" != "${__FLAGS_NULL}" ]; then _flags_opts_="${_flags_opts_}${_flags_shortName_}" - # getopt needs a trailing ':' to indicate a required argument - [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \ + # getopt needs a trailing ':' to indicate a required argument. + [ "${_flags_type_}" -ne "${__FLAGS_TYPE_BOOLEAN}" ] && \ _flags_opts_="${_flags_opts_}:" fi ;; @@ -406,7 +465,7 @@ _flags_genOptStr() ${__FLAGS_OPTSTR_LONG}) _flags_opts_="${_flags_opts_:+${_flags_opts_},}${_flags_name_}" # getopt needs a trailing ':' to indicate a required argument - [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \ + [ "${_flags_type_}" -ne "${__FLAGS_TYPE_BOOLEAN}" ] && \ _flags_opts_="${_flags_opts_}:" ;; esac @@ -427,30 +486,39 @@ _flags_genOptStr() # string: value of dereferenced flag variable # Returns: # integer: one of FLAGS_{TRUE|FALSE|ERROR} -_flags_getFlagInfo() -{ - # note: adding gFI to variable names to prevent naming conflicts with calling +_flags_getFlagInfo() { + # Note: adding gFI to variable names to prevent naming conflicts with calling # functions _flags_gFI_usName_=$1 _flags_gFI_info_=$2 + # Example: given argument usName (underscored flag name) of 'my_flag', and + # argument info of 'help', set the _flags_infoValue_ variable to the value of + # ${__flags_my_flag_help}, and see if it is non-empty. _flags_infoVar_="__flags_${_flags_gFI_usName_}_${_flags_gFI_info_}" _flags_strToEval_="_flags_infoValue_=\"\${${_flags_infoVar_}:-}\"" eval "${_flags_strToEval_}" if [ -n "${_flags_infoValue_}" ]; then + # Special value '§' indicates no help string provided. + [ "${_flags_gFI_info_}" = ${__FLAGS_INFO_HELP} \ + -a "${_flags_infoValue_}" = '§' ] && _flags_infoValue_='' flags_return=${FLAGS_TRUE} else - # see if the _flags_gFI_usName_ variable is a string as strings can be + # See if the _flags_gFI_usName_ variable is a string as strings can be # empty... - # note: the DRY principle would say to have this function call itself for + # Note: the DRY principle would say to have this function call itself for # the next three lines, but doing so results in an infinite loop as an # invalid _flags_name_ will also not have the associated _type variable. # Because it doesn't (it will evaluate to an empty string) the logic will # try to find the _type variable of the _type variable, and so on. Not so # good ;-) + # + # Example cont.: set the _flags_typeValue_ variable to the value of + # ${__flags_my_flag_type}, and see if it equals '4'. _flags_typeVar_="__flags_${_flags_gFI_usName_}_${__FLAGS_INFO_TYPE}" _flags_strToEval_="_flags_typeValue_=\"\${${_flags_typeVar_}:-}\"" eval "${_flags_strToEval_}" + # shellcheck disable=SC2154 if [ "${_flags_typeValue_}" = "${__FLAGS_TYPE_STRING}" ]; then flags_return=${FLAGS_TRUE} else @@ -466,7 +534,7 @@ _flags_getFlagInfo() return ${flags_return} } -# Check for presense of item in a list. +# Check for presence of item in a list. # # Passed a string (e.g. 'abc'), this function will determine if the string is # present in the list of strings (e.g. ' foo bar abc '). @@ -480,12 +548,10 @@ _flags_itemInList() { _flags_str_=$1 shift - echo " ${*:-} " |grep " ${_flags_str_} " >/dev/null - if [ $? -eq 0 ]; then - flags_return=${FLAGS_TRUE} - else - flags_return=${FLAGS_FALSE} - fi + case " ${*:-} " in + *\ ${_flags_str_}\ *) flags_return=${FLAGS_TRUE} ;; + *) flags_return=${FLAGS_FALSE} ;; + esac unset _flags_str_ return ${flags_return} @@ -495,22 +561,23 @@ _flags_itemInList() { # # Output: # integer: width in columns of the current screen. -_flags_columns() -{ +_flags_columns() { if [ -z "${__flags_columns}" ]; then - # determine the value and store it if eval stty size >/dev/null 2>&1; then # stty size worked :-) + # shellcheck disable=SC2046 set -- `stty size` - __flags_columns=$2 - elif eval tput cols >/dev/null 2>&1; then - set -- `tput cols` - __flags_columns=$1 - else - __flags_columns=80 # default terminal width + __flags_columns="${2:-}" fi fi - echo ${__flags_columns} + if [ -z "${__flags_columns}" ]; then + if eval tput cols >/dev/null 2>&1; then + # shellcheck disable=SC2046 + set -- `tput cols` + __flags_columns="${1:-}" + fi + fi + echo "${__flags_columns:-80}" } # Validate a boolean. @@ -519,8 +586,7 @@ _flags_columns() # _flags__bool: boolean: value to validate # Returns: # bool: true if the value is a valid boolean -_flags_validBool() -{ +_flags_validBool() { _flags_bool_=$1 flags_return=${FLAGS_TRUE} @@ -540,31 +606,30 @@ _flags_validBool() # _flags_float_: float: value to validate # Returns: # bool: true if the value is a valid integer -_flags_validFloat() -{ +_flags_validFloat() { flags_return=${FLAGS_FALSE} [ -n "$1" ] || return ${flags_return} _flags_float_=$1 - if _flags_validInt ${_flags_float_}; then + if _flags_validInt "${_flags_float_}"; then flags_return=${FLAGS_TRUE} elif _flags_useBuiltin; then _flags_float_whole_=${_flags_float_%.*} _flags_float_fraction_=${_flags_float_#*.} - if _flags_validInt ${_flags_float_whole_:-0} -a \ - _flags_validInt ${_flags_float_fraction_}; then + if _flags_validInt "${_flags_float_whole_:-0}" -a \ + _flags_validInt "${_flags_float_fraction_}"; then flags_return=${FLAGS_TRUE} fi unset _flags_float_whole_ _flags_float_fraction_ else flags_return=${FLAGS_TRUE} case ${_flags_float_} in - -*) # negative floats - _flags_test_=`${FLAGS_EXPR_CMD} -- "${_flags_float_}" :\ + -*) # Negative floats. + _flags_test_=`${FLAGS_EXPR_CMD} "${_flags_float_}" :\ '\(-[0-9]*\.[0-9]*\)'` ;; - *) # positive floats - _flags_test_=`${FLAGS_EXPR_CMD} -- "${_flags_float_}" :\ + *) # Positive floats. + _flags_test_=`${FLAGS_EXPR_CMD} "${_flags_float_}" :\ '\([0-9]*\.[0-9]*\)'` ;; esac @@ -582,19 +647,18 @@ _flags_validFloat() # _flags_int_: integer: value to validate # Returns: # bool: true if the value is a valid integer -_flags_validInt() -{ +_flags_validInt() { flags_return=${FLAGS_FALSE} [ -n "$1" ] || return ${flags_return} _flags_int_=$1 case ${_flags_int_} in - -*.*) ;; # ignore negative floats (we'll invalidate them later) - -*) # strip possible leading negative sign + -*.*) ;; # Ignore negative floats (we'll invalidate them later). + -*) # Strip possible leading negative sign. if _flags_useBuiltin; then _flags_int_=${_flags_int_#-} else - _flags_int_=`${FLAGS_EXPR_CMD} -- "${_flags_int_}" : '-\([0-9][0-9]*\)'` + _flags_int_=`${FLAGS_EXPR_CMD} "${_flags_int_}" : '-\([0-9][0-9]*\)'` fi ;; esac @@ -617,14 +681,13 @@ _flags_validInt() # @: varies: command-line options to parse # Returns: # integer: a FLAGS success condition -_flags_getoptStandard() -{ +_flags_getoptStandard() { flags_return=${FLAGS_TRUE} _flags_shortOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}` - # check for spaces in passed options + # Check for spaces in passed options. for _flags_opt_ in "$@"; do - # note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06 + # Note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06. _flags_match_=`echo "x${_flags_opt_}x" |sed 's/ //g'` if [ "${_flags_match_}" != "x${_flags_opt_}x" ]; then flags_error='the available getopt does not support spaces in options' @@ -634,7 +697,7 @@ _flags_getoptStandard() done if [ ${flags_return} -eq ${FLAGS_TRUE} ]; then - __flags_opts=`getopt ${_flags_shortOpts_} $@ 2>&1` + __flags_opts=`getopt "${_flags_shortOpts_}" "$@" 2>&1` _flags_rtrn_=$? if [ ${_flags_rtrn_} -ne ${FLAGS_TRUE} ]; then _flags_warn "${__flags_opts}" @@ -656,8 +719,7 @@ _flags_getoptStandard() # @: varies: command-line options to parse # Returns: # integer: a FLAGS success condition -_flags_getoptEnhanced() -{ +_flags_getoptEnhanced() { flags_return=${FLAGS_TRUE} _flags_shortOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}` _flags_boolOpts_=`echo "${__flags_boolNames}" \ @@ -665,7 +727,7 @@ _flags_getoptEnhanced() _flags_longOpts_=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}` __flags_opts=`${FLAGS_GETOPT_CMD} \ - -o ${_flags_shortOpts_} \ + -o "${_flags_shortOpts_}" \ -l "${_flags_longOpts_},${_flags_boolOpts_}" \ -- "$@" 2>&1` _flags_rtrn_=$? @@ -690,17 +752,18 @@ _flags_getoptEnhanced() # @: varies: output from getopt parsing # Returns: # integer: a FLAGS success condition -_flags_parseGetopt() -{ +_flags_parseGetopt() { _flags_argc_=$1 shift flags_return=${FLAGS_TRUE} - if [ ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} ]; then + if [ "${__FLAGS_GETOPT_VERS}" -ne "${__FLAGS_GETOPT_VERS_ENH}" ]; then + # The @$ must be unquoted as it needs to be re-split. + # shellcheck disable=SC2068 set -- $@ else - # note the quotes around the `$@' -- they are essential! + # Note the quotes around the `$@' -- they are essential! eval set -- "$@" fi @@ -710,34 +773,35 @@ _flags_parseGetopt() # arguments. Its usage was replaced by FLAGS_ARGV, and it is being kept only # for backwards compatibility reasons. FLAGS_ARGC=`_flags_math "$# - 1 - ${_flags_argc_}"` + export FLAGS_ARGC - # handle options. note options with values must do an additional shift + # Handle options. note options with values must do an additional shift. while true; do _flags_opt_=$1 _flags_arg_=${2:-} _flags_type_=${__FLAGS_TYPE_NONE} _flags_name_='' - # determine long flag name + # Determine long flag name. case "${_flags_opt_}" in - --) shift; break ;; # discontinue option parsing + --) shift; break ;; # Discontinue option parsing. - --*) # long option + --*) # Long option. if _flags_useBuiltin; then _flags_opt_=${_flags_opt_#*--} else - _flags_opt_=`${FLAGS_EXPR_CMD} -- "${_flags_opt_}" : '--\(.*\)'` + _flags_opt_=`${FLAGS_EXPR_CMD} "${_flags_opt_}" : '--\(.*\)'` fi _flags_len_=${__FLAGS_LEN_LONG} - if _flags_itemInList "${_flags_opt_}" ${__flags_longNames}; then + if _flags_itemInList "${_flags_opt_}" "${__flags_longNames}"; then _flags_name_=${_flags_opt_} else - # check for negated long boolean version - if _flags_itemInList "${_flags_opt_}" ${__flags_boolNames}; then + # Check for negated long boolean version. + if _flags_itemInList "${_flags_opt_}" "${__flags_boolNames}"; then if _flags_useBuiltin; then _flags_name_=${_flags_opt_#*no} else - _flags_name_=`${FLAGS_EXPR_CMD} -- "${_flags_opt_}" : 'no\(.*\)'` + _flags_name_=`${FLAGS_EXPR_CMD} "${_flags_opt_}" : 'no\(.*\)'` fi _flags_type_=${__FLAGS_TYPE_BOOLEAN} _flags_arg_=${__FLAGS_NULL} @@ -745,34 +809,34 @@ _flags_parseGetopt() fi ;; - -*) # short option + -*) # Short option. if _flags_useBuiltin; then _flags_opt_=${_flags_opt_#*-} else - _flags_opt_=`${FLAGS_EXPR_CMD} -- "${_flags_opt_}" : '-\(.*\)'` + _flags_opt_=`${FLAGS_EXPR_CMD} "${_flags_opt_}" : '-\(.*\)'` fi _flags_len_=${__FLAGS_LEN_SHORT} - if _flags_itemInList "${_flags_opt_}" ${__flags_shortNames}; then - # yes. match short name to long name. note purposeful off-by-one + if _flags_itemInList "${_flags_opt_}" "${__flags_shortNames}"; then + # Yes. Match short name to long name. Note purposeful off-by-one # (too high) with awk calculations. _flags_pos_=`echo "${__flags_shortNames}" \ |awk 'BEGIN{RS=" ";rn=0}$0==e{rn=NR}END{print rn}' \ - e=${_flags_opt_}` + e="${_flags_opt_}"` _flags_name_=`echo "${__flags_longNames}" \ |awk 'BEGIN{RS=" "}rn==NR{print $0}' rn="${_flags_pos_}"` fi ;; esac - # die if the flag was unrecognized + # Die if the flag was unrecognized. if [ -z "${_flags_name_}" ]; then flags_error="unrecognized option (${_flags_opt_})" flags_return=${FLAGS_ERROR} break fi - # set new flag value - _flags_usName_=`_flags_underscoreName ${_flags_name_}` + # Set new flag value. + _flags_usName_=`_flags_underscoreName "${_flags_name_}"` [ ${_flags_type_} -eq ${__FLAGS_TYPE_NONE} ] && \ _flags_type_=`_flags_getFlagInfo \ "${_flags_usName_}" ${__FLAGS_INFO_TYPE}` @@ -788,7 +852,8 @@ _flags_parseGetopt() _flags_strToEval_="_flags_val_=\ \${__flags_${_flags_usName_}_${__FLAGS_INFO_DEFAULT}}" eval "${_flags_strToEval_}" - if [ ${_flags_val_} -eq ${FLAGS_FALSE} ]; then + # shellcheck disable=SC2154 + if [ "${_flags_val_}" -eq ${FLAGS_FALSE} ]; then eval "FLAGS_${_flags_usName_}=${FLAGS_TRUE}" else eval "FLAGS_${_flags_usName_}=${FLAGS_FALSE}" @@ -821,22 +886,23 @@ _flags_parseGetopt() ;; esac - # handle special case help flag + # Handle special case help flag. if [ "${_flags_usName_}" = 'help' ]; then - if [ ${FLAGS_help} -eq ${FLAGS_TRUE} ]; then + # shellcheck disable=SC2154 + if [ "${FLAGS_help}" -eq ${FLAGS_TRUE} ]; then flags_help flags_error='help requested' - flags_return=${FLAGS_TRUE} + flags_return=${FLAGS_FALSE} break fi fi - # shift the option and non-boolean arguements out. + # Shift the option and non-boolean arguments out. shift - [ ${_flags_type_} != ${__FLAGS_TYPE_BOOLEAN} ] && shift + [ "${_flags_type_}" != ${__FLAGS_TYPE_BOOLEAN} ] && shift done - # give user back non-flag arguments + # Give user back non-flag arguments. FLAGS_ARGV='' while [ $# -gt 0 ]; do FLAGS_ARGV="${FLAGS_ARGV:+${FLAGS_ARGV} }'$1'" @@ -856,19 +922,19 @@ _flags_parseGetopt() # integer: the result # Returns: # bool: success of math evaluation -_flags_math() -{ +_flags_math() { if [ $# -eq 0 ]; then flags_return=${FLAGS_FALSE} elif _flags_useBuiltin; then # Variable assignment is needed as workaround for Solaris Bourne shell, # which cannot parse a bare $((expression)). + # shellcheck disable=SC2016 _flags_expr_='$(($@))' eval echo ${_flags_expr_} flags_return=$? unset _flags_expr_ else - eval expr $@ + eval expr "$@" flags_return=$? fi @@ -883,8 +949,7 @@ _flags_math() # integer: length of string # Returns: # bool: success of strlen evaluation -_flags_strlen() -{ +_flags_strlen() { _flags_str_=${1:-} if [ -z "${_flags_str_}" ]; then @@ -892,12 +957,12 @@ _flags_strlen() elif _flags_useBuiltin; then flags_output=${#_flags_str_} else - flags_output=`${FLAGS_EXPR_CMD} -- "${_flags_str_}" : '.*'` + flags_output=`${FLAGS_EXPR_CMD} "${_flags_str_}" : '.*'` fi flags_return=$? unset _flags_str_ - echo ${flags_output} + echo "${flags_output}" return ${flags_return} } @@ -907,18 +972,15 @@ _flags_strlen() # None # Returns: # bool: true if built-ins should be used -_flags_useBuiltin() -{ - return ${__FLAGS_USE_BUILTIN} -} +_flags_useBuiltin() { return ${__FLAGS_USE_BUILTIN}; } #------------------------------------------------------------------------------ # public functions -# +# # A basic boolean flag. Boolean flags do not take any arguments, and their # value is either 1 (false) or 0 (true). For long flags, the false value is # specified on the command line by prepending the word 'no'. With short flags, -# the presense of the flag toggles the current value between true and false. +# the presence of the flag toggles the current value between true and false. # Specifying a short boolean flag twice on the command results in returning the # value back to the default value. # @@ -941,22 +1003,21 @@ DEFINE_string() { _flags_define ${__FLAGS_TYPE_STRING} "$@"; } # unnamed: list: command-line flags to parse # Returns: # integer: success of operation, or error -FLAGS() -{ - # define a standard 'help' flag if one isn't already defined +FLAGS() { + # Define a standard 'help' flag if one isn't already defined. [ -z "${__flags_help_type:-}" ] && \ DEFINE_boolean 'help' false 'show this help' 'h' - # parse options + # Parse options. if [ $# -gt 0 ]; then - if [ ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} ]; then + if [ "${__FLAGS_GETOPT_VERS}" -ne "${__FLAGS_GETOPT_VERS_ENH}" ]; then _flags_getoptStandard "$@" else _flags_getoptEnhanced "$@" fi flags_return=$? else - # nothing passed; won't bother running getopt + # Nothing passed; won't bother running getopt. __flags_opts='--' flags_return=${FLAGS_TRUE} fi @@ -980,13 +1041,12 @@ FLAGS() # debug info that can be included in a bug report # Returns: # nothing -flags_getoptInfo() -{ - # platform info +flags_getoptInfo() { + # Platform info. _flags_debug "uname -a: `uname -a`" _flags_debug "PATH: ${PATH}" - # shell info + # Shell info. if [ -n "${BASH_VERSION:-}" ]; then _flags_debug 'shell: bash' _flags_debug "BASH_VERSION: ${BASH_VERSION}" @@ -995,7 +1055,7 @@ flags_getoptInfo() _flags_debug "ZSH_VERSION: ${ZSH_VERSION}" fi - # getopt info + # getopt info. ${FLAGS_GETOPT_CMD} >/dev/null _flags_getoptReturn=$? _flags_debug "getopt return: ${_flags_getoptReturn}" @@ -1012,9 +1072,8 @@ flags_getoptInfo() # none # Returns: # bool: true if getopt is the enhanced version -flags_getoptIsEnh() -{ - test ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_ENH} +flags_getoptIsEnh() { + test "${__FLAGS_GETOPT_VERS}" -eq "${__FLAGS_GETOPT_VERS_ENH}" } # Returns whether the detected getopt version is the standard version. @@ -1023,9 +1082,8 @@ flags_getoptIsEnh() # none # Returns: # bool: true if getopt is the standard version -flags_getoptIsStd() -{ - test ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_STD} +flags_getoptIsStd() { + test "${__FLAGS_GETOPT_VERS}" -eq "${__FLAGS_GETOPT_VERS_STD}" } # This is effectively a 'usage()' function. It prints usage information and @@ -1037,8 +1095,7 @@ flags_getoptIsStd() # none # Returns: # integer: success of operation (always returns true) -flags_help() -{ +flags_help() { if [ -n "${FLAGS_HELP:-}" ]; then echo "${FLAGS_HELP}" >&2 else @@ -1049,7 +1106,7 @@ flags_help() for flags_name_ in ${__flags_longNames}; do flags_flagStr_='' flags_boolStr_='' - flags_usName_=`_flags_underscoreName ${flags_name_}` + flags_usName_=`_flags_underscoreName "${flags_name_}"` flags_default_=`_flags_getFlagInfo \ "${flags_usName_}" ${__FLAGS_INFO_DEFAULT}` @@ -1063,11 +1120,11 @@ flags_help() [ "${flags_short_}" != "${__FLAGS_NULL}" ] && \ flags_flagStr_="-${flags_short_}" - if [ ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_ENH} ]; then + if [ "${__FLAGS_GETOPT_VERS}" -eq "${__FLAGS_GETOPT_VERS_ENH}" ]; then [ "${flags_short_}" != "${__FLAGS_NULL}" ] && \ flags_flagStr_="${flags_flagStr_}," - # add [no] to long boolean flag names, except the 'help' flag - [ ${flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} \ + # Add [no] to long boolean flag names, except the 'help' flag. + [ "${flags_type_}" -eq ${__FLAGS_TYPE_BOOLEAN} \ -a "${flags_usName_}" != 'help' ] && \ flags_boolStr_='[no]' flags_flagStr_="${flags_flagStr_}--${flags_boolStr_}${flags_name_}:" @@ -1075,7 +1132,7 @@ flags_help() case ${flags_type_} in ${__FLAGS_TYPE_BOOLEAN}) - if [ ${flags_default_} -eq ${FLAGS_TRUE} ]; then + if [ "${flags_default_}" -eq ${FLAGS_TRUE} ]; then flags_defaultStr_='true' else flags_defaultStr_='false' @@ -1087,16 +1144,16 @@ flags_help() esac flags_defaultStr_="(default: ${flags_defaultStr_})" - flags_helpStr_=" ${flags_flagStr_} ${flags_help_} ${flags_defaultStr_}" + flags_helpStr_=" ${flags_flagStr_} ${flags_help_:+${flags_help_} }${flags_defaultStr_}" _flags_strlen "${flags_helpStr_}" >/dev/null flags_helpStrLen_=${flags_output} flags_columns_=`_flags_columns` - if [ ${flags_helpStrLen_} -lt ${flags_columns_} ]; then + if [ "${flags_helpStrLen_}" -lt "${flags_columns_}" ]; then echo "${flags_helpStr_}" >&2 else echo " ${flags_flagStr_} ${flags_help_}" >&2 - # note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06 + # Note: the silliness with the x's is purely for ksh93 on Ubuntu 6.06 # because it doesn't like empty strings when used in this manner. flags_emptyStr_="`echo \"x${flags_flagStr_}x\" \ |awk '{printf "%"length($0)-2"s", ""}'`" @@ -1104,13 +1161,13 @@ flags_help() _flags_strlen "${flags_helpStr_}" >/dev/null flags_helpStrLen_=${flags_output} - if [ ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_STD} \ - -o ${flags_helpStrLen_} -lt ${flags_columns_} ]; then - # indented to match help string + if [ "${__FLAGS_GETOPT_VERS}" -eq "${__FLAGS_GETOPT_VERS_STD}" \ + -o "${flags_helpStrLen_}" -lt "${flags_columns_}" ]; then + # Indented to match help string. echo "${flags_helpStr_}" >&2 else - # indented four from left to allow for longer defaults as long flag - # names might be used too, making things too long + # Indented four from left to allow for longer defaults as long flag + # names might be used too, making things too long. echo " ${flags_defaultStr_}" >&2 fi fi @@ -1129,10 +1186,9 @@ flags_help() # none # Returns: # nothing -flags_reset() -{ +flags_reset() { for flags_name_ in ${__flags_longNames}; do - flags_usName_=`_flags_underscoreName ${flags_name_}` + flags_usName_=`_flags_underscoreName "${flags_name_}"` flags_strToEval_="unset FLAGS_${flags_usName_}" for flags_type_ in \ ${__FLAGS_INFO_DEFAULT} \ @@ -1143,14 +1199,24 @@ flags_reset() flags_strToEval_=\ "${flags_strToEval_} __flags_${flags_usName_}_${flags_type_}" done - eval ${flags_strToEval_} + eval "${flags_strToEval_}" done - # reset internal variables + # Reset internal variables. __flags_boolNames=' ' __flags_longNames=' ' __flags_shortNames=' ' __flags_definedNames=' ' + # Reset logging level back to default. + flags_setLoggingLevel ${__FLAGS_LEVEL_DEFAULT} + unset flags_name_ flags_type_ flags_strToEval_ flags_usName_ } + +# +# Initialization +# + +# Set the default logging level. +flags_setLoggingLevel ${__FLAGS_LEVEL_DEFAULT} diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/shlib b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/shlib similarity index 100% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/shlib rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/shlib diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/versions b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/versions new file mode 100755 index 0000000..7c3badd --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/lib/versions @@ -0,0 +1,272 @@ +#! /bin/sh +# vim:et:ft=sh:sts=2:sw=2 +# +# Versions determines the versions of all installed shells. +# +# Copyright 2008-2018 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 License. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shlib +# +# This library provides reusable functions that determine actual names and +# versions of installed shells and the OS. The library can also be run as a +# script if set executable. +# +# Disable checks that aren't fully portable (POSIX != portable). +# shellcheck disable=SC2006 + +ARGV0=`basename "$0"` +LSB_RELEASE='/etc/lsb-release' +VERSIONS_SHELLS='ash /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh /bin/sh /usr/xpg4/bin/sh /sbin/sh' + +true; TRUE=$? +false; FALSE=$? +ERROR=2 + +UNAME_R=`uname -r` +UNAME_S=`uname -s` + +__versions_haveStrings=${ERROR} + +versions_osName() { + os_name_='unrecognized' + os_system_=${UNAME_S} + os_release_=${UNAME_R} + case ${os_system_} in + CYGWIN_NT-*) os_name_='Cygwin' ;; + Darwin) + os_name_=`/usr/bin/sw_vers -productName` + os_version_=`versions_osVersion` + case ${os_version_} in + 10.4|10.4.[0-9]*) os_name_='Mac OS X Tiger' ;; + 10.5|10.5.[0-9]*) os_name_='Mac OS X Leopard' ;; + 10.6|10.6.[0-9]*) os_name_='Mac OS X Snow Leopard' ;; + 10.7|10.7.[0-9]*) os_name_='Mac OS X Lion' ;; + 10.8|10.8.[0-9]*) os_name_='Mac OS X Mountain Lion' ;; + 10.9|10.9.[0-9]*) os_name_='Mac OS X Mavericks' ;; + 10.10|10.10.[0-9]*) os_name_='Mac OS X Yosemite' ;; + 10.11|10.11.[0-9]*) os_name_='Mac OS X El Capitan' ;; + 10.12|10.12.[0-9]*) os_name_='macOS Sierra' ;; + 10.13|10.13.[0-9]*) os_name_='macOS High Sierra' ;; + *) os_name_='macOS' ;; + esac + ;; + FreeBSD) os_name_='FreeBSD' ;; + Linux) os_name_='Linux' ;; + SunOS) + os_name_='SunOS' + if [ -r '/etc/release' ]; then + if grep 'OpenSolaris' /etc/release >/dev/null; then + os_name_='OpenSolaris' + else + os_name_='Solaris' + fi + fi + ;; + esac + + echo ${os_name_} + unset os_name_ os_system_ os_release_ os_version_ +} + +versions_osVersion() { + os_version_='unrecognized' + os_system_=${UNAME_S} + os_release_=${UNAME_R} + case ${os_system_} in + CYGWIN_NT-*) + os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]\.[0-9]*\).*'` + ;; + Darwin) + os_version_=`/usr/bin/sw_vers -productVersion` + ;; + FreeBSD) + os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]*\)-.*'` + ;; + Linux) + if [ -r '/etc/os-release' ]; then + os_version_=`awk -F= '$1~/PRETTY_NAME/{print $2}' /etc/os-release \ + |sed 's/"//g'` + elif [ -r '/etc/redhat-release' ]; then + os_version_=`cat /etc/redhat-release` + elif [ -r '/etc/SuSE-release' ]; then + os_version_=`head -n 1 /etc/SuSE-release` + elif [ -r "${LSB_RELEASE}" ]; then + if grep -q 'DISTRIB_ID=Ubuntu' "${LSB_RELEASE}"; then + # shellcheck disable=SC2002 + os_version_=`cat "${LSB_RELEASE}" \ + |awk -F= '$1~/DISTRIB_DESCRIPTION/{print $2}' \ + |sed 's/"//g;s/ /-/g'` + fi + fi + ;; + SunOS) + if [ -r '/etc/release' ]; then + if grep 'OpenSolaris' /etc/release >/dev/null; then # OpenSolaris + os_version_=`grep 'OpenSolaris' /etc/release |awk '{print $2"("$3")"}'` + else # Solaris + major_=`echo "${os_release_}" |sed 's/[0-9]*\.\([0-9]*\)/\1/'` + minor_=`grep Solaris /etc/release |sed 's/[^u]*\(u[0-9]*\).*/\1/'` + os_version_="${major_}${minor_}" + fi + fi + ;; + esac + + echo "${os_version_}" + unset os_release_ os_system_ os_version_ major_ minor_ +} + +versions_shellVersion() { + shell_=$1 + + shell_present_=${FALSE} + case "${shell_}" in + ash) [ -x '/bin/busybox' ] && shell_present_=${TRUE} ;; + *) [ -x "${shell_}" ] && shell_present_=${TRUE} ;; + esac + if [ ${shell_present_} -eq ${FALSE} ]; then + echo 'not installed' + return ${FALSE} + fi + + version_='' + case ${shell_} in + /sbin/sh) ;; # SunOS + /usr/xpg4/bin/sh) + version_=`versions_shell_xpg4 "${shell_}"` + ;; # SunOS + */sh) + # This could be one of any number of shells. Try until one fits. + version_='' + [ -z "${version_}" ] && version_=`versions_shell_bash "${shell_}"` + # dash cannot be self determined yet + [ -z "${version_}" ] && version_=`versions_shell_ksh "${shell_}"` + # pdksh is covered in versions_shell_ksh() + [ -z "${version_}" ] && version_=`versions_shell_xpg4 "${shell_}"` + [ -z "${version_}" ] && version_=`versions_shell_zsh "${shell_}"` + ;; + ash) version_=`versions_shell_ash "${shell_}"` ;; + */bash) version_=`versions_shell_bash "${shell_}"` ;; + */dash) + # Assuming Ubuntu Linux until somebody comes up with a better test. The + # following test will return an empty string if dash is not installed. + version_=`versions_shell_dash` + ;; + */ksh) version_=`versions_shell_ksh "${shell_}"` ;; + */pdksh) version_=`versions_shell_pdksh "${shell_}"` ;; + */zsh) version_=`versions_shell_zsh "${shell_}"` ;; + *) version_='invalid' + esac + + echo "${version_:-unknown}" + unset shell_ version_ +} + +# The ash shell is included in BusyBox. +versions_shell_ash() { + busybox --help |head -1 |sed 's/BusyBox v\([0-9.]*\) .*/\1/' +} + +versions_shell_bash() { + $1 --version : 2>&1 |grep 'GNU bash' |sed 's/.*version \([^ ]*\).*/\1/' +} + +versions_shell_dash() { + eval dpkg >/dev/null 2>&1 + [ $? -eq 127 ] && return # Return if dpkg not found. + + dpkg -l |grep ' dash ' |awk '{print $3}' +} + +versions_shell_ksh() { + versions_shell_=$1 + versions_version_='' + + # Try a few different ways to figure out the version. + versions_version_=`${versions_shell_} --version : 2>&1` + # shellcheck disable=SC2181 + if [ $? -eq 0 ]; then + versions_version_=`echo "${versions_version_}" \ + |sed 's/.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/'` + else + versions_version_='' + fi + if [ -z "${versions_version_}" ]; then + _versions_have_strings + versions_version_=`strings "${versions_shell_}" 2>&1 \ + |grep Version \ + |sed 's/^.*Version \(.*\)$/\1/;s/ s+ \$$//;s/ /-/g'` + fi + if [ -z "${versions_version_}" ]; then + versions_version_=`versions_shell_pdksh "${versions_shell_}"` + fi + + echo "${versions_version_}" + unset versions_shell_ versions_version_ +} + +versions_shell_pdksh() { + _versions_have_strings + strings "$1" 2>&1 \ + |grep 'PD KSH' \ + |sed -e 's/.*PD KSH \(.*\)/\1/;s/ /-/g' +} + +versions_shell_xpg4() { + _versions_have_strings + strings "$1" 2>&1 \ + |grep 'Version' \ + |sed -e 's/^@(#)Version //' +} + +versions_shell_zsh() { + versions_shell_=$1 + + # Try a few different ways to figure out the version. + # shellcheck disable=SC2016 + versions_version_=`echo 'echo ${ZSH_VERSION}' |${versions_shell_}` + if [ -z "${versions_version_}" ]; then + versions_version_=`${versions_shell_} --version : 2>&1` + # shellcheck disable=SC2181 + if [ $? -eq 0 ]; then + versions_version_=`echo "${versions_version_}" |awk '{print $2}'` + else + versions_version_='' + fi + fi + + echo "${versions_version_}" + unset versions_shell_ versions_version_ +} + +# Determine if the 'strings' binary installed. +_versions_have_strings() { + [ ${__versions_haveStrings} -ne ${ERROR} ] && return + if eval strings /dev/null >/dev/null 2>&1; then + __versions_haveStrings=${TRUE} + return + fi + + echo 'WARN: strings not installed. try installing binutils?' >&2 + __versions_haveStrings=${FALSE} +} + +versions_main() { + # Treat unset variables as an error. + set -u + + os_name=`versions_osName` + os_version=`versions_osVersion` + echo "os: ${os_name} version: ${os_version}" + + for shell in ${VERSIONS_SHELLS}; do + shell_version=`versions_shellVersion "${shell}"` + echo "shell: ${shell} version: ${shell_version}" + done +} + +if [ "${ARGV0}" = 'versions' ]; then + versions_main "$@" +fi diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2 similarity index 60% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2 rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2 index d6e7503..d3d4056 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2 +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2 @@ -1,114 +1,149 @@ #! /bin/sh -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) +# Copyright 2008-2018 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. # # shUnit2 -- Unit testing framework for Unix shell scripts. -# http://code.google.com/p/shunit2/ +# https://github.com/kward/shunit2 # # Author: kate.ward@forestent.com (Kate Ward) # # shUnit2 is a xUnit based unit test framework for Bourne shell scripts. It is # based on the popular JUnit unit testing framework for Java. +# +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 +# expr may be antiquated, but it is the only solution in some cases. +# shellcheck disable=SC2003 -# return if shunit already loaded -[ -n "${SHUNIT_VERSION:-}" ] && exit 0 -SHUNIT_VERSION='2.1.7pre' +# Return if shunit2 already loaded. +command [ -n "${SHUNIT_VERSION:-}" ] && exit 0 +SHUNIT_VERSION='2.1.8pre' -# return values that scripts can use +# Return values that scripts can use. SHUNIT_TRUE=0 SHUNIT_FALSE=1 SHUNIT_ERROR=2 -# logging functions -_shunit_warn() { echo "shunit2:WARN $@" >&2; } -_shunit_error() { echo "shunit2:ERROR $@" >&2; } -_shunit_fatal() { echo "shunit2:FATAL $@" >&2; exit ${SHUNIT_ERROR}; } +# Logging functions. +_shunit_warn() { + ${__SHUNIT_CMD_ECHO_ESC} \ + "${__shunit_ansi_yellow}shunit2:WARN${__shunit_ansi_none} $*" >&2 +} +_shunit_error() { + ${__SHUNIT_CMD_ECHO_ESC} \ + "${__shunit_ansi_red}shunit2:ERROR${__shunit_ansi_none} $*" >&2 +} +_shunit_fatal() { + ${__SHUNIT_CMD_ECHO_ESC} \ + "${__shunit_ansi_red}shunit2:FATAL${__shunit_ansi_none} $*" >&2 + exit ${SHUNIT_ERROR} +} -# determine some reasonable command defaults +# Determine some reasonable command defaults. __SHUNIT_UNAME_S=`uname -s` case "${__SHUNIT_UNAME_S}" in - BSD) __SHUNIT_EXPR_CMD='gexpr' ;; - *) __SHUNIT_EXPR_CMD='expr' ;; + BSD) __SHUNIT_CMD_EXPR='gexpr' ;; + *) __SHUNIT_CMD_EXPR='expr' ;; esac -# commands a user can override if needed -SHUNIT_EXPR_CMD=${SHUNIT_EXPR_CMD:-${__SHUNIT_EXPR_CMD}} +__SHUNIT_CMD_ECHO_ESC='echo -e' +# shellcheck disable=SC2039 +command [ "`echo -e test`" = '-e test' ] && __SHUNIT_CMD_ECHO_ESC='echo' -# enable strict mode by default -SHUNIT_STRICT=${SHUNIT_STRICT:-${SHUNIT_TRUE}} +# Commands a user can override if needed. +SHUNIT_CMD_EXPR=${SHUNIT_CMD_EXPR:-${__SHUNIT_CMD_EXPR}} -# specific shell checks -if [ -n "${ZSH_VERSION:-}" ]; then +# Enable color output. Options are 'never', 'always', or 'auto'. +SHUNIT_COLOR=${SHUNIT_COLOR:-auto} + +# Specific shell checks. +if command [ -n "${ZSH_VERSION:-}" ]; then setopt |grep "^shwordsplit$" >/dev/null - if [ $? -ne ${SHUNIT_TRUE} ]; then + if command [ $? -ne ${SHUNIT_TRUE} ]; then _shunit_fatal 'zsh shwordsplit option is required for proper operation' fi - if [ -z "${SHUNIT_PARENT:-}" ]; then + if command [ -z "${SHUNIT_PARENT:-}" ]; then _shunit_fatal "zsh does not pass \$0 through properly. please declare \ \"SHUNIT_PARENT=\$0\" before calling shUnit2" fi fi # -# constants +# Constants # -__SHUNIT_ASSERT_MSG_PREFIX='ASSERT:' __SHUNIT_MODE_SOURCED='sourced' __SHUNIT_MODE_STANDALONE='standalone' __SHUNIT_PARENT=${SHUNIT_PARENT:-$0} -# set the constants readonly +# User provided test prefix -- define SHUNIT_TEST_PREFIX variable. +__SHUNIT_TEST_PREFIX=${SHUNIT_TEST_PREFIX:-} + +# ANSI colors. +__SHUNIT_ANSI_NONE='\033[0m' +__SHUNIT_ANSI_RED='\033[1;31m' +__SHUNIT_ANSI_GREEN='\033[1;32m' +__SHUNIT_ANSI_YELLOW='\033[1;33m' +__SHUNIT_ANSI_CYAN='\033[1;36m' + +# Set the constants readonly. __shunit_constants=`set |grep '^__SHUNIT_' |cut -d= -f1` echo "${__shunit_constants}" |grep '^Binary file' >/dev/null && \ __shunit_constants=`set |grep -a '^__SHUNIT_' |cut -d= -f1` for __shunit_const in ${__shunit_constants}; do - if [ -z "${ZSH_VERSION:-}" ]; then - readonly ${__shunit_const} + if command [ -z "${ZSH_VERSION:-}" ]; then + readonly "${__shunit_const}" else case ${ZSH_VERSION} in - [123].*) readonly ${__shunit_const} ;; - *) readonly -g ${__shunit_const} # declare readonly constants globally + [123].*) readonly "${__shunit_const}" ;; + *) readonly -g "${__shunit_const}" # Declare readonly constants globally. esac fi done unset __shunit_const __shunit_constants # -# internal variables +# Internal variables. # -# variables -__shunit_lineno='' # line number of executed test -__shunit_mode=${__SHUNIT_MODE_SOURCED} # operating mode -__shunit_reportGenerated=${SHUNIT_FALSE} # is report generated -__shunit_script='' # filename of unittest script (standalone mode) -__shunit_skip=${SHUNIT_FALSE} # is skipping enabled -__shunit_suite='' # suite of tests to execute +# Variables. +__shunit_lineno='' # Line number of executed test. +__shunit_mode=${__SHUNIT_MODE_SOURCED} # Operating mode. +__shunit_reportGenerated=${SHUNIT_FALSE} # Is report generated. +__shunit_script='' # Filename of unittest script (standalone mode). +__shunit_skip=${SHUNIT_FALSE} # Is skipping enabled. +__shunit_suite='' # Suite of tests to execute. -# counts of tests +# ANSI colors (populated by _shunit_configureColor()). +__shunit_ansi_none='' +__shunit_ansi_red='' +__shunit_ansi_green='' +__shunit_ansi_yellow='' +__shunit_ansi_cyan='' + +# Counts of tests. __shunit_testSuccess=${SHUNIT_TRUE} __shunit_testsTotal=0 __shunit_testsPassed=0 __shunit_testsFailed=0 -# counts of asserts +# Counts of asserts. __shunit_assertsTotal=0 __shunit_assertsPassed=0 __shunit_assertsFailed=0 __shunit_assertsSkipped=0 -# macros -_SHUNIT_LINENO_='eval __shunit_lineno=""; if [ "${1:-}" = "--lineno" ]; then [ -n "$2" ] && __shunit_lineno="[$2] "; shift 2; fi' +# +# Macros. +# + +# shellcheck disable=SC2016,SC2089 +_SHUNIT_LINENO_='eval __shunit_lineno=""; if command [ "${1:-}" = "--lineno" ]; then command [ -n "$2" ] && __shunit_lineno="[$2] "; shift 2; fi' #----------------------------------------------------------------------------- -# private functions - -#----------------------------------------------------------------------------- -# assert functions +# Assertion functions. # # Assert that two values are equal to one another. @@ -119,18 +154,18 @@ _SHUNIT_LINENO_='eval __shunit_lineno=""; if [ "${1:-}" = "--lineno" ]; then [ - # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertEquals() -{ +assertEquals() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "assertEquals() requires two or three arguments; $# given" - _shunit_error "1: ${1:+$1} 2: ${2:+$2} 3: ${3:+$3}${4:+ 4: $4}" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -138,7 +173,7 @@ assertEquals() shunit_actual_=$2 shunit_return=${SHUNIT_TRUE} - if [ "${shunit_expected_}" = "${shunit_actual_}" ]; then + if command [ "${shunit_expected_}" = "${shunit_actual_}" ]; then _shunit_assertPass else failNotEquals "${shunit_message_}" "${shunit_expected_}" "${shunit_actual_}" @@ -148,6 +183,7 @@ assertEquals() unset shunit_message_ shunit_expected_ shunit_actual_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_EQUALS_='eval assertEquals --lineno "${LINENO:-}"' # Assert that two values are not equal to one another. @@ -158,17 +194,18 @@ _ASSERT_EQUALS_='eval assertEquals --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertNotEquals() -{ +assertNotEquals() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "assertNotEquals() requires two or three arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -176,7 +213,7 @@ assertNotEquals() shunit_actual_=$2 shunit_return=${SHUNIT_TRUE} - if [ "${shunit_expected_}" != "${shunit_actual_}" ]; then + if command [ "${shunit_expected_}" != "${shunit_actual_}" ]; then _shunit_assertPass else failSame "${shunit_message_}" "$@" @@ -186,6 +223,7 @@ assertNotEquals() unset shunit_message_ shunit_expected_ shunit_actual_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_NOT_EQUALS_='eval assertNotEquals --lineno "${LINENO:-}"' # Assert that a value is null (i.e. an empty string) @@ -195,17 +233,18 @@ _ASSERT_NOT_EQUALS_='eval assertNotEquals --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertNull() -{ +assertNull() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then + if command [ $# -lt 1 -o $# -gt 2 ]; then _shunit_error "assertNull() requires one or two arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then + if command [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -215,6 +254,7 @@ assertNull() unset shunit_message_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_NULL_='eval assertNull --lineno "${LINENO:-}"' # Assert that a value is not null (i.e. a non-empty string) @@ -224,17 +264,18 @@ _ASSERT_NULL_='eval assertNull --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertNotNull() -{ +assertNotNull() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -gt 2 ]; then # allowing 0 arguments as $1 might actually be null + if command [ $# -gt 2 ]; then # allowing 0 arguments as $1 might actually be null _shunit_error "assertNotNull() requires one or two arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then + if command [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -246,6 +287,7 @@ assertNotNull() unset shunit_actual_ shunit_message_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_NOT_NULL_='eval assertNotNull --lineno "${LINENO:-}"' # Assert that two values are the same (i.e. equal to one another). @@ -256,17 +298,18 @@ _ASSERT_NOT_NULL_='eval assertNotNull --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertSame() -{ +assertSame() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "assertSame() requires two or three arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -276,6 +319,7 @@ assertSame() unset shunit_message_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_SAME_='eval assertSame --lineno "${LINENO:-}"' # Assert that two values are not the same (i.e. not equal to one another). @@ -286,17 +330,18 @@ _ASSERT_SAME_='eval assertSame --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertNotSame() -{ +assertNotSame() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "assertNotSame() requires two or three arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_:-}$1" shift fi @@ -306,6 +351,7 @@ assertNotSame() unset shunit_message_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_NOT_SAME_='eval assertNotSame --lineno "${LINENO:-}"' # Assert that a value or shell test condition is true. @@ -320,49 +366,50 @@ _ASSERT_NOT_SAME_='eval assertNotSame --lineno "${LINENO:-}"' # The following test will succeed: # assertTrue 0 # assertTrue "[ 34 -gt 23 ]" -# The folloing test will fail with a message: +# The following test will fail with a message: # assertTrue 123 -# assertTrue "test failed" "[ -r '/non/existant/file' ]" +# assertTrue "test failed" "[ -r '/non/existent/file' ]" # # Args: # message: string: failure message [optional] # condition: string: integer value or shell conditional statement # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertTrue() -{ +assertTrue() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then + if command [ $# -lt 1 -o $# -gt 2 ]; then _shunit_error "assertTrue() takes one or two arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then + if command [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift fi shunit_condition_=$1 - # see if condition is an integer, i.e. a return value + # See if condition is an integer, i.e. a return value. shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'` shunit_return=${SHUNIT_TRUE} - if [ -z "${shunit_condition_}" ]; then - # null condition + if command [ -z "${shunit_condition_}" ]; then + # Null condition. shunit_return=${SHUNIT_FALSE} - elif [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] + elif command [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] then - # possible return value. treating 0 as true, and non-zero as false. - [ ${shunit_condition_} -ne 0 ] && shunit_return=${SHUNIT_FALSE} + # Possible return value. Treating 0 as true, and non-zero as false. + command [ "${shunit_condition_}" -ne 0 ] && shunit_return=${SHUNIT_FALSE} else - # (hopefully) a condition - ( eval ${shunit_condition_} ) >/dev/null 2>&1 - [ $? -ne 0 ] && shunit_return=${SHUNIT_FALSE} + # Hopefully... a condition. + ( eval "${shunit_condition_}" ) >/dev/null 2>&1 + command [ $? -ne 0 ] && shunit_return=${SHUNIT_FALSE} fi - # record the test - if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then + # Record the test. + if command [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then _shunit_assertPass else _shunit_assertFail "${shunit_message_}" @@ -371,6 +418,7 @@ assertTrue() unset shunit_message_ shunit_condition_ shunit_match_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _ASSERT_TRUE_='eval assertTrue --lineno "${LINENO:-}"' # Assert that a value or shell test condition is false. @@ -385,7 +433,7 @@ _ASSERT_TRUE_='eval assertTrue --lineno "${LINENO:-}"' # The following test will succeed: # assertFalse 1 # assertFalse "[ 'apples' = 'oranges' ]" -# The folloing test will fail with a message: +# The following test will fail with a message: # assertFalse 0 # assertFalse "test failed" "[ 1 -eq 1 -a 2 -eq 2 ]" # @@ -394,52 +442,54 @@ _ASSERT_TRUE_='eval assertTrue --lineno "${LINENO:-}"' # condition: string: integer value or shell conditional statement # Returns: # integer: success (TRUE/FALSE/ERROR constant) -assertFalse() -{ +assertFalse() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 1 -o $# -gt 2 ]; then + if command [ $# -lt 1 -o $# -gt 2 ]; then _shunit_error "assertFalse() quires one or two arguments; $# given" + _shunit_assertFail return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 2 ]; then + if command [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift fi shunit_condition_=$1 - # see if condition is an integer, i.e. a return value + # See if condition is an integer, i.e. a return value. shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'` shunit_return=${SHUNIT_TRUE} - if [ -z "${shunit_condition_}" ]; then - # null condition + if command [ -z "${shunit_condition_}" ]; then + # Null condition. shunit_return=${SHUNIT_FALSE} - elif [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] + elif command [ -n "${shunit_match_}" -a "${shunit_condition_}" = "${shunit_match_}" ] then - # possible return value. treating 0 as true, and non-zero as false. - [ ${shunit_condition_} -eq 0 ] && shunit_return=${SHUNIT_FALSE} + # Possible return value. Treating 0 as true, and non-zero as false. + command [ "${shunit_condition_}" -eq 0 ] && shunit_return=${SHUNIT_FALSE} else - # (hopefully) a condition - ( eval ${shunit_condition_} ) >/dev/null 2>&1 - [ $? -eq 0 ] && shunit_return=${SHUNIT_FALSE} + # Hopefully... a condition. + ( eval "${shunit_condition_}" ) >/dev/null 2>&1 + command [ $? -eq 0 ] && shunit_return=${SHUNIT_FALSE} fi - # record the test - if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then + # Record the test. + if command [ "${shunit_return}" -eq "${SHUNIT_TRUE}" ]; then _shunit_assertPass else _shunit_assertFail "${shunit_message_}" fi unset shunit_message_ shunit_condition_ shunit_match_ - return ${shunit_return} + return "${shunit_return}" } +# shellcheck disable=SC2016,SC2034 _ASSERT_FALSE_='eval assertFalse --lineno "${LINENO:-}"' #----------------------------------------------------------------------------- -# failure functions +# Failure functions. # # Records a test failure. @@ -448,17 +498,17 @@ _ASSERT_FALSE_='eval assertFalse --lineno "${LINENO:-}"' # message: string: failure message [optional] # Returns: # integer: success (TRUE/FALSE/ERROR constant) -fail() -{ +fail() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -gt 1 ]; then + if command [ $# -gt 1 ]; then _shunit_error "fail() requires zero or one arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 1 ]; then + if command [ $# -eq 1 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -468,6 +518,7 @@ fail() unset shunit_message_ return ${SHUNIT_FALSE} } +# shellcheck disable=SC2016,SC2034 _FAIL_='eval fail --lineno "${LINENO:-}"' # Records a test failure, stating two values were not equal. @@ -478,28 +529,30 @@ _FAIL_='eval fail --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -failNotEquals() -{ +failNotEquals() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "failNotEquals() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi shunit_expected_=$1 shunit_actual_=$2 + shunit_message_=${shunit_message_%% } _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected:<${shunit_expected_}> but was:<${shunit_actual_}>" unset shunit_message_ shunit_expected_ shunit_actual_ return ${SHUNIT_FALSE} } +# shellcheck disable=SC2016,SC2034 _FAIL_NOT_EQUALS_='eval failNotEquals --lineno "${LINENO:-}"' # Records a test failure, stating two values should have been the same. @@ -512,24 +565,27 @@ _FAIL_NOT_EQUALS_='eval failNotEquals --lineno "${LINENO:-}"' # integer: success (TRUE/FALSE/ERROR constant) failSame() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then + if command [ $# -lt 2 -o $# -gt 3 ]; then _shunit_error "failSame() requires two or three arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi + shunit_message_=${shunit_message_%% } _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected not same" unset shunit_message_ return ${SHUNIT_FALSE} } +# shellcheck disable=SC2016,SC2034 _FAIL_SAME_='eval failSame --lineno "${LINENO:-}"' # Records a test failure, stating two values were not equal. @@ -542,17 +598,17 @@ _FAIL_SAME_='eval failSame --lineno "${LINENO:-}"' # actual: string: actual value # Returns: # integer: success (TRUE/FALSE/ERROR constant) -failNotSame() -{ +failNotSame() { + # shellcheck disable=SC2090 ${_SHUNIT_LINENO_} - if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error "failNotEquals() requires one or two arguments; $# given" + if command [ $# -lt 2 -o $# -gt 3 ]; then + _shunit_error "failNotSame() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} shunit_message_=${__shunit_lineno} - if [ $# -eq 3 ]; then + if command [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi @@ -562,10 +618,11 @@ failNotSame() unset shunit_message_ return ${shunit_return} } +# shellcheck disable=SC2016,SC2034 _FAIL_NOT_SAME_='eval failNotSame --lineno "${LINENO:-}"' #----------------------------------------------------------------------------- -# skipping functions +# Skipping functions. # # Force remaining assert and fail functions to be "skipped". @@ -576,19 +633,13 @@ _FAIL_NOT_SAME_='eval failNotSame --lineno "${LINENO:-}"' # # Args: # None -startSkipping() -{ - __shunit_skip=${SHUNIT_TRUE} -} +startSkipping() { __shunit_skip=${SHUNIT_TRUE}; } # Resume the normal recording behavior of assert and fail calls. # # Args: # None -endSkipping() -{ - __shunit_skip=${SHUNIT_FALSE} -} +endSkipping() { __shunit_skip=${SHUNIT_FALSE}; } # Returns the state of assert and fail call skipping. # @@ -596,13 +647,10 @@ endSkipping() # None # Returns: # boolean: (TRUE/FALSE constant) -isSkipping() -{ - return ${__shunit_skip} -} +isSkipping() { return ${__shunit_skip}; } #----------------------------------------------------------------------------- -# suite functions +# Suite functions. # # Stub. This function should contains all unit test calls to be made. @@ -629,8 +677,7 @@ isSkipping() # # Args: # function: string: name of a function to add to current unit test suite -suite_addTest() -{ +suite_addTest() { shunit_func_=${1:-} __shunit_suite="${__shunit_suite:+${__shunit_suite} }${shunit_func_}" @@ -672,7 +719,7 @@ suite_addTest() # # Args: # None -#setUp() { :; } +#setUp() { :; } # DO NOT UNCOMMENT THIS FUNCTION # Note: see _shunit_mktempFunc() for actual implementation # Stub. This function will be called after each test is run. @@ -687,41 +734,41 @@ suite_addTest() #tearDown() { :; } # DO NOT UNCOMMENT THIS FUNCTION #------------------------------------------------------------------------------ -# internal shUnit2 functions +# Internal shUnit2 functions. # # Create a temporary directory to store various run-time files in. # # This function is a cross-platform temporary directory creation tool. Not all -# OSes have the mktemp function, so one is included here. +# OSes have the `mktemp` function, so one is included here. # # Args: # None # Outputs: # string: the temporary directory that was created -_shunit_mktempDir() -{ - # try the standard mktemp function +_shunit_mktempDir() { + # Try the standard `mktemp` function. ( exec mktemp -dqt shunit.XXXXXX 2>/dev/null ) && return - # the standard mktemp didn't work. doing our own. - if [ -r '/dev/urandom' -a -x '/usr/bin/od' ]; then + # The standard `mktemp` didn't work. Use our own. + # shellcheck disable=SC2039 + if command [ -r '/dev/urandom' -a -x '/usr/bin/od' ]; then _shunit_random_=`/usr/bin/od -vAn -N4 -tx4 "${_shunit_file_}" + command cat <"${_shunit_file_}" #! /bin/sh exit ${SHUNIT_TRUE} EOF - chmod +x "${_shunit_file_}" + command chmod +x "${_shunit_file_}" done unset _shunit_file_ @@ -752,8 +798,7 @@ EOF # # Args: # name: string: name of the trap called (specified when trap defined) -_shunit_cleanup() -{ +_shunit_cleanup() { _shunit_name_=$1 case ${_shunit_name_} in @@ -761,22 +806,22 @@ _shunit_cleanup() INT) _shunit_signal_=2 ;; TERM) _shunit_signal_=15 ;; *) - _shunit_warn "unrecognized trap value (${_shunit_name_})" + _shunit_error "unrecognized trap value (${_shunit_name_})" _shunit_signal_=0 ;; esac - # do our work - rm -fr "${__shunit_tmpDir}" + # Do our work. + command rm -fr "${__shunit_tmpDir}" - # exit for all non-EXIT signals - if [ ${_shunit_name_} != 'EXIT' ]; then + # Exit for all non-EXIT signals. + if command [ "${_shunit_name_}" != 'EXIT' ]; then _shunit_warn "trapped and now handling the (${_shunit_name_}) signal" - # disable EXIT trap + # Disable EXIT trap. trap 0 - # add 128 to signal and exit - exit `expr ${_shunit_signal_} + 128` - elif [ ${__shunit_reportGenerated} -eq ${SHUNIT_FALSE} ] ; then + # Add 128 to signal and exit. + exit "`expr "${_shunit_signal_}" + 128`" + elif command [ ${__shunit_reportGenerated} -eq ${SHUNIT_FALSE} ] ; then _shunit_assertFail 'Unknown failure encountered running a test' _shunit_generateReport exit ${SHUNIT_ERROR} @@ -785,30 +830,78 @@ _shunit_cleanup() unset _shunit_name_ _shunit_signal_ } +# configureColor based on user color preference. +# +# Args: +# color: string: color mode (one of `always`, `auto`, or `none`). +_shunit_configureColor() { + _shunit_color_=${SHUNIT_FALSE} # By default, no color. + case $1 in + 'always') _shunit_color_=${SHUNIT_TRUE} ;; + 'auto') + ( exec tput >/dev/null 2>&1 ) # Check for existence of tput command. + if command [ $? -lt 127 ]; then + _shunit_tput_=`tput colors` + # shellcheck disable=SC2166,SC2181 + command [ $? -eq 0 -a "${_shunit_tput_}" -ge 16 ] && _shunit_color_=${SHUNIT_TRUE} + fi + ;; + 'none') ;; + *) _shunit_fatal "unrecognized color option '$1'" ;; + esac + + case ${_shunit_color_} in + ${SHUNIT_TRUE}) + __shunit_ansi_none=${__SHUNIT_ANSI_NONE} + __shunit_ansi_red=${__SHUNIT_ANSI_RED} + __shunit_ansi_green=${__SHUNIT_ANSI_GREEN} + __shunit_ansi_yellow=${__SHUNIT_ANSI_YELLOW} + __shunit_ansi_cyan=${__SHUNIT_ANSI_CYAN} + ;; + ${SHUNIT_FALSE}) + __shunit_ansi_none='' + __shunit_ansi_red='' + __shunit_ansi_green='' + __shunit_ansi_yellow='' + __shunit_ansi_cyan='' + ;; + esac + + unset _shunit_color_ _shunit_tput_ +} + # The actual running of the tests happens here. # # Args: # None -_shunit_execSuite() -{ +_shunit_execSuite() { for _shunit_test_ in ${__shunit_suite}; do __shunit_testSuccess=${SHUNIT_TRUE} - # disable skipping + # Disable skipping. endSkipping - # execute the per-test setup function + # Execute the per-test setup function. setUp + command [ $? -eq ${SHUNIT_TRUE} ] \ + || _shunit_fatal "setup() returned non-zero return code." - # execute the test - echo "${_shunit_test_}" - eval ${_shunit_test_} + # Execute the test. + echo "${__SHUNIT_TEST_PREFIX}${_shunit_test_}" + eval "${_shunit_test_}" + if command [ $? -ne ${SHUNIT_TRUE} ]; then + _shunit_error "${_shunit_test_}() returned non-zero return code." + __shunit_testSuccess=${SHUNIT_ERROR} + _shunit_incFailedCount + fi - # execute the per-test tear-down function + # Execute the per-test tear-down function. tearDown + command [ $? -eq ${SHUNIT_TRUE} ] \ + || _shunit_fatal "tearDown() returned non-zero return code." - # update stats - if [ ${__shunit_testSuccess} -eq ${SHUNIT_TRUE} ]; then + # Update stats. + if command [ ${__shunit_testSuccess} -eq ${SHUNIT_TRUE} ]; then __shunit_testsPassed=`expr ${__shunit_testsPassed} + 1` else __shunit_testsFailed=`expr ${__shunit_testsFailed} + 1` @@ -824,42 +917,43 @@ _shunit_execSuite() # None # Output: # string: the report of successful and failed tests, as well as totals. -_shunit_generateReport() -{ +_shunit_generateReport() { _shunit_ok_=${SHUNIT_TRUE} - # if no exit code was provided one, determine an appropriate one - [ ${__shunit_testsFailed} -gt 0 \ + # If no exit code was provided one, determine an appropriate one. + command [ "${__shunit_testsFailed}" -gt 0 \ -o ${__shunit_testSuccess} -eq ${SHUNIT_FALSE} ] \ && _shunit_ok_=${SHUNIT_FALSE} echo - if [ ${__shunit_testsTotal} -eq 1 ]; then - echo "Ran ${__shunit_testsTotal} test." + _shunit_msg_="Ran ${__shunit_ansi_cyan}${__shunit_testsTotal}${__shunit_ansi_none}" + if command [ "${__shunit_testsTotal}" -eq 1 ]; then + ${__SHUNIT_CMD_ECHO_ESC} "${_shunit_msg_} test." else - echo "Ran ${__shunit_testsTotal} tests." + ${__SHUNIT_CMD_ECHO_ESC} "${_shunit_msg_} tests." fi - _shunit_failures_='' - _shunit_skipped_='' - [ ${__shunit_assertsFailed} -gt 0 ] \ + _shunit_failures_=0 + _shunit_skipped_=0 + command [ "${__shunit_assertsFailed}" -gt 0 ] \ && _shunit_failures_="failures=${__shunit_assertsFailed}" - [ ${__shunit_assertsSkipped} -gt 0 ] \ + command [ "${__shunit_assertsSkipped}" -gt 0 ] \ && _shunit_skipped_="skipped=${__shunit_assertsSkipped}" - if [ ${_shunit_ok_} -eq ${SHUNIT_TRUE} ]; then - _shunit_msg_='OK' - [ -n "${_shunit_skipped_}" ] \ - && _shunit_msg_="${_shunit_msg_} (${_shunit_skipped_})" + if command [ ${_shunit_ok_} -eq ${SHUNIT_TRUE} ]; then + _shunit_msg_="${__shunit_ansi_green}OK${__shunit_ansi_none}" + command [ "${_shunit_skipped_}" -gt 0 ] \ + && _shunit_msg_="${_shunit_msg_} (${__shunit_ansi_yellow}${_shunit_skipped_}${__shunit_ansi_none})" else - _shunit_msg_="FAILED (${_shunit_failures_}" - [ -n "${_shunit_skipped_}" ] \ - && _shunit_msg_="${_shunit_msg_},${_shunit_skipped_}" + _shunit_msg_="${__shunit_ansi_red}FAILED${__shunit_ansi_none}" + _shunit_msg_="${_shunit_msg_} (${__shunit_ansi_red}${_shunit_failures_}${__shunit_ansi_none}" + command [ "${_shunit_skipped_}" -gt 0 ] \ + && _shunit_msg_="${_shunit_msg_},${__shunit_ansi_yellow}${_shunit_skipped_}${__shunit_ansi_none}" _shunit_msg_="${_shunit_msg_})" fi echo - echo ${_shunit_msg_} + ${__SHUNIT_CMD_ECHO_ESC} "${_shunit_msg_}" __shunit_reportGenerated=${SHUNIT_TRUE} unset _shunit_failures_ _shunit_msg_ _shunit_ok_ _shunit_skipped_ @@ -871,9 +965,8 @@ _shunit_generateReport() # None # Returns: # boolean: whether the test should be skipped (TRUE/FALSE constant) -_shunit_shouldSkip() -{ - [ ${__shunit_skip} -eq ${SHUNIT_FALSE} ] && return ${SHUNIT_FALSE} +_shunit_shouldSkip() { + command [ ${__shunit_skip} -eq ${SHUNIT_FALSE} ] && return ${SHUNIT_FALSE} _shunit_assertSkip } @@ -881,8 +974,7 @@ _shunit_shouldSkip() # # Args: # None -_shunit_assertPass() -{ +_shunit_assertPass() { __shunit_assertsPassed=`expr ${__shunit_assertsPassed} + 1` __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` } @@ -891,26 +983,31 @@ _shunit_assertPass() # # Args: # message: string: failure message to provide user -_shunit_assertFail() -{ - _shunit_msg_=$1 - +_shunit_assertFail() { __shunit_testSuccess=${SHUNIT_FALSE} - __shunit_assertsFailed=`expr ${__shunit_assertsFailed} + 1` - __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` - echo "${__SHUNIT_ASSERT_MSG_PREFIX}${_shunit_msg_}" + _shunit_incFailedCount - unset _shunit_msg_ + \[ $# -gt 0 ] && ${__SHUNIT_CMD_ECHO_ESC} \ + "${__shunit_ansi_red}ASSERT:${__shunit_ansi_none}$*" } +# Increment the count of failed asserts. +# +# Args: +# none +_shunit_incFailedCount() { + __shunit_assertsFailed=`expr "${__shunit_assertsFailed}" + 1` + __shunit_assertsTotal=`expr "${__shunit_assertsTotal}" + 1` +} + + # Records a skipped test. # # Args: # None -_shunit_assertSkip() -{ - __shunit_assertsSkipped=`expr ${__shunit_assertsSkipped} + 1` - __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` +_shunit_assertSkip() { + __shunit_assertsSkipped=`expr "${__shunit_assertsSkipped}" + 1` + __shunit_assertsTotal=`expr "${__shunit_assertsTotal}" + 1` } # Prepare a script filename for sourcing. @@ -919,8 +1016,7 @@ _shunit_assertSkip() # script: string: path to a script to source # Returns: # string: filename prefixed with ./ (if necessary) -_shunit_prepForSourcing() -{ +_shunit_prepForSourcing() { _shunit_script_=$1 case "${_shunit_script_}" in /*|./*) echo "${_shunit_script_}" ;; @@ -936,17 +1032,16 @@ _shunit_prepForSourcing() # s: string: to escape character in # Returns: # string: with escaped character(s) -_shunit_escapeCharInStr() -{ - [ -n "$2" ] || return # no point in doing work on an empty string +_shunit_escapeCharInStr() { + command [ -n "$2" ] || return # No point in doing work on an empty string. # Note: using shorter variable names to prevent conflicts with # _shunit_escapeCharactersInString(). _shunit_c_=$1 _shunit_s_=$2 - - # escape the character + # Escape the character. + # shellcheck disable=SC1003,SC2086 echo ''${_shunit_s_}'' |sed 's/\'${_shunit_c_}'/\\\'${_shunit_c_}'/g' unset _shunit_c_ _shunit_s_ @@ -958,9 +1053,8 @@ _shunit_escapeCharInStr() # str: string: to escape characters in # Returns: # string: with escaped character(s) -_shunit_escapeCharactersInString() -{ - [ -n "$1" ] || return # no point in doing work on an empty string +_shunit_escapeCharactersInString() { + command [ -n "$1" ] || return # No point in doing work on an empty string. _shunit_str_=$1 @@ -980,13 +1074,13 @@ _shunit_escapeCharactersInString() # script: string: name of script to extract functions from # Returns: # string: of function names -_shunit_extractTestFunctions() -{ +_shunit_extractTestFunctions() { _shunit_script_=$1 - # extract the lines with test function names, strip of anything besides the + # Extract the lines with test function names, strip of anything besides the # function name, and output everything on a single line. _shunit_regex_='^[ ]*(function )*test[A-Za-z0-9_]* *\(\)' + # shellcheck disable=SC2196 egrep "${_shunit_regex_}" "${_shunit_script_}" \ |sed 's/^[^A-Za-z0-9_]*//;s/^function //;s/\([A-Za-z0-9_]*\).*/\1/g' \ |xargs @@ -995,73 +1089,81 @@ _shunit_extractTestFunctions() } #------------------------------------------------------------------------------ -# main +# Main. # -# determine the operating mode -if [ $# -eq 0 ]; then +# Determine the operating mode. +if command [ $# -eq 0 ]; then __shunit_script=${__SHUNIT_PARENT} __shunit_mode=${__SHUNIT_MODE_SOURCED} else __shunit_script=$1 - [ -r "${__shunit_script}" ] || \ + command [ -r "${__shunit_script}" ] || \ _shunit_fatal "unable to read from ${__shunit_script}" __shunit_mode=${__SHUNIT_MODE_STANDALONE} fi -# create a temporary storage location +# Create a temporary storage location. __shunit_tmpDir=`_shunit_mktempDir` -# provide a public temporary directory for unit test scripts -# TODO(kward): document this +# Provide a public temporary directory for unit test scripts. +# TODO(kward): document this. SHUNIT_TMPDIR="${__shunit_tmpDir}/tmp" -mkdir "${SHUNIT_TMPDIR}" +command mkdir "${SHUNIT_TMPDIR}" -# setup traps to clean up after ourselves +# Setup traps to clean up after ourselves. trap '_shunit_cleanup EXIT' 0 trap '_shunit_cleanup INT' 2 trap '_shunit_cleanup TERM' 15 -# create phantom functions to work around issues with Cygwin +# Create phantom functions to work around issues with Cygwin. _shunit_mktempFunc PATH="${__shunit_tmpDir}:${PATH}" -# make sure phantom functions are executable. this will bite if /tmp (or the -# current $TMPDIR) points to a path on a partition that was mounted with the -# 'noexec' option. the noexec command was created with _shunit_mktempFunc(). +# Make sure phantom functions are executable. This will bite if `/tmp` (or the +# current `$TMPDIR`) points to a path on a partition that was mounted with the +# 'noexec' option. The noexec command was created with `_shunit_mktempFunc()`. noexec 2>/dev/null || _shunit_fatal \ - 'please declare TMPDIR with path on partition with exec permission' + 'Please declare TMPDIR with path on partition with exec permission.' -# we must manually source the tests in standalone mode -if [ "${__shunit_mode}" = "${__SHUNIT_MODE_STANDALONE}" ]; then - . "`_shunit_prepForSourcing \"${__shunit_script}\"`" +# We must manually source the tests in standalone mode. +if command [ "${__shunit_mode}" = "${__SHUNIT_MODE_STANDALONE}" ]; then + # shellcheck disable=SC1090 + command . "`_shunit_prepForSourcing \"${__shunit_script}\"`" fi -# execute the oneTimeSetUp function (if it exists) -oneTimeSetUp +# Configure default output coloring behavior. +_shunit_configureColor "${SHUNIT_COLOR}" -# execute the suite function defined in the parent test script -# deprecated as of 2.1.0 +# Execute the oneTimeSetUp function (if it exists). +oneTimeSetUp +command [ $? -eq ${SHUNIT_TRUE} ] \ + || _shunit_fatal "oneTimeSetUp() returned non-zero return code." + +# Execute the suite function defined in the parent test script. +# DEPRECATED as of 2.1.0. suite -# if no suite function was defined, dynamically build a list of functions -if [ -z "${__shunit_suite}" ]; then +# If no suite function was defined, dynamically build a list of functions. +if command [ -z "${__shunit_suite}" ]; then shunit_funcs_=`_shunit_extractTestFunctions "${__shunit_script}"` for shunit_func_ in ${shunit_funcs_}; do - suite_addTest ${shunit_func_} + suite_addTest "${shunit_func_}" done fi unset shunit_func_ shunit_funcs_ -# execute the tests +# Execute the suite of unit tests. _shunit_execSuite -# execute the oneTimeTearDown function (if it exists) +# Execute the oneTimeTearDown function (if it exists). oneTimeTearDown +command [ $? -eq ${SHUNIT_TRUE} ] \ + || _shunit_fatal "oneTimeTearDown() returned non-zero return code." -# generate the report +# Generate a report summary. _shunit_generateReport -# that's it folks -[ ${__shunit_testsFailed} -eq 0 ] +# That's it folks. +command [ "${__shunit_testsFailed}" -eq 0 ] exit $? diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_asserts.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_asserts_test.sh similarity index 88% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_asserts.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_asserts_test.sh index 38647ec..959ad98 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_asserts.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_asserts_test.sh @@ -1,23 +1,25 @@ #! /bin/sh -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) +# shunit2 unit test for assert functions. +# +# Copyright 2008-2017 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. # # Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 # -# shUnit2 unit test for assert functions +# Disable source following. +# shellcheck disable=SC1090,SC1091 -# load test helpers +# These variables will be overridden by the test helpers. +stdoutF="${TMPDIR:-/tmp}/STDOUT" +stderrF="${TMPDIR:-/tmp}/STDERR" + +# Load test helpers. . ./shunit2_test_helpers -#------------------------------------------------------------------------------ -# suite tests -# - -commonEqualsSame() -{ +commonEqualsSame() { fn=$1 ( ${fn} 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) @@ -42,8 +44,7 @@ commonEqualsSame() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -commonNotEqualsSame() -{ +commonNotEqualsSame() { fn=$1 ( ${fn} 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) @@ -65,28 +66,23 @@ commonNotEqualsSame() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -testAssertEquals() -{ +testAssertEquals() { commonEqualsSame 'assertEquals' } -testAssertNotEquals() -{ +testAssertNotEquals() { commonNotEqualsSame 'assertNotEquals' } -testAssertSame() -{ +testAssertSame() { commonEqualsSame 'assertSame' } -testAssertNotSame() -{ +testAssertNotSame() { commonNotEqualsSame 'assertNotSame' } -testAssertNull() -{ +testAssertNull() { ( assertNull '' >"${stdoutF}" 2>"${stderrF}" ) th_assertTrueWithNoOutput 'null' $? "${stdoutF}" "${stderrF}" @@ -119,6 +115,7 @@ testAssertNotNull() th_assertTrueWithNoOutput 'not null, with single-quote' $? \ "${stdoutF}" "${stderrF}" + # shellcheck disable=SC2016 ( assertNotNull 'x$b' >"${stdoutF}" 2>"${stderrF}" ) th_assertTrueWithNoOutput 'not null, with dollar' $? \ "${stdoutF}" "${stderrF}" @@ -130,14 +127,13 @@ testAssertNotNull() ( assertNotNull '' >"${stdoutF}" 2>"${stderrF}" ) th_assertFalseWithOutput 'null' $? "${stdoutF}" "${stderrF}" - # there is no test for too few arguments as $1 might actually be null + # There is no test for too few arguments as $1 might actually be null. ( assertNotNull arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}" ) th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -testAssertTrue() -{ +testAssertTrue() { ( assertTrue 0 >"${stdoutF}" 2>"${stderrF}" ) th_assertTrueWithNoOutput 'true' $? "${stdoutF}" "${stderrF}" @@ -163,8 +159,7 @@ testAssertTrue() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -testAssertFalse() -{ +testAssertFalse() { ( assertFalse 1 >"${stdoutF}" 2>"${stderrF}" ) th_assertTrueWithNoOutput 'false' $? "${stdoutF}" "${stderrF}" @@ -190,17 +185,13 @@ testAssertFalse() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -#------------------------------------------------------------------------------ -# suite functions -# - -oneTimeSetUp() -{ +oneTimeSetUp() { th_oneTimeSetUp MSG='This is a test message' } -# load and run shUnit2 +# Load and run shunit2. +# shellcheck disable=SC2034 [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 -. ${TH_SHUNIT} +. "${TH_SHUNIT}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_failures.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_failures_test.sh similarity index 83% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_failures.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_failures_test.sh index 933a0b1..97ade24 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_failures.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_failures_test.sh @@ -1,23 +1,25 @@ #! /bin/sh -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2008 Kate Ward. All Rights Reserved. +# shUnit2 unit test for failure functions +# +# Copyright 2008-2017 Kate Ward. All Rights Reserved. # Released under the LGPL (GNU Lesser General Public License) # # Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 # -# shUnit2 unit test for failure functions +# Disable source following. +# shellcheck disable=SC1090,SC1091 -# load common unit-test functions +# These variables will be overridden by the test helpers. +stdoutF="${TMPDIR:-/tmp}/STDOUT" +stderrF="${TMPDIR:-/tmp}/STDERR" + +# Load test helpers. . ./shunit2_test_helpers -#----------------------------------------------------------------------------- -# suite tests -# - -testFail() -{ +testFail() { ( fail >"${stdoutF}" 2>"${stderrF}" ) th_assertFalseWithOutput 'fail' $? "${stdoutF}" "${stderrF}" @@ -28,8 +30,7 @@ testFail() th_assertFalseWithOutput 'too many arguments' $? "${stdoutF}" "${stderrF}" } -testFailNotEquals() -{ +testFailNotEquals() { ( failNotEquals 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) th_assertFalseWithOutput 'same' $? "${stdoutF}" "${stderrF}" @@ -49,8 +50,7 @@ testFailNotEquals() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -testFailSame() -{ +testFailSame() { ( failSame 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) th_assertFalseWithOutput 'same' $? "${stdoutF}" "${stderrF}" @@ -70,17 +70,13 @@ testFailSame() th_assertFalseWithError 'too many arguments' $? "${stdoutF}" "${stderrF}" } -#----------------------------------------------------------------------------- -# suite functions -# - -oneTimeSetUp() -{ +oneTimeSetUp() { th_oneTimeSetUp MSG='This is a test message' } -# load and run shUnit2 +# Load and run shUnit2. +# shellcheck disable=SC2034 [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 -. ${TH_SHUNIT} +. "${TH_SHUNIT}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_macros.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_macros_test.sh similarity index 60% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_macros.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_macros_test.sh index ce57b14..bf1e468 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_macros.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_macros_test.sh @@ -1,108 +1,110 @@ #! /bin/sh -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# Author: kate.ward@forestent.com (Kate Ward) +# shunit2 unit test for macros. # -# shUnit2 unit test for macros. +# Copyright 2008-2017 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 +# +### ShellCheck http://www.shellcheck.net/ +# Disable source following. +# shellcheck disable=SC1090,SC1091 +# Presence of LINENO variable is checked. +# shellcheck disable=SC2039 -# load test helpers +# These variables will be overridden by the test helpers. +stdoutF="${TMPDIR:-/tmp}/STDOUT" +stderrF="${TMPDIR:-/tmp}/STDERR" + +# Load test helpers. . ./shunit2_test_helpers -#------------------------------------------------------------------------------ -# suite tests -# - -testAssertEquals() -{ - # start skipping if LINENO not available +testAssertEquals() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_ASSERT_EQUALS_} 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_EQUALS_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_EQUALS_} '"some msg"' 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_EQUALS_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testAssertNotEquals() -{ - # start skipping if LINENO not available +testAssertNotEquals() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_ASSERT_NOT_EQUALS_} 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_EQUALS_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_NOT_EQUALS_} '"some msg"' 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_EQUALS_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testSame() -{ - # start skipping if LINENO not available +testSame() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_ASSERT_SAME_} 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_SAME_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_SAME_} '"some msg"' 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_SAME_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testNotSame() -{ - # start skipping if LINENO not available +testNotSame() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_ASSERT_NOT_SAME_} 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_SAME_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_NOT_SAME_} '"some msg"' 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_SAME_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testNull() -{ - # start skipping if LINENO not available +testNull() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_ASSERT_NULL_} 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NULL_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_NULL_} '"some msg"' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NULL_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } testNotNull() @@ -114,68 +116,64 @@ testNotNull() grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_NULL_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_ASSERT_NOT_NULL_} '"some msg"' '""' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_NOT_NULL_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stdoutF}" "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stdoutF}" "${stderrF}" >&2 } -testAssertTrue() -{ - # start skipping if LINENO not available +testAssertTrue() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping - ( ${_ASSERT_TRUE_} ${SHUNIT_FALSE} >"${stdoutF}" 2>"${stderrF}" ) + ( ${_ASSERT_TRUE_} "${SHUNIT_FALSE}" >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_TRUE_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 - - ( ${_ASSERT_TRUE_} '"some msg"' ${SHUNIT_FALSE} >"${stdoutF}" 2>"${stderrF}" ) + ( ${_ASSERT_TRUE_} '"some msg"' "${SHUNIT_FALSE}" >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_TRUE_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testAssertFalse() -{ - # start skipping if LINENO not available +testAssertFalse() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping - ( ${_ASSERT_FALSE_} ${SHUNIT_TRUE} >"${stdoutF}" 2>"${stderrF}" ) + ( ${_ASSERT_FALSE_} "${SHUNIT_TRUE}" >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_FALSE_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 - ( ${_ASSERT_FALSE_} '"some msg"' ${SHUNIT_TRUE} >"${stdoutF}" 2>"${stderrF}" ) + ( ${_ASSERT_FALSE_} '"some msg"' "${SHUNIT_TRUE}" >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_ASSERT_FALSE_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testFail() -{ - # start skipping if LINENO not available +testFail() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_FAIL_} >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_FAIL_} '"some msg"' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } testFailNotEquals() @@ -187,60 +185,57 @@ testFailNotEquals() grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_NOT_EQUALS_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_FAIL_NOT_EQUALS_} '"some msg"' 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_NOT_EQUALS_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testFailSame() -{ - # start skipping if LINENO not available +testFailSame() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_FAIL_SAME_} 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_SAME_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_FAIL_SAME_} '"some msg"' 'x' 'x' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_SAME_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -testFailNotSame() -{ - # start skipping if LINENO not available +testFailNotSame() { + # Start skipping if LINENO not available. [ -z "${LINENO:-}" ] && startSkipping ( ${_FAIL_NOT_SAME_} 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_NOT_SAME_ failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 ( ${_FAIL_NOT_SAME_} '"some msg"' 'x' 'y' >"${stdoutF}" 2>"${stderrF}" ) grep '^ASSERT:\[[0-9]*\] *' "${stdoutF}" >/dev/null rtrn=$? assertTrue '_FAIL_NOT_SAME_ w/ msg failure' ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 + [ "${rtrn}" -ne "${SHUNIT_TRUE}" ] && cat "${stderrF}" >&2 } -#------------------------------------------------------------------------------ -# suite functions -# - -oneTimeSetUp() -{ +oneTimeSetUp() { th_oneTimeSetUp } -# load and run shUnit2 -[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 -. ${TH_SHUNIT} +# Disable output coloring as it breaks the tests. +SHUNIT_COLOR='none'; export SHUNIT_COLOR + +# Load and run shUnit2. +# shellcheck disable=SC2034 +[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT="$0" +. "${TH_SHUNIT}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_misc_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_misc_test.sh new file mode 100755 index 0000000..6fa2de3 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_misc_test.sh @@ -0,0 +1,262 @@ +#! /bin/sh +# vim:et:ft=sh:sts=2:sw=2 +# +# shUnit2 unit tests of miscellaneous things +# +# Copyright 2008-2018 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 +# +### ShellCheck http://www.shellcheck.net/ +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 +# Disable source following. +# shellcheck disable=SC1090,SC1091 +# Not wanting to escape single quotes. +# shellcheck disable=SC1003 + +# These variables will be overridden by the test helpers. +stdoutF="${TMPDIR:-/tmp}/STDOUT" +stderrF="${TMPDIR:-/tmp}/STDERR" + +# Load test helpers. +. ./shunit2_test_helpers + +# Note: the test script is prefixed with '#' chars so that shUnit2 does not +# incorrectly interpret the embedded functions as real functions. +testUnboundVariable() { + unittestF="${SHUNIT_TMPDIR}/unittest" + sed 's/^#//' >"${unittestF}" <"${stdoutF}" 2>"${stderrF}" ) + assertFalse 'expected a non-zero exit value' $? + grep '^ASSERT:Unknown failure' "${stdoutF}" >/dev/null + assertTrue 'assert message was not generated' $? + grep '^Ran [0-9]* test' "${stdoutF}" >/dev/null + assertTrue 'test count message was not generated' $? + grep '^FAILED' "${stdoutF}" >/dev/null + assertTrue 'failure message was not generated' $? +} + +# assertEquals repeats message argument. +# https://github.com/kward/shunit2/issues/7 +testIssue7() { + # Disable coloring so 'ASSERT:' lines can be matched correctly. + _shunit_configureColor 'none' + + ( assertEquals 'Some message.' 1 2 >"${stdoutF}" 2>"${stderrF}" ) + diff "${stdoutF}" - >/dev/null < but was:<2> +EOF + rtrn=$? + assertEquals "${SHUNIT_TRUE}" "${rtrn}" + [ "${rtrn}" -eq "${SHUNIT_TRUE}" ] || cat "${stderrF}" >&2 +} + +# Support prefixes on test output. +# https://github.com/kward/shunit2/issues/29 +testIssue29() { + unittestF="${SHUNIT_TMPDIR}/unittest" + sed 's/^#//' >"${unittestF}" <"${stdoutF}" 2>"${stderrF}" ) + grep '^--- test_assert' "${stdoutF}" >/dev/null + rtrn=$? + assertEquals "${SHUNIT_TRUE}" "${rtrn}" + [ "${rtrn}" -eq "${SHUNIT_TRUE}" ] || cat "${stdoutF}" >&2 +} + +# shUnit2 should not exit with 0 when it has syntax errors. +# https://github.com/kward/shunit2/issues/69 +testIssue69() { + unittestF="${SHUNIT_TMPDIR}/unittest" + + for t in Equals NotEquals Null NotNull Same NotSame True False; do + assert="assert${t}" + sed 's/^#//' >"${unittestF}" <"${stdoutF}" 2>"${stderrF}" ) + grep '^FAILED' "${stdoutF}" >/dev/null + assertTrue "failure message for ${assert} was not generated" $? + done +} + +# Ensure that test fails if setup/teardown functions fail. +testIssue77() { + unittestF="${SHUNIT_TMPDIR}/unittest" + for func in oneTimeSetUp setUp tearDown oneTimeTearDown; do + sed 's/^#//' >"${unittestF}" <"${stdoutF}" 2>"${stderrF}" ) + grep '^FAILED' "${stdoutF}" >/dev/null + assertTrue "failure of ${func}() did not end test" $? + done +} + +# Ensure a test failure is recorded for code containing syntax errors. +# https://github.com/kward/shunit2/issues/84 +testIssue84() { + unittestF="${SHUNIT_TMPDIR}/unittest" + sed 's/^#//' >"${unittestF}" <<\EOF +## Function with syntax error. +#syntax_error() { ${!#3442} -334 a$@2[1]; } +#test_syntax_error() { +# syntax_error +# assertTrue ${SHUNIT_TRUE} +#} +#SHUNIT_COLOR='none' +#SHUNIT_TEST_PREFIX='--- ' +#. ${TH_SHUNIT} +EOF + ( exec "${SHUNIT_SHELL:-sh}" "${unittestF}" >"${stdoutF}" 2>"${stderrF}" ) + grep '^FAILED' "${stdoutF}" >/dev/null + assertTrue "failure message for ${assert} was not generated" $? +} + +testPrepForSourcing() { + assertEquals '/abc' "`_shunit_prepForSourcing '/abc'`" + assertEquals './abc' "`_shunit_prepForSourcing './abc'`" + assertEquals './abc' "`_shunit_prepForSourcing 'abc'`" +} + +testEscapeCharInStr() { + while read -r desc char str want; do + got=`_shunit_escapeCharInStr "${char}" "${str}"` + assertEquals "${desc}" "${want}" "${got}" + done <<'EOF' +backslash \ '' '' +backslash_pre \ \def \\def +backslash_mid \ abc\def abc\\def +backslash_post \ abc\ abc\\ +quote " '' '' +quote_pre " "def \"def +quote_mid " abc"def abc\"def +quote_post " abc" abc\" +string $ '' '' +string_pre $ $def \$def +string_mid $ abc$def abc\$def +string_post $ abc$ abc\$ +EOF + + # TODO(20170924:kward) fix or remove. +# actual=`_shunit_escapeCharInStr "'" ''` +# assertEquals '' "${actual}" +# assertEquals "abc\\'" `_shunit_escapeCharInStr "'" "abc'"` +# assertEquals "abc\\'def" `_shunit_escapeCharInStr "'" "abc'def"` +# assertEquals "\\'def" `_shunit_escapeCharInStr "'" "'def"` + +# # Must put the backtick in a variable so the shell doesn't misinterpret it +# # while inside a backticked sequence (e.g. `echo '`'` would fail). +# backtick='`' +# actual=`_shunit_escapeCharInStr ${backtick} ''` +# assertEquals '' "${actual}" +# assertEquals '\`abc' \ +# `_shunit_escapeCharInStr "${backtick}" ${backtick}'abc'` +# assertEquals 'abc\`' \ +# `_shunit_escapeCharInStr "${backtick}" 'abc'${backtick}` +# assertEquals 'abc\`def' \ +# `_shunit_escapeCharInStr "${backtick}" 'abc'${backtick}'def'` +} + +testEscapeCharInStr_specialChars() { + # Make sure our forward slash doesn't upset sed. + assertEquals '/' "`_shunit_escapeCharInStr '\' '/'`" + + # Some shells escape these differently. + # TODO(20170924:kward) fix or remove. + #assertEquals '\\a' `_shunit_escapeCharInStr '\' '\a'` + #assertEquals '\\b' `_shunit_escapeCharInStr '\' '\b'` +} + +# Test the various ways of declaring functions. +# +# Prefixing (then stripping) with comment symbol so these functions aren't +# treated as real functions by shUnit2. +testExtractTestFunctions() { + f="${SHUNIT_TMPDIR}/extract_test_functions" + sed 's/^#//' <"${f}" +## Function on a single line. +#testABC() { echo 'ABC'; } +## Multi-line function with '{' on next line. +#test_def() +# { +# echo 'def' +#} +## Multi-line function with '{' on first line. +#testG3 () { +# echo 'G3' +#} +## Function with numerical values in name. +#function test4() { echo '4'; } +## Leading space in front of function. +# test5() { echo '5'; } +## Function with '_' chars in name. +#some_test_function() { echo 'some func'; } +## Function that sets variables. +#func_with_test_vars() { +# testVariable=1234 +#} +EOF + + actual=`_shunit_extractTestFunctions "${f}"` + assertEquals 'testABC test_def testG3 test4 test5' "${actual}" +} + +# Test that certain external commands sometimes "stubbed" by users +# are escaped. See Issue #54. +testProtectedCommands() { + for c in mkdir rm cat chmod; do + grep "^[^#]*${c} " "${TH_SHUNIT}" | grep -qv "command ${c}" + assertFalse "external call to ${c} not protected somewhere" $? + done + grep '^[^#]*[^ ] *\[' "${TH_SHUNIT}" | grep -qv 'command \[' + assertFalse "call to [ ... ] not protected somewhere" $? + grep '^[^#]* *\.' "${TH_SHUNIT}" | grep -qv 'command \.' + assertFalse "call to . not protected somewhere" $? +} + +setUp() { + for f in "${stdoutF}" "${stderrF}"; do + cp /dev/null "${f}" + done + + # Reconfigure coloring as some tests override default behavior. + _shunit_configureColor "${SHUNIT_COLOR_DEFAULT}" +} + +oneTimeSetUp() { + SHUNIT_COLOR_DEFAULT="${SHUNIT_COLOR}" + th_oneTimeSetUp +} + +# Load and run shUnit2. +# shellcheck disable=SC2034 +[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 +. "${TH_SHUNIT}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_standalone.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_standalone_test.sh similarity index 53% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_standalone.sh rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_standalone_test.sh index 2ac4725..2109d8f 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_standalone.sh +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_standalone_test.sh @@ -1,41 +1,38 @@ #! /bin/sh -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # -# Copyright 2010 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# Author: kate.ward@forestent.com (Kate Ward) -# # shUnit2 unit test for standalone operation. # +# Copyright 2010-2017 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 +# # This unit test is purely to test that calling shunit2 directly, while passing # the name of a unit test script, works. When run, this script determines if it # is running as a standalone program, and calls main() if it is. +# +### ShellCheck http://www.shellcheck.net/ +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 +# Disable source following. +# shellcheck disable=SC1090,SC1091 -ARGV0=`basename "$0"` +ARGV0="`basename "$0"`" -# load test helpers +# Load test helpers. . ./shunit2_test_helpers -#------------------------------------------------------------------------------ -# suite tests -# - -testStandalone() -{ - assertTrue ${SHUNIT_TRUE} +testStandalone() { + assertTrue "${SHUNIT_TRUE}" } -#------------------------------------------------------------------------------ -# main -# - -main() -{ +main() { ${TH_SHUNIT} "${ARGV0}" } -# are we running as a standalone? +# Are we running as a standalone? if [ "${ARGV0}" = 'shunit2_test_standalone.sh' ]; then if [ $# -gt 0 ]; then main "$@"; else main; fi fi diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_helpers b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_test_helpers similarity index 54% rename from .zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_helpers rename to .zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_test_helpers index a9989d6..7ff4c9c 100644 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_helpers +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/shunit2_test_helpers @@ -1,104 +1,112 @@ -# $Id$ # vim:et:ft=sh:sts=2:sw=2 # +# shUnit2 unit test common functions +# # Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) +# Released under the Apache 2.0 license. # # Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 # -# shUnit2 unit test common functions +### ShellCheck (http://www.shellcheck.net/) +# Commands are purposely escaped so they can be mocked outside shUnit2. +# shellcheck disable=SC1001,SC1012 +# expr may be antiquated, but it is the only solution in some cases. +# shellcheck disable=SC2003 +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 -# treat unset variables as an error when performing parameter expansion +# Treat unset variables as an error when performing parameter expansion. set -u -# set shwordsplit for zsh -[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit +# Set shwordsplit for zsh. +\[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit # -# constants +# Constants. # -# path to shUnit2 library. can be overridden by setting SHUNIT_INC -TH_SHUNIT=${SHUNIT_INC:-./shunit2} +# Path to shUnit2 library. Can be overridden by setting SHUNIT_INC. +TH_SHUNIT=${SHUNIT_INC:-./shunit2}; export TH_SHUNIT -# configure debugging. set the DEBUG environment variable to any +# Configure debugging. Set the DEBUG environment variable to any # non-empty value to enable debug output, or TRACE to enable trace # output. TRACE=${TRACE:+'th_trace '} -[ -n "${TRACE}" ] && DEBUG=1 -[ -z "${TRACE}" ] && TRACE=':' +\[ -n "${TRACE}" ] && DEBUG=1 +\[ -z "${TRACE}" ] && TRACE=':' DEBUG=${DEBUG:+'th_debug '} -[ -z "${DEBUG}" ] && DEBUG=':' +\[ -z "${DEBUG}" ] && DEBUG=':' # -# variables +# Variables. # th_RANDOM=0 # -# functions +# Functions. # -# message functions -th_trace() { echo "${MY_NAME}:TRACE $@" >&2; } -th_debug() { echo "${MY_NAME}:DEBUG $@" >&2; } -th_info() { echo "${MY_NAME}:INFO $@" >&2; } -th_warn() { echo "${MY_NAME}:WARN $@" >&2; } -th_error() { echo "${MY_NAME}:ERROR $@" >&2; } -th_fatal() { echo "${MY_NAME}:FATAL $@" >&2; } +# Logging functions. +th_trace() { echo "${MY_NAME}:TRACE $*" >&2; } +th_debug() { echo "${MY_NAME}:DEBUG $*" >&2; } +th_info() { echo "${MY_NAME}:INFO $*" >&2; } +th_warn() { echo "${MY_NAME}:WARN $*" >&2; } +th_error() { echo "${MY_NAME}:ERROR $*" >&2; } +th_fatal() { echo "${MY_NAME}:FATAL $*" >&2; } -# output subtest name -th_subtest() { echo " $@" >&2; } +# Output subtest name. +th_subtest() { echo " $*" >&2; } -th_oneTimeSetUp() -{ - # these files will be cleaned up automatically by shUnit2 +th_oneTimeSetUp() { + # These files will be cleaned up automatically by shUnit2. stdoutF="${SHUNIT_TMPDIR}/stdout" stderrF="${SHUNIT_TMPDIR}/stderr" returnF="${SHUNIT_TMPDIR}/return" expectedF="${SHUNIT_TMPDIR}/expected" + export stdoutF stderrF returnF expectedF } -# generate a random number -th_generateRandom() -{ +# Generate a random number. +th_generateRandom() { tfgr_random=${th_RANDOM} - while [ "${tfgr_random}" = "${th_RANDOM}" ]; do - if [ -n "${RANDOM:-}" ]; then + while \[ "${tfgr_random}" = "${th_RANDOM}" ]; do + # shellcheck disable=SC2039 + if \[ -n "${RANDOM:-}" ]; then # $RANDOM works + # shellcheck disable=SC2039 tfgr_random=${RANDOM}${RANDOM}${RANDOM}$$ - elif [ -r '/dev/urandom' ]; then + elif \[ -r '/dev/urandom' ]; then tfgr_random=`od -vAn -N4 -tu4 >> STDOUT' >&2 - cat "${_th_stdout_}" >&2 + \cat "${_th_stdout_}" >&2 fi - if [ -n "${_th_stderr_}" -a -s "${_th_stderr_}" ]; then + if \[ -n "${_th_stderr_}" -a -s "${_th_stderr_}" ]; then echo '>>> STDERR' >&2 - cat "${_th_stderr_}" >&2 + \cat "${_th_stderr_}" >&2 fi - if [ -n "${_th_stdout_}" -o -n "${_th_stderr_}" ]; then + if \[ -n "${_th_stdout_}" -o -n "${_th_stderr_}" ]; then echo '<<< end output' >&2 fi fi @@ -222,7 +227,7 @@ _th_showOutput() } # -# main +# Main. # ${TRACE} 'trace output enabled' diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/Makefile b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/Makefile deleted file mode 100644 index effbcca..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/Makefile +++ /dev/null @@ -1,89 +0,0 @@ -# $Id$ - -PROG=shunit2 - -BIN_DIR=$(PWD)/bin -BUILD_DIR=$(PWD)/build -DIST_DIR=$(PWD)/dist -LIB_DIR=$(PWD)/lib -SHARE_DIR=$(PWD)/share -SRC_DIR=$(PWD)/src -TEST_DIR=$(PWD)/test -TMP_DIR=$(PWD)/tmp - -DOCBOOK_BUILD_DIR=$(BUILD_DIR)/docbook -DOCBOOK_SHARE_DIR=$(SHARE_DIR)/docbook - -DOCBOOK_SRC_DIR=$(SRC_DIR)/docbook -EXAMPLES_SRC_DIR=$(SRC_DIR)/examples -SHELL_SRC_DIR=$(SRC_DIR)/shell -TEST_SRC_DIR=$(SRC_DIR)/test - -HTML_XSL=$(SHARE_DIR)/docbook/tldp-xsl/21MAR2004/html/tldp-one-page.xsl - -all: build docs - -build: build-prep - cp -p $(SHELL_SRC_DIR)/$(PROG) $(BUILD_DIR) - -build-clean: - rm -fr $(BUILD_DIR) - -build-prep: - @mkdir -p $(BUILD_DIR) - -docs: docs-transform-shelldoc docs-transform-docbook - -docs-prep: - @mkdir -p $(DOCBOOK_BUILD_DIR) - @echo "Preparing documentation for parsing" - @isoDate=`date "+%Y-%m-%d"`; \ - find $(DOCBOOK_SRC_DIR) -name "*.xml" |\ - while read f; do \ - bn=`basename $$f`; \ - sed -e "s/@@ISO_DATE@@/$$isoDate/g" $$f >$(DOCBOOK_BUILD_DIR)/$$bn; \ - done - -docs-extract-shelldoc: docs-prep - @echo "Extracting the ShellDoc" - @$(BIN_DIR)/extractDocs.pl $(SHELL_SRC_DIR)/$(PROG) >$(BUILD_DIR)/$(PROG)_shelldoc.xml - -docs-transform-shelldoc: docs-prep docs-extract-shelldoc - @echo "Parsing the extracted ShellDoc" - @xsltproc $(SHARE_DIR)/resources/shelldoc.xslt $(BUILD_DIR)/$(PROG)_shelldoc.xml >$(DOCBOOK_BUILD_DIR)/functions.xml - -docs-transform-docbook: docs-docbook-prep docs-prep - @echo "Parsing the documentation with DocBook" - @xsltproc $(HTML_XSL) $(DOCBOOK_BUILD_DIR)/$(PROG).xml >$(BUILD_DIR)/$(PROG).html - -docs-docbook-prep: - @if [ ! -d "$(DOCBOOK_SHARE_DIR)/docbook-xml" \ - -o ! -d "$(DOCBOOK_SHARE_DIR)/docbook-xsl" ]; \ - then \ - echo "Preparing DocBook structure"; \ - $(BIN_DIR)/docbookPrep.sh "$(DOCBOOK_SHARE_DIR)"; \ - fi - -test: test-prep - @echo "executing $(PROG) unit tests" - ( cd $(TEST_DIR); $(TEST_SRC_DIR)/run-test-suite ) - -test-clean: - rm -fr $(TEST_DIR) - -test-prep: build test-clean - @mkdir -p $(TEST_DIR) - cp -p $(TEST_SRC_DIR)/test* $(TEST_DIR) - cp -p $(TEST_SRC_DIR)/run-test-suite $(TEST_DIR) - cp -p $(BUILD_DIR)/$(PROG) $(TEST_DIR) - -dist: dist-clean build docs - @mkdir $(DIST_DIR) - cp -p $(BUILD_DIR)/$(PROG) $(DIST_DIR) - cp -p $(BUILD_DIR)/$(PROG).html $(DIST_DIR) - -clean: build-clean test-clean - rm -fr $(TMP_DIR) - -dist-clean: clean - rm -fr $(DIST_DIR) diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/docbookPrep.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/docbookPrep.sh deleted file mode 100755 index eb7c270..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/docbookPrep.sh +++ /dev/null @@ -1,97 +0,0 @@ -#! /bin/sh -# $Id$ - -XML_VERSION='4.4' -XML_FILE="docbook-xml-${XML_VERSION}" -XML_URL="http://www.docbook.org/xml/${XML_VERSION}/${XML_FILE}.zip" - -XSL_VERSION='1.72.0' -XSL_FILE="docbook-xsl-${XSL_VERSION}" -XSL_URL="http://downloads.sourceforge.net/docbook/${XSL_FILE}.tar.bz2" - -#----------------------------------------------------------------------------- -# do no edit below here -#----------------------------------------------------------------------------- - -PATH="${PATH}:${MY_DIR}" -PWD=${PWD:-`pwd`} - -MY_BASE=`basename "$0"` -MY_DIR=`dirname "$0"` - -# load shlib -. "${MY_DIR}/../lib/sh/shlib" - -BASE_DIR=`shlib_relToAbsPath "${MY_DIR}/.."` -DL_DIR="${BASE_DIR}/tmp" -DOCBOOK_DIR="${BASE_DIR}/share/docbook" - -CURL_OPTS='-C - -Os' -WGET_OPTS='-cq' - -METHOD_NONE=0 -METHOD_WGET=1 -METHOD_CURL=2 - -get_url() -{ - url=$1 - case ${method} in - ${METHOD_CURL}) ${curl} ${CURL_OPTS} "${url}" ;; - ${METHOD_WGET}) ${wget} ${WGET_OPTS} "${url}" ;; - esac -} - -# determine method -method=${METHOD_NONE} -wget=`which wget` -[ $? -eq 0 ] && method=${METHOD_WGET} -curl=`which curl` -[ $? -eq 0 -a ${method} -eq ${METHOD_NONE} ] && method=${METHOD_CURL} -if [ ${method} -eq ${METHOD_NONE} ]; then - echo "unable to locate wget or curl. cannot continue" - exit 1 -fi - -# create download dir -mkdir -p "${DL_DIR}" - -# get the docbook xml files -echo 'Docbook XML' -echo ' downloading' -cd ${DL_DIR} -get_url "${XML_URL}" -if [ -f "${DL_DIR}/${XML_FILE}.zip" ]; then - echo ' extracting' - xml_dir="${DOCBOOK_DIR}/docbook-xml/${XML_VERSION}" - rm -fr "${xml_dir}" - mkdir -p "${xml_dir}" - cd "${xml_dir}" - unzip -oq "${DL_DIR}/${XML_FILE}.zip" - cd .. - rm -f current - ln -s "${XML_VERSION}" current -else - echo "error: unable to extract (${XML_FILE}.zip)" >&2 - exit 1 -fi - -# get the docbook xslt files -echo 'Docbook XSLT' -echo ' downloading' -cd ${DL_DIR} -get_url "${XSL_URL}" -if [ -f "${DL_DIR}/${XSL_FILE}.tar.bz2" ]; then - echo ' extracting' - xsl_dir="${DOCBOOK_DIR}/docbook-xsl" - mkdir -p "${xsl_dir}" - cd "${xsl_dir}" - rm -fr ${XSL_VERSION} - bzip2 -dc "${DL_DIR}/${XSL_FILE}.tar.bz2" |tar xf - - mv ${XSL_FILE} ${XSL_VERSION} - rm -f current - ln -s "${XSL_VERSION}" current -else - echo "error: unable to extract (${XSL_FILE}.tar.bz2)" >&2 - exit 1 -fi diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/extractDocs.pl b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/extractDocs.pl deleted file mode 100755 index a803526..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/extractDocs.pl +++ /dev/null @@ -1,40 +0,0 @@ -#! /usr/bin/perl -# $Id$ - -if(@ARGV != 1) { - print "usage: $0 sourceFile\n"; - exit; -} - -$sourceFile = $ARGV[0]; - -# -# read in the source file -# -$rslt = open(FILE, $sourceFile) - || die "could not open file ($sourceFile)"; - -$inComment = 0; -while() { - next if /^[^#]/; - s/^# //; - s/^#//; - - if(/^\/\*\*/) { - $inComment = 1; - next; - } - if(/\*\/$/) { - $inComment = 0; - next; - } - - if ($inComment == 1) { print $_ }; - if ($inComment == 0 && /\/\/\*/) { - @line = split /\/\/\*/, $_, 2; - $line[1] =~ s/^ //; - print $line[1]; - } -} - -close(FILE); diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/which b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/which deleted file mode 100755 index 9d7cc9f..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/bin/which +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -# $Id$ -# -# This is a simple implementation of the 'which' command for those OSes that -# don't have one. -# - -true; TRUE=$? -false; FALSE=$? - -showAll=${FALSE} - -# process command line flags -while getopts 'a' opt; do - case ${opt} in - a) showAll=${TRUE} - esac -done -shift `expr ${OPTIND} - 1` - -# exit if no arguments were given -[ $# -eq 0 ] && exit 1 - -command=$1 - -# search for command -out=`echo "${PATH}" |sed "s/:/\n/g" |\ -while read path; do - fullPath="${path}/${command}" - if [ -x "${fullPath}" ]; then - echo "${fullPath}" - [ ${showAll} -eq ${FALSE} ] && break - fi -done` -[ -z "${out}" ] && exit 1 -echo "${out}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/CHANGES-2.0.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/CHANGES-2.0.txt deleted file mode 100644 index 97ea3db..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/CHANGES-2.0.txt +++ /dev/null @@ -1,68 +0,0 @@ -CHANGES WITH 2.0.4 - -Unset additional variables that were missed. - -Fixed off-by-one in exit value for scripts caught by the trap handler. - -The library did not fail gracefully when the 'od' command was not installed. - - -CHANGES WITH 2.0.3 - -Back ported the Makefile from 2.1.1pre that included changes to the -docs-docbook-prep target. - -Changed the test in assertFalse() so that any non-zero value registers as -false. (Credits to Bryan Larsen) - -Updated the testPartyLikeItIs1999() function in the Quick Start documentation. -The 'expected' and 'actual' values were swapped. (Credits to Richard Jensen) - -It was pointed out that the simple 'failed' message for a failed assert was not -only insufficient, it was nonstandard (when compared to JUnit) and didn't -provide the user with an expected vs actual result. The code was revised -somewhat to bring closer into alignment with JUnit (v4.3.1 specifically) so -that it feels more "normal". (Credits to Richard Jensen) - -As part of the JUnit realignment, it was noticed that fail*() functions in -JUnit don't actually do any comparisons themselves. They only generate a -failure message. Updated the code to match. - -Added self-testing unit tests. Kinda horkey, but they did find bugs during the -JUnit realignment. - -Fixed the code for returning from asserts as the return was being called before -the unsetting of variables occurred. (Credits to Mathias Goldau) - -The assert(True|False)() functions now accept an integer value for a -conditional test. A value of '0' is considered 'true', while any non-zero value -is considered 'false'. - -All public functions now fill use default values to work properly with the '-x' -shell debugging flag. - -Fixed the method of percent calculation for the report to get achieve better -accuracy. - - -CHANGES WITH 2.0.2 - -Fixed problem with fail(). The failure message was not properly printed. - -Reworked the Makefile so that the DocBook XML and XSLT files are properly -downloaded before parsing can continue. - - -CHANGES WITH 2.0.1 - -Fixed some really stupid mistakes with the fail* functions. They were doing the -exact opposite of what they were supposed to be doing. - - -CHANGES WITH 2.0.0 - -Made the first stand-alone release! - - -$Revision$ -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/LGPL-2.1 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/LGPL-2.1 deleted file mode 100644 index b1e3f5a..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/LGPL-2.1 +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/README.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/README.txt deleted file mode 100644 index 538f4f4..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/README.txt +++ /dev/null @@ -1,153 +0,0 @@ -#------------------------------------------------------------------------------ -# SourceForge -# - -This project is stored on SourceForge as http://sf.net/projects/shunit2. The -source code can be accessed using the following information. - -* Subversion -$ svn co https://shunit2.svn.sourceforge.net/svnroot/shunit2/trunk/source shunit2 - -Subversion may also be browsed via a web browser at -http://svn.sourceforge.net/shunit2 - -#------------------------------------------------------------------------------ -# Making a release -# - -For these steps, it is assumed we are working with release 2.0.0. - -Steps: -* write release notes -* update version -* finish changelog -* check all the code in -* tag the release -* export the release -* create tarball -* md5sum the tarball and sign with gpg -* update website -* post to SourceForge and Freshmeat - -WRITE RELEASE NOTES - -This should be pretty self explainatory. Use one of the release notes from a -previous release as an example. - -To get the versions of the various shells, do the following: -Cygwin - bash: $ bash --version - ksh: actually pdksh - pdksh: look in the downloaded Cygwin directory -Linux - bash: $ bash --version - dash: look at installed version - ksh: $ ksh --version - pdksh: $ strings /bin/pdksh |grep 'PD KSH' - zsh: $ zsh --version -Solaris 10 - sh: not possible - bash: $ bash --version - ksh: $ strings /usr/bin/ksh |grep 'Version' - -UPDATE VERSION - -Edit the shunit2 source code, and change the version number in the comment, as -well as in the __SHUNIT_VERSION variable. Next, edit the -src/docbook/shunit2.xml file, edit the version in the element, and make -sure there is a revision section for this release. - -FINISH DOCUMENTATION - -Make sure that any remaning changes get put into the CHANGES-X.X.txt file. - -Finish writing the RELEASE_NOTES-X.X.X.txt. Once it is finished, run it through -the 'fmt' command to make it pretty. - -$ fmt -w 80 RELEASE_NOTES-2.0.0.txt >RELEASE_NOTES-2.0.0.txt.new -$ mv RELEASE_NOTES-2.0.0.txt.new RELEASE_NOTES-2.0.0.txt - -We want to have an up-to-date version of the documentation in the release, so -we'd better build it. - -$ pwd -.../shunit2/source/2.0 -$ make docs -... -$ cp -p build/shunit2.html doc -$ svn ci -m "" doc/shunit2.html - -CHECK IN ALL THE CODE - -This step is pretty self-explainatory - -TAG THE RELEASE - -$ pwd -.../shunit2/source -$ ls -2.0 2.1 -$ svn cp -m "Release 2.0.0" \ -2.0 https://shunit2.svn.sourceforge.net/svnroot/shunit2/tags/source/2.0.0 - -EXPORT THE RELEASE - -$ pwd -.../shunit2/builds -$ svn export \ -https://shunit2.svn.sourceforge.net/svnroot/shunit2/tags/source/2.0.0 \ -shunit2-2.0.0 - -CREATE TARBALL - -$ tar cfz ../releases/shunit2-2.0.0.tgz shunit2-2.0.0 - -MD5SUM THE TARBALL AND SIGN WITH GPG - -$ cd ../releases -$ md5sum shunit2-2.0.0.tgz >shunit2-2.0.0.tgz.md5 -$ gpg --default-key kate.ward@forestent.com --detach-sign shunit2-2.0.0.tgz - -UPDATE WEBSITE - -Again, pretty self-explainatory. Make sure to copy the MD5 and GPG signature -files. Once that is done, make sure to tag the website so we can go back in -time if needed. - -$ pwd -.../shunit2 -$ ls -source website -$ svn cp -m "Release 2.0.0" \ -website https://shunit2.svn.sourceforge.net/svnroot/shunit2/tags/website/20060916 - -Now, update the website. It too is held in Subversion, so ssh into SourceForge -and use 'svn up' to grab the latest version. - -POST TO SOURCEFORGE AND FRESHMEAT - -http://sourceforge.net/projects/shunit2/ -http://freshmeat.net/ - -#------------------------------------------------------------------------------ -# Related documentation -# - -Docbook XML - docbook-xml-4.4.zip - http://www.docbook.org/xml/4.4/docbook-xml-4.4.zip - http://www.oasis-open.org/docbook/xml/4.4/docbook-xml-4.4.zip - docbook-xml-4.5.zip - http://www.docbook.org/xml/4.5/docbook-xml-4.5.zip - -Docbook XSL - docbook-xsl-1.71.0.tar.bz2 - http://prdownloads.sourceforge.net/docbook/docbook-xsl-1.71.0.tar.bz2?download - docbook-xsl-1.71.1.tar.bz2 - http://downloads.sourceforge.net/docbook/docbook-xsl-1.71.1.tar.bz2?use_mirror=puzzle - -JUnit - http://www.junit.org - - -$Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.0.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.0.txt deleted file mode 100644 index 947eea9..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.0.txt +++ /dev/null @@ -1,71 +0,0 @@ -RELEASE NOTES FOR 2.0.0 - -This is the initial release of shunit2. It was originally included in log4sh -1.3.5 [http://log4sh.sourceforge.net/] as a unit testing framework for that -product. It has since grown table enough to warrant being released into the -wild on its own. - - -TESTED PLATFORMS - -This list of platforms comes from the latest version of log4sh as shunit2 is -used in the testing of log4sh on each of these platforms. - -Cygwin -+ bash 3.2.9(10) -+ pdksh 5.2.14 - -Linux -+ bash 3.1.17(1) -+ dash 0.5.3 -+ ksh 1993-12-28 -+ pdksh 5.2.14 -+ zsh 4.3.2 (does not work) - -Mac OS X 1.4.8 (Darwin 8.8) -+ bash 2.05b.0(1) -+ ksh 1993-12-28 - -Solaris 8 U3 (x86) -+ /bin/sh -+ bash 2.03.0(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (sparc) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (x86) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - - -NEW FEATURES - -None. - - -CHANGES AND ENHANCEMENTS - -None. - - -BUG FIXES - -None. - - -DEPRECATED FEATURES - -None. - - -KNOWN BUGS AND ISSUES - -None. - - -$Revision$ -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.1.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.1.txt deleted file mode 100644 index 110a37a..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.1.txt +++ /dev/null @@ -1,73 +0,0 @@ -RELEASE NOTES FOR 2.0.1 - -This release is mostly a brown-bag release. Not so nice for the second release -ever of the product, but that's what I get for trying to get something out -there that I hadn't fully looked through one last time. - - -TESTED PLATFORMS - -This list of platforms comes from the latest version of log4sh as shunit2 is -used in the testing of log4sh on each of these platforms. - -Cygwin -+ bash 3.2.9(10) -+ pdksh 5.2.14 - -Linux -+ bash 3.1.17(1) -+ dash 0.5.3 -+ ksh 1993-12-28 -+ pdksh 5.2.14 -+ zsh 4.3.2 (does not work) - -Mac OS X 1.4.8 (Darwin 8.8) -+ bash 2.05b.0(1) -+ ksh 1993-12-28 - -Solaris 8 U3 (x86) -+ /bin/sh -+ bash 2.03.0(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (sparc) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (x86) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - - -NEW FEATURES - -None. - - -CHANGES AND ENHANCEMENTS - -The documentation regarding the assertTrue() and assertFalse() functions was -updated to reflect their proper usage. They are shell test condition evaluators -(e.g. "[1 -eq 2]") rather than simple 0/1 comparators. - - -BUG FIXES - -The fail*() functions were doing the exact opposite of what they were supposed -to be doing. They have been fixed. - - -DEPRECATED FEATURES - -None. - - -KNOWN BUGS AND ISSUES - -None. - - -$Revision$ -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.2.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.2.txt deleted file mode 100644 index e7bcad6..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.2.txt +++ /dev/null @@ -1,71 +0,0 @@ -RELEASE NOTES FOR 2.0.2 - -This is solely a bug-fix release. - - -TESTED PLATFORMS - -This list of platforms comes from the latest version of log4sh as shUnit2 is -used in the testing of log4sh on each of these platforms. - -Cygwin -+ bash 3.2.9(10) -+ pdksh 5.2.14 - -Linux -+ bash 3.1.17(1) -+ dash 0.5.3 -+ ksh 1993-12-28 -+ pdksh 5.2.14 -+ zsh 4.3.2 (does not work) - -Mac OS X 1.4.8 (Darwin 8.8) -+ bash 2.05b.0(1) -+ ksh 1993-12-28 - -Solaris 8 U3 (x86) -+ /bin/sh -+ bash 2.03.0(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (sparc) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - -Solaris 10 U2 (x86) -+ /bin/sh -+ bash 3.00.16(1) -+ ksh M-11/16/88i - - -NEW FEATURES - -None. - - -CHANGES AND ENHANCEMENTS - -None. - - -BUG FIXES - -The fail() function did not output the optional failure message. - -Fixed the Makefile so that the DocBook XML and XSLT files would be downloaded -before parsing can continue. - - -DEPRECATED FEATURES - -None. - - -KNOWN BUGS AND ISSUES - -None. - - -$Revision$ -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.3.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.3.txt deleted file mode 100644 index 7e12684..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.3.txt +++ /dev/null @@ -1,60 +0,0 @@ -RELEASE NOTES FOR 2.0.3 - -This release incorporates a realignment with the JUnit 4 code. Asserts now -provide better failure messages, and the failure functions no longer perform -tests. - -See the CHANGES-2.0.txt file for a full list of changes. - - -TESTED PLATFORMS - -This list of platforms comes from the latest version of log4sh as shUnit2 is -used in the testing of log4sh on each of these platforms. - -Cygwin -- untested - -Linux -- bash 3.2.13(1) -- dash 0.5.3 -- ksh 1993-12-28 -- pdksh 5.2.14 - -Mac OS X -- untested -Solaris 8 -- untested -Solaris 10 -- untested - - -NEW FEATURES - -None. - - -CHANGES AND ENHANCEMENTS - -The internal test in assertFalse() was changed so that any non-zero value is -considered false, rather than any only values equal to 1. - -The assertTrue() and assertFalse() functions now accept an integer value for a -conditional test. A value of '0' is considered 'true', while any non-zero value -is considered 'false'. - -Self-testing unit tests were added. - - -BUG FIXES - -All asserts now properly unset their variables. - - -DEPRECATED FEATURES - -None. - - -KNOWN BUGS AND ISSUES - -Functions do not properly test for an invalid number of arguments. - - -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.4.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.4.txt deleted file mode 100644 index 64fb417..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/RELEASE_NOTES-2.0.4.txt +++ /dev/null @@ -1,51 +0,0 @@ -RELEASE NOTES FOR 2.0.4 - -This is a minor bugfix release. - -See the CHANGES-2.0.txt file for a full list of changes. - - -TESTED PLATFORMS - -This list of platforms comes from the latest version of log4sh as shUnit2 is -used in the testing of log4sh on each of these platforms. - -Cygwin -- untested - -Linux -- bash 3.2.13(1) -- dash 0.5.3 -- ksh 1993-12-28 -- pdksh 5.2.14 - -Mac OS X -- untested -Solaris 8 -- untested -Solaris 10 -- untested - - -NEW FEATURES - -None. - - -CHANGES AND ENHANCEMENTS - -None. - - -BUG FIXES - -The library no longer fails when the 'od' command is not present. - - -DEPRECATED FEATURES - -None. - - -KNOWN BUGS AND ISSUES - -Functions do not properly test for an invalid number of arguments. - - -vim:spell diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/TODO.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/TODO.txt deleted file mode 100644 index 7fd6314..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/TODO.txt +++ /dev/null @@ -1,5 +0,0 @@ -Make it possible to execute a single test by passing the name of the test on -the command line - - -$Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/contributors.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/contributors.txt deleted file mode 100644 index 69da654..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/contributors.txt +++ /dev/null @@ -1,10 +0,0 @@ -The original author of shunit2 is Kate Ward. The following people have -contributed in some way or another to shunit2. - -Bryan Larsen -Kevin Van Horn -Mathias Goldau -Richard Jensen -Rob Holland - -$Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/design_doc.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/design_doc.txt deleted file mode 100644 index 2849e55..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/design_doc.txt +++ /dev/null @@ -1,54 +0,0 @@ -Design Doc for shUnit2 -====================== - -shUnit is based upon JUnit. The initial ideas for the script came from the book -"Pragmatic Unit Testing - In Java with JUnit" by Andrew Hunt and David Thomas. - -The script was written to perform unit testing for log4sh. log4sh had grown -enough that it was becoming difficult to easily test and and verify that the -tests passed for the many different operating systems on which it was being -used. - -The functions in shUnit are meant to match those in JUnit as much as possible -where shell allows. In the initial version, there will be no concept of -exceptions (as normal POSIX shell has no concept of them) but attempts to trap -problems will be done. - -Programatic Standards ---------------------- - -* SHUNIT_TRUE - public global constant -* __SHUNIT_SHELL_FLAGS - private global constant -* __shunit_oldShellFlags - private global variable - -* assertEquals - public unit test function -* shunit_publicFunc - public shUnit function; can be called from parent unit - test script -* _shunit_privateFunc - private shUnit function; should not be called from - parent script. meant for internal use by shUnit - -* _su_myVar - variable inside a public function. prefixing with '_su_' to - reduce the chances that a variable outside of shUnit will be overridden. -* _su__myVar - variable inside a private function. prefixing with '_su__' to - reduce the chances that a variable in a shUnit public function, or a variable - outside of shUnit will be overridden. - -List of functions ------------------ - -assertTrue([message,] boolean) -assertFalse([message,] boolean) -fail([message]) -assertEquals([message,] expected, actual) -#isEquals(expected, actual) -#assertArrayEquals([message,] expecteds, actuals) -#isArray(expected) -assertNotNull([message,] object) -assertNull([message,], object) -assertSame([message,], expected, actual) -assertNotSame([message,], unexpected, actual) -failSame(message) -failNotSame([message,] expected, actual) - -.. $Revision$ -.. vim:syntax=rst diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/shunit2.html b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/shunit2.html deleted file mode 100644 index 6690867..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/shunit2.html +++ /dev/null @@ -1,218 +0,0 @@ -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>shUnit2

shUnit2 version 2.0.3

Kate Ward


-            
-          

2007-07-12

Revision History
Revision 2.0.32007-07-12Kate Ward <kate.ward@forestent.com>
Revision 2.0.22007-04-22Kate Ward <kate.ward@forestent.com>
Revision 2.0.12007-02-21Kate Ward <kate.ward@forestent.com>
Revision 2.0.02007-02-20Kate Ward <kate.ward@forestent.com>

Abstract

shUnit2 is a unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to JUnit, PyUnit, etc.


List of Tables

3.1. asserts
3.2. failures
3.3. suites

Chapter 1. Introduction

shUnit2 is a unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to JUnit, PyUnit, etc.

shUnit2 was originally developed to provide a consistent testing solution for log4sh, a shell based logging framework similar to log4j. During the development of that product, the problem of having things work just fine under one shell (/bin/bash on Linux to be specific), and then not working under another shell (/bin/sh on Solaris), kept coming up. Although there were several simple tests ran, they were not adaquate and did not catch very many corner cases. The decision was finally made to write a proper unit test framework after after multiple brown-bag releases were made.

Tested Operating Systems

Tested Shells

  • Bourne Shell (sh)

  • BASH - GNU Bourne Again SHell (bash)

  • DASH (dash)

  • Korn Shell (ksh)

  • pdksh - Public Domain Korn Shell (pdksh)

See the appropriate Release Notes (doc/RELEASE_NOTES-X.X.X.txt) for this release for the actual versions tested.

1. Credits / Contributors

A list of contributors to shUnit2 can be found in the source archive as doc/contributors.txt. I want to personally thank all those who have contributed to make this a better tool.

2. Feedback

Feedback is most certainly welcome for this document. Send your additions, comments and criticisms to the following email address: .

Chapter 2. Quickstart

This chapter will give a very quick start to running unit tests with shUnit2. More information is located in other chapters.

Here is a quick sample script to show how easy it is to write a unit test in shell. It expects that you have a copy of shunit2 in the same directory as the script.

-
-#! /bin/sh
-
-testEquality()
-{
-  assertEquals 1 1
-}
-
-# load shunit2
-. ./shunit2
-
-  

Running the unit test should give results similar to the following.

-
-#
-# Performing tests
-#
-testEquality
-
-#
-# Test report
-#
-tests passed: 1
-tests failed: 0
-tests total:  1
-success rate: 100%
-
-  

Wohoo! You've just run your first successful unit test. So, what just happened? Quite a bit really, and it all happened simply by sourcing the shunit2 script. The basic functionality for the script above goes like this.

When shUnit2 is sourced, it first looks to see if a suite() function has been declared. If it exists, it is called as it is expected to contain a list of tests to be executed. If it doesn't exist (and it doesn't in the above example), shUnit2 will look on its own for any functions that start with the string test, and adds those to an internal list of tests to execute. Once a list of test functions to be run has been determined, shunit2 will go to work.

Before any tests are executed, shUnit2 again looks for a function, this time one named oneTimeSetUp(). If it exists, it will be run. This function is normally used to setup the environment for all tests to be run. Things like creating directories for output or setting environment variables are good to place here. Just so you know, you can also declare a corresponding function named oneTimeTearDown() function that does the same thing, but once all the tests have been completed. It is good for removing temporary directories, etc.

shUnit2 is now ready to run tests. Before doing so though, it again looks for another function that might be declared, one named setUp(). If the function exists, it will be run before each test. It is good for resetting the environment so that each test starts with a clean slate. At this stage, the first test is finally run. The success of the test is recorded for a report that will be generated later. After the test is run, shUnit2 looks for a final function that might be declared, one named tearDown(). If it exists, it will be run after each test. It is a good place for cleaning up after each test, maybe doing things like removing files that were created, or removing directories. This set of steps, setUp() > test() > tearDown(), is repeated for all of the available tests.

Once all the work is done, shUnit2 will generate the nice report you saw above. A summary of all the successes and failures will be given so that you know how well your code is doing.

We should now try adding a test that fails. Change your unit test to look like this.

-
-#! /bin/sh
-
-testEquality()
-{
-  assertEquals 1 1
-}
-
-testPartyLikeItIs1999()
-{
-  year=`date '+%Y'`
-  assertEquals "It's not 1999 :-( This is ${year}." \
-      '1999' "${year}"
-}
-
-# load shunit2
-. ./shunit2
-
-  

So, what did you get? I guess it told you that this isn't 1999. Bummer, eh? Hopefully, you noticed a couple of things that were different about the second test. First, we added an optional message that the user will see if the assert fails. Second, we did comparisons of strings instead of integers as in the first test. It doesn't matter whether you are testing for equality of strings or integers. Both work equally well with shUnit2.

Hopefully, this is enough to get you started with unit testing. If you want a ton more examples, take a look at the tests provided with log4sh. Examples of much more advanced usage can be seen there. shUnit2 was after all written to help with the unit testing problems that log4sh had.

Chapter 3. Function Reference

1. asserts

Table 3.1. asserts

- void - -
- assertEquals - ([message],  
 expected,  
 actual); 
string  [message];
string  expected;
string  actual;
-

Asserts that expected and - actual are equal to one another. The message is - optional.

-
- void - -
- assertNull - ([message],  
 value); 
string  [message];
string  value;
-

Asserts that value is null, - or in shell terms a zero-length string. The message is optional.

-
- void - -
- assertNotNull - ([message],  
 value); 
string  [message];
string  value;
-

Asserts that value is notnull, or in shell terms not - a zero-length string. The message is optional.

-
- void - -
- assertSame - ([message],  
 expected,  
 actual); 
string  [message];
string  expected;
string  actual;
-

This function is functionally equivalent to - assertEquals.

-
- void - -
- assertNotSame - ([message],  
 unexpected,  
 actual); 
string  [message];
string  unexpected;
string  actual;
-

Asserts that unexpected and - actual are not - equal to one another. The message is optional.

-
- void - -
- assertTrue - ([message],  
 condition); 
string  [message];
string  condition;
-

Asserts that a given shell test condition is true. The message is - optional.

-

Testing whether something is true or false is easy enough by using - the assertEquals/assertNotSame functions. Shell supports much more - complicated tests though, and a means to support them was needed. As such, - this function tests that conditions are true or false through evaluation - rather than just looking for a true or false.

-
- The following test will succeed:
assertTrue "[ 34 -gt 23 ]"
- The folloing test will fail with a message:
assertTrue "test failed" "[ -r '/non/existant/file' ]"
-
- void - -
- assertFalse - ([message],  
 condition); 
string  [message];
string  condition;
-

Asserts that a given shell test condition is false. The message is - optional.

-

Testing whether something is true or false is easy enough by using - the assertEquals/assertNotSame functions. Shell supports much more - complicated tests though, and a means to support them was needed. As such, - this function tests that conditions are true or false through evaluation - rather than just looking for a true or false.

-
- The following test will succeed:
assertFalse "[ 'apples' = 'oranges' ]"
- The folloing test will fail with a message:
assertFalse "test failed" "[ 1 -eq 1 -a 2 -eq 2 ]"
-

2. failures

Table 3.2. failures

- void - -
- fail - ([message]); 
string  [message];
-

Fails the test immediately, with the optional message.

-
- void - -
- failNotEquals - ([message],  
 unexpected,  
 actual); 
string  [message];
string  unexpected;
string  actual;
-

Fails the test if unexpected and - actual are not - equal to one another. The message is optional.

-
- void - -
- failSame - ([message]); 
string  [message];
-

Indicate test failure because arguments were not the same. The - message is optional.

-
- void - -
- failNotSame - ([message],  
 expected,  
 actual); 
string  [message];
string  expected;
string  actual;
-

Fails the test if expected and - actual are equal to one another. The message is - optional.

-

3. suites

Table 3.3. suites

- void - -
- suite - (); 
 ;
-

This function can be optionally overridden by the user in their test - suite.

-

If this function exists, it will be called when - shunit2 is sourced. If it does not exist, shUnit2 will - search the parent script for all functions beginning with the word - test, and they will be added dynamically to the test - suite.

-
- void - -
- suite_addTest - (function); 
string  function;
-

This function adds a function name to the list of tests scheduled for - execution as part of this test suite. This function should only be called - from within the suite() function.

-
- void - -
- oneTimeSetUp - (); 
 ;
-

This function can be be optionally overridden by the user in their - test suite.

-

If this function exists, it will be called once before any tests are - run. It is useful to prepare a common environment for all tests.

-
- void - -
- oneTimeTearDown - (); 
 ;
-

This function can be be optionally overridden by the user in their - test suite.

-

If this function exists, it will be called once after all tests are - completed. It is useful to clean up the environment after all tests.

-
- void - -
- setUp - (); 
 ;
-

This function can be be optionally overridden by the user in their - test suite.

-

If this function exists, it will be called before each test is run. - It is useful to reset the environment before each test.

-
- void - -
- tearDown - (); 
 ;
-

This function can be be optionally overridden by the user in their - test suite.

-

If this function exists, it will be called after each test completes. - It is useful to clean up the environment after each test.

-

diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/style.css b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/style.css deleted file mode 100644 index c1d2f43..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/doc/style.css +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id$ */ -/* - style.css -*/ - - -body { - -/* - Style the HMTL tag with a sans-serif font and 6% margin. - A sans-serif font makes documents easier to read when displayed on - a computer screen. Whitespace surrounding the document should - make it easier to read both on screen and on printed paper. The - value of 6% was chosen because it closely approximates a one-half - inch margin on a US letter (8.5" by 11") paper. Since the margin - is expressed as a percentage it should scale well in a web browser - window. -*/ - - font-family: sans-serif; - margin: 6%; -} - -/* -table { - font-size: 0.9em; -} -*/ - -.toc { - background: #f0f0f0; - padding: 5px; -} diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/lib/sh/shlib b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/lib/sh/shlib deleted file mode 100644 index 00aadcb..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/lib/sh/shlib +++ /dev/null @@ -1,23 +0,0 @@ -# $Id$ -# vim:syntax=sh -# -# library of shell functions -# - -shlib_relToAbsPath() -{ - _shlib_path=$1 - - # deal with paths that start with / - echo "${_shlib_path}" |grep '^/' >/dev/null 2>&1 - if [ $? -ne 0 ]; then - _shlib_pwd=`pwd` - _shlib_path="${_shlib_pwd}/${_shlib_path}" - unset _shlib_pwd - fi - - # clean up the path - echo "${_shlib_path}" |sed 's/[^/]*\/*\.\.\/*//g;s/\/\.\//\//' - - unset _shlib_path -} diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/fo/tldp-print.xsl b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/fo/tldp-print.xsl deleted file mode 100644 index b7a7d43..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/fo/tldp-print.xsl +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - -start - - - - - - - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-common.xsl b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-common.xsl deleted file mode 100644 index f8cf7b1..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-common.xsl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - -text/css - - - - - - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-one-page.xsl b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-one-page.xsl deleted file mode 100644 index 16994ad..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/docbook/tldp-xsl/21MAR2004/html/tldp-one-page.xsl +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/resources/shelldoc.xslt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/resources/shelldoc.xslt deleted file mode 100644 index 45d5f92..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/share/resources/shelldoc.xslt +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - Function Reference - - - -
- shelldoc-section- - <xsl:value-of select="@group"/> - - shelldoc-function- - <xsl:value-of select="@group"/> - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - - - - - - -
diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/functions.xml b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/functions.xml deleted file mode 100644 index c960e55..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/functions.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Functions - This XML file is a placeholder. It is meant to be overwritten with the dynamically generated XML document that is extracted from the source code. - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/introduction.xml b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/introduction.xml deleted file mode 100644 index d71b091..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/introduction.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - Introduction - shUnit2 is a unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to JUnit, PyUnit, etc. - - shUnit2 was originally developed to provide a consistent testing solution for log4sh, a shell based logging framework similar to log4j. During the development of that product, the problem of having things work just fine under one shell (/bin/bash on Linux to be specific), and then not working under another shell (/bin/sh on Solaris), kept coming up. Although there were several simple tests ran, they were not adaquate and did not catch very many corner cases. The decision was finally made to write a proper unit test framework after after multiple brown-bag releases were made. - -
Tested Operating Systems - - Cygwin - FreeBSD (user supported) - Linux (Gentoo, Ubuntu) - Mac OS X - Solaris 8, 9, 10 - -
- -
Tested Shells - - Bourne Shell (sh) - BASH - GNU Bourne Again SHell (bash) - DASH (dash) - Korn Shell (ksh) - pdksh - Public Domain Korn Shell (pdksh) - -
- - See the appropriate Release Notes (doc/RELEASE_NOTES-X.X.X.txt) for this release for the actual versions tested. - - -
Credits / Contributors - A list of contributors to shUnit2 can be found in the source archive as doc/contributors.txt. I want to personally thank all those who have contributed to make this a better tool. -
- - -
Feedback - Feedback is most certainly welcome for this document. Send your additions, comments and criticisms to the following email address: &myEmail;. -
- -
diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/quickstart.xml b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/quickstart.xml deleted file mode 100644 index d009cb6..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/quickstart.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - Quickstart - - This chapter will give a very quick start to running unit tests with shUnit2. More information is located in other chapters. - - Here is a quick sample script to show how easy it is to write a unit test in shell. It expects that you have a copy of &shunit2; in the same directory as the script. - - - - - - Running the unit test should give results similar to the following. - - - - - - Wohoo! You've just run your first successful unit test. So, what just happened? Quite a bit really, and it all happened simply by sourcing the &shunit2; script. The basic functionality for the script above goes like this. - - When shUnit2 is sourced, it first looks to see if a suite() function has been declared. If it exists, it is called as it is expected to contain a list of tests to be executed. If it doesn't exist (and it doesn't in the above example), shUnit2 will look on its own for any functions that start with the string test, and adds those to an internal list of tests to execute. Once a list of test functions to be run has been determined, shunit2 will go to work. - - Before any tests are executed, shUnit2 again looks for a function, this time one named oneTimeSetUp(). If it exists, it will be run. This function is normally used to setup the environment for all tests to be run. Things like creating directories for output or setting environment variables are good to place here. Just so you know, you can also declare a corresponding function named oneTimeTearDown() function that does the same thing, but once all the tests have been completed. It is good for removing temporary directories, etc. - - shUnit2 is now ready to run tests. Before doing so though, it again looks for another function that might be declared, one named setUp(). If the function exists, it will be run before each test. It is good for resetting the environment so that each test starts with a clean slate. At this stage, the first test is finally run. The success of the test is recorded for a report that will be generated later. After the test is run, shUnit2 looks for a final function that might be declared, one named tearDown(). If it exists, it will be run after each test. It is a good place for cleaning up after each test, maybe doing things like removing files that were created, or removing directories. This set of steps, setUp() > test() > tearDown(), is repeated for all of the available tests. - - Once all the work is done, shUnit2 will generate the nice report you saw above. A summary of all the successes and failures will be given so that you know how well your code is doing. - - We should now try adding a test that fails. Change your unit test to look like this. - - - - - - So, what did you get? I guess it told you that this isn't 1999. Bummer, eh? Hopefully, you noticed a couple of things that were different about the second test. First, we added an optional message that the user will see if the assert fails. Second, we did comparisons of strings instead of integers as in the first test. It doesn't matter whether you are testing for equality of strings or integers. Both work equally well with shUnit2. - - Hopefully, this is enough to get you started with unit testing. If you want a ton more examples, take a look at the tests provided with log4sh. Examples of much more advanced usage can be seen there. shUnit2 was after all written to help with the unit testing problems that log4sh had. - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/shunit2.xml b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/shunit2.xml deleted file mode 100644 index 25b3fed..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/docbook/shunit2.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - shunit2"> -]> - -shUnit2 - - shUnit2 version 2.0.3 - - - KateWard - -
- &myEmail; -
-
-
-
- - - &isoDate; - - - - - - - 2.0.3 - 2007-07-12 - Kate Ward <&myEmail;> - - - - 2.0.2 - 2007-04-22 - Kate Ward <&myEmail;> - - - - 2.0.1 - 2007-02-21 - Kate Ward <&myEmail;> - - - - 2.0.0 - 2007-02-20 - Kate Ward <&myEmail;> - - - - - - shUnit2 is a unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to JUnit, PyUnit, etc. - -
- - &introduction; - &quickstart; - &functions; -
diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/shell/shunit2 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/shell/shunit2 deleted file mode 100644 index 4e82e5b..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/shell/shunit2 +++ /dev/null @@ -1,799 +0,0 @@ -# $Id$ -# vim:syntax=sh:sts=2 -# vim:foldmethod=marker:foldmarker=/**,*/ -# -#/** -# -# -# -# shUnit 2.0.4 -# Shell Unit Test Framework -# -# http://code.google.com/p/shunit2/ -# -# written by Kate Ward <kate.ward@forestent.com> -# released under the LGPL -# -# this module implements a xUnit based unit test framework similar to JUnit -# -#*/ - -# shell flags for shunit: -# u - treat unset variables as an error when performing parameter expansion -__SHUNIT_SHELL_FLAGS='u' - -# save the current set of shell flags, and then set some for ourselves -__shunit_oldShellFlags="$-" -for _shunit_shellFlag in `echo "${__SHUNIT_SHELL_FLAGS}" |sed 's/\(.\)/\1 /g'` -do - set -${_shunit_shellFlag} -done -unset _shunit_shellFlag - -# constants - -__SHUNIT_VERSION='2.0.4pre' - -__SHUNIT_TRUE=0 -__SHUNIT_FALSE=1 -__SHUNIT_ERROR=2 - -__SHUNIT_ASSERT_MSG_PREFIX='ASSERT:' - -for _su_const in `set |grep "^__SHUNIT_" |cut -d= -f1`; do - readonly ${_su_const} -done -unset _su_const - -# variables -__shunit_suite='' - -__shunit_testsPassed=0 -__shunit_testsFailed=0 -__shunit_testsTotal=0 - -#----------------------------------------------------------------------------- -# assert functions -# - -#/** -# -# -# void -# -# -# -# -# assertEquals -# string [message] -# string expected -# string actual -# -# -# Asserts that expected and -# actual are equal to one another. The message is -# optional. -# -# -#*/ -assertEquals() -{ - _su_message='' - if [ $# -eq 3 ]; then - _su_message=$1 - shift - fi - _su_expected=${1:-} - _su_actual=${2:-} - - shunit_return=${__SHUNIT_TRUE} - if [ "${_su_expected}" = "${_su_actual}" ]; then - _shunit_testPassed - else - failNotEquals "${_su_message}" "${_su_expected}" "${_su_actual}" - shunit_return=${__SHUNIT_FALSE} - fi - - unset _su_message _su_expected _su_actual - return ${shunit_return} -} - -#/** -# -# -# void -# -# -# -# -# assertNull -# string [message] -# string value -# -# -# Asserts that value is null, -# or in shell terms a zero-length string. The message is optional. -# -# -#*/ -assertNull() -{ - if [ $# -eq 2 ]; then - assertTrue "$1" "[ -z '$2' ]" - else - assertTrue "[ -z '${1:-}' ]" - fi -} - -#/** -# -# -# void -# -# -# -# -# assertNotNull -# string [message] -# string value -# -# -# Asserts that value is not null, or in shell terms not -# a zero-length string. The message is optional. -# -# -#*/ -assertNotNull() -{ - if [ $# -eq 2 ]; then - assertTrue "$1" "[ -n '$2' ]" - else - assertTrue "[ -n '${1:-}' ]" - fi -} - -#/** -# -# -# void -# -# -# -# -# assertSame -# string [message] -# string expected -# string actual -# -# -# This function is functionally equivalent to -# assertEquals. -# -# -#*/ -assertSame() -{ - assertEquals "${@:-}" -} - -#/** -# -# -# void -# -# -# -# -# assertNotSame -# string [message] -# string unexpected -# string actual -# -# -# Asserts that unexpected and -# actual are not -# equal to one another. The message is optional. -# -# -#*/ -assertNotSame() -{ - _su_message='' - if [ $# -eq 3 ]; then - _su_message=$1 - shift - fi - _su_unexpected=${1:-} - _su_actual=${2:-} - - shunit_return=${__SHUNIT_TRUE} - if [ "${_su_unexpected}" != "${_su_actual}" ]; then - _shunit_testPassed - else - failSame "${_su_message}" - shunit_return=${__SHUNIT_FALSE} - fi - - unset _su_message _su_unexpected _su_actual - return ${shunit_return} -} - -#/** -# -# -# void -# -# -# -# -# assertTrue -# string [message] -# string condition -# -# -# Asserts that a given shell test condition is true. The message is -# optional. -# Testing whether something is true or false is easy enough by using -# the assertEquals/assertNotSame functions. Shell supports much more -# complicated tests though, and a means to support them was needed. As such, -# this function tests that conditions are true or false through evaluation -# rather than just looking for a true or false. -# -# The following test will succeed: assertTrue "[ 34 -gt 23 ]" -# The folloing test will fail with a message: assertTrue "test failed" "[ -r '/non/existant/file' ]" -# -# -# -#*/ -assertTrue() -{ - _su_message='' - if [ $# -eq 2 ]; then - _su_message=$1 - shift - fi - _su_condition=${1:-} - - shunit_return=${__SHUNIT_TRUE} - - # see if condition is an integer, i.e. a return value - _su_match=`expr "${_su_condition}" : '\([0-9]*\)'` - if [ -z "${_su_condition}" ]; then - # null condition - shunit_return=${__SHUNIT_FALSE} - elif [ "${_su_condition}" = "${_su_match}" ]; then - # possible return value. treating 0 as true, and non-zero as false. - [ ${_su_condition} -ne 0 ] && shunit_return=${__SHUNIT_FALSE} - else - # (hopefully) a condition - ( eval ${_su_condition} ) >/dev/null 2>&1 - [ $? -ne 0 ] && shunit_return=${__SHUNIT_FALSE} - fi - - # record the test - if [ ${shunit_return} -eq ${__SHUNIT_TRUE} ]; then - _shunit_testPassed - else - _shunit_testFailed "${_su_message}" - fi - - unset _su_message _su_condition _su_match - return ${shunit_return} -} - -#/** -# -# -# void -# -# -# -# -# assertFalse -# string [message] -# string condition -# -# -# Asserts that a given shell test condition is false. The message is -# optional. -# Testing whether something is true or false is easy enough by using -# the assertEquals/assertNotSame functions. Shell supports much more -# complicated tests though, and a means to support them was needed. As such, -# this function tests that conditions are true or false through evaluation -# rather than just looking for a true or false. -# -# The following test will succeed: assertFalse "[ 'apples' = 'oranges' ]" -# The folloing test will fail with a message: assertFalse "test failed" "[ 1 -eq 1 -a 2 -eq 2 ]" -# -# -# -#*/ -assertFalse() -{ - _su_message='' - if [ $# -eq 2 ]; then - _su_message=$1 - shift - fi - _su_condition=${1:-} - - shunit_return=${__SHUNIT_TRUE} - - # see if condition is an integer, i.e. a return value - _su_match=`expr "${_su_condition}" : '\([0-9]*\)'` - if [ -z "${_su_condition}" ]; then - # null condition - shunit_return=${__SHUNIT_FALSE} - elif [ "${_su_condition}" = "${_su_match}" ]; then - # possible return value. treating 0 as true, and non-zero as false. - [ ${_su_condition} -eq 0 ] && shunit_return=${__SHUNIT_FALSE} - else - # (hopefully) a condition - ( eval ${_su_condition} ) >/dev/null 2>&1 - [ $? -eq 0 ] && shunit_return=${__SHUNIT_FALSE} - fi - - # record the test - if [ ${shunit_return} -eq ${__SHUNIT_TRUE} ]; then - _shunit_testPassed - else - _shunit_testFailed "${_su_message}" - fi - - unset _su_message _su_condition _su_match - return ${shunit_return} -} - -#----------------------------------------------------------------------------- -# failure functions -# - -#/** -# -# -# void -# -# -# -# -# fail -# string [message] -# -# -# Fails the test immediately, with the optional message. -# -# -#*/ -fail() -{ - _su_message=${1:-} - - _shunit_testFailed "${_su_message}" - - unset _su_message -} - -#/** -# -# -# void -# -# -# -# -# failNotEquals -# string [message] -# string unexpected -# string actual -# -# -# Fails the test if unexpected and -# actual are not -# equal to one another. The message is optional. -# -# -#*/ -failNotEquals() -{ - _su_message='' - if [ $# -eq 3 ]; then - _su_message=$1 - shift - fi - _su_unexpected=${1:-} - _su_actual=${2:-} - - _shunit_testFailed "${_su_message:+${_su_message} }expected:<${_su_unexpected}> but was:<${_su_actual}>" - - unset _su_message _su_unexpected _su_actual -} - -#/** -# -# -# void -# -# -# -# -# failSame -# string [message] -# -# -# Indicate test failure because arguments were not the same. The -# message is optional. -# -# -#*/ -failSame() -{ - _su_message=${1:-} - - _shunit_testFailed "${_su_message:+${_su_message} }expected not same" - - unset _su_message -} - -#/** -# -# -# void -# -# -# -# -# failNotSame -# string [message] -# string expected -# string actual -# -# -# Fails the test if expected and -# actual are equal to one another. The message is -# optional. -# -# -#*/ -failNotSame() -{ - failNotEquals "${@:-}" -} - -#----------------------------------------------------------------------------- -# suite functions -# - -#/** -# -# -# void -# -# -# -# -# suite -# -# -# -# This function can be optionally overridden by the user in their test -# suite. -# If this function exists, it will be called when -# shunit2 is sourced. If it does not exist, shUnit2 will -# search the parent script for all functions beginning with the word -# test, and they will be added dynamically to the test -# suite. -# -# -#*/ -# Note: see _shunit_mktempFunc() for actual implementation -# suite() { :; } - -#/** -# -# -# void -# -# -# -# -# suite_addTest -# string function -# -# -# This function adds a function name to the list of tests scheduled for -# execution as part of this test suite. This function should only be called -# from within the suite() function. -# -# -#*/ -suite_addTest() -{ - _su_func=${1:-} - - __shunit_suite="${__shunit_suite:+${__shunit_suite} }${_su_func}" - - unset _su_func -} - -#/** -# -# -# void -# -# -# -# -# oneTimeSetUp -# -# -# -# This function can be be optionally overridden by the user in their -# test suite. -# If this function exists, it will be called once before any tests are -# run. It is useful to prepare a common environment for all tests. -# -# -#*/ -# Note: see _shunit_mktempFunc() for actual implementation -# oneTimeSetUp() { :; } - -#/** -# -# -# void -# -# -# -# -# oneTimeTearDown -# -# -# -# This function can be be optionally overridden by the user in their -# test suite. -# If this function exists, it will be called once after all tests are -# completed. It is useful to clean up the environment after all tests. -# -# -#*/ -# Note: see _shunit_mktempFunc() for actual implementation -# oneTimeTearDown() { :; } - -#/** -# -# -# void -# -# -# -# -# setUp -# -# -# -# This function can be be optionally overridden by the user in their -# test suite. -# If this function exists, it will be called before each test is run. -# It is useful to reset the environment before each test. -# -# -#*/ -# Note: see _shunit_mktempFunc() for actual implementation -# setUp() { :; } - -#/** -# -# -# void -# -# -# -# -# tearDown -# -# -# -# This function can be be optionally overridden by the user in their -# test suite. -# If this function exists, it will be called after each test completes. -# It is useful to clean up the environment after each test. -# -# -#*/ -# Note: see _shunit_mktempFunc() for actual implementation -# tearDown() { :; } - -#------------------------------------------------------------------------------ -# internal shUnit2 functions -# - -_shunit_cleanup() -{ - name=$1 - - case ${name} in - EXIT) signal=0 ;; - INT) signal=2 ;; - TERM) signal=15 ;; - esac - - # do our work - rm -fr "${__shunit_tmpDir}" - - # exit for all non-EXIT signals - if [ ${name} != 'EXIT' ]; then - echo "trapped and now handling the ${name} signal" >&2 - _shunit_generateReport - # disable EXIT trap - trap 0 - # add 128 to signal and exit - exit `expr ${signal} + 128` - fi -} - -_shunit_execSuite() -{ - echo '#' - echo '# Performing tests' - echo '#' - for _su_func in ${__shunit_suite}; do - # execute the per-test setup function - setUp - - # execute the test - echo "${_su_func}" - eval ${_su_func} - - # execute the per-test tear-down function - tearDown - done - - unset _su_func -} - -_shunit_functionExists() -{ - _su__func=$1 - type ${_su__func} 2>/dev/null |grep "is a function$" >/dev/null - _su__return=$? - unset _su__func - return ${_su__return} -} - -_shunit_generateReport() -{ - _su__awkPercent='{printf("%0.0f%%", $1*100/$2)}' - if [ ${__shunit_testsTotal} -gt 0 ]; then - _su__success=`echo ${__shunit_testsPassed} ${__shunit_testsTotal} |\ - awk "${_su__awkPercent}"` - else - _su__success=0 - fi - - cat </dev/null ) && return - - # the standard mktemp didn't work. doing our own. - if [ -r '/dev/urandom' -a -x '/usr/bin/od' ]; then - _su__random=`/usr/bin/od -vAn -N4 -tx4 &2 - return ${__SHUNIT_ERROR} - } - - echo ${_su__tmpDir} - unset _su__date _su__random _su__tmpDir -} - -# this function is here to work around issues in Cygwin -_shunit_mktempFunc() -{ - for _su__func in oneTimeSetUp oneTimeTearDown setUp tearDown suite; do - _su__file="${__shunit_tmpDir}/${_su__func}" - cat <"${_su__file}" -#! /bin/sh -exit 0 -EOF - chmod +x "${_su__file}" - done - - unset _su__file -} - -_shunit_testPassed() -{ - __shunit_testsPassed=`expr ${__shunit_testsPassed} + 1` - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` -} - -_shunit_testFailed() -{ - _su__msg=$1 - - __shunit_testsFailed=`expr ${__shunit_testsFailed} + 1` - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` - echo "${__SHUNIT_ASSERT_MSG_PREFIX}${_su__msg}" >&2 - - unset _su__msg -} - -#------------------------------------------------------------------------------ -# main -# - -# create a temporary storage location -__shunit_tmpDir=`_shunit_mktempDir` || exit ${__SHUNIT_ERROR} - -# setup traps to clean up after ourselves -trap '_shunit_cleanup EXIT' 0 -trap '_shunit_cleanup INT' 2 -trap '_shunit_cleanup TERM' 15 - -# create phantom functions to work around issues with Cygwin -_shunit_mktempFunc -PATH="${__shunit_tmpDir}:${PATH}" - -# execute the oneTimeSetUp function (if it exists) -#_shunit_functionExists oneTimeSetUp && oneTimeSetUp -oneTimeSetUp - -# deprecated: execute the suite function defined in the parent test script -suite - -# if no suite function was defined, dynamically build a list of functions -if [ -z "${__shunit_suite}" ]; then - funcs=`grep "^[ \t]*test[A-Za-z0-9_]* *()" $0 |sed 's/[^A-Za-z0-9_]//g'` - for func in ${funcs}; do - suite_addTest ${func} - done -fi - -# execute the tests -_shunit_execSuite - -# execute the oneTimeTearDown function (if it exists) -oneTimeTearDown - -# generate report -_shunit_generateReport - -# restore the previous set of shell flags -for _shunit_shellFlag in ${__SHUNIT_SHELL_FLAGS}; do - echo ${__shunit_oldShellFlags} |grep ${_shunit_shellFlag} >/dev/null \ - || set +${_shunit_shellFlag} -done -unset _shunit_shellFlag - -#/** -# -#*/ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/run-test-suite b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/run-test-suite deleted file mode 100755 index 8710a36..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/run-test-suite +++ /dev/null @@ -1,116 +0,0 @@ -#! /bin/sh -# $Id: run-test-suite 432 2007-01-05 14:58:37Z sfsetse $ - -MY_NAME=`basename $0` -MY_PATH=`dirname $0` - -SHELLS='/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh' -for f in test[A-Z]*; do - [ -x "${f}" ] && TESTS="${TESTS:+${TESTS} }${f}" -done - -# load common unit test functions -. "${MY_PATH}/test-functions.inc" - -usage() -{ - echo "usage: ${MY_NAME} [-e key=val ...] [-s shell(s)] [-t test(s)]" -} - -# process command line flags -while getopts 'e:hs:t:' opt; do - case ${opt} in - e) - key=`expr "${OPTARG}" : '\([^=]*\)='` - val=`expr "${OPTARG}" : '[^=]*=\(.*\)'` - if [ -z "${key}" -o -z "${val}" ]; then - usage - exit 1 - fi - eval "${key}='${val}'" - export ${key} - env="${env:+${env} }${key}" - ;; - h) usage; exit 0 ;; - s) shells=${OPTARG} ;; - t) tests=${OPTARG} ;; - *) usage; exit 1 ;; - esac -done -shift `expr ${OPTIND} - 1` - -# fill shells and/or tests -shells=${shells:-${SHELLS}} -tests=${tests:-${TESTS}} - -# error checking -if [ -z "${tests}" ]; then - tf_error 'no tests found to run; exiting' - exit 1 -fi - -cat <&1` - exitVal=$? - if [ ${exitVal} -eq 2 ]; then - echo - echo "${version}" - fi - ;; - pdksh) ;; - zsh) ;; - esac - - # execute the tests - for suite in ${tests}; do - suiteName=`expr "${suite}" : 'test\(.*\)'` - echo - echo "--- Executing the '${suiteName}' test suite ---" >&2 - ( exec ${shell} ./${suite}; ) - done -done diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/test-functions.inc b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/test-functions.inc deleted file mode 100644 index 88764c5..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/test-functions.inc +++ /dev/null @@ -1,84 +0,0 @@ -# $Id: test-functions.inc 416 2007-01-04 00:50:14Z sfsetse $ -# vim:syntax=sh:sts=2 - -# -# constants -# - -# configure debugging. set the DEBUG environment variable to any -# non-empty value to enable debug output, or TRACE to enable trace -# output. -TRACE=${TRACE:+'tf_trace '} -[ -n "${TRACE}" ] && DEBUG=1 -[ -z "${TRACE}" ] && TRACE=':' - -DEBUG=${DEBUG:+'tf_debug '} -[ -z "${DEBUG}" ] && DEBUG=':' - -# -# variables -# - -tf_RANDOM=0 - -# -# functions -# - -# message functions -tf_trace() { echo "${MY_NAME}:TRACE $@" >&2; } -tf_debug() { echo "${MY_NAME}:DEBUG $@" >&2; } -tf_info() { echo "${MY_NAME}:INFO $@" >&2; } -tf_warn() { echo "${MY_NAME}:WARN $@" >&2; } -tf_error() { echo "${MY_NAME}:ERROR $@" >&2; } -tf_fatal() { echo "${MY_NAME}:FATAL $@" >&2; } - -# generate a random number -tf_generateRandom() -{ - tfgr_random=${tf_RANDOM} - - while [ "${tfgr_random}" = "${tf_RANDOM}" ]; do - if [ -n "${RANDOM:-}" ]; then - # $RANDOM works - tfgr_random=${RANDOM}${RANDOM}${RANDOM}$$ - elif [ -r '/dev/urandom' ]; then - tfgr_random=`od -vAn -N4 -tu4 -# -# Self-testing unit tests for shUnit2 asserts -# - -MSG='This is a test message' - -#----------------------------------------------------------------------------- -# suite tests -# - -commonEqualsSame() -{ - fn=$1 - - msg='same, with message' - rslt=`${fn} "${MSG}" 'x' 'x' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='same' - rslt=`${fn} 'x' 'x' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='not same' - rslt=`${fn} 'x' 'y' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='null values' - rslt=`${fn} '' '' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`${fn} 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -testAssertEquals() -{ - commonEqualsSame 'assertEquals' -} - -testAssertSame() -{ - commonEqualsSame 'assertSame' -} - -testAssertNotSame() -{ - msg='not same, with message' - rslt=`assertNotSame "${MSG}" 'x' 'y' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='not same' - rslt=`assertNotSame 'x' 'y' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='same' - rslt=`assertNotSame 'x' 'x' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='null values' - rslt=`assertNotSame '' '' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`assertNotSame 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -testAssertNull() -{ - msg='null, with message' - rslt=`assertNull "${MSG}" '' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='null' - rslt=`assertNull '' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='not null' - rslt=`assertNull 'x' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`assertNull 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -testAssertNotNull() -{ - msg='not null, with message' - rslt=`assertNotNull "${MSG}" 'x' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='not null' - rslt=`assertNotNull 'x' 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='null' - rslt=`assertNotNull '' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`assertNotNull 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -testAssertTrue() -{ - msg='true, with message' - rslt=`assertTrue "${MSG}" 0 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='true' - rslt=`assertTrue 0 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='true condition' - rslt=`assertTrue "[ 0 -eq 0 ]" 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='false' - rslt=`assertTrue 1 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='false condition' - rslt=`assertTrue "[ 0 -eq 1 ]" 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='null value' - rslt=`assertTrue '' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`assertTrue 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -testAssertFalse() -{ - msg='false, with message' - rslt=`assertFalse "${MSG}" 1 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='false' - rslt=`assertFalse 1 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='false condition' - rslt=`assertFalse "[ 0 -eq 1 ]" 2>&1` - rtrn=$? - assertSame "${msg}" '' "${rslt}" - assertTrue "${msg}; failure" ${rtrn} - - msg='true' - rslt=`assertFalse 0 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='true condition' - rslt=`assertFalse "[ 0 -eq 0 ]" 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='null value' - rslt=`assertFalse '' 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} - - msg='too few arguments' - rslt=`assertFalse 2>&1` - rtrn=$? - assertNotSame "${msg}" '' "${rslt}" - assertFalse "${msg}; failure" ${rtrn} -} - -#----------------------------------------------------------------------------- -# suite functions -# - -# load and run shUnit2 -. ./shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testFailures b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testFailures deleted file mode 100755 index 9410510..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testFailures +++ /dev/null @@ -1,89 +0,0 @@ -#! /bin/sh -# $Id$ -# vim: expandtab -# author: Kate Ward -# -# Self-testing unit tests for shUnit2 failures -# - -MSG='This is a test message' - -#----------------------------------------------------------------------------- -# suite tests -# - -commonNotEqualsSame() -{ - fn=$1 - - msg='same, with message' - rslt=`${fn} "${MSG}" 'x' 'x' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='same' - rslt=`${fn} 'x' 'x' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='not same' - rslt=`${fn} 'x' 'y' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='null values' - rslt=`${fn} '' '' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='too few arguments' - rslt=`${fn} 2>&1` - assertNotSame "${msg}" '' "${rslt}" -} - -testFail() -{ - msg='with message' - rslt=`fail "${MSG}" 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='without message' - rslt=`fail 2>&1` - assertNotSame "${msg}" '' "${rslt}" -} - -testFailNotEquals() -{ - commonNotEqualsSame 'failNotEquals' -} - -testFailSame() -{ - msg='same, with message' - rslt=`failSame "${MSG}" 'x' 'x' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='same' - rslt=`failSame 'x' 'x' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='not same' - rslt=`failSame 'x' 'y' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='null values' - rslt=`failSame '' '' 2>&1` - assertNotSame "${msg}" '' "${rslt}" - - msg='too few arguments' - rslt=`failSame 2>&1` - assertNotSame "${msg}" '' "${rslt}" -} - -testFailNotSame() -{ - commonNotEqualsSame 'failNotSame' -} - -#----------------------------------------------------------------------------- -# suite functions -# - -# load and run shUnit2 -. ./shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testInternalFx b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testInternalFx deleted file mode 100755 index 9409dc2..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testInternalFx +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/sh -# $Id$ -# vim: expandtab -# author: Kate Ward -# -# Self-testing unit tests for shUnit2 internal functions -# - -#----------------------------------------------------------------------------- -# suite tests -# - -testGenerateReport() -{ - : -} - -#----------------------------------------------------------------------------- -# suite functions -# - -# load and run shUnit2 -. ./shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testSuiteFx b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testSuiteFx deleted file mode 100755 index c0e6ab8..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.0/src/test/testSuiteFx +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/sh -# $Id$ -# vim: expandtab -# author: Kate Ward -# -# Self-testing unit tests for shUnit2 suite functions -# - -#----------------------------------------------------------------------------- -# suite tests -# - -testAddTest() -{ - : -} - -#----------------------------------------------------------------------------- -# suite functions -# - -# load and run shUnit2 -. ./shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.flags b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.flags deleted file mode 100644 index 18495de..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.flags +++ /dev/null @@ -1,12 +0,0 @@ -# $Id: gen_test_results.flags 145 2011-06-10 11:45:17Z kate.ward@forestent.com $ -# vim:et:ft=sh:sts=2:sw=2 -# -# Copyright 2011 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# -# Author: kate.ward@forestent.com (Kate Ward) -# -# Flag definition overrides for the gen_test_results.sh script. -# - -DEFINE_string suite 'shunit2_test.sh' 'unit test suite' s diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.sh deleted file mode 100755 index 3f55493..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/gen_test_results.sh +++ /dev/null @@ -1,88 +0,0 @@ -#! /bin/sh -# $Id: gen_test_results.sh 187 2013-01-15 00:01:51Z kate.ward@forestent.com $ -# vim:et:ft=sh:sts=2:sw=2 -# -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# -# Author: kate.ward@forestent.com (Kate Ward) -# -# This script runs the provided unit tests and sends the output to the -# appropriate file. -# - -# treat unset variables as an error -set -u - -die() -{ - [ $# -gt 0 ] && echo "error: $@" >&2 - exit 1 -} - -BASE_DIR="`dirname $0`/.." -LIB_DIR="${BASE_DIR}/lib" - -# load libraries -. ${LIB_DIR}/shflags || die 'unable to load shflags library' -. ${LIB_DIR}/shlib || die 'unable to load shlib library' -. ${LIB_DIR}/versions || die 'unable to load versions library' - -# redefining BASE_DIR now that we have the shlib functions -BASE_DIR=`shlib_relToAbsPath "${BASE_DIR}"` -BIN_DIR="${BASE_DIR}/bin" -SRC_DIR="${BASE_DIR}/src" - -os_name=`versions_osName |sed 's/ /_/g'` -os_version=`versions_osVersion` - -# load external flags -. ${BIN_DIR}/gen_test_results.flags - -# define flags -DEFINE_boolean force false 'force overwrite' f -DEFINE_string output_dir "`pwd`" 'output dir' d -DEFINE_string output_file "${os_name}-${os_version}.txt" 'output file' o -DEFINE_boolean dry_run false "supress logging to a file" n - -main() -{ - # determine output filename - output="${FLAGS_output_dir:+${FLAGS_output_dir}/}${FLAGS_output_file}" - output=`shlib_relToAbsPath "${output}"` - - # checks - [ -n "${FLAGS_suite:-}" ] || die 'suite flag missing' - - if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} -a -f "${output}" ]; then - if [ ${FLAGS_force} -eq ${FLAGS_TRUE} ]; then - rm -f "${output}" - else - echo "not overwriting '${output}'" >&2 - exit ${FLAGS_ERROR} - fi - fi - if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} ]; then - touch "${output}" 2>/dev/null || die "unable to write to '${output}'" - fi - - # run tests - ( - cd "${SRC_DIR}"; - if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} ]; then - ./${FLAGS_suite} |tee "${output}" - else - ./${FLAGS_suite} - fi - ) - - if [ ! ${FLAGS_dry_run} ]; then - echo >&2 - echo "output written to '${output}'" >&2 - fi -} - -FLAGS "$@" || exit $? -[ ${FLAGS_help} -eq ${FALSE} ] || exit -eval set -- "${FLAGS_ARGV}" -main "${@:-}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/which b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/which deleted file mode 100755 index 9d7cc9f..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/bin/which +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -# $Id$ -# -# This is a simple implementation of the 'which' command for those OSes that -# don't have one. -# - -true; TRUE=$? -false; FALSE=$? - -showAll=${FALSE} - -# process command line flags -while getopts 'a' opt; do - case ${opt} in - a) showAll=${TRUE} - esac -done -shift `expr ${OPTIND} - 1` - -# exit if no arguments were given -[ $# -eq 0 ] && exit 1 - -command=$1 - -# search for command -out=`echo "${PATH}" |sed "s/:/\n/g" |\ -while read path; do - fullPath="${path}/${command}" - if [ -x "${fullPath}" ]; then - echo "${fullPath}" - [ ${showAll} -eq ${FALSE} ] && break - fi -done` -[ -z "${out}" ] && exit 1 -echo "${out}" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/README.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/README.txt deleted file mode 100644 index 0e71fa2..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/README.txt +++ /dev/null @@ -1,212 +0,0 @@ -==================== -shUnit2 2.1.x README -==================== - -code.google.com -=============== - -This project is stored on code.google.com as http://code.google.com/p/shunit2/. -All releases as of 2.1.4 and full source are available there. Documentation is -included as part of the source and each release. Source code is stored in -Subversion and can be accessed using the following information. - -Browse the code in a web browser: - -- http://code.google.com/p/shunit2/source/browse -- svn > trunk > source > 2.1 - -Check out the code locally :: - - $ svn checkout http://shunit2.googlecode.com/svn/trunk/ shflags-read-only - - -SourceForge -=========== - -DEPRECATED - -This project is stored on SourceForge as http://sf.net/projects/shunit2. The -source code is stored in Subversion and can be accessed using the following -information. - -Check out the code locally :: - - $ svn co https://shunit2.svn.sourceforge.net/svnroot/shunit2/trunk/source/2.1 shunit2 - -Browse the code in a web browser: - -- http://shunit2.svn.sourceforge.net/viewvc/shunit2/trunk/source/2.1/ -- http://shunit2.svn.sourceforge.net/svnroot/shunit2/trunk/source/2.1/ - - -Making a release -================ - -For these steps, it is assumed we are working with release 2.0.0. - -Steps: - -- write release notes -- update version -- finish changelog -- check all the code in -- tag the release -- export the release -- create tarball -- md5sum the tarball and sign with gpg -- update website -- post to SourceForge and Freshmeat - -Write Release Notes -------------------- - -This should be pretty self explanatory. Use one of the release notes from a -previous release as an example. - -The versions of the various platforms and shells are included when the -master unit test script is run, or when ``bin/gen_test_results.sh`` is -used. To determine the versions of the installed shells by hand, use the -``lib/versions`` script. - -Alternatively, do the following: - -+-------+---------+-----------------------------------------------------------+ -| Shell | OS | Notes | -+=======+=========+===========================================================+ -| bash | | ``$ bash --version`` | -+-------+---------+-----------------------------------------------------------+ -| dash | Linux | ``$ dpkg -l |grep dash`` | -+-------+---------+-----------------------------------------------------------+ -| ksh | | ``$ ksh --version`` | -| | | -or- | -| | | ``$ echo 'echo $KSH_VERSION' |ksh`` | -| +---------+-----------------------------------------------------------+ -| | Cygwin | see pdksh | -| +---------+-----------------------------------------------------------+ -| | Solaris | ``$ strings /usr/bin/ksh |grep 'Version'`` | -+-------+---------+-----------------------------------------------------------+ -| pdksh | | ``$ strings /bin/pdksh |grep 'PD KSH'`` | -| +---------+-----------------------------------------------------------+ -| | Cygwin | look in the downloaded Cygwin directory | -+-------+---------+-----------------------------------------------------------+ -| sh | Solaris | not possible | -+-------+---------+-----------------------------------------------------------+ -| zsh | | ``$ zsh --version`` | -+-------+---------+-----------------------------------------------------------+ - -Update Version --------------- - -Edit ``src/shell/shunit2`` and change the version number in the comment, as well -as in the ``SHUNIT_VERSION`` variable. - -Finish Documentation --------------------- - -Make sure that any remaining changes get put into the ``CHANGES-X.X.txt`` file. - -Finish writing the ``RELEASE_NOTES-X.X.X.txt``. If necessary, run it -through the **fmt** command to make it pretty (hopefully it is already). :: - - $ fmt -w 80 RELEASE_NOTES-2.0.0.txt >RELEASE_NOTES-2.0.0.txt.new - $ mv RELEASE_NOTES-2.0.0.txt.new RELEASE_NOTES-2.0.0.txt - -We want to have an up-to-date version of the documentation in the release, so -we'd better build it. :: - - $ pwd - .../shunit2/source/2.1 - $ cd doc - $ RST2HTML_OPTS='--stylesheet-path=rst2html.css' - $ rst2html ${RST2HTML_OPTS} shunit2.txt >shunit2.html - -Check In All the Code ---------------------- - -This step is pretty self-explanatory :: - - $ pwd - .../shunit2/source/2.0 - $ svn ci -m "finalizing release" - -Tag the Release ---------------- -:: - - $ pwd - .../shunit2/source - $ ls - 2.0 2.1 - $ svn cp -m "Release 2.0.0" 2.0 https://shunit2.googlecode.com/svn/tags/source/2.0.0 - -Export the Release ------------------- -:: - - $ pwd - .../shunit2/builds - $ svn export https://shunit2.googlecode.com/svn/tags/source/2.0.0 shunit2-2.0.0 - -Create Tarball --------------- -:: - - $ tar cfz ../releases/shunit2-2.0.0.tgz shunit2-2.0.0 - -Sign the Tarball with gpg -------------------------- -:: - - $ cd ../releases - $ gpg --default-key kate.ward@forestent.com --detach-sign shunit2-2.0.0.tgz - -Update Website --------------- - -Again, pretty self-explanatory. Make sure to copy the GPG signature file. Once -done, make sure to tag the website so we can go back in time if needed. :: - - $ pwd - .../shunit2 - $ ls - source website - $ svn cp -m "Release 2.0.0" \ - website https://shunit2.googlecode.com/svn/tags/website/20060916 - -Now, update the website. It too is held in Subversion, so **ssh** into the web -server and use ``svn up`` to grab the latest version. - -Post to code.google.com and Freshmeat -------------------------------------- - -- http://code.google.com/p/shunit2/ -- http://freshmeat.net/ - - -Related Documentation -===================== - -Docbook: - http://www.docbook.org/ - -Docbook XML - docbook-xml-4.4.zip: - http://www.docbook.org/xml/4.4/docbook-xml-4.4.zip - http://www.oasis-open.org/docbook/xml/4.4/docbook-xml-4.4.zip - docbook-xml-4.5.zip: - http://www.docbook.org/xml/4.5/docbook-xml-4.5.zip -Docbook XSL - docbook-xsl-1.71.0.tar.bz2: - http://prdownloads.sourceforge.net/docbook/docbook-xsl-1.71.0.tar.bz2?download - docbook-xsl-1.71.1.tar.bz2: - http://downloads.sourceforge.net/docbook/docbook-xsl-1.71.1.tar.bz2?use_mirror=puzzle -JUnit: - http://www.junit.org/ -reStructuredText: - http://docutils.sourceforge.net/docs/user/rst/quickstart.html - -.. generate HTML using rst2html from Docutils of -.. http://docutils.sourceforge.net/ -.. -.. vim:fileencoding=latin1:ft=rst:spell:tw=80 -.. $Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/coding_standards.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/coding_standards.txt deleted file mode 100644 index e5dee4f..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/coding_standards.txt +++ /dev/null @@ -1,74 +0,0 @@ -Coding Standards -================ - -Variable and Function Names ---------------------------- - -All shUnit2 specific constants, variables, and functions will be prefixed -appropriately with 'shunit'. This is to distinguish usage in the shUnit2 code -from users own scripts so that the shell name space remains predictable to -users. The exceptions here are the standard ``assertEquals``, etc. functions. - -All non-builtin constants and variables will be surrouned with squiggle -brackets, e.g. '${shunit_someVariable}' to improve code readability. - -Due to some shells not supporting local variables in functions, care in the -naming and use of variables, both public and private, is very important. -Accidental overriding of the variables can occur easily if care is not taken as -all variables are technically global variables in some shells. - -+----------------------------------+---------------------------+ -| *type* | *sample* | -+==================================+===========================+ -| global public constant | ``SHUNIT_TRUE`` | -+----------------------------------+---------------------------+ -| global private constant | ``__SHUNIT_SHELL_FLAGS`` | -+----------------------------------+---------------------------+ -| global public variable | not used | -+----------------------------------+---------------------------+ -| global private variable | ``__shunit_someVariable`` | -+----------------------------------+---------------------------+ -| global macro | ``_SHUNIT_SOME_MACRO_`` | -+----------------------------------+---------------------------+ -| public function | ``assertEquals`` | -+----------------------------------+---------------------------+ -| public function, local variable | ``shunit_someVariable_`` | -+----------------------------------+---------------------------+ -| private function | ``_shunit_someFunction`` | -+----------------------------------+---------------------------+ -| private function, local variable | ``_shunit_someVariable_`` | -+----------------------------------+---------------------------+ - -Where it makes sense, variables can have the first letter of the second and -later words capitalized. For example, the local variable name for the total -number of test cases seen might be ``shunit_totalTestsSeen_``. - -Local Variable Cleanup ----------------------- - -As many shells do not support local variables, no support for cleanup of -variables is present either. As such, all variables local to a function must be -cleared up with the ``unset`` command at the end of each function. - -Indentation ------------ - -Code block indentation is two (2) spaces, and tabs may not be used. :: - - if [ -z 'some string' ]; then - someFunction - fi - -Lines of code should be no longer than 80 characters unless absolutely -necessary. When lines are wrapped using the backslash character '\', subsequent -lines should be indented with four (4) spaces so as to differentiate from the -standard spacing of two characters. Tabs may *not* be used. :: - - for x in some set of very long set of arguments that make for a very long \ - that extends much too long for one line - do - echo ${x} - done - -.. vim:fileencoding=latin1:ft=rst:spell:tw=80 -.. $Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/contributors.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/contributors.txt deleted file mode 100644 index 7623c66..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/contributors.txt +++ /dev/null @@ -1,14 +0,0 @@ -The original author of shunit2 is Kate Ward. The following people have -contributed in some way or another to shunit2. - -Bryan Larsen -Kevin Van Horn -Maciej Bliziński -Mario Sparada -Mathias Goldau -Richard Jensen -Rob Holland -Rocky Bernstein -wood4321 (of code.google.com) - -$Revision$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/lgpl-2.1.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/lgpl-2.1.txt deleted file mode 100644 index 4362b49..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/lgpl-2.1.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/rst2html.css b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/rst2html.css deleted file mode 100644 index 01983a5..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/doc/rst2html.css +++ /dev/null @@ -1,292 +0,0 @@ -/* -:Author: David Goodger -:Contact: goodger@users.sourceforge.net -:Date: $Date: 2007-04-11 11:48:16 +0100 (Wed, 11 Apr 2007) $ -:Revision: $Revision: 2791 $ -:Copyright: This stylesheet has been placed in the public domain. -:Modified by: Kate Ward - -Default cascading style sheet for the HTML output of Docutils. - -See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to -customize this style sheet. -*/ - -/* used to remove borders from tables and images */ -.borderless, table.borderless td, table.borderless th { - border: 0 } - -table.borderless td, table.borderless th { - /* Override padding for "table.docutils td" with "! important". - The right padding separates the table cells. */ - padding: 0 0.5em 0 0 ! important } - -.first { - /* Override more specific margin styles with "! important". */ - margin-top: 0 ! important } - -.last, .with-subtitle { - margin-bottom: 0 ! important } - -.hidden { - display: none } - -a.toc-backref { - text-decoration: none ; - color: black } - -blockquote.epigraph { - margin: 2em 5em ; } - -dl.docutils dd { - margin-bottom: 0.5em } - -/* Uncomment (and remove this text!) to get bold-faced definition list terms -dl.docutils dt { - font-weight: bold } -*/ - -div.abstract { - margin: 2em 5em } - -div.abstract p.topic-title { - font-weight: bold ; - text-align: center } - -div.admonition, div.attention, div.caution, div.danger, div.error, -div.hint, div.important, div.note, div.tip, div.warning { - margin: 2em ; - border: medium outset ; - padding: 1em } - -div.admonition p.admonition-title, div.hint p.admonition-title, -div.important p.admonition-title, div.note p.admonition-title, -div.tip p.admonition-title { - font-weight: bold ; - font-family: sans-serif } - -div.attention p.admonition-title, div.caution p.admonition-title, -div.danger p.admonition-title, div.error p.admonition-title, -div.warning p.admonition-title { - color: red ; - font-weight: bold ; - font-family: sans-serif } - -/* Uncomment (and remove this text!) to get reduced vertical space in - compound paragraphs. -div.compound .compound-first, div.compound .compound-middle { - margin-bottom: 0.5em } - -div.compound .compound-last, div.compound .compound-middle { - margin-top: 0.5em } -*/ - -div.dedication { - margin: 2em 5em ; - text-align: center ; - font-style: italic } - -div.dedication p.topic-title { - font-weight: bold ; - font-style: normal } - -div.figure { - margin-left: 2em ; - margin-right: 2em } - -div.footer, div.header { - clear: both; - font-size: smaller } - -div.line-block { - display: block ; - margin-top: 1em ; - margin-bottom: 1em } - -div.line-block div.line-block { - margin-top: 0 ; - margin-bottom: 0 ; - margin-left: 1.5em } - -div.sidebar { - margin-left: 1em ; - border: medium outset ; - padding: 1em ; - background-color: #ffffee ; - width: 40% ; - float: right ; - clear: right } - -div.sidebar p.rubric { - font-family: sans-serif ; - font-size: medium } - -div.system-messages { - margin: 5em } - -div.system-messages h1 { - color: red } - -div.system-message { - border: medium outset ; - padding: 1em } - -div.system-message p.system-message-title { - color: red ; - font-weight: bold } - -div.topic { - margin: 2em } - -h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, -h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { - margin-top: 0.4em } - -h1.title { - text-align: center } - -h2.subtitle { - text-align: center } - -hr.docutils { - width: 75% } - -img.align-left { - clear: left } - -img.align-right { - clear: right } - -ol.simple, ul.simple { - margin-bottom: 1em } - -ol.arabic { - list-style: decimal } - -ol.loweralpha { - list-style: lower-alpha } - -ol.upperalpha { - list-style: upper-alpha } - -ol.lowerroman { - list-style: lower-roman } - -ol.upperroman { - list-style: upper-roman } - -p.attribution { - text-align: right ; - margin-left: 50% } - -p.caption { - font-style: italic } - -p.credits { - font-style: italic ; - font-size: smaller } - -p.label { - white-space: nowrap } - -p.rubric { - font-weight: bold ; - font-size: larger ; - color: maroon ; - text-align: center } - -p.sidebar-title { - font-family: sans-serif ; - font-weight: bold ; - font-size: larger } - -p.sidebar-subtitle { - font-family: sans-serif ; - font-weight: bold } - -p.topic-title { - font-weight: bold } - -pre.address { - margin-bottom: 0 ; - margin-top: 0 ; - font-family: serif ; - font-size: 100% } - -pre.literal-block, pre.doctest-block { - margin-left: 2em ; - margin-right: 2em ; - background-color: #eeeeee } - -span.classifier { - font-family: sans-serif ; - font-style: oblique } - -span.classifier-delimiter { - font-family: sans-serif ; - font-weight: bold } - -span.interpreted { - font-family: sans-serif } - -span.option { - white-space: nowrap } - -span.pre { - white-space: pre } - -span.problematic { - color: red } - -span.section-subtitle { - /* font-size relative to parent (h1..h6 element) */ - font-size: 80% } - -table.citation { - border-left: solid 1px gray; - margin-left: 1px } - -table.docinfo { - margin: 2em 4em } - -/* -table.docutils { - margin-top: 0.5em ; - margin-bottom: 0.5em } -*/ - -table.footnote { - border-left: solid 1px black; - margin-left: 1px ; - font-size: 80% } - } - -table.docutils td, table.docutils th, -table.docinfo td, table.docinfo th { - padding-left: 0.5em ; - padding-right: 0.5em ; - vertical-align: top } - -table.docutils th.field-name, table.docinfo th.docinfo-name { - font-weight: bold ; - text-align: left ; - white-space: nowrap ; - padding-left: 0 } - -h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, -h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { - font-size: 100% } - -/* -tt.docutils { - background-color: #eeeeee } -*/ - -ul.auto-toc { - list-style-type: none } - -/* customizations by kward */ - -h1 { font-size: 133%; border-top:1px solid #CCCCFF; } -h1.title { font-size: 150%; border-top:0px; padding-top: 1em; } -/* div.document { font-size: 90% } */ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/lineno_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/lineno_test.sh deleted file mode 100755 index 9c05f1e..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/lineno_test.sh +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh -# file: examples/lineno_test.sh - -testLineNo() -{ - # this assert will have line numbers included (e.g. "ASSERT:[123] ...") if - # they are supported. - echo "_ASSERT_EQUALS_ macro value: ${_ASSERT_EQUALS_}" - ${_ASSERT_EQUALS_} 'not equal' 1 2 - - # this assert will not have line numbers included (e.g. "ASSERT: ...") - assertEquals 'not equal' 1 2 -} - -# load shunit2 -. ../src/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/party_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/party_test.sh deleted file mode 100755 index 5ca2583..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/examples/party_test.sh +++ /dev/null @@ -1,17 +0,0 @@ -#! /bin/sh -# file: examples/party_test.sh - -testEquality() -{ - assertEquals 1 1 -} - -testPartyLikeItIs1999() -{ - year=`date '+%Y'` - assertEquals "It's not 1999 :-(" \ - '1999' "${year}" -} - -# load shunit2 -. ../src/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/versions b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/versions deleted file mode 100755 index e03f4f4..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/lib/versions +++ /dev/null @@ -1,239 +0,0 @@ -#! /bin/sh -# $Id: versions 175 2013-01-14 22:16:01Z kate.ward@forestent.com $ -# vim:et:ft=sh:sts=2:sw=2 -# -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# -# Author: kate.ward@forestent.com (Kate Ward) -# -# This library provides reusable functions that determine actual names and -# versions of installed shells and the OS. The library can also be run as a -# script if set execuatable. - -ARGV0=`basename "$0"` -LSB_RELEASE='/etc/lsb-release' -VERSIONS_SHELLS="/bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/sh /bin/zsh" - -TRUE=0 -FALSE=1 -ERROR=2 - -UNAME_R=`uname -r` -UNAME_S=`uname -s` - -__versions_haveStrings=${ERROR} - -#------------------------------------------------------------------------------ -# functions -# - -versions_osName() -{ - os_name_='unrecognized' - os_system_=${UNAME_S} - case ${os_system_} in - CYGWIN_NT-*) os_name_='Cygwin' ;; - Darwin) os_name_='Mac OS X' ;; - FreeBSD) os_name_='FreeBSD' ;; - Linux) os_name_='Linux' ;; - SunOS) - if grep 'OpenSolaris' /etc/release >/dev/null; then - os_name_='OpenSolaris' - else - os_name_='Solaris' - fi - ;; - esac - - echo ${os_name_} - unset os_name_ os_system_ -} - -versions_osVersion() -{ - os_version_='unrecognized' - os_system_=${UNAME_S} - os_release_=${UNAME_R} - case ${os_system_} in - CYGWIN_NT-*) - os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]\.[0-9]*\).*'` - ;; - Darwin) - major_='10' - sub_=`echo ${os_release_} |sed 's/^[0-9]*\.\([0-9]*\)\.[0-9]*$/\1/'` - case ${os_release_} in - 8.*) minor_='4' ;; - 9.*) minor_='5' ;; - 10.*) minor_='6' ;; - 11.*) minor_='7' ;; - 12.*) minor_='8' ;; - *) minor_='X'; sub_='X' ;; - esac - os_version_="${major_}.${minor_}.${sub_}" - ;; - FreeBSD) - os_version_=`expr "${os_release_}" : '\([0-9]*\.[0-9]*\)-.*'` - ;; - Linux) - if [ -r "${LSB_RELEASE}" ]; then - if grep -q 'DISTRIB_ID=Ubuntu' "${LSB_RELEASE}"; then - os_version_=`cat "${LSB_RELEASE}" \ - |awk -F= '$1~/DISTRIB_DESCRIPTION/{print $2}' \ - |sed 's/"//g;s/ /-/g'` - fi - elif [ -r '/etc/redhat-release' ]; then - os_version_=`cat /etc/redhat-release` - fi - ;; - SunOS) - if grep 'OpenSolaris' /etc/release >/dev/null; then - os_version_=`grep 'OpenSolaris' /etc/release |awk '{print $2"("$3")"}'` - else - major_=`echo ${os_release_} |sed 's/[0-9]*\.\([0-9]*\)/\1/'` - minor_=`grep Solaris /etc/release |sed 's/[^u]*\(u[0-9]*\).*/\1/'` - os_version_="${major_}${minor_}" - fi - ;; - esac - - echo ${os_version_} - unset os_name_ os_release_ os_version_ major_ minor_ sub_ -} - -versions_shellVersion() -{ - shell_=$1 - - if [ ! -x "${shell_}" ]; then - echo 'not installed' - return - fi - - version_='' - case ${shell_} in - */sh) - # TODO(kward): fix this - ## this could be one of any number of shells. try until one fits. - #version_=`versions_shell_bash ${shell_}` - ## dash cannot be self determined yet - #[ -z "${version_}" ] && version_=`versions_shell_ksh ${shell_}` - ## pdksh is covered in versions_shell_ksh() - #[ -z "${version_}" ] && version_=`versions_shell_zsh ${shell_}` - ;; - */bash) version_=`versions_shell_bash ${shell_}` ;; - */dash) - # simply assuming Ubuntu Linux until somebody comes up with a better - # test. the following test will return an empty string if dash is not - # installed. - version_=`versions_shell_dash` - ;; - */ksh) version_=`versions_shell_ksh ${shell_}` ;; - */pdksh) version_=`versions_shell_pdksh ${shell_}` ;; - */zsh) version_=`versions_shell_zsh ${shell_}` ;; - *) version_='invalid' - esac - - echo ${version_:-unknown} - unset shell_ version_ -} - -versions_shell_bash() -{ - $1 --version 2>&1 |grep 'GNU bash' |sed 's/.*version \([^ ]*\).*/\1/' -} - -versions_shell_dash() -{ - eval dpkg >/dev/null 2>&1 - [ $? -eq 127 ] && return # return if dpkg not found - - dpkg -l |grep ' dash ' |awk '{print $3}' -} - -versions_shell_ksh() -{ - versions_shell_=$1 - - # try a few different ways to figure out the version - versions_version_=`${versions_shell_} --version : 2>&1` - if [ $? -eq 0 ]; then - versions_version_=`echo "${versions_version_}" \ - |sed 's/.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/'` - else - versions_version_='' - fi - - if [ -z "${versions_version_}" ]; then - _versions_have_strings - versions_version_=`strings ${versions_shell_} 2>&1 \ - |grep Version \ - |sed 's/^.*Version \(.*\)$/\1/;s/ s+ \$$//;s/ /-/g'` - fi - - if [ -z "${versions_version_}" ]; then - versions_version_=`versions_shell_pdksh ${versions_shell_}` - fi - - echo ${versions_version_} - unset versions_shell_ versions_version_ -} - -versions_shell_pdksh() -{ - _versions_have_strings - strings $1 2>&1 \ - |grep 'PD KSH' \ - |sed -e 's/.*PD KSH \(.*\)/\1/;s/ /-/g' -} - -versions_shell_zsh() -{ - versions_shell_=$1 - - # try a few different ways to figure out the version - versions_version_=`echo 'echo ${ZSH_VERSION}' |${versions_shell_}` - - if [ -z "${versions_version_}" ]; then - versions_version_=`${versions_shell_} --version 2>&1 |awk '{print $2}'` - fi - - echo ${versions_version_} - unset versions_shell_ versions_version_ -} - -# Determine if the 'strings' binary installed. -_versions_have_strings() -{ - [ ${__versions_haveStrings} -ne ${ERROR} ] && return - eval strings /dev/null >/dev/null 2>&1 - if [ $? -eq 0 ]; then - __versions_haveStrings=${TRUE} - else - echo 'WARN: strings not installed. try installing binutils?' >&2 - __versions_haveStrings=${FALSE} - fi -} - -#------------------------------------------------------------------------------ -# main -# - -versions_main() -{ - # treat unset variables as an error - set -u - - os_name=`versions_osName` - os_version=`versions_osVersion` - echo "os: ${os_name} version: ${os_version}" - - for shell in ${VERSIONS_SHELLS}; do - shell_version=`versions_shellVersion ${shell}` - echo "shell: ${shell} version: ${shell_version}" - done -} - -if [ "${ARGV0}" = 'versions' ]; then - versions_main "$@" -fi diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test.sh deleted file mode 100755 index d8f5a9c..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test.sh +++ /dev/null @@ -1,124 +0,0 @@ -#! /bin/sh -# $Id$ -# vim:et:ft=sh:sts=2:sw=2 -# -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# Author: kate.ward@forestent.com (Kate Ward) -# -# shUnit2 unit test suite runner. -# -# This script runs all the unit tests that can be found, and generates a nice -# report of the tests. - -MY_NAME=`basename $0` -MY_PATH=`dirname $0` - -PREFIX='shunit2_test_' -SHELLS='/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh' -TESTS='' -for test in ${PREFIX}[a-z]*.sh; do - TESTS="${TESTS} ${test}" -done - -# load common unit test functions -. ../lib/versions -. ./shunit2_test_helpers - -usage() -{ - echo "usage: ${MY_NAME} [-e key=val ...] [-s shell(s)] [-t test(s)]" -} - -env='' - -# process command line flags -while getopts 'e:hs:t:' opt; do - case ${opt} in - e) # set an environment variable - key=`expr "${OPTARG}" : '\([^=]*\)='` - val=`expr "${OPTARG}" : '[^=]*=\(.*\)'` - if [ -z "${key}" -o -z "${val}" ]; then - usage - exit 1 - fi - eval "${key}='${val}'" - export ${key} - env="${env:+${env} }${key}" - ;; - h) usage; exit 0 ;; # output help - s) shells=${OPTARG} ;; # list of shells to run - t) tests=${OPTARG} ;; # list of tests to run - *) usage; exit 1 ;; - esac -done -shift `expr ${OPTIND} - 1` - -# fill shells and/or tests -shells=${shells:-${SHELLS}} -tests=${tests:-${TESTS}} - -# error checking -if [ -z "${tests}" ]; then - th_error 'no tests found to run; exiting' - exit 1 -fi - -cat <&1; ) - done -done diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_misc.sh b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_misc.sh deleted file mode 100755 index d264628..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/source/2.1/src/shunit2_test_misc.sh +++ /dev/null @@ -1,160 +0,0 @@ -#! /bin/sh -# $Id$ -# vim:et:ft=sh:sts=2:sw=2 -# -# Copyright 2008 Kate Ward. All Rights Reserved. -# Released under the LGPL (GNU Lesser General Public License) -# -# Author: kate.ward@forestent.com (Kate Ward) -# -# shUnit2 unit tests of miscellaneous things - -# load test helpers -. ./shunit2_test_helpers - -#------------------------------------------------------------------------------ -# suite tests -# - -# Note: the test script is prefixed with '#' chars so that shUnit2 does not -# incorrectly interpret the embedded functions as real functions. -testUnboundVariable() -{ - unittestF="${SHUNIT_TMPDIR}/unittest" - sed 's/^#//' >"${unittestF}" <"${stdoutF}" 2>"${stderrF}" ) - assertFalse 'expected a non-zero exit value' $? - grep '^ASSERT:Unknown failure' "${stdoutF}" >/dev/null - assertTrue 'assert message was not generated' $? - grep '^Ran [0-9]* test' "${stdoutF}" >/dev/null - assertTrue 'test count message was not generated' $? - grep '^FAILED' "${stdoutF}" >/dev/null - assertTrue 'failure message was not generated' $? -} - -testIssue7() -{ - ( assertEquals 'Some message.' 1 2 >"${stdoutF}" 2>"${stderrF}" ) - diff "${stdoutF}" - >/dev/null < but was:<2> -EOF - rtrn=$? - assertEquals ${SHUNIT_TRUE} ${rtrn} - [ ${rtrn} -ne ${SHUNIT_TRUE} ] && cat "${stderrF}" >&2 -} - -testPrepForSourcing() -{ - assertEquals '/abc' `_shunit_prepForSourcing '/abc'` - assertEquals './abc' `_shunit_prepForSourcing './abc'` - assertEquals './abc' `_shunit_prepForSourcing 'abc'` -} - -testEscapeCharInStr() -{ - actual=`_shunit_escapeCharInStr '\' ''` - assertEquals '' "${actual}" - assertEquals 'abc\\' `_shunit_escapeCharInStr '\' 'abc\'` - assertEquals 'abc\\def' `_shunit_escapeCharInStr '\' 'abc\def'` - assertEquals '\\def' `_shunit_escapeCharInStr '\' '\def'` - - actual=`_shunit_escapeCharInStr '"' ''` - assertEquals '' "${actual}" - assertEquals 'abc\"' `_shunit_escapeCharInStr '"' 'abc"'` - assertEquals 'abc\"def' `_shunit_escapeCharInStr '"' 'abc"def'` - assertEquals '\"def' `_shunit_escapeCharInStr '"' '"def'` - - actual=`_shunit_escapeCharInStr '$' ''` - assertEquals '' "${actual}" - assertEquals 'abc\$' `_shunit_escapeCharInStr '$' 'abc$'` - assertEquals 'abc\$def' `_shunit_escapeCharInStr '$' 'abc$def'` - assertEquals '\$def' `_shunit_escapeCharInStr '$' '$def'` - -# actual=`_shunit_escapeCharInStr "'" ''` -# assertEquals '' "${actual}" -# assertEquals "abc\\'" `_shunit_escapeCharInStr "'" "abc'"` -# assertEquals "abc\\'def" `_shunit_escapeCharInStr "'" "abc'def"` -# assertEquals "\\'def" `_shunit_escapeCharInStr "'" "'def"` - -# # must put the backtick in a variable so the shell doesn't misinterpret it -# # while inside a backticked sequence (e.g. `echo '`'` would fail). -# backtick='`' -# actual=`_shunit_escapeCharInStr ${backtick} ''` -# assertEquals '' "${actual}" -# assertEquals '\`abc' \ -# `_shunit_escapeCharInStr "${backtick}" ${backtick}'abc'` -# assertEquals 'abc\`' \ -# `_shunit_escapeCharInStr "${backtick}" 'abc'${backtick}` -# assertEquals 'abc\`def' \ -# `_shunit_escapeCharInStr "${backtick}" 'abc'${backtick}'def'` -} - -testEscapeCharInStr_specialChars() -{ - # make sure our forward slash doesn't upset sed - assertEquals '/' `_shunit_escapeCharInStr '\' '/'` - - # some shells escape these differently - #assertEquals '\\a' `_shunit_escapeCharInStr '\' '\a'` - #assertEquals '\\b' `_shunit_escapeCharInStr '\' '\b'` -} - -# Test the various ways of declaring functions. -# -# Prefixing (then stripping) with comment symbol so these functions aren't -# treated as real functions by shUnit2. -testExtractTestFunctions() -{ - f="${SHUNIT_TMPDIR}/extract_test_functions" - sed 's/^#//' <"${f}" -#testABC() { echo 'ABC'; } -#test_def() { -# echo 'def' -#} -#testG3 () -#{ -# echo 'G3' -#} -#function test4() { echo '4'; } -# test5() { echo '5'; } -#some_test_function() { echo 'some func'; } -#func_with_test_vars() { -# testVariable=1234 -#} -EOF - - actual=`_shunit_extractTestFunctions "${f}"` - assertEquals 'testABC test_def testG3 test4 test5' "${actual}" -} - -#------------------------------------------------------------------------------ -# suite functions -# - -setUp() -{ - for f in ${expectedF} ${stdoutF} ${stderrF}; do - cp /dev/null ${f} - done -} - -oneTimeSetUp() -{ - th_oneTimeSetUp -} - -# load and run shUnit2 -[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 -. ${TH_SHUNIT} diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/test_runner b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/test_runner new file mode 100755 index 0000000..415cc8b --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/test_runner @@ -0,0 +1,165 @@ +#! /bin/sh +# vim:et:ft=sh:sts=2:sw=2 +# +# Unit test suite runner. +# +# Copyright 2008-2017 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shlib +# +# This script runs all the unit tests that can be found, and generates a nice +# report of the tests. +# +### ShellCheck (http://www.shellcheck.net/) +# Disable source following. +# shellcheck disable=SC1090,SC1091 +# expr may be antiquated, but it is the only solution in some cases. +# shellcheck disable=SC2003 +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 + +# Return if test_runner already loaded. +[ -z "${RUNNER_LOADED:-}" ] || return 0 +RUNNER_LOADED=0 + +RUNNER_ARGV0=`basename "$0"` +RUNNER_SHELLS='/bin/sh ash /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh' +RUNNER_TEST_SUFFIX='_test.sh' + +runner_warn() { echo "runner:WARN $*" >&2; } +runner_error() { echo "runner:ERROR $*" >&2; } +runner_fatal() { echo "runner:FATAL $*" >&2; exit 1; } + +runner_usage() { + echo "usage: ${RUNNER_ARGV0} [-e key=val ...] [-s shell(s)] [-t test(s)]" +} + +_runner_tests() { echo ./*${RUNNER_TEST_SUFFIX} |sed 's#./##g'; } +_runner_testName() { + # shellcheck disable=SC1117 + _runner_testName_=`expr "${1:-}" : "\(.*\)${RUNNER_TEST_SUFFIX}"` + if [ -n "${_runner_testName_}" ]; then + echo "${_runner_testName_}" + else + echo 'unknown' + fi + unset _runner_testName_ +} + +main() { + # Find and load versions library. + for _runner_dir_ in . ${LIB_DIR:-lib}; do + if [ -r "${_runner_dir_}/versions" ]; then + _runner_lib_dir_="${_runner_dir_}" + break + fi + done + [ -n "${_runner_lib_dir_}" ] || runner_fatal 'Unable to find versions library.' + . "${_runner_lib_dir_}/versions" || runner_fatal 'Unable to load versions library.' + unset _runner_dir_ _runner_lib_dir_ + + # Process command line flags. + env='' + while getopts 'e:hs:t:' opt; do + case ${opt} in + e) # set an environment variable + key=`expr "${OPTARG}" : '\([^=]*\)='` + val=`expr "${OPTARG}" : '[^=]*=\(.*\)'` + # shellcheck disable=SC2166 + if [ -z "${key}" -o -z "${val}" ]; then + runner_usage + exit 1 + fi + eval "${key}='${val}'" + eval "export ${key}" + env="${env:+${env} }${key}" + ;; + h) runner_usage; exit 0 ;; # help output + s) shells=${OPTARG} ;; # list of shells to run + t) tests=${OPTARG} ;; # list of tests to run + *) runner_usage; exit 1 ;; + esac + done + shift "`expr ${OPTIND} - 1`" + + # Fill shells and/or tests. + shells=${shells:-${RUNNER_SHELLS}} + [ -z "${tests}" ] && tests=`_runner_tests` + + # Error checking. + if [ -z "${tests}" ]; then + runner_error 'no tests found to run; exiting' + exit 1 + fi + + cat <&1; ) + done + done +} + +# Execute main() if this is run in standalone mode (i.e. not from a unit test). +[ -z "${SHUNIT_VERSION}" ] && main "$@" diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/README.html b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/README.html deleted file mode 100644 index 0ee9e34..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/README.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -

Please visit the shUnit2 website at http://code.google.com/p/shunit2/.

- - - - - - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.md5 deleted file mode 100644 index 6821d75..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -bdede699570ba09a8c820af2c0c3db34 shunit2-2.0.0.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.0.tgz.sig deleted file mode 100644 index e1c65e8377690ef3075320fd4efe3d1debe9f08c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-McOwIA1XvG2&hD~5dxT$0H0TslnxIA-osvqAOT4*(m;^DZsh=; XFK_NciD8FA4I65DX=XcSX=!L%y;K(( diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.md5 deleted file mode 100644 index 6f64c39..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -0741e65e1261285e1676e487077b0bf2 shunit2-2.0.1.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.1.tgz.sig deleted file mode 100644 index 4d2a403fb702e959c193c0bcd1bc5997e87f4cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-Mcf}%A1XvG2&hD~5dwhO0H0jR0KU+u1H3uD9?P0cLjb{I{XGDm XTREr}WsD`~#DG{?AS0AeVy7z{|9u#& diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.md5 deleted file mode 100644 index e31a8e0..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -ab8ba8a532da33645c9a6b8ee6783f3c shunit2-2.0.2.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.2.tgz.sig deleted file mode 100644 index d1d6d772939e525cdb06966fa53200967b63cdc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-Ml2uPA1XvG2&hD~5dz&Q0G>ZQu$h3SMfNGr{kgq8X^`%kUy%Ty X&UzmlQ}E-9okV^NuAA8~h7O!qD$pCP diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.md5 deleted file mode 100644 index 8c8c1f7..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -9c947dc31e53c7008b3e665c1e6057e0 shunit2-2.0.3.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.0.3.tgz.sig deleted file mode 100644 index 4f0d907ed40a6b555a0a264448796d2f5d3ade7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-MwYLYA1XvG2&hD~5ds>y0G~m?1`xm74nR~Uv|Qpui>d}9Cqh%Atx0=%l|Mwmc$PE|k diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.md5 deleted file mode 100644 index 02dda5c..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -8d0e775f811d2a936c5994e5a4add170 shunit2-2.1.0.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.0.tgz.sig deleted file mode 100644 index c8e726c78e9fb511c56a91f81bcd89a86a2cab54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-Ml3IfA1XvG2&hD~5ds@S0G$*rA>v{(49y5F%qpTw&{yo)gi8RR XzsYKZS8T|CPB_}=Xm5mEz43fAsJ|I$ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.md5 deleted file mode 100644 index c74bb34..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -4e6aa6d54a6beac8435bfddad8d97db3 shunit2-2.1.1.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.1.tgz.sig deleted file mode 100644 index 729adf1223d40b338f02ce01cad82dc2f392e088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-Mwd*2A1XvG2&hD~5d!@s0HD4VV=y}>e3PB*s~R4LDd$85livWK XlbXpY8@r+}Vf}6N6;>(6=)`+d?3)@u diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.md5 deleted file mode 100644 index 51376c0..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -6f7355ba449f421320045337c62652a3 shunit2-2.1.2.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.2.tgz.sig deleted file mode 100644 index a90ec02b15fa9225260be792c05f1ac397143fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWf-KLZ5-M|eOCA1XvG2&hD~5dym%0HBhOmmcnB3ckl%L@Ec%OjtyUn`Z!? XFqR)A@S;w5lu>Q2`Alx@KG4EI!Il|6 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.md5 b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.md5 deleted file mode 100644 index ee8b080..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.md5 +++ /dev/null @@ -1 +0,0 @@ -156a2491925a269fe09b70562deae091 shunit2-2.1.3.tgz diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.3.tgz.sig deleted file mode 100644 index c8a3617a8519ce2608135f4683ec5d6333c7964d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64 zcmV-G0Kfl;J_7{+NG34NA1XvG2&hD~5dt6d0G~-W)U4TJHeb`+-3AtA5R&_V?34hQ WkOzwCa@qKu!7cyQy@mAmfi|QOj2)){ diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.4.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.4.tgz.sig deleted file mode 100644 index 88ff460627461d0cf6e5a050470977bad3c08eed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmV-O0Jr~$Mg#y60ssaD0!VjPUjPaT5FaW;EeNPYw7o_Eo-cd<0z7iL0_VXSRiZ)1 eq|1a3IRKwt)wa7wO2@;#xTC%ff_7X}ebJc>zZ-7= diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.5.tgz.sig b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/releases/shunit2-2.1.5.tgz.sig deleted file mode 100644 index f97dab2e53bb9d9ea661a48fa5ed5e7f96000e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmV-O0Jr~$Mg#y60ssaD0!awe695Vc5FaW;EeNPYv^bFfpMJ;Jx but was: -ASSERT:_ASSERT_NULL_ failure -ASSERT:[-970] -ASSERT:_ASSERT_NOT_NULL_ failure -ASSERT:[-970] -ASSERT:_ASSERT_SAME_ failure -ASSERT:[-970][-970] expected: but was: -ASSERT:_ASSERT_NOT_SAME_ failure -ASSERT:[-970][-970] expected not same -ASSERT:_ASSERT_TRUE_ failure -ASSERT:[-970] -ASSERT:_ASSERT_FALSE_ failure -ASSERT:[-970] -ASSERT:_ASSERT_FALSE_ failure -ASSERT:[-970] -ASSERT:_FAIL_ failure -ASSERT:[-970] -ASSERT:_FAIL_NOT_EQUALS_ failure -ASSERT:[-970] expected: but was: -ASSERT:_FAIL_SAME_ failure -ASSERT:[-970] expected not same -ASSERT:_FAIL_NOT_SAME_ failure -ASSERT:[-970] expected: but was: - -# -# Test report -# -tests passed: 0 0% -tests failed: 12 100% -tests skipped: 0 0% -tests total: 12 100% - -shunit2_test.sh:WARN unable to run tests with the /bin/dash shell - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 12 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 12 100% - -shunit2_test.sh:WARN unable to run tests with the /bin/pdksh shell - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# - -version: 3.0.8 - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 12 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 12 100% diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Solaris-nv-77-x86.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Solaris-nv-77-x86.txt deleted file mode 100644 index ee8df72..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.4/Solaris-nv-77-x86.txt +++ /dev/null @@ -1,242 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh" - -# system info -$ date -Fri Jul 11 12:01:03 GMT 2008 -$ uname -mprsv -SunOS 5.11 snv_77 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 0 0% -tests failed: 0 0% -tests skipped: 12 100% -tests total: 12 100% - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# - -GNU bash, version 3.2.25(1)-release (i386-pc-solaris2.11) -Copyright (C) 2005 Free Software Foundation, Inc. - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 12 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 12 100% - -shunit2_test.sh:WARN unable to run tests with the /bin/dash shell - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 12 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 12 100% - -shunit2_test.sh:WARN unable to run tests with the /bin/pdksh shell - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# - -version: 4.3.4 - ---- Executing the 'asserts' test suite --- -# -# Performing tests -# -testAssertEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -# -# Test report -# -tests passed: 138 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 138 100% - ---- Executing the 'failures' test suite --- -# -# Performing tests -# -testFail -testFailNotEquals -testFailSame - -# -# Test report -# -tests passed: 45 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 45 100% - ---- Executing the 'macros' test suite --- -# -# Performing tests -# -testLineNo - -# -# Test report -# -tests passed: 12 100% -tests failed: 0 0% -tests skipped: 0 0% -tests total: 12 100% diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Cygwin-5.1.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Cygwin-5.1.txt deleted file mode 100755 index 391bdb4..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Cygwin-5.1.txt +++ /dev/null @@ -1,295 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Wed Oct 29 00:37:38 GMTST 2008 -$ uname -mprsv -CYGWIN_NT-5.1 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.39(20)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - -shunit2_test.sh:WARN unable to run tests with the /bin/dash shell - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-6.06.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-6.06.txt deleted file mode 100644 index e609394..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-6.06.txt +++ /dev/null @@ -1,294 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Tue Oct 28 19:28:31 GMT 2008 -$ uname -mprsv -Linux 2.6.18.5-gg38server-xenU-3.1 #1 SMP Fri Jul 18 13:02:34 IST 2008 x86_64 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.1.17(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28-r--$ - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.2.5 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-8.04.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-8.04.txt deleted file mode 100644 index 2e88cec..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Linux-Ubuntu-8.04.txt +++ /dev/null @@ -1,349 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Mon Oct 27 18:34:47 UTC 2008 -$ uname -mprsv -Linux 2.6.24-21-generic #1 SMP Mon Aug 25 17:32:09 UTC 2008 i686 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.39(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.4-8ubuntu1 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Mac_OS_X-10.5.5.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Mac_OS_X-10.5.5.txt deleted file mode 100644 index 6159b4a..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Mac_OS_X-10.5.5.txt +++ /dev/null @@ -1,239 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Mon Oct 27 18:32:53 GMT 2008 -$ uname -mprsv -Darwin 9.5.0 Darwin Kernel Version 9.5.0: Wed Sep 3 11:29:43 PDT 2008; root:xnu-1228.7.58~1/RELEASE_I386 i386 i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.17(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 - -Ran 2 tests. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-11.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-11.txt deleted file mode 100644 index 4012ef1..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-11.txt +++ /dev/null @@ -1,251 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Sat Jul 12 11:43:59 GMT 2008 -$ uname -mprsv -SunOS 5.11 snv_77 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.25(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-9.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-9.txt deleted file mode 100644 index 3e22e94..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.5/Solaris-9.txt +++ /dev/null @@ -1,276 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh" -tests=" shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh" - -# system info -$ date -Tue Oct 28 23:46:44 GMT 2008 -$ uname -mprsv -SunOS 5.9 Generic_117172-08 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 2.05.0(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -ASSERT:_ASSERT_EQUALS_ failure -ASSERT:_ASSERT_EQUALS_ w/ msg failure -testAssertNotEquals -ASSERT:_ASSERT_NOT_EQUALS_ failure -ASSERT:_ASSERT_NOT_EQUALS_ w/ msg failure -testSame -ASSERT:_ASSERT_SAME_ failure -ASSERT:_ASSERT_SAME_ w/ msg failure -testNotSame -ASSERT:_ASSERT_NOT_SAME_ failure -ASSERT:_ASSERT_NOT_SAME_ w/ msg failure -testNull -ASSERT:_ASSERT_NULL_ failure -ASSERT:_ASSERT_NULL_ w/ msg failure -testNotNull -ASSERT:_ASSERT_NOT_NULL_ failure -ASSERT:_ASSERT_NOT_NULL_ w/ msg failure -ASSERT:[-1045] some msg -testAssertTrue -ASSERT:_ASSERT_TRUE_ failure -ASSERT:_ASSERT_TRUE_ w/ msg failure -testAssertFalse -ASSERT:_ASSERT_FALSE_ failure -ASSERT:_ASSERT_FALSE_ w/ msg failure -testFail -ASSERT:_FAIL_ failure -ASSERT:_FAIL_ w/ msg failure -testFailNotEquals -ASSERT:_FAIL_NOT_EQUALS_ failure -ASSERT:_FAIL_NOT_EQUALS_ w/ msg failure -testFailSame -ASSERT:_FAIL_SAME_ failure -ASSERT:_FAIL_SAME_ w/ msg failure -testFailNotSame -ASSERT:_FAIL_NOT_SAME_ failure -ASSERT:_FAIL_NOT_SAME_ w/ msg failure - -Ran 12 tests. - -FAILED (failures=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 3.0.8 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 - -Ran 2 tests. - -FAILED (failures=3) diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Cygwin-1.7.9.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Cygwin-1.7.9.txt deleted file mode 100644 index 757c5b1..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Cygwin-1.7.9.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Thu Apr 28 00:23:02 GMTDT 2011 - -$ uname -mprsv -CYGWIN_NT-5.1 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 4.1.10(4)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.11 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-10.04.2-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-10.04.2-LTS.txt deleted file mode 100644 index d450c3c..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-10.04.2-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Wed Apr 27 23:40:39 UTC 2011 - -$ uname -mprsv -Linux 2.6.32-31-server #61-Ubuntu SMP Fri Apr 8 19:44:42 UTC 2011 x86_64 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 4.1.5(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.5.1-3ubuntu2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: JM-93t+-2009-05-01-$ - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.10 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-6.06.2-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-6.06.2-LTS.txt deleted file mode 100644 index c48a7a5..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-6.06.2-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Wed Apr 27 16:24:19 MDT 2011 - -$ uname -mprsv -Linux 2.6.15-57-server #1 SMP Mon Feb 28 22:43:23 UTC 2011 i686 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.1.17(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.3-1ubuntu1 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.2.5 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-8.04.4-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-8.04.4-LTS.txt deleted file mode 100644 index 9865b16..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Linux-Ubuntu-8.04.4-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Wed Apr 27 17:24:17 CDT 2011 - -$ uname -mprsv -Linux 2.6.24-29-server #1 SMP Wed Mar 16 19:04:28 UTC 2011 x86_64 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.39(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.4-8ubuntu1.1 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Mac_OS_X-10.6.7.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Mac_OS_X-10.6.7.txt deleted file mode 100644 index c706bc4..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Mac_OS_X-10.6.7.txt +++ /dev/null @@ -1,284 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Thu Apr 28 00:42:17 IST 2011 - -$ uname -mprsv -Darwin 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.48(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.9 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/OpenSolaris-2009.06.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/OpenSolaris-2009.06.txt deleted file mode 100644 index 9d1a309..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/OpenSolaris-2009.06.txt +++ /dev/null @@ -1,227 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Thu Apr 28 01:49:38 IST 2011 - -$ uname -mprsv -SunOS 5.11 snv_111b i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.25(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: 2008-11-04 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-8u7.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-8u7.txt deleted file mode 100644 index a41cc06..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-8u7.txt +++ /dev/null @@ -1,321 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Wed Apr 27 23:37:38 IST 2011 - -$ uname -mprsv -SunOS 5.8 Generic_108529-13 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 2.03.0(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -ASSERT:_ASSERT_EQUALS_ failure -ASSERT:_ASSERT_EQUALS_ w/ msg failure -testAssertNotEquals -ASSERT:_ASSERT_NOT_EQUALS_ failure -ASSERT:_ASSERT_NOT_EQUALS_ w/ msg failure -testSame -ASSERT:_ASSERT_SAME_ failure -ASSERT:_ASSERT_SAME_ w/ msg failure -testNotSame -ASSERT:_ASSERT_NOT_SAME_ failure -ASSERT:_ASSERT_NOT_SAME_ w/ msg failure -testNull -ASSERT:_ASSERT_NULL_ failure -ASSERT:_ASSERT_NULL_ w/ msg failure -testNotNull -ASSERT:_ASSERT_NOT_NULL_ failure -ASSERT:_ASSERT_NOT_NULL_ w/ msg failure -ASSERT:[-875] some msg -testAssertTrue -ASSERT:_ASSERT_TRUE_ failure -ASSERT:_ASSERT_TRUE_ w/ msg failure -testAssertFalse -ASSERT:_ASSERT_FALSE_ failure -ASSERT:_ASSERT_FALSE_ w/ msg failure -testFail -ASSERT:_FAIL_ failure -ASSERT:_FAIL_ w/ msg failure -testFailNotEquals -ASSERT:_FAIL_NOT_EQUALS_ failure -ASSERT:_FAIL_NOT_EQUALS_ w/ msg failure -testFailSame -ASSERT:_FAIL_SAME_ failure -ASSERT:_FAIL_SAME_ w/ msg failure -testFailNotSame -ASSERT:_FAIL_NOT_SAME_ failure -ASSERT:_FAIL_NOT_SAME_ w/ msg failure - -Ran 12 tests. - -FAILED (failures=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 3.0.6 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u6.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u6.txt deleted file mode 100644 index 11daebb..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u6.txt +++ /dev/null @@ -1,321 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Wed Apr 27 23:17:50 GMT 2011 - -$ uname -mprsv -SunOS 5.9 Generic_117172-08 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 2.05.0(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -ASSERT:_ASSERT_EQUALS_ failure -ASSERT:_ASSERT_EQUALS_ w/ msg failure -testAssertNotEquals -ASSERT:_ASSERT_NOT_EQUALS_ failure -ASSERT:_ASSERT_NOT_EQUALS_ w/ msg failure -testSame -ASSERT:_ASSERT_SAME_ failure -ASSERT:_ASSERT_SAME_ w/ msg failure -testNotSame -ASSERT:_ASSERT_NOT_SAME_ failure -ASSERT:_ASSERT_NOT_SAME_ w/ msg failure -testNull -ASSERT:_ASSERT_NULL_ failure -ASSERT:_ASSERT_NULL_ w/ msg failure -testNotNull -ASSERT:_ASSERT_NOT_NULL_ failure -ASSERT:_ASSERT_NOT_NULL_ w/ msg failure -ASSERT:[-875] some msg -testAssertTrue -ASSERT:_ASSERT_TRUE_ failure -ASSERT:_ASSERT_TRUE_ w/ msg failure -testAssertFalse -ASSERT:_ASSERT_FALSE_ failure -ASSERT:_ASSERT_FALSE_ w/ msg failure -testFail -ASSERT:_FAIL_ failure -ASSERT:_FAIL_ w/ msg failure -testFailNotEquals -ASSERT:_FAIL_NOT_EQUALS_ failure -ASSERT:_FAIL_NOT_EQUALS_ w/ msg failure -testFailSame -ASSERT:_FAIL_SAME_ failure -ASSERT:_FAIL_SAME_ w/ msg failure -testFailNotSame -ASSERT:_FAIL_NOT_SAME_ failure -ASSERT:_FAIL_NOT_SAME_ w/ msg failure - -Ran 12 tests. - -FAILED (failures=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 3.0.8 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u8.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u8.txt deleted file mode 100644 index db2661c..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.6/Solaris-9u8.txt +++ /dev/null @@ -1,321 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Fri Apr 22 11:25:16 GMT 2011 - -$ uname -mprsv -SunOS 5.9 Generic_118559-11 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 2.05.0(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -ASSERT:_ASSERT_EQUALS_ failure -ASSERT:_ASSERT_EQUALS_ w/ msg failure -testAssertNotEquals -ASSERT:_ASSERT_NOT_EQUALS_ failure -ASSERT:_ASSERT_NOT_EQUALS_ w/ msg failure -testSame -ASSERT:_ASSERT_SAME_ failure -ASSERT:_ASSERT_SAME_ w/ msg failure -testNotSame -ASSERT:_ASSERT_NOT_SAME_ failure -ASSERT:_ASSERT_NOT_SAME_ w/ msg failure -testNull -ASSERT:_ASSERT_NULL_ failure -ASSERT:_ASSERT_NULL_ w/ msg failure -testNotNull -ASSERT:_ASSERT_NOT_NULL_ failure -ASSERT:_ASSERT_NOT_NULL_ w/ msg failure -ASSERT:[-875] some msg -testAssertTrue -ASSERT:_ASSERT_TRUE_ failure -ASSERT:_ASSERT_TRUE_ w/ msg failure -testAssertFalse -ASSERT:_ASSERT_FALSE_ failure -ASSERT:_ASSERT_FALSE_ w/ msg failure -testFail -ASSERT:_FAIL_ failure -ASSERT:_FAIL_ w/ msg failure -testFailNotEquals -ASSERT:_FAIL_NOT_EQUALS_ failure -ASSERT:_FAIL_NOT_EQUALS_ w/ msg failure -testFailSame -ASSERT:_FAIL_SAME_ failure -ASSERT:_FAIL_SAME_ w/ msg failure -testFailNotSame -ASSERT:_FAIL_NOT_SAME_ failure -ASSERT:_FAIL_NOT_SAME_ w/ msg failure - -Ran 12 tests. - -FAILED (failures=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 3.0.8 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-10.04.4-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-10.04.4-LTS.txt deleted file mode 100644 index 699662f..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-10.04.4-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Mon May 20 17:55:52 CEST 2013 - -$ uname -mprsv -Linux 2.6.32-45-server #101-Ubuntu SMP Mon Dec 3 15:54:27 UTC 2012 x86_64 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 4.1.5(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.5.1-3ubuntu2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: JM-93t+-2009-05-01-$ - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.10 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-12.04.2-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-12.04.2-LTS.txt deleted file mode 100644 index 857fb74..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-12.04.2-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Mon May 20 16:57:14 CEST 2013 - -$ uname -mprsv -Linux 3.2.0-40-generic #64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 x86_64 x86_64 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 4.2.25(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.7-2ubuntu2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: JM-93u-2011-02-08-$ - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.17 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-8.04.4-LTS.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-8.04.4-LTS.txt deleted file mode 100644 index e3ec84e..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Linux-Ubuntu-8.04.4-LTS.txt +++ /dev/null @@ -1,416 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Mon May 20 17:55:54 CEST 2013 - -$ uname -mprsv -Linux 2.6.24-32-server #1 SMP Mon Dec 3 15:54:12 UTC 2012 x86_64 unknown - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.39(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/dash -# -shell name: dash -shell version: 0.5.4-8ubuntu1.1 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-1993-12-28 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/pdksh -# -shell name: pdksh -shell version: v5.2.14-99/07/13.2 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.3.4 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -OK - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/OpenSolaris-2009.06(snv_111b).txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/OpenSolaris-2009.06(snv_111b).txt deleted file mode 100644 index e4df26e..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/OpenSolaris-2009.06(snv_111b).txt +++ /dev/null @@ -1,227 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Mon May 20 17:55:59 CEST 2013 - -$ uname -mprsv -SunOS 5.11 snv_111b i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.25(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:expected a non-zero exit value -ASSERT:assert message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - diff --git a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Solaris-10u10.txt b/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Solaris-10u10.txt deleted file mode 100644 index 9367c5f..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/shunit2/website/testresults/2.1.7/Solaris-10u10.txt +++ /dev/null @@ -1,296 +0,0 @@ -#------------------------------------------------------------------------------ -# System data -# - -# test run info -shells: /bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh -tests: shunit2_test_asserts.sh shunit2_test_failures.sh shunit2_test_macros.sh shunit2_test_misc.sh shunit2_test_standalone.sh - -# system info -$ date -Mon May 20 17:56:24 CEST 2013 - -$ uname -mprsv -SunOS 5.10 Generic_147441-01 i86pc i386 - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/sh -# -shell name: sh -shell version: unknown - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK (skipped=24) - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/bash -# -shell name: bash -shell version: 3.2.51(1)-release - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/ksh -# -shell name: ksh -shell version: M-11/16/88i - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK - - - -#------------------------------------------------------------------------------ -# Running the test suite with /bin/zsh -# -shell name: zsh -shell version: 4.2.1 - ---- Executing the 'asserts' test suite --- -testAssertEquals -testAssertNotEquals -testAssertSame -testAssertNotSame -testAssertNull -testAssertNotNull -testAssertTrue -testAssertFalse - -Ran 8 tests. - -OK - ---- Executing the 'failures' test suite --- -testFail -testFailNotEquals -testFailSame - -Ran 3 tests. - -OK - ---- Executing the 'macros' test suite --- -testAssertEquals -testAssertNotEquals -testSame -testNotSame -testNull -testNotNull -testAssertTrue -testAssertFalse -testFail -testFailNotEquals -testFailSame -testFailNotSame - -Ran 12 tests. - -OK - ---- Executing the 'misc' test suite --- -testUnboundVariable -ASSERT:assert message was not generated -ASSERT:test count message was not generated -ASSERT:failure message was not generated -testIssue7 -testPrepForSourcing -testEscapeCharInStr -testEscapeCharInStr_specialChars -testExtractTestFunctions - -Ran 6 tests. - -FAILED (failures=3) - ---- Executing the 'standalone' test suite --- -testStandalone - -Ran 1 test. - -OK diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test-in-docker b/.zprezto/modules/prompt/external/powerlevel9k/test-in-docker index 3c7255e..0ed1254 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test-in-docker +++ b/.zprezto/modules/prompt/external/powerlevel9k/test-in-docker @@ -2,10 +2,12 @@ set -eu -# The default ZSH to use. -default_version='4.3.11' +# The default ZSH to use; it can just be the first few characters. +# This should be the oldest version we support. +default_version='4.' setopt extended_glob glob_subst numeric_glob_sort +setopt warn_create_global warn_nested_var 2> /dev/null cd "${${(%):-%x}:A:h}" # TODO: Crazy Logic to munge TERM to something supported in Ubuntu 14.04 @@ -15,13 +17,18 @@ term=screen-256color # ...see Modifiers in zshexpn(1) for details. # List of ZSH versions -typeset -a versions +typeset -aU versions versions=( docker/base-*/Dockerfile(N.on:h:t:s/base-//) ) +typeset -r versions # List of frameworks -typeset -a frameworks +typeset -aU frameworks frameworks=( docker/*/Dockerfile(N.on:h:t) ) -frameworks=${(@)frameworks:#base-*} +for i in {$#frameworks..1}; do + # Remove all base entries + [[ "${frameworks[$i]}" == base-* ]] && frameworks[$i]=() +done +typeset -r frameworks # Known Issues typeset -A known_issues @@ -30,6 +37,7 @@ known_issues["4.3.11-zim"]="BROKEN: Zim wants ZSH 5.2 or newer." known_issues["5.0.3-zim"]="DEPRECATED: Zim wants ZSH 5.2 or newer." known_issues["5.1.1-zim"]="DEPRECATED: Zim wants ZSH 5.2 or newer." known_issues["4.3.11-zulu"]="Zulu doesn't work; it needs a newer version of git." +typeset -r known_issues err() { @@ -65,6 +73,14 @@ check_for_known_issues() { fi } +cmd() { + if (( dry_run )); then + echo "${(@q)*}" 1>&2 + else + "${(@)*}" + fi +} + build_and_run() { local version="$1" local framework="$2" @@ -75,14 +91,14 @@ build_and_run() { print -P "%F{green}Preparing containers...%f" echo -n "p9k:base-${version}: " - docker build \ + cmd docker build \ --quiet \ --tag "p9k:base-${version}" \ --file "docker/base-${version}/Dockerfile" \ . echo -n "p9k:${version}-${framework}: " - docker build \ + cmd docker build \ --quiet \ --build-arg="base=base-${version}" \ --tag "p9k:${version}-${framework}" \ @@ -90,7 +106,7 @@ build_and_run() { . print -P "%F{green}Starting ${name} container...%f" - exec docker run \ + cmd docker run \ --rm \ --interactive \ --tty \ @@ -105,9 +121,10 @@ show_help() { echo echo "Loads up a docker image with powershell9k configured in " echo - echo " --frameworks Lists all available frameworks, newline separated." - echo " --versions Lists all available ZSH versions, newline separated." - echo " --zsh VER Uses ZSH with version VER." + echo " -f --frameworks Lists all available frameworks, newline separated." + echo " -v --versions Lists all available ZSH versions, newline separated." + echo " -z --zsh VER Uses ZSH with version VER." + echo " -n --dry-run Just prints the docker commands that would be run." echo " --help You're soaking in it." echo echo "ZSH versions:" @@ -128,8 +145,9 @@ if (( $# == 0 )); then fi # Parse flags and such. -use_version=$default_version -use_framework= +asked_for_version=$default_version +asked_for_framework= +dry_run=0 while (( $# > 0 )); do case "$1" in -f | --frameworks ) @@ -142,13 +160,9 @@ while (( $# > 0 )); do ;; -z | --zsh ) shift - local v="$(resolve_version "$1")" - if [[ -n "$v" ]]; then - use_version=$v - else - err "No such ZSH version '${1}'" - fi + asked_for_version=$1 ;; + -n | --dry-run ) dry_run=1 ;; -h | --help ) show_help exit @@ -159,21 +173,28 @@ while (( $# > 0 )); do exit 1 ;; * ) - if [[ -z "$use_framework" ]]; then - local f="$(resolve_framework "$1")" - if [[ -n "$f" ]]; then - use_framework=$f - else - err "No such framework '${1}'" - fi + if [[ -z "$asked_for_framework" ]]; then + asked_for_framework=$1 else - err "You can only specify one framework at a time; you already specified '${use_framework}'" + err "You can only specify one framework at a time; you already specified '${asked_for_framework}'" fi ;; esac shift done +typeset -r asked_for_version asked_for_framework + +typeset -r use_version="$(resolve_version "${asked_for_version}")" +if [[ -z "$use_version" ]]; then + err "No such ZSH version '${asked_for_version}'" +fi + +typeset -r use_framework="$(resolve_framework "${asked_for_framework}")" +if [[ -z "$use_framework" ]]; then + err "No such framework '${asked_for_framework}'" +fi + build_and_run "$use_version" "$use_framework" # EOF diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/core/color_overriding.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/core/color_overriding.spec new file mode 100755 index 0000000..f2c3d89 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/core/color_overriding.spec @@ -0,0 +1,62 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme +} + +function testDynamicColoringOfSegmentsWork() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date) + local POWERLEVEL9K_DATE_ICON="date-icon" + local POWERLEVEL9K_DATE_BACKGROUND='red' + + assertEquals "%K{001} %F{000}date-icon %f%F{000}%D{%d.%m.%y} %k%F{001}%f " "$(build_left_prompt)" +} + +function testDynamicColoringOfVisualIdentifiersWork() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date) + local POWERLEVEL9K_DATE_ICON="date-icon" + local POWERLEVEL9K_DATE_VISUAL_IDENTIFIER_COLOR='green' + + assertEquals "%K{007} %F{002}date-icon %f%F{000}%D{%d.%m.%y} %k%F{007}%f " "$(build_left_prompt)" +} + +function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date) + local POWERLEVEL9K_DATE_ICON="date-icon" + local POWERLEVEL9K_DATE_VISUAL_IDENTIFIER_COLOR='green' + local POWERLEVEL9K_DATE_FOREGROUND='red' + local POWERLEVEL9K_DATE_BACKGROUND='yellow' + + assertEquals "%K{003} %F{002}date-icon %f%F{001}%D{%d.%m.%y} %k%F{003}%f " "$(build_left_prompt)" +} + +function testColorOverridingOfStatefulSegment() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(host) + local POWERLEVEL9K_SSH_ICON="ssh-icon" + local POWERLEVEL9K_HOST_REMOTE_BACKGROUND='red' + local POWERLEVEL9K_HOST_REMOTE_FOREGROUND='green' + # Provoke state + local SSH_CLIENT="x" + + assertEquals "%K{001} %F{002}ssh-icon %f%F{002}%m %k%F{001}%f " "$(build_left_prompt)" +} + +function testColorOverridingOfCustomSegment() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_CUSTOM_WORLD_ICON='CW' + local POWERLEVEL9K_CUSTOM_WORLD_VISUAL_IDENTIFIER_COLOR='green' + local POWERLEVEL9K_CUSTOM_WORLD_FOREGROUND='red' + local POWERLEVEL9K_CUSTOM_WORLD_BACKGROUND='red' + + assertEquals "%K{001} %F{002}CW %f%F{001}world %k%F{001}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/core/joining_segments.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/core/joining_segments.spec new file mode 100755 index 0000000..18213a5 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/core/joining_segments.spec @@ -0,0 +1,187 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme +} + +function testLeftNormalSegmentsShouldNotBeJoined() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3 custom_world4_joined custom_world5 custom_world6) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD6="echo world6" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000} %F{000}world2 %K{007}%F{000} %F{000}world4 %K{007}%F{000} %F{000}world6 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftJoinedSegments() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000}%F{000}world2 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftTransitiveJoinedSegments() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo world3" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000}%F{000}world2 %K{007}%F{000}%F{000}world3 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftTransitiveJoiningWithConditionalJoinedSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined custom_world4_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000}%F{000}world2 %K{007}%F{000}%F{000}world4 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftPromotingSegmentWithConditionalPredecessor() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo world3" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000} %F{000}world3 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftPromotingSegmentWithJoinedConditionalPredecessor() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000} %F{000}world4 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftPromotingSegmentWithDeepJoinedConditionalPredecessor() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined custom_world5_joined custom_world6_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD6="echo world6" + + assertEquals "%K{007} %F{000}world1 %K{007}%F{000} %F{000}world4 %K{007}%F{000}%F{000}world6 %k%F{007}%f " "$(build_left_prompt)" +} + +function testLeftJoiningBuiltinSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version php_version_joined) + alias php="echo PHP 1.2.3" + + assertEquals "%K{013} %F{255}PHP 1.2.3 %K{013}%F{255}%F{255}PHP 1.2.3 %k%F{013}%f " "$(build_left_prompt)" + + unalias php +} + +function testRightNormalSegmentsShouldNotBeJoined() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3 custom_world4 custom_world5_joined custom_world6) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD6="echo world6" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%F{000}%f%K{007}%F{000} world2 %f%F{000}%f%K{007}%F{000} world4 %f%F{000}%f%K{007}%F{000} world6%E" "$(build_right_prompt)" +} + +function testRightJoinedSegments() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%K{007}%F{000}world2%E" "$(build_right_prompt)" +} + +function testRightTransitiveJoinedSegments() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo world3" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%K{007}%F{000}world2 %f%K{007}%F{000}world3%E" "$(build_right_prompt)" +} + +function testRightTransitiveJoiningWithConditionalJoinedSegment() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined custom_world4_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo world2" + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%K{007}%F{000}world2 %f%K{007}%F{000}world4%E" "$(build_right_prompt)" +} + +function testRightPromotingSegmentWithConditionalPredecessor() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo world3" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%F{000}%f%K{007}%F{000} world3%E" "$(build_right_prompt)" +} + +function testRightPromotingSegmentWithJoinedConditionalPredecessor() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%F{000}%f%K{007}%F{000} world4%E" "$(build_right_prompt)" +} + +function testRightPromotingSegmentWithDeepJoinedConditionalPredecessor() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined custom_world5_joined custom_world6_joined) + local POWERLEVEL9K_CUSTOM_WORLD1="echo world1" + local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD4="echo world4" + local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions + local POWERLEVEL9K_CUSTOM_WORLD6="echo world6" + + assertEquals "%F{007}%f%K{007}%F{000} world1 %f%F{000}%f%K{007}%F{000} world4 %f%K{007}%F{000}world6%E" "$(build_right_prompt)" +} + +function testRightJoiningBuiltinSegmentWorks() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(php_version php_version_joined) + alias php="echo PHP 1.2.3" + + assertEquals "%F{013}%f%K{013}%F{255} PHP 1.2.3 %f%K{013}%F{255}PHP 1.2.3%E" "$(build_right_prompt)" + + unalias php +} +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/core/prompt.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/core/prompt.spec new file mode 100755 index 0000000..47d3ac7 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/core/prompt.spec @@ -0,0 +1,104 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme +} + +function testSegmentOnRightSide() { + # Reset RPROMPT, so a running P9K does not interfere with the test + local RPROMPT= + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD2='echo world2' + + powerlevel9k_prepare_prompts + + local reset_attributes=$'\e[00m' + assertEquals "%f%b%k%F{007}%f%K{007}%F{000} world1 %f%F{000}%f%K{007}%F{000} world2%E%{${reset_attributes}%}" "${(e)RPROMPT}" +} + +function testDisablingRightPrompt() { + # Reset RPROMPT, so a running P9K does not interfere with the test + local RPROMPT= + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD2='echo world2' + local POWERLEVEL9K_DISABLE_RPROMPT=true + + powerlevel9k_prepare_prompts + + assertEquals "" "${(e)RPROMPT}" +} + +function testLeftMultilinePrompt() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_PROMPT_ON_NEWLINE=true + + powerlevel9k_prepare_prompts + + local nl=$'\n' + assertEquals "╭─%f%b%k%K{007} %F{000}world1 %k%F{007}%f ${nl}╰─ " "${(e)PROMPT}" +} + +function testRightPromptOnSameLine() { + # Reset RPROMPT, so a running P9K does not interfere with the test + local RPROMPT= + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + + local POWERLEVEL9K_PROMPT_ON_NEWLINE=true + local POWERLEVEL9K_RPROMPT_ON_NEWLINE=false # We want the RPROMPT on the same line as our left prompt + + # Skip test, as this cannot be tested properly. + # The "go one line up" instruction does not get + # printed as real characters in RPROMPT. + # On command line the assert statement produces + # a visually identical output as we expect, but + # it fails anyway. :( + startSkipping + + powerlevel9k_prepare_prompts + assertEquals "%{\e[1A%}%F{007}%f%K{007}%F{000} world1 %f%{\e[1B%}" "${(e)RPROMPT}" +} + +function testPrefixingFirstLineOnLeftPrompt() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + + local POWERLEVEL9K_PROMPT_ON_NEWLINE=true + local POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='XXX' + + powerlevel9k_prepare_prompts + + local nl=$'\n' + assertEquals "XXX%f%b%k%K{007} %F{000}world1 %k%F{007}%f ${nl}╰─ " "${(e)PROMPT}" +} + +function testPrefixingSecondLineOnLeftPrompt() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + + local POWERLEVEL9K_PROMPT_ON_NEWLINE=true + local POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='XXX' + + powerlevel9k_prepare_prompts + + local nl=$'\n' + assertEquals "╭─%f%b%k%K{007} %F{000}world1 %k%F{007}%f ${nl}XXX" "${(e)PROMPT}" +} + +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/core/visual_identifier.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/core/visual_identifier.spec new file mode 100755 index 0000000..c6c6bef --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/core/visual_identifier.spec @@ -0,0 +1,60 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + source functions/* +} + +function testOverwritingIconsWork() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here' + + assertEquals "%K{007} %F{000}icon-here %f%F{000}world1 %k%F{007}%f " "$(build_left_prompt)" +} + +function testVisualIdentifierAppearsBeforeSegmentContentOnLeftSegments() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here' + + assertEquals "%K{007} %F{000}icon-here %f%F{000}world1 %k%F{007}%f " "$(build_left_prompt)" +} + +function testVisualIdentifierAppearsAfterSegmentContentOnRightSegments() { + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here' + + assertEquals "%F{007}%f%K{007}%F{000} world1%F{000} icon-here%f%E" "$(build_right_prompt)" +} + +function testVisualIdentifierPrintsNothingIfNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + + assertEquals "%K{007} %F{000}world1 %k%F{007}%f " "$(build_left_prompt)" +} + +function testVisualIdentifierIsPrintedInNumericalColorCode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1) + local POWERLEVEL9K_CUSTOM_WORLD1='echo world1' + local POWERLEVEL9K_CUSTOM_WORLD1_ICON="xxx" + local POWERLEVEL9K_CUSTOM_WORLD1_VISUAL_IDENTIFIER_COLOR="purple3" + + assertEquals "%K{007} %F{056}xxx %f%F{000}world1 %k%F{007}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/colors.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/colors.spec index 61a4008..4ee7120 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/colors.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/colors.spec @@ -22,6 +22,10 @@ function testGetColorCodeWithNumericalColor() { assertEquals '002' "$(getColorCode '002')" } +function testGetColorCodeWithNoneColor() { + assertEquals 'none' "$(getColorCode 'NONE')" +} + function testIsSameColorComparesAnsiForegroundAndNumericalColorCorrectly() { assertTrue "isSameColor 'green' '002'" } @@ -30,13 +34,34 @@ function testIsSameColorComparesAnsiBackgroundAndNumericalColorCorrectly() { assertTrue "isSameColor 'bg-green' '002'" } -function testIsSameColorComparesNumericalBackgroundAndNumericalColorCorrectly() { - assertTrue "isSameColor '010' '2'" +function testIsSameColorComparesShortCodesCorrectly() { + assertTrue "isSameColor '002' '2'" } function testIsSameColorDoesNotYieldNotEqualColorsTruthy() { assertFalse "isSameColor 'green' '003'" } +function testIsSameColorHandlesNoneCorrectly() { + assertTrue "isSameColor 'none' 'NOnE'" +} -source shunit2/source/2.1/src/shunit2 +function testIsSameColorCompareTwoNoneColorsCorrectly() { + assertTrue "isSameColor 'none' 'none'" +} + +function testIsSameColorComparesColorWithNoneCorrectly() { + assertFalse "isSameColor 'green' 'none'" +} + +function testBrightColorsWork() { + # We had some code in the past that equalized bright colors + # with normal ones. This code is now gone, and this test should + # ensure that all input channels for bright colors are handled + # correctly. + assertTrue "isSameColor 'cyan' '006'" + assertEquals '006' "$(getColorCode 'cyan')" + assertEquals '006' "$(getColor 'cyan')" +} + +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/icons.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/icons.spec index c8d8864..ec0cb1f 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/icons.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/icons.spec @@ -10,21 +10,15 @@ function setUp() { _OLD_LC_CTYPE="${LC_CTYPE}" # Reset actual LC_CTYPE unset LC_CTYPE - - # Store old P9K mode - _OLD_P9K_MODE="${POWERLEVEL9K_MODE}" } function tearDown() { # Restore LC_CTYPE LC_CTYPE="${_OLD_LC_CTYPE}" - - # Restore old P9K mode - POWERLEVEL9K_MODE="${_OLD_P9K_MODE}" } function testLcCtypeIsSetCorrectlyInDefaultMode() { - POWERLEVEL9K_MODE="default" + local POWERLEVEL9K_MODE="default" # Load Powerlevel9k source functions/icons.zsh @@ -32,7 +26,7 @@ function testLcCtypeIsSetCorrectlyInDefaultMode() { } function testLcCtypeIsSetCorrectlyInAwesomePatchedMode() { - POWERLEVEL9K_MODE="awesome-patched" + local POWERLEVEL9K_MODE="awesome-patched" # Load Powerlevel9k source functions/icons.zsh @@ -40,7 +34,7 @@ function testLcCtypeIsSetCorrectlyInAwesomePatchedMode() { } function testLcCtypeIsSetCorrectlyInAwesomeFontconfigMode() { - POWERLEVEL9K_MODE="awesome-fontconfig" + local POWERLEVEL9K_MODE="awesome-fontconfig" # Load Powerlevel9k source functions/icons.zsh @@ -48,7 +42,7 @@ function testLcCtypeIsSetCorrectlyInAwesomeFontconfigMode() { } function testLcCtypeIsSetCorrectlyInNerdfontFontconfigMode() { - POWERLEVEL9K_MODE="nerdfont-fontconfig" + local POWERLEVEL9K_MODE="nerdfont-fontconfig" # Load Powerlevel9k source functions/icons.zsh @@ -56,7 +50,7 @@ function testLcCtypeIsSetCorrectlyInNerdfontFontconfigMode() { } function testLcCtypeIsSetCorrectlyInFlatMode() { - POWERLEVEL9K_MODE="flat" + local POWERLEVEL9K_MODE="flat" # Load Powerlevel9k source functions/icons.zsh @@ -64,7 +58,7 @@ function testLcCtypeIsSetCorrectlyInFlatMode() { } function testLcCtypeIsSetCorrectlyInCompatibleMode() { - POWERLEVEL9K_MODE="compatible" + local POWERLEVEL9K_MODE="compatible" # Load Powerlevel9k source functions/icons.zsh @@ -76,7 +70,7 @@ function testLcCtypeIsSetCorrectlyInCompatibleMode() { function testAllIconsAreDefinedLikeInDefaultMode() { # Always compare against this mode local _P9K_TEST_MODE="default" - POWERLEVEL9K_MODE="${_P9K_TEST_MODE}" + local POWERLEVEL9K_MODE="${_P9K_TEST_MODE}" source functions/icons.zsh # _ICONS_UNDER_TEST is an array of just the keys of $icons. # We later check via (r) "subscript" flag that our key @@ -121,6 +115,15 @@ function testAllIconsAreDefinedLikeInDefaultMode() { assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" done + # Switch to "nerdfont-complete" mode + POWERLEVEL9K_MODE="nerdfont-complete" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + # Switch to "flat" mode POWERLEVEL9K_MODE="flat" source functions/icons.zsh @@ -148,7 +151,7 @@ function testAllIconsAreDefinedLikeInDefaultMode() { function testAllIconsAreDefinedLikeInAwesomePatchedMode() { # Always compare against this mode local _P9K_TEST_MODE="awesome-patched" - POWERLEVEL9K_MODE="$_P9K_TEST_MODE" + local POWERLEVEL9K_MODE="$_P9K_TEST_MODE" source functions/icons.zsh # _ICONS_UNDER_TEST is an array of just the keys of $icons. # We later check via (r) "subscript" flag that our key @@ -193,6 +196,15 @@ function testAllIconsAreDefinedLikeInAwesomePatchedMode() { assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" done + # Switch to "nerdfont-complete" mode + POWERLEVEL9K_MODE="nerdfont-complete" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + # Switch to "flat" mode POWERLEVEL9K_MODE="flat" source functions/icons.zsh @@ -220,7 +232,7 @@ function testAllIconsAreDefinedLikeInAwesomePatchedMode() { function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() { # Always compare against this mode local _P9K_TEST_MODE="awesome-fontconfig" - POWERLEVEL9K_MODE="$_P9K_TEST_MODE" + local POWERLEVEL9K_MODE="$_P9K_TEST_MODE" source functions/icons.zsh # _ICONS_UNDER_TEST is an array of just the keys of $icons. # We later check via (r) "subscript" flag that our key @@ -265,6 +277,15 @@ function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() { assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" done + # Switch to "nerdfont-complete" mode + POWERLEVEL9K_MODE="nerdfont-complete" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + # Switch to "flat" mode POWERLEVEL9K_MODE="flat" source functions/icons.zsh @@ -292,7 +313,7 @@ function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() { function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() { # Always compare against this mode local _P9K_TEST_MODE="nerdfont-fontconfig" - POWERLEVEL9K_MODE="$_P9K_TEST_MODE" + local POWERLEVEL9K_MODE="$_P9K_TEST_MODE" source functions/icons.zsh # _ICONS_UNDER_TEST is an array of just the keys of $icons. # We later check via (r) "subscript" flag that our key @@ -337,6 +358,15 @@ function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() { assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" done + # Switch to "nerdfont-complete" mode + POWERLEVEL9K_MODE="nerdfont-complete" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + # Switch to "flat" mode POWERLEVEL9K_MODE="flat" source functions/icons.zsh @@ -359,4 +389,85 @@ function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() { unset _ICONS_UNDER_TEST } -source shunit2/source/2.1/src/shunit2 \ No newline at end of file +# Go through all icons defined in nerdfont-complete mode, and +# check if all of them are defined in the other modes. +function testAllIconsAreDefinedLikeInNerdfontCompleteMode() { + # Always compare against this mode + local _P9K_TEST_MODE="nerdfont-complete" + local POWERLEVEL9K_MODE="$_P9K_TEST_MODE" + source functions/icons.zsh + # _ICONS_UNDER_TEST is an array of just the keys of $icons. + # We later check via (r) "subscript" flag that our key + # is in the values of our flat array. + typeset -ah _ICONS_UNDER_TEST + _ICONS_UNDER_TEST=(${(k)icons[@]}) + + # Switch to "default" mode + POWERLEVEL9K_MODE="default" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + # Iterate over all keys found in the _ICONS_UNDER_TEST + # array and compare it with the icons array of the + # current POWERLEVEL9K_MODE. + # Use parameter expansion, to directly check if the + # key exists in the flat current array of keys. That + # is quite complicated, but there seems no easy way + # to check the mere existance of a key in an array. + # The usual way would always return the value, so that + # would do the wrong thing as we have some (on purpose) + # empty values. + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + # Switch to "awesome-patched" mode + POWERLEVEL9K_MODE="awesome-patched" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + # Switch to "awesome-fontconfig" mode + POWERLEVEL9K_MODE="awesome-fontconfig" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + # Switch to "nerdfont-fontconfig" mode + POWERLEVEL9K_MODE="nerdfont-fontconfig" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + # Switch to "flat" mode + POWERLEVEL9K_MODE="flat" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + # Switch to "compatible" mode + POWERLEVEL9K_MODE="compatible" + source functions/icons.zsh + typeset -ah current_icons + current_icons=(${(k)icons[@]}) + for key in ${_ICONS_UNDER_TEST}; do + assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))" + done + + unset current_icons + unset _ICONS_UNDER_TEST +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/utilities.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/utilities.spec index a9bd67e..b727c1f 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/functions/utilities.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/functions/utilities.spec @@ -106,4 +106,4 @@ function testSegmentShouldNotBeJoinedIfPredecessingSegmentIsNotJoinedButConditio unset segments } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/powerlevel9k.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/powerlevel9k.spec index 0ddf36c..586c2b2 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/powerlevel9k.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/powerlevel9k.spec @@ -17,68 +17,66 @@ function setUp() { } function testJoinedSegments() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir dir_joined) cd /tmp - assertEquals "%K{blue} %F{black}/tmp %K{blue}%F{black}%F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp %K{004}%F{000}%F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS cd - } function testTransitiveJoinedSegments() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir root_indicator_joined dir_joined) cd /tmp - assertEquals "%K{blue} %F{black}/tmp %K{blue}%F{black}%F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp %K{004}%F{000}%F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS cd - } function testJoiningWithConditionalSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir background_jobs dir_joined) cd /tmp - assertEquals "%K{blue} %F{black}/tmp %K{blue}%F{black} %F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp %K{004}%F{000} %F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS cd - } function testDynamicColoringOfSegmentsWork() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='red' + local POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='red' cd /tmp - assertEquals "%K{red} %F{black}/tmp %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{001} %F{000}/tmp %k%F{001}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_DIR_DEFAULT_BACKGROUND cd - } function testDynamicColoringOfVisualIdentifiersWork() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green' - POWERLEVEL9K_FOLDER_ICON="icon-here" + local POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green' + local POWERLEVEL9K_FOLDER_ICON="icon-here" cd /tmp - assertEquals "%K{blue} %F{green%}icon-here %f%F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{002}icon-here %f%F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR - unset POWERLEVEL9K_FOLDER_ICON cd - } function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green' - POWERLEVEL9K_DIR_DEFAULT_FOREGROUND='red' - POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='yellow' - POWERLEVEL9K_FOLDER_ICON="icon-here" + local POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green' + local POWERLEVEL9K_DIR_DEFAULT_FOREGROUND='red' + local POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='yellow' + local POWERLEVEL9K_FOLDER_ICON="icon-here" # Re-Source the icons, as the POWERLEVEL9K_MODE is directly # evaluated there. @@ -86,19 +84,15 @@ function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() { cd /tmp - assertEquals "%K{yellow} %F{green%}icon-here %f%F{red}/tmp %k%F{yellow}%f " "$(build_left_prompt)" + assertEquals "%K{003} %F{002}icon-here %f%F{001}/tmp %k%F{003}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR - unset POWERLEVEL9K_DIR_DEFAULT_FOREGROUND - unset POWERLEVEL9K_DIR_DEFAULT_BACKGROUND - unset POWERLEVEL9K_FOLDER_ICON cd - } function testOverwritingIconsWork() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_FOLDER_ICON='icon-here' + local POWERLEVEL9K_FOLDER_ICON='icon-here' #local testFolder=$(mktemp -d -p p9k) # Move testFolder under home folder #mv testFolder ~ @@ -106,31 +100,24 @@ function testOverwritingIconsWork() { #cd ~/$testFolder cd /tmp - assertEquals "%K{blue} %F{black%}icon-here %f%F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}icon-here %f%F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_DIR_FOLDER_ICON cd - # rm -fr ~/$testFolder } function testNewlineOnRpromptCanBeDisabled() { - POWERLEVEL9K_PROMPT_ON_NEWLINE=true - POWERLEVEL9K_RPROMPT_ON_NEWLINE=false - POWERLEVEL9K_CUSTOM_WORLD='echo world' - POWERLEVEL9K_CUSTOM_RWORLD='echo rworld' + local POWERLEVEL9K_PROMPT_ON_NEWLINE=true + local POWERLEVEL9K_RPROMPT_ON_NEWLINE=false + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_CUSTOM_RWORLD='echo rworld' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_rworld) powerlevel9k_prepare_prompts assertEquals '$(print_icon MULTILINE_FIRST_PROMPT_PREFIX) world  $(print_icon MULTILINE_LAST_PROMPT_PREFIX) rworld' "$(print -P ${PROMPT}${RPROMPT})" - - unset POWERLEVEL9K_PROMPT_ON_NEWLINE - unset POWERLEVEL9K_RPROMPT_ON_NEWLINE - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD - unset POWERLEVEL9K_CUSTOM_RWORLD } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/anaconda.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/anaconda.spec new file mode 100755 index 0000000..efcfc03 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/anaconda.spec @@ -0,0 +1,69 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testAnacondaSegmentPrintsNothingIfNoAnacondaPathIsSet() { + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda custom_world) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + # Unset anacona variables + unset CONDA_ENV_PATH + unset CONDA_PREFIX + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testAnacondaSegmentWorksIfOnlyAnacondaPathIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda) + local POWERLEVEL9K_PYTHON_ICON="icon-here" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + CONDA_ENV_PATH=/tmp + unset CONDA_PREFIX + + assertEquals "%K{004} %F{000}icon-here %f%F{000}(tmp) %k%F{004}%f " "$(build_left_prompt)" +} + +function testAnacondaSegmentWorksIfOnlyAnacondaPrefixIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda) + local POWERLEVEL9K_PYTHON_ICON="icon-here" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + unset CONDA_ENV_PATH + local CONDA_PREFIX="test" + + assertEquals "%K{004} %F{000}icon-here %f%F{000}(test) %k%F{004}%f " "$(build_left_prompt)" +} + +function testAnacondaSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda) + local POWERLEVEL9K_PYTHON_ICON="icon-here" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + local CONDA_ENV_PATH=/tmp + local CONDA_PREFIX="test" + + assertEquals "%K{004} %F{000}icon-here %f%F{000}(tmptest) %k%F{004}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/aws_eb_env.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/aws_eb_env.spec new file mode 100755 index 0000000..99b418e --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/aws_eb_env.spec @@ -0,0 +1,61 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testAwsEbEnvSegmentPrintsNothingIfNoElasticBeanstalkEnvironmentIsSet() { + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env custom_world) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testAwsEbEnvSegmentWorksIfElasticBeanstalkEnvironmentIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + mkdir -p /tmp/powerlevel9k-test/.elasticbeanstalk + echo "test:\n environment: test" > /tmp/powerlevel9k-test/.elasticbeanstalk/config.yml + cd /tmp/powerlevel9k-test + + assertEquals "%K{000} %F{002}🌱 %f%F{002}test %k%F{000}%f " "$(build_left_prompt)" + + rm -fr /tmp/powerlevel9k-test + cd - +} + +function testAwsEbEnvSegmentWorksIfElasticBeanstalkEnvironmentIsSetInParentDirectory() { + # Skip test, because currently we cannot detect + # if the configuration is in a parent directory + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + mkdir -p /tmp/powerlevel9k-test/.elasticbeanstalk + mkdir -p /tmp/powerlevel9k-test/1/12/123/1234/12345 + echo "test:\n environment: test" > /tmp/powerlevel9k-test/.elasticbeanstalk/config.yml + cd /tmp/powerlevel9k-test/1/12/123/1234/12345 + + assertEquals "%K{000} %F{002}🌱 %f%F{002}test %k%F{000}%f " "$(build_left_prompt)" + + rm -fr /tmp/powerlevel9k-test + cd - +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/background_jobs.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/background_jobs.spec new file mode 100755 index 0000000..3d83e17 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/background_jobs.spec @@ -0,0 +1,78 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testBackgroundJobsSegmentPrintsNothingWithoutBackgroundJobs() { + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs custom_world) + alias jobs="nojobs 2>/dev/null" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias jobs +} + +function testBackgroundJobsSegmentWorksWithOneBackgroundJob() { + unset POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs) + jobs() { + echo '[1] + 30444 suspended nvim xx' + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{006}⚙%f %k%F{000}%f " "$(build_left_prompt)" + + unfunction jobs +} + +function testBackgroundJobsSegmentWorksWithMultipleBackgroundJobs() { + local POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs) + jobs() { + echo "[1] 31190 suspended nvim xx" + echo "[2] - 31194 suspended nvim xx2" + echo "[3] + 31206 suspended nvim xx3" + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{006}⚙%f %k%F{000}%f " "$(build_left_prompt)" + + unfunction jobs +} + +function testBackgroundJobsSegmentWithVerboseMode() { + local POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs) + jobs() { + echo "[1] 31190 suspended nvim xx" + echo "[2] - 31194 suspended nvim xx2" + echo "[3] + 31206 suspended nvim xx3" + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{006}⚙ %f%F{006}3 %k%F{000}%f " "$(build_left_prompt)" + + unfunction jobs +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/battery.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/battery.spec new file mode 100755 index 0000000..79e25d6 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/battery.spec @@ -0,0 +1,177 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder + FOLDER=/tmp/powerlevel9k-test + mkdir -p "${FOLDER}" + cd $FOLDER + + # Prepare folder for pmset (OSX) + PMSET_PATH=$FOLDER/usr/bin + mkdir -p $PMSET_PATH + # Prepare folder for $BATTERY (Linux) + BATTERY_PATH=$FOLDER/sys/class/power_supply + mkdir -p $BATTERY_PATH + mkdir -p $BATTERY_PATH/BAT0 + mkdir -p $BATTERY_PATH/BAT1 +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" &>/dev/null + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test &>/dev/null + unset PMSET_PATH + unset BATTERY_PATH + unset FOLDER + unset P9K_HOME +} + +# Mock Battery +# For mocking pmset on OSX this function takes one argument (the +# content that pmset should echo). +# For mocking the battery on Linux this function takes two +# arguments: $1 is the capacity; $2 the battery status. +function makeBatterySay() { + if [[ -z "${FOLDER}" ]]; then + echo "Fake root path is not correctly set!" + exit 1 + fi + # OSX + echo "#!/bin/sh" > $PMSET_PATH/pmset + echo "echo \"$1\"" >> $PMSET_PATH/pmset + chmod +x $PMSET_PATH/pmset + + # Linux + local capacity="$1" + echo "$capacity" > $BATTERY_PATH/BAT0/capacity + echo "$capacity" > $BATTERY_PATH/BAT1/capacity + local battery_status="$2" + echo "$battery_status" > $BATTERY_PATH/BAT0/status + echo "$battery_status" > $BATTERY_PATH/BAT1/status +} + +function testBatterySegmentIfBatteryIsLowWhileDischargingOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'Battery Power' + -InternalBattery-0 (id=1234567) 4%; discharging; 0:05 remaining present: true" + + assertEquals "%K{000} %F{001}🔋 %f%F{001}4%% (0:05) " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsLowWhileChargingOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'Battery Power' + -InternalBattery-0 (id=1234567) 4%; charging; 0:05 remaining present: true" + + assertEquals "%K{000} %F{003}🔋 %f%F{003}4%% (0:05) " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsAlmostFullWhileDischargingOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'Battery Power' + -InternalBattery-0 (id=1234567) 98%; discharging; 3:57 remaining present: true" + + assertEquals "%K{000} %F{007}🔋 %f%F{007}98%% (3:57) " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsAlmostFullWhileChargingOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'Battery Power' + -InternalBattery-0 (id=1234567) 98%; charging; 3:57 remaining present: true" + + assertEquals "%K{000} %F{003}🔋 %f%F{003}98%% (3:57) " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsFullOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'AC Power' + -InternalBattery-0 (id=1234567) 99%; charged; 0:00 remaining present: true" + + assertEquals "%K{000} %F{002}🔋 %f%F{002}99%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsCalculatingOnOSX() { + local OS='OSX' # Fake OSX + makeBatterySay "Now drawing from 'Battery Power' + -InternalBattery-0 (id=1234567) 99%; discharging; (no estimate) present: true" + + assertEquals "%K{000} %F{007}🔋 %f%F{007}99%% (...) " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsLowWhileDischargingOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "4" "Discharging" + + assertEquals "%K{000} %F{001}🔋 %f%F{001}4%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsLowWhileChargingOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "4" "Charging" + + assertEquals "%K{000} %F{003}🔋 %f%F{003}4%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsNormalWhileDischargingOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "10" "Discharging" + + assertEquals "%K{000} %F{007}🔋 %f%F{007}10%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsNormalWhileChargingOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "10" "Charging" + + assertEquals "%K{000} %F{003}🔋 %f%F{003}10%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsFullOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "100" "Full" + + assertEquals "%K{000} %F{002}🔋 %f%F{002}100%% " "$(prompt_battery left 1 false ${FOLDER})" +} + +function testBatterySegmentIfBatteryIsNormalWithAcpiEnabledOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "50" "Discharging" + echo "echo 'Batter 0: Discharging, 50%, 01:38:54 remaining'" > ${FOLDER}/usr/bin/acpi + chmod +x ${FOLDER}/usr/bin/acpi + # For running on Mac, we need to mock date :( + [[ -f /usr/local/bin/gdate ]] && alias date=gdate + + assertEquals "%K{000} %F{007}🔋 %f%F{007}50%% (1:38) " "$(prompt_battery left 1 false ${FOLDER})" + + unalias date &>/dev/null + # unaliasing date fails where it was never aliased (e.g. on Linux). + # This causes the whole test to fail, because the return code is + # non-zero. + return 0 +} + +function testBatterySegmentIfBatteryIsCalculatingWithAcpiEnabledOnLinux() { + local OS='Linux' # Fake Linux + makeBatterySay "50" "Discharging" + # Todo: Include real acpi output! + echo "echo 'Batter 0: Discharging, 50%, rate remaining'" > ${FOLDER}/usr/bin/acpi + chmod +x ${FOLDER}/usr/bin/acpi + + assertEquals "%K{000} %F{007}🔋 %f%F{007}50%% (...) " "$(prompt_battery left 1 false ${FOLDER})" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/command_execution_time.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/command_execution_time.spec index d3588d8..b7c3fae 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/command_execution_time.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/command_execution_time.spec @@ -7,90 +7,98 @@ SHUNIT_PARENT=$0 function setUp() { export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme } function testCommandExecutionTimeIsNotShownIfTimeIsBelowThreshold() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time) - POWERLEVEL9K_CUSTOM_WORLD='echo world' - _P9K_COMMAND_DURATION=2 + local POWERLEVEL9K_CUSTOM_WORLD='echo world' - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD - unset _P9K_COMMAND_DURATION + # Override payload + local _P9K_COMMAND_DURATION=2 + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" } function testCommandExecutionTimeThresholdCouldBeChanged() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1 - _P9K_COMMAND_DURATION=2.03 + local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}2.03 %k%F{red}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION - unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD + # Override payload + local _P9K_COMMAND_DURATION=2.03 + + assertEquals "%K{001} %F{226}Dur %f%F{226}2.03 %k%F{001}%f " "$(build_left_prompt)" } function testCommandExecutionTimeThresholdCouldBeSetToZero() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 - _P9K_COMMAND_DURATION=0.03 + local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 + local _P9K_COMMAND_DURATION=0.03 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}0.03 %k%F{red}%f " "$(build_left_prompt)" - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION - unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD + assertEquals "%K{001} %F{226}Dur %f%F{226}0.03 %k%F{001}%f " "$(build_left_prompt)" } function testCommandExecutionTimePrecisionCouldBeChanged() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 - POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4 - _P9K_COMMAND_DURATION=0.0001 + local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 + local POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}0.0001 %k%F{red}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION - unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION - unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD + # Override payload + local _P9K_COMMAND_DURATION=0.0001 + + assertEquals "%K{001} %F{226}Dur %f%F{226}0.0001 %k%F{001}%f " "$(build_left_prompt)" } function testCommandExecutionTimePrecisionCouldBeSetToZero() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - _P9K_COMMAND_DURATION=23.5001 + local POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}23 %k%F{red}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION - unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION + # Override payload + local _P9K_COMMAND_DURATION=23.5001 + + assertEquals "%K{001} %F{226}Dur %f%F{226}23 %k%F{001}%f " "$(build_left_prompt)" } function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - _P9K_COMMAND_DURATION=180 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}03:00 %k%F{red}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION + # Override payload + local _P9K_COMMAND_DURATION=180 + + assertEquals "%K{001} %F{226}Dur %f%F{226}03:00 %k%F{001}%f " "$(build_left_prompt)" } function testCommandExecutionTimeIsFormattedHumandReadbleForHourLongCommand() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) - _P9K_COMMAND_DURATION=7200 - assertEquals "%K{red} %F{yellow1%}Dur %f%F{yellow1}02:00:00 %k%F{red}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset _P9K_COMMAND_DURATION + # Override payload + local _P9K_COMMAND_DURATION=7200 + + assertEquals "%K{001} %F{226}Dur %f%F{226}02:00:00 %k%F{001}%f " "$(build_left_prompt)" } -source shunit2/source/2.1/src/shunit2 \ No newline at end of file +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/context.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/context.spec new file mode 100755 index 0000000..0730037 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/context.spec @@ -0,0 +1,113 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + # Test specific settings + OLD_DEFAULT_USER=$DEFAULT_USER + unset DEFAULT_USER +} + +function tearDown() { + # Restore old variables + [[ -n "$OLD_DEFAULT_USER" ]] && DEFAULT_USER=$OLD_DEFAULT_USER + + return 0 +} + +function testContextSegmentDoesNotGetRenderedWithDefaultUser() { + local DEFAULT_USER=$(whoami) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context custom_world) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testContextSegmentDoesGetRenderedWhenSshConnectionIsOpen() { + function sudo() { + return 0 + } + local SSH_CLIENT="putty" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}%n@%m %k%F{000}%f " "$(build_left_prompt)" + + unfunction sudo +} + +function testContextSegmentWithForeignUser() { + function sudo() { + return 0 + } + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}%n@%m %k%F{000}%f " "$(build_left_prompt)" + + unfunction sudo +} + +# TODO: How to test root? +function testContextSegmentWithRootUser() { + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}%n@%m %k%F{000}%f " "$(build_left_prompt)" +} + +function testOverridingContextTemplate() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + local POWERLEVEL9K_CONTEXT_TEMPLATE=xx + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}xx %k%F{000}%f " "$(build_left_prompt)" +} + +function testContextSegmentIsShownIfDefaultUserIsSetWhenForced() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + local POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true + local DEFAULT_USER=$(whoami) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}%n@%m %k%F{000}%f " "$(build_left_prompt)" +} + +function testContextSegmentIsShownIfForced() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context) + local POWERLEVEL9K_ALWAYS_SHOW_USER=true + local DEFAULT_USER=$(whoami) + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}$(whoami) %k%F{000}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/custom.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/custom.spec new file mode 100755 index 0000000..0f66c82 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/custom.spec @@ -0,0 +1,86 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testCustomDirectOutputSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD="echo world" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testCustomClosureSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + function p9k_hello_world() { + echo "world" + } + local POWERLEVEL9K_CUSTOM_WORLD='p9k_hello_world' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testSettingBackgroundForCustomSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD="echo world" + local POWERLEVEL9K_CUSTOM_WORLD_BACKGROUND="yellow" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000}world %k%F{003}%f " "$(build_left_prompt)" +} + +function testSettingForegroundForCustomSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD="echo world" + local POWERLEVEL9K_CUSTOM_WORLD_FOREGROUND="red" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{001}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testSettingVisualIdentifierForCustomSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD="echo world" + local POWERLEVEL9K_CUSTOM_WORLD_ICON="hw" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}hw %f%F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testSettingVisualIdentifierForegroundColorForCustomSegment() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world) + local POWERLEVEL9K_CUSTOM_WORLD="echo world" + local POWERLEVEL9K_CUSTOM_WORLD_ICON="hw" + local POWERLEVEL9K_CUSTOM_WORLD_VISUAL_IDENTIFIER_COLOR="red" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{001}hw %f%F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/detect_virt.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/detect_virt.spec new file mode 100755 index 0000000..910f52e --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/detect_virt.spec @@ -0,0 +1,83 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme +} + +function testDetectVirtSegmentPrintsNothingIfSystemdIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias systemd-detect-virt="novirt" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias systemd-detect-virt +} + +function testDetectVirtSegmentIfSystemdReturnsPlainName() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt) + alias systemd-detect-virt="echo 'xxx'" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}xxx %k%F{000}%f " "$(build_left_prompt)" + + unalias systemd-detect-virt +} + +function testDetectVirtSegmentIfRootFsIsOnExpectedInode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt) + # Well. This is a weak test, as it fixates the implementation, + # but it is necessary, as the implementation relys on the root + # directory having the inode number "2".. + alias systemd-detect-virt="echo 'none'" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + # The original command in the implementation is "ls -di / | grep -o 2", + # which translates to: Show the inode number of "/" and test if it is "2". + alias ls="echo '2'" + + assertEquals "%K{000} %F{003}none %k%F{000}%f " "$(build_left_prompt)" + + unalias ls + unalias systemd-detect-virt +} + +function testDetectVirtSegmentIfRootFsIsNotOnExpectedInode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt) + # Well. This is a weak test, as it fixates the implementation, + # but it is necessary, as the implementation relys on the root + # directory having the inode number "2".. + alias systemd-detect-virt="echo 'none'" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + # The original command in the implementation is "ls -di / | grep -o 2", + # which translates to: Show the inode number of "/" and test if it is "2". + alias ls="echo '3'" + + assertEquals "%K{000} %F{003}chroot %k%F{000}%f " "$(build_left_prompt)" + + unalias ls + unalias systemd-detect-virt +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/dir.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/dir.spec index b5fce59..7e65cb7 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/dir.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/dir.spec @@ -7,179 +7,199 @@ SHUNIT_PARENT=$0 function setUp() { export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme - # Every test should at least use the dir segment - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + P9K_HOME="${PWD}" } function tearDown() { - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + unset P9K_HOME } function testDirPathAbsoluteWorks() { - POWERLEVEL9K_DIR_PATH_ABSOLUTE=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_ABSOLUTE=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme cd ~ - assertEquals "%K{blue} %F{black}/home/travis %k%F{blue}%f " "$(build_left_prompt)" + + # Unfortunately, we cannot fake Linux or OSX here, because + # of /home or /Users path.. That is why we change the test + # according to the OS of the host. + if [[ "${OS}" == 'Linux' ]]; then + assertEquals "%K{004} %F{000}/home/${USER} %k%F{004}%f " "$(build_left_prompt)" + elif [[ "${OS}" == 'OSX' ]]; then + assertEquals "%K{004} %F{000}/Users/${USER} %k%F{004}%f " "$(build_left_prompt)" + fi cd - - unset POWERLEVEL9K_DIR_PATH_ABSOLUTE } function testTruncateFoldersWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders' - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}…/12345678/123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}…/12345678/123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateFolderWithHomeDirWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - CURRENT_DIR=$(pwd) + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + local CURRENT_DIR=$(pwd) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme cd ~ - FOLDER="powerlevel9k-test-${RANDOM}" + local FOLDER="powerlevel9k-test-${RANDOM}" mkdir -p $FOLDER cd $FOLDER # Switch back to home folder as this causes the problem. cd .. - assertEquals "%K{blue} %F{black}~ %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}~ %k%F{004}%f " "$(build_left_prompt)" rmdir $FOLDER cd ${CURRENT_DIR} - - unset CURRENT_DIR - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH } function testTruncateMiddleWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle' - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}/tmp/po…st/1/12/123/1234/12…45/12…56/12…67/12…78/123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/po…st/1/12/123/1234/12…45/12…56/12…67/12…78/123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncationFromRightWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}/tmp/po…/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/po…/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateToLastWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_last" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_last" - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateToFirstAndLastWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_first_and_last" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_first_and_last" - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}/tmp/powerlevel9k-test/…/…/…/…/…/…/…/12345678/123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/powerlevel9k-test/…/…/…/…/…/…/…/12345678/123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateAbsoluteWorks() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute" - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}…89 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}…89 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncationFromRightWithEmptyDelimiter() { - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_DELIMITER="" - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_DELIMITER="" + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' - FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789 mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}/tmp/po/1/12/123/12/12/12/12/12/123456789 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/po/1/12/123/12/12/12/12/12/123456789 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - - unset FOLDER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_DELIMITER - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateWithFolderMarkerWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker" + local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme local BASEFOLDER=/tmp/powerlevel9k-test local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567 @@ -187,20 +207,20 @@ function testTruncateWithFolderMarkerWorks() { # Setup folder marker touch $BASEFOLDER/1/12/.shorten_folder_marker cd $FOLDER - assertEquals "%K{blue} %F{black}/…/12/123/1234/12345/123456/1234567 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/…/12/123/1234/12345/123456/1234567 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr $BASEFOLDER - unset BASEFOLDER - unset FOLDER - unset POWERLEVEL9K_SHORTEN_STRATEGY - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS } function testTruncateWithFolderMarkerWithChangedFolderMarker() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker" - POWERLEVEL9K_SHORTEN_FOLDER_MARKER='.xxx' + local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker" + local POWERLEVEL9K_SHORTEN_FOLDER_MARKER='.xxx' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme local BASEFOLDER=/tmp/powerlevel9k-test local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567 @@ -208,15 +228,10 @@ function testTruncateWithFolderMarkerWithChangedFolderMarker() { # Setup folder marker touch $BASEFOLDER/1/12/.xxx cd $FOLDER - assertEquals "%K{blue} %F{black}/…/12/123/1234/12345/123456/1234567 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/…/12/123/1234/12345/123456/1234567 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr $BASEFOLDER - unset BASEFOLDER - unset FOLDER - unset POWERLEVEL9K_SHORTEN_FOLDER_MARKER - unset POWERLEVEL9K_SHORTEN_STRATEGY - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS } function testTruncateWithPackageNameWorks() { @@ -237,18 +252,19 @@ function testTruncateWithPackageNameWorks() { # Go back to deeper folder cd "${FOLDER}" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' - assertEquals "%K{blue} %F{black}My_Package/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{blue}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}My_Package/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{004}%f " "$(build_left_prompt)" # Go back cd $p9kFolder rm -fr $BASEFOLDER - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_SHORTEN_STRATEGY - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH } function testTruncateWithPackageNameIfRepoIsSymlinkedInsideDeepFolder() { @@ -276,18 +292,19 @@ function testTruncateWithPackageNameIfRepoIsSymlinkedInsideDeepFolder() { # Go to deep folder inside linked repo cd linked-repo/asdfasdf/qwerqwer + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' - assertEquals "%K{blue} %F{black}My_Package/as…/qwerqwer %k%F{blue}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}My_Package/as…/qwerqwer %k%F{004}%f " "$(build_left_prompt)" # Go back cd $p9kFolder rm -fr $BASEFOLDER - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_SHORTEN_STRATEGY - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH } function testTruncateWithPackageNameIfRepoIsSymlinkedInsideGitDir() { @@ -311,123 +328,162 @@ function testTruncateWithPackageNameIfRepoIsSymlinkedInsideGitDir() { cd linked-repo/.git/refs/heads + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name' - assertEquals "%K{blue} %F{black}My_Package/.g…/re…/heads %k%F{blue}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}My_Package/.g…/re…/heads %k%F{004}%f " "$(build_left_prompt)" # Go back cd $p9kFolder rm -fr $BASEFOLDER - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_SHORTEN_STRATEGY - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH } function testHomeFolderDetectionWorks() { - POWERLEVEL9K_HOME_ICON='home-icon' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_HOME_ICON='home-icon' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme cd ~ - assertEquals "%K{blue} %F{black%}home-icon %f%F{black}~ %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}home-icon %f%F{000}~ %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_HOME_ICON } function testHomeSubfolderDetectionWorks() { - POWERLEVEL9K_HOME_SUB_ICON='sub-icon' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_HOME_SUB_ICON='sub-icon' - FOLDER=~/powerlevel9k-test + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=~/powerlevel9k-test mkdir $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black%}sub-icon %f%F{black}~/powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}sub-icon %f%F{000}~/powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr $FOLDER - unset FOLDER - unset POWERLEVEL9K_HOME_SUB_ICON } function testOtherFolderDetectionWorks() { - POWERLEVEL9K_FOLDER_ICON='folder-icon' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_FOLDER_ICON='folder-icon' - FOLDER=/tmp/powerlevel9k-test + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + local FOLDER=/tmp/powerlevel9k-test mkdir $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black%}folder-icon %f%F{black}/tmp/powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}folder-icon %f%F{000}/tmp/powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr $FOLDER - unset FOLDER - unset POWERLEVEL9K_FOLDER_ICON } function testChangingDirPathSeparator() { - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local FOLDER="/tmp/powerlevel9k-test/1/2" mkdir -p $FOLDER cd $FOLDER - assertEquals "%K{blue} %F{black}xXxtmpxXxpowerlevel9k-testxXx1xXx2 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}xXxtmpxXxpowerlevel9k-testxXx1xXx2 %k%F{004}%f " "$(build_left_prompt)" cd - - unset FOLDER rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR } function testHomeFolderAbbreviation() { - local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) local dir=$PWD cd ~/ # default - POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~' - assertEquals "%K{blue} %F{black}~ %k%F{blue}%f " "$(build_left_prompt)" + local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}~ %k%F{004}%f " "$(build_left_prompt)" # substituted - POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq' - assertEquals "%K{blue} %F{black}qQq %k%F{blue}%f " "$(build_left_prompt)" + local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}qQq %k%F{004}%f " "$(build_left_prompt)" cd /tmp # default - POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~' - assertEquals "%K{blue} %F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" # substituted - POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq' - assertEquals "%K{blue} %F{black}/tmp %k%F{blue}%f " "$(build_left_prompt)" + local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{004} %F{000}/tmp %k%F{004}%f " "$(build_left_prompt)" cd "$dir" } function testOmittingFirstCharacterWorks() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_FOLDER_ICON='folder-icon' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_FOLDER_ICON='folder-icon' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd /tmp - assertEquals "%K{blue} %F{black%}folder-icon %f%F{black}tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}folder-icon %f%F{000}tmp %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_FOLDER_ICON - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER } function testOmittingFirstCharacterWorksWithChangingPathSeparator() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' - POWERLEVEL9K_FOLDER_ICON='folder-icon' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local POWERLEVEL9K_FOLDER_ICON='folder-icon' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test/1/2 cd /tmp/powerlevel9k-test/1/2 - assertEquals "%K{blue} %F{black%}folder-icon %f%F{black}tmpxXxpowerlevel9k-testxXx1xXx2 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}folder-icon %f%F{000}tmpxXxpowerlevel9k-testxXx1xXx2 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_FOLDER_ICON - unset POWERLEVEL9K_DIR_PATH_SEPARATOR - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER } # This test makes it obvious that combining a truncation strategy @@ -438,210 +494,278 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparator() { # But it does more sense in combination with other truncation # strategies. function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndDefaultTruncation() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test/1/2 cd /tmp/powerlevel9k-test/1/2 - assertEquals "%K{blue} %F{black}xXx1xXx2 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}xXx1xXx2 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndMiddleTruncation() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test/1/2 cd /tmp/powerlevel9k-test/1/2 - assertEquals "%K{blue} %F{black}tmpxXxpo…stxXx1xXx2 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}tmpxXxpo…stxXx1xXx2 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndRightTruncation() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test/1/2 cd /tmp/powerlevel9k-test/1/2 - assertEquals "%K{blue} %F{black}tmpxXxpo…xXx1xXx2 %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}tmpxXxpo…xXx1xXx2 %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testTruncateToUniqueWorks() { - POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true - POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' - POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 - POWERLEVEL9K_SHORTEN_STRATEGY='truncate_to_unique' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true + local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx' + local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 + local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_to_unique' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test/adam/devl mkdir -p /tmp/powerlevel9k-test/alice/devl mkdir -p /tmp/powerlevel9k-test/alice/docs mkdir -p /tmp/powerlevel9k-test/bob/docs cd /tmp/powerlevel9k-test/alice/devl - assertEquals "%K{blue} %F{black}txXxpxXxalxXxde %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}txXxpxXxalxXxde %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR - unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER - unset POWERLEVEL9K_SHORTEN_DIR_LENGTH - unset POWERLEVEL9K_SHORTEN_STRATEGY } function testBoldHomeDirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd ~ - assertEquals "%K{blue} %F{black}%B~%b %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}%B~%b %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD } function testBoldHomeSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p ~/powerlevel9k-test cd ~/powerlevel9k-test - assertEquals "%K{blue} %F{black}~/%Bpowerlevel9k-test%b %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}~/%Bpowerlevel9k-test%b %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr ~/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD } function testBoldRootDirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd / - assertEquals "%K{blue} %F{black}%B/%b %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}%B/%b %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD } function testBoldRootSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd /tmp - assertEquals "%K{blue} %F{black}/%Btmp%b %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/%Btmp%b %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD } function testBoldRootSubSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test cd /tmp/powerlevel9k-test - assertEquals "%K{blue} %F{black}/tmp/%Bpowerlevel9k-test%b %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/%Bpowerlevel9k-test%b %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD } function testHighlightHomeWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd ~ - assertEquals "%K{blue} %F{black}%F{red}~ %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}%F{red}~ %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND } function testHighlightHomeSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p ~/powerlevel9k-test cd ~/powerlevel9k-test - assertEquals "%K{blue} %F{black}~/%F{red}powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}~/%F{red}powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr ~/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND } function testHighlightRootWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd / - assertEquals "%K{blue} %F{black}%F{red}/ %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}%F{red}/ %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND } function testHighlightRootSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + cd /tmp - assertEquals "%K{blue} %F{black}/%F{red}tmp %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/%F{red}tmp %k%F{004}%f " "$(build_left_prompt)" cd - - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND } function testHighlightRootSubSubdirWorks() { - POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir /tmp/powerlevel9k-test cd /tmp/powerlevel9k-test - assertEquals "%K{blue} %F{black}/tmp/%F{red}powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}/tmp/%F{red}powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND } function testDirSeparatorColorHomeSubdirWorks() { - POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p ~/powerlevel9k-test cd ~/powerlevel9k-test - assertEquals "%K{blue} %F{black}~%F{red}/%F{black}powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}~%F{red}/%F{black}powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr ~/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND } function testDirSeparatorColorRootSubSubdirWorks() { - POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) + local POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + mkdir -p /tmp/powerlevel9k-test cd /tmp/powerlevel9k-test - assertEquals "%K{blue} %F{black}%F{red}/%F{black}tmp%F{red}/%F{black}powerlevel9k-test %k%F{blue}%f " "$(build_left_prompt)" + assertEquals "%K{004} %F{000}%F{red}/%F{black}tmp%F{red}/%F{black}powerlevel9k-test %k%F{004}%f " "$(build_left_prompt)" cd - rm -fr /tmp/powerlevel9k-test - unset POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/disk_usage.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/disk_usage.spec new file mode 100755 index 0000000..ebafe31 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/disk_usage.spec @@ -0,0 +1,131 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + # Test specific + P9K_HOME=$(pwd) + FOLDER=/tmp/powerlevel9k-test + mkdir -p $FOLDER + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test + unset FOLDER + unset P9K_HOME + + # Remove IP cache file + rm -f ${POWERLEVEL9K_PUBLIC_IP_FILE} +} + +function testDiskUsageSegmentWhenDiskIsAlmostFull() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage) + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 97% /" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{001} %F{007}hdd %f%F{007}97%% %k%F{001}%f " "$(build_left_prompt)" + + unfunction df +} + +function testDiskUsageSegmentWhenDiskIsVeryFull() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage) + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 94% /" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000}hdd %f%F{000}94%% %k%F{003}%f " "$(build_left_prompt)" + + unfunction df +} + +function testDiskUsageSegmentWhenDiskIsQuiteEmpty() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage) + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 4% /" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}hdd %f%F{003}4%% %k%F{000}%f " "$(build_left_prompt)" + + unfunction df +} + +function testDiskUsageSegmentPrintsNothingIfDiskIsQuiteEmptyAndOnlyWarningsShouldBeDisplayed() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage custom_world) + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 4% /" + } + + local POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=true + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unfunction df +} + +function testDiskUsageSegmentWarningLevelCouldBeAdjusted() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage) + local POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=10 + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 11% /" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000}hdd %f%F{000}11%% %k%F{003}%f " "$(build_left_prompt)" + + unfunction df +} + +function testDiskUsageSegmentCriticalLevelCouldBeAdjusted() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage) + local POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=5 + local POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=10 + df() { + echo "Filesystem 1K-blocks Used Available Use% Mounted on +/dev/disk1 487219288 471466944 15496344 11% /" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{001} %F{007}hdd %f%F{007}11%% %k%F{001}%f " "$(build_left_prompt)" + + unfunction df +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/go_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/go_version.spec index 9104ac8..d7a1c2c 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/go_version.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/go_version.spec @@ -7,8 +7,6 @@ SHUNIT_PARENT=$0 function setUp() { export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme } function mockGo() { @@ -35,52 +33,56 @@ function mockGoEmptyGopath() { function testGo() { alias go=mockGo - POWERLEVEL9K_GO_ICON="" + local POWERLEVEL9K_GO_ICON="" + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(go_version) - PWD="$HOME/go/src/github.com/bhilburn/powerlevel9k" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - assertEquals "%K{green} %F{grey93%} %f%F{grey93}go1.5.3 %k%F{green}%f " "$(build_left_prompt)" + local PWD="$HOME/go/src/github.com/bhilburn/powerlevel9k" + + assertEquals "%K{002} %F{255} %f%F{255}go1.5.3 %k%F{002}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_GO_ICON - unset PWD - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unalias go } function testGoSegmentPrintsNothingIfEmptyGopath() { - alias go=mockGoEmptyGopath - POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias go=mockGoEmptyGopath - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD + # Load Powerlevel9k + source powerlevel9k.zsh-theme + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" } function testGoSegmentPrintsNothingIfNotInGopath() { - alias go=mockGo - POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias go=mockGo - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" } function testGoSegmentPrintsNothingIfGoIsNotAvailable() { - alias go=noGo - POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias go=noGo - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD unalias go } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ip.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ip.spec new file mode 100755 index 0000000..254f11c --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ip.spec @@ -0,0 +1,231 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testIpSegmentPrintsNothingOnOsxIfNotConnected() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world) + alias networksetup='echo "not connected"' + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS="OSX" # Fake OSX + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias networksetup +} + +function testIpSegmentPrintsNothingOnLinuxIfNotConnected() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world) + alias ip='echo "not connected"' + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias ip +} + +function testIpSegmentWorksOnOsxWithNoInterfaceSpecified() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + alias networksetup="echo 'An asterisk (*) denotes that a network service is disabled. +(1) Ethernet +(Hardware Port: Ethernet, Device: en0) + +(2) FireWire +(Hardware Port: FireWire, Device: fw0) + +(3) Wi-Fi +(Hardware Port: Wi-Fi, Device: en1) + +(4) Bluetooth PAN +(Hardware Port: Bluetooth PAN, Device: en3) + +(5) Thunderbolt Bridge +(Hardware Port: Thunderbolt Bridge, Device: bridge0) + +(6) Apple USB Ethernet Adapter +(Hardware Port: Apple USB Ethernet Adapter, Device: en4) +'" + + alias ipconfig="_(){ echo '1.2.3.4'; };_" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='OSX' # Fake OSX + + assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 %k%F{006}%f " "$(build_left_prompt)" + + unalias ipconfig + unalias networksetup +} + +# There could be more than one confiured network interfaces. +# `networksetup -listnetworkserviceorder` lists the interfaces +# in hierarchical order, but from outside this is not obvious +# (implementation detail). So we need a test for this case. +function testIpSegmentWorksOnOsxWithMultipleInterfacesSpecified() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + alias networksetup="echo 'An asterisk (*) denotes that a network service is disabled. +(1) Ethernet +(Hardware Port: Ethernet, Device: en0) + +(2) FireWire +(Hardware Port: FireWire, Device: fw0) + +(3) Wi-Fi +(Hardware Port: Wi-Fi, Device: en1) + +(4) Bluetooth PAN +(Hardware Port: Bluetooth PAN, Device: en3) + +(5) Thunderbolt Bridge +(Hardware Port: Thunderbolt Bridge, Device: bridge0) + +(6) Apple USB Ethernet Adapter +(Hardware Port: Apple USB Ethernet Adapter, Device: en4) +'" + + # Return a unique IP address for every interface + ipconfig() { + case "${2}" { + en0) + echo 1.2.3.4 + ;; + fw0) + echo 2.3.4.5 + ;; + en1) + echo 3.4.5.6 + ;; + en3) + echo 4.5.6.7 + ;; + } + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='OSX' # Fake OSX + + assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 %k%F{006}%f " "$(build_left_prompt)" + + unfunction ipconfig + unalias networksetup +} + +function testIpSegmentWorksOnOsxWithInterfaceSpecified() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local POWERLEVEL9K_IP_INTERFACE='xxx' + alias ipconfig="_(){ echo '1.2.3.4'; };_" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='OSX' # Fake OSX + + assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 %k%F{006}%f " "$(build_left_prompt)" + + unalias ipconfig +} + +function testIpSegmentWorksOnLinuxWithNoInterfaceSpecified() { + setopt aliases + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + # That command is harder to test, as it is used at first + # to get all relevant network interfaces and then for + # getting the configuration of that segment.. + ip(){ + if [[ "$*" == 'link ls up' ]]; then + echo "1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff"; + fi + + if [[ "$*" == '-4 a show eth0' ]]; then + echo '2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 + valid_lft forever preferred_lft forever'; + fi + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='Linux' # Fake Linux + + assertEquals "%K{006} %F{000}IP %f%F{000}10.0.2.15 %k%F{006}%f " "$(build_left_prompt)" + + unfunction ip +} + +function testIpSegmentWorksOnLinuxWithMultipleInterfacesSpecified() { + setopt aliases + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + # That command is harder to test, as it is used at first + # to get all relevant network interfaces and then for + # getting the configuration of that segment.. + ip(){ + if [[ "$*" == 'link ls up' ]]; then + echo "1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff +3: eth1: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff +4: wlan0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff"; + fi + + if [[ "$*" == '-4 a show eth1' ]]; then + echo '3: eth1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 + valid_lft forever preferred_lft forever'; + fi + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='Linux' # Fake Linux + + assertEquals "%K{006} %F{000}IP %f%F{000}10.0.2.15 %k%F{006}%f " "$(build_left_prompt)" + + unfunction ip +} + +function testIpSegmentWorksOnLinuxWithInterfaceSpecified() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local POWERLEVEL9K_IP_INTERFACE='xxx' + ip(){ + echo '2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 +inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 + valid_lft forever preferred_lft forever'; + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local OS='Linux' # Fake Linux + + assertEquals "%K{006} %F{000}IP %f%F{000}10.0.2.15 %k%F{006}%f " "$(build_left_prompt)" + + unfunction ip +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/kubecontext.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/kubecontext.spec index 6381037..76b35c3 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/kubecontext.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/kubecontext.spec @@ -7,8 +7,6 @@ SHUNIT_PARENT=$0 function setUp() { export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme } function mockKubectl() { @@ -66,33 +64,41 @@ function mockKubectlOtherNamespace() { } function testKubeContext() { - alias kubectl=mockKubectl + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(kubecontext) + alias kubectl=mockKubectl - assertEquals "%K{magenta} %F{white%}⎈ %f%F{white}minikube/default %k%F{magenta}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{005} %F{007}⎈ %f%F{007}minikube/default %k%F{005}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unalias kubectl } function testKubeContextOtherNamespace() { - alias kubectl=mockKubectlOtherNamespace + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(kubecontext) + alias kubectl=mockKubectlOtherNamespace - assertEquals "%K{magenta} %F{white%}⎈ %f%F{white}minikube/kube-system %k%F{magenta}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{005} %F{007}⎈ %f%F{007}minikube/kube-system %k%F{005}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unalias kubectl } function testKubeContextPrintsNothingIfKubectlNotAvailable() { - alias kubectl=noKubectl - POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world kubecontext) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias kubectl=noKubectl - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD unalias kubectl } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/laravel_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/laravel_version.spec index 40b130d..c4f09e5 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/laravel_version.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/laravel_version.spec @@ -7,63 +7,66 @@ SHUNIT_PARENT=$0 function setUp() { export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme } function mockLaravelVersion() { case "$1" in "artisan") - echo "Laravel Framework version 5.4.23" + # artisan --version follows the format Laravel Framework + echo "Laravel Framework 5.4.23" ;; default) esac } function mockNoLaravelVersion() { - # This should output some error - >&2 echo "Artisan not available" - return 1 + # When php can't find a file it will output a message + echo "Could not open input file: artisan" + return 0 } function testLaravelVersionSegment() { - alias php=mockLaravelVersion - POWERLEVEL9K_LARAVEL_ICON='x' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(laravel_version) + local POWERLEVEL9K_LARAVEL_ICON='x' + alias php=mockLaravelVersion - assertEquals "%K{001} %F{white%}x %f%F{white}5.4.23 %k%F{maroon}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{009} %F{007}x %f%F{007}5.4.23 %k%F{009}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_LARAVEL_ICON unalias php } function testLaravelVersionSegmentIfArtisanIsNotAvailable() { - alias php=mockNoLaravelVersion - POWERLEVEL9K_CUSTOM_WORLD='echo world' - POWERLEVEL9K_LARAVEL_ICON='x' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world laravel_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_LARAVEL_ICON='x' + alias php=mockNoLaravelVersion - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_LARAVEL_ICON - unset POWERLEVEL9K_CUSTOM_WORLD unalias php } function testLaravelVersionSegmentPrintsNothingIfPhpIsNotAvailable() { - alias php=noPhp - POWERLEVEL9K_CUSTOM_WORLD='echo world' - POWERLEVEL9K_LARAVEL_ICON='x' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world laravel_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_LARAVEL_ICON='x' + alias php=noPhp - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_LARAVEL_ICON - unset POWERLEVEL9K_CUSTOM_WORLD unalias php } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/load.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/load.spec new file mode 100755 index 0000000..0f8ee33 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/load.spec @@ -0,0 +1,149 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test/load-test + mkdir -p "${FOLDER}" + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testLoadSegmentWorksOnOsx() { + sysctl() { + if [[ "$*" == 'vm.loadavg' ]]; then + echo "vm.loadavg: { 1,38 1,45 2,16 }"; + fi + + if [[ "$*" == '-n hw.logicalcpu' ]]; then + echo "4"; + fi + } + + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="OSX" # Fake OSX + + assertEquals "%K{002} %F{000}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})" + + unfunction sysctl +} + +function testLoadSegmentWorksOnBsd() { + sysctl() { + if [[ "$*" == 'vm.loadavg' ]]; then + echo "vm.loadavg: { 1,38 1,45 2,16 }"; + fi + + if [[ "$*" == '-n hw.ncpu' ]]; then + echo "4"; + fi + } + + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="BSD" # Fake BSD + + assertEquals "%K{002} %F{000}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})" + + unfunction sysctl +} + +function testLoadSegmentWorksOnLinux() { + # Prepare loadavg + mkdir proc + echo "1.38 0.01 0.05 1/87 8641" > proc/loadavg + + alias nproc="echo 4" + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{002} %F{000}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})" + + unalias nproc +} + +# Test normal state. This test is not OS specific. +# We test it as the Linux version, but that +# does not matter here. +function testLoadSegmentNormalState() { + # Prepare loadavg + mkdir proc + echo "1.00 0.01 0.05 1/87 8641" > proc/loadavg + + alias nproc="echo 4" + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{002} %F{000}L %f%F{000}1.00 " "$(prompt_load left 1 false ${FOLDER})" + + unalias nproc +} + +# Test warning state. This test is not OS specific. +# We test it as the Linux version, but that +# does not matter here. +function testLoadSegmentWarningState() { + # Prepare loadavg + mkdir proc + echo "2.01 0.01 0.05 1/87 8641" > proc/loadavg + + alias nproc="echo 4" + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{003} %F{000}L %f%F{000}2.01 " "$(prompt_load left 1 false ${FOLDER})" + + unalias nproc +} + +# Test critical state. This test is not OS specific. +# We test it as the Linux version, but that +# does not matter here. +function testLoadSegmentCriticalState() { + # Prepare loadavg + mkdir proc + echo "2.81 0.01 0.05 1/87 8641" > proc/loadavg + + alias nproc="echo 4" + local POWERLEVEL9K_LOAD_WHICH=1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{001} %F{000}L %f%F{000}2.81 " "$(prompt_load left 1 false ${FOLDER})" + + unalias nproc +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/node_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/node_version.spec new file mode 100755 index 0000000..69b9cbb --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/node_version.spec @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testNodeVersionSegmentPrintsNothingWithoutNode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(node_version custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias node="nonode 2>/dev/null" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias node +} + +function testNodeVersionSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(node_version) + node() { + echo "v1.2.3" + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{007}⬢ %f%F{007}1.2.3 %k%F{002}%f " "$(build_left_prompt)" + + unfunction node +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nodeenv.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nodeenv.spec new file mode 100755 index 0000000..2e9d779 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nodeenv.spec @@ -0,0 +1,99 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + # Test specfic + # unset all possible user specified variables + unset NODE_VIRTUAL_ENV_DISABLE_PROMPT + unset NODE_VIRTUAL_ENV +} + +function testNodeenvSegmentPrintsNothingWithoutNode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias node="nonode 2>/dev/null" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias node +} + +function testNodeenvSegmentPrintsNothingIfNodeVirtualEnvIsNotSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + node() { + echo "v1.2.3" + } + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unfunction node +} + +function testNodeenvSegmentPrintsNothingIfNodeVirtualEnvDisablePromptIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + node() { + echo "v1.2.3" + } + NODE_VIRTUAL_ENV="node-env" + NODE_VIRTUAL_ENV_DISABLE_PROMPT=true + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unset NODE_VIRTUAL_ENV_DISABLE_PROMPT + unset NODE_VIRTUAL_ENV + unfunction node +} + +function testNodeenvSegmentPrintsAtLeastNodeEnvWithoutNode() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv) + alias node="nonode 2>/dev/null" + NODE_VIRTUAL_ENV="node-env" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{002}⬢ %f%F{002}[node-env] %k%F{000}%f " "$(build_left_prompt)" + + unset NODE_VIRTUAL_ENV + unalias node +} + +function testNodeenvSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv) + node() { + echo "v1.2.3" + } + NODE_VIRTUAL_ENV="node-env" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{002}⬢ %f%F{002}v1.2.3[node-env] %k%F{000}%f " "$(build_left_prompt)" + + unfunction node + unset NODE_VIRTUAL_ENV +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nvm.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nvm.spec new file mode 100755 index 0000000..c9ed430 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/nvm.spec @@ -0,0 +1,72 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test/nvm-test + mkdir -p "${FOLDER}/bin" + OLD_PATH=$PATH + PATH=${FOLDER}/bin:$PATH + cd $FOLDER +} + +function tearDown() { + # Restore old path + PATH="${OLD_PATH}" + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testNvmSegmentPrintsNothingIfNvmIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testNvmSegmentWorksWithoutHavingADefaultAlias() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + function nvm_version() { + [[ ${1} == 'current' ]] && echo 'v4.6.0' || echo 'v1.4.0' + } + + assertEquals "%K{005} %F{000}⬢ %f%F{000}4.6.0 %k%F{005}%f " "$(build_left_prompt)" +} + +function testNvmSegmentPrintsNothingWhenOnDefaultVersion() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + function nvm_version() { + [[ ${1} == 'current' ]] && echo 'v4.6.0' || echo 'v4.6.0' + } + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/php_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/php_version.spec new file mode 100755 index 0000000..6d64c57 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/php_version.spec @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testPhpVersionSegmentPrintsNothingIfPhpIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias php="nophp" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias php +} + +function testPhpVersionSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version) + alias php="echo 'PHP 5.6.27 (cli) (built: Oct 23 2016 11:47:58) +Copyright (c) 1997-2016 The PHP Group +Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies +'" + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{013} %F{255}PHP 5.6.27 %k%F{013}%f " "$(build_left_prompt)" + + unalias php +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/public_ip.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/public_ip.spec new file mode 100755 index 0000000..334a642 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/public_ip.spec @@ -0,0 +1,222 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + # Test specific + P9K_HOME=$(pwd) + FOLDER=/tmp/powerlevel9k-test + mkdir -p $FOLDER + cd $FOLDER + + # Change cache file, so that the users environment don't + # interfere with the tests. + POWERLEVEL9K_PUBLIC_IP_FILE=$FOLDER/public_ip_file +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test + unset FOLDER + unset P9K_HOME + + # Unset cache file + unset POWERLEVEL9K_PUBLIC_IP_FILE +} + +function testPublicIpSegmentPrintsNothingByDefaultIfHostIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip custom_world) + local POWERLEVEL9K_PUBLIC_IP_HOST='http://unknown.xyz' + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + # We need to overwrite dig, as this is a fallback method that + # uses an alternative host. + alias dig='nodig' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias dig +} + +function testPublicIpSegmentPrintsNoticeIfNotConnected() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + local POWERLEVEL9K_PUBLIC_IP_HOST='http://unknown.xyz' + local POWERLEVEL9K_PUBLIC_IP_NONE="disconnected" + # We need to overwrite dig, as this is a fallback method that + # uses an alternative host. + alias dig='nodig' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}disconnected %k%F{000}%f " "$(build_left_prompt)" + + unalias dig +} + +function testPublicIpSegmentWorksWithWget() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + alias dig='nodig' + alias curl='nocurl' + wget() { + echo "wget 1.2.3.4" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}wget 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)" + + unfunction wget + unalias dig + unalias curl +} + +function testPublicIpSegmentUsesCurlAsFallbackMethodIfWgetIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + alias dig='nodig' + alias wget='nowget' + curl() { + echo "curl 1.2.3.4" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}curl 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)" + + unfunction curl + unalias dig + unalias wget +} + +function testPublicIpSegmentUsesDigAsFallbackMethodIfWgetAndCurlAreNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + alias curl='nocurl' + alias wget='nowget' + dig() { + echo "dig 1.2.3.4" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}dig 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)" + + unfunction dig + unalias curl + unalias wget +} + +function testPublicIpSegmentCachesFile() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + dig() { + echo "first" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}first %k%F{000}%f " "$(build_left_prompt)" + + dig() { + echo "second" + } + + # Segment should not have changed! + assertEquals "%K{000} %F{007}first %k%F{000}%f " "$(build_left_prompt)" + + unfunction dig +} + +function testPublicIpSegmentRefreshesCachesFileAfterTimeout() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + local POWERLEVEL9K_PUBLIC_IP_TIMEOUT=2 + dig() { + echo "first" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}first %k%F{000}%f " "$(build_left_prompt)" + + sleep 3 + dig() { + echo "second" + } + + # Segment should not have changed! + assertEquals "%K{000} %F{007}second %k%F{000}%f " "$(build_left_prompt)" + + unfunction dig +} + +function testPublicIpSegmentRefreshesCachesFileIfEmpty() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + dig() { + echo "first" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}first %k%F{000}%f " "$(build_left_prompt)" + + # Truncate cache file + echo "" >! $POWERLEVEL9K_PUBLIC_IP_FILE + + dig() { + echo "second" + } + + # Segment should not have changed! + assertEquals "%K{000} %F{007}second %k%F{000}%f " "$(build_left_prompt)" + + unfunction dig +} + +function testPublicIpSegmentWhenGoingOnline() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip) + local POWERLEVEL9K_PUBLIC_IP_METHODS="dig" + local POWERLEVEL9K_PUBLIC_IP_NONE="disconnected" + alias dig="nodig" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}disconnected %k%F{000}%f " "$(build_left_prompt)" + + unalias dig + + dig() { + echo "second" + } + + # Segment should not have changed! + assertEquals "%K{000} %F{007}second %k%F{000}%f " "$(build_left_prompt)" + + unfunction dig +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ram.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ram.spec new file mode 100755 index 0000000..2c9f169 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ram.spec @@ -0,0 +1,66 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test/ram-test + mkdir -p "${FOLDER}" + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testRamSegmentWorksOnOsx() { + alias vm_stat="echo 'Mach Virtual Memory Statistics: (page size of 4096 bytes) +Pages free: 299687. +Pages active: 1623792. +Pages inactive: 1313411. +'" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="OSX" # Fake OSX + + assertEquals "%K{003} %F{000}RAM %f%F{000}6.15G " "$(prompt_ram left 1 false ${FOLDER})" + + unalias vm_stat +} + +function testRamSegmentWorksOnBsd() { + mkdir -p var/run + echo "avail memory 5678B 299687 4444G 299" > var/run/dmesg.boot + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="BSD" # Fake BSD + + assertEquals "%K{003} %F{000}RAM %f%F{000}0.29M " "$(prompt_ram left 1 false ${FOLDER})" +} + +function testRamSegmentWorksOnLinux() { + mkdir proc + echo "MemAvailable: 299687" > proc/meminfo + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{003} %F{000}RAM %f%F{000}0.29G " "$(prompt_ram left 1 false ${FOLDER})" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/rust_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/rust_version.spec index 34883a1..07331ed 100755 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/rust_version.spec +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/rust_version.spec @@ -14,8 +14,6 @@ function setUp() { PATH="${RUST_TEST_FOLDER}:${PATH}" export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme } function tearDown() { @@ -29,22 +27,25 @@ function mockRust() { } function testRust() { - mockRust + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(rust_version) + mockRust - assertEquals "%K{208} %F{black%}Rust %f%F{black}0.4.1a-alpha %k%F{darkorange}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + assertEquals "%K{208} %F{000}Rust %f%F{000}0.4.1a-alpha %k%F{208}%f " "$(build_left_prompt)" } function testRustPrintsNothingIfRustIsNotAvailable() { - POWERLEVEL9K_CUSTOM_WORLD='echo world' + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world rust_version) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' - assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + # Load Powerlevel9k + source powerlevel9k.zsh-theme - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_CUSTOM_WORLD + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" } -source shunit2/source/2.1/src/shunit2 +source shunit2/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ssh.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ssh.spec new file mode 100755 index 0000000..3245231 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/ssh.spec @@ -0,0 +1,80 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testSshSegmentPrintsNothingIfNoSshConnection() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo "world"' + local POWERLEVEL9K_SSH_ICON="ssh-icon" + # Weak test: Emulate No SSH connection by unsetting + # $SSH_CLIENT and $SSH_TTY + unset SSH_CLIENT + unset SSH_TTY + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testSshSegmentWorksIfOnlySshClientIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh) + local POWERLEVEL9K_SSH_ICON="ssh-icon" + # Weak test: Emulate No SSH connection by unsetting + # $SSH_CLIENT and $SSH_TTY + SSH_CLIENT='ssh-client' + unset SSH_TTY + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)" + + unset SSH_CLIENT +} + +function testSshSegmentWorksIfOnlySshTtyIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh) + local POWERLEVEL9K_SSH_ICON="ssh-icon" + # Weak test: Emulate No SSH connection by unsetting + # $SSH_CLIENT and $SSH_TTY + SSH_TTY='ssh-tty' + unset SSH_CLIENT + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)" + + unset SSH_TTY +} + +function testSshSegmentWorksIfAllNecessaryVariablesAreSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh) + local POWERLEVEL9K_SSH_ICON="ssh-icon" + # Weak test: Emulate No SSH connection by unsetting + # $SSH_CLIENT and $SSH_TTY + SSH_CLIENT='ssh-client' + SSH_TTY='ssh-tty' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{003}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)" + + unset SSH_TTY + unset SSH_CLIENT +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/status.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/status.spec new file mode 100755 index 0000000..9fb34e0 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/status.spec @@ -0,0 +1,113 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + ### Test specific + # Resets if someone has set these in his/hers env + unset POWERLEVEL9K_STATUS_VERBOSE + unset POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE +} + +function testStatusPrintsNothingIfReturnCodeIsZeroAndVerboseIsUnset() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_STATUS_VERBOSE=false + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testStatusWorksAsExpectedIfReturnCodeIsZeroAndVerboseIsSet() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_HIDE_SIGNAME=true + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{002}✔%f %k%F{000}%f " "$(build_left_prompt)" +} + +function testStatusInGeneralErrorCase() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local RETVAL=1 + + assertEquals "%K{001} %F{226}↵ %f%F{226}1 %k%F{001}%f " "$(build_left_prompt)" +} + +function testPipestatusInErrorCase() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=true + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local -a RETVALS + RETVALS=(0 0 1 0) + + assertEquals "%K{001} %F{226}↵ %f%F{226}0|0|1|0 %k%F{001}%f " "$(build_left_prompt)" +} + +function testStatusCrossWinsOverVerbose() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_CROSS=true + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local RETVAL=1 + + assertEquals "%K{000} %F{001}✘%f %k%F{000}%f " "$(build_left_prompt)" +} + +function testStatusShowsSignalNameInErrorCase() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_HIDE_SIGNAME=false + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + local RETVAL=132 + + assertEquals "%K{001} %F{226}↵ %f%F{226}SIGILL(4) %k%F{001}%f " "$(build_left_prompt)" +} + +function testStatusSegmentIntegrated() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=() + local POWERLEVEL9K_STATUS_CROSS=true + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + false; powerlevel9k_prepare_prompts + + assertEquals "%f%b%k%K{000} %F{001}✘%f %k%F{000}%f " "${(e)PROMPT}" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swap.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swap.spec new file mode 100755 index 0000000..7db5416 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swap.spec @@ -0,0 +1,58 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test/swap-test + mkdir -p "${FOLDER}" + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testSwapSegmentWorksOnOsx() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swap) + sysctl() { + echo "vm.swapusage: total = 3072,00M used = 1620,50M free = 1451,50M (encrypted)" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="OSX" # Fake OSX + + assertEquals "%K{003} %F{000}SWP %f%F{000}1.58G " "$(prompt_swap left 1 false ${FOLDER})" + + unfunction sysctl +} + +function testSwapSegmentWorksOnLinux() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swap) + mkdir proc + echo "SwapTotal: 1000000" > proc/meminfo + echo "SwapFree: 1000" >> proc/meminfo + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + local OS="Linux" # Fake Linux + + assertEquals "%K{003} %F{000}SWP %f%F{000}0.95G " "$(prompt_swap left 1 false ${FOLDER})" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swift_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swift_version.spec new file mode 100755 index 0000000..47fc0b7 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/swift_version.spec @@ -0,0 +1,57 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test + mkdir -p "${FOLDER}" + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testSwiftSegmentPrintsNothingIfSwiftIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swift_version custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias swift="noswift" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias swift +} + +function testSwiftSegmentWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swift_version) + function swift() { + echo "Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)\nTarget: x86_64-apple-macosx10.9" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{005} %F{007}Swift %f%F{007}3.0.1 %k%F{005}%f " "$(build_left_prompt)" + + unfunction swift +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/symfony_version.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/symfony_version.spec new file mode 100755 index 0000000..cb48072 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/symfony_version.spec @@ -0,0 +1,117 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test + mkdir -p "${FOLDER}" + cd $FOLDER +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testSymfonyVersionSegmentPrintsNothingIfPhpIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + alias php="nophp" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unalias php +} + +function testSymfonyVersionSegmentPrintsNothingIfSymfonyIsNotAvailable() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world) + # "Symfony" is not a command, but rather a framework. + # To sucessfully execute this test, we just need to + # navigate into a folder that does not contain symfony. + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testSymfonyVersionPrintsNothingIfPhpThrowsAnError() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + mkdir app + touch app/AppKernel.php + function php() { + echo "Warning: Unsupported declare strict_types in /Users/dr/Privat/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php on line 19 + + Parse error: parse error, expecting `;´ or `{´ in /Users/dr/Privat/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php on line 97" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" + + unfunction php +} + +function testSymfonyVersionSegmentWorks() { + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version) + mkdir app + touch app/AppKernel.php + + function php() { + echo "Symfony version 3.1.4 - app/dev/debug" + } + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{240} %F{000}SF %f%F{000}3.1.4 %k%F{240}%f " "$(build_left_prompt)" + + unfunction php +} + +function testSymfonyVersionSegmentWorksInNestedFolder() { + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version) + mkdir app + touch app/AppKernel.php + + function php() { + echo "Symfony version 3.1.4 - app/dev/debug" + } + + mkdir -p src/P9K/AppBundle + cd src/P9K/AppBundle + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{240} %F{000}SF %f%F{000}3.1.4 %k%F{240}%f " "$(build_left_prompt)" + + unfunction php +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/todo.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/todo.spec new file mode 100755 index 0000000..875c45f --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/todo.spec @@ -0,0 +1,58 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test + mkdir -p "${FOLDER}" + mkdir ${FOLDER}/bin + OLD_PATH=$PATH + PATH=${FOLDER}/bin:$PATH + cd $FOLDER +} + +function tearDown() { + # Reset PATH + PATH=$OLD_PATH + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test +} + +function testTodoSegmentPrintsNothingIfTodoShIsNotInstalled() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(todo custom_world) + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{000}world %k%F{007}%f " "$(build_left_prompt)" +} + +function testTodoSegmentWorksAsExpected() { + # TODO: Skript in den PATH legen! + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(todo) + echo '#!/bin/sh' > ${FOLDER}/bin/todo.sh + echo 'echo "TODO: 34 of 100 tasks shown";' >> ${FOLDER}/bin/todo.sh + chmod +x ${FOLDER}/bin/todo.sh + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{244} %F{000}☑ %f%F{000}100 %k%F{244}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-git.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-git.spec new file mode 100755 index 0000000..bddecf6 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-git.spec @@ -0,0 +1,378 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and git init it. + FOLDER=/tmp/powerlevel9k-test/vcs-test + mkdir -p "${FOLDER}" + cd $FOLDER + + # Set username and email + OLD_GIT_AUTHOR_NAME=$GIT_AUTHOR_NAME + GIT_AUTHOR_NAME="Testing Tester" + OLD_GIT_AUTHOR_EMAIL=$GIT_AUTHOR_EMAIL + GIT_AUTHOR_EMAIL="test@powerlevel9k.theme" + + # Set default username if not already set! + if [[ -z $(git config user.name) ]]; then + GIT_AUTHOR_NAME_SET_BY_TEST=true + git config --global user.name "${GIT_AUTHOR_NAME}" + fi + # Set default email if not already set! + if [[ -z $(git config user.email) ]]; then + GIT_AUTHOR_EMAIL_SET_BY_TEST=true + git config --global user.email "${GIT_AUTHOR_EMAIL}" + fi + + # Initialize FOLDER as git repository + git init 1>/dev/null +} + +function tearDown() { + if [[ -n "${OLD_GIT_AUTHOR_NAME}" ]]; then + GIT_AUTHOR_NAME=$OLD_GIT_AUTHOR + unset OLD_GIT_AUTHOR_NAME + else + unset GIT_AUTHOR_NAME + fi + + if [[ -n "${OLD_GIT_AUTHOR_EMAIL}" ]]; then + GIT_AUTHOR_EMAIL=$OLD_GIT_AUTHOR_EMAIL + unset OLD_GIT_AUTHOR_EMAIL + else + unset GIT_AUTHOR_EMAIL + fi + + if [[ "${GIT_AUTHOR_NAME_SET_BY_TEST}" == "true" ]]; then + git config --global --unset user.name + fi + if [[ "${GIT_AUTHOR_EMAIL_SET_BY_TEST}" == "true" ]]; then + git config --global --unset user.email + fi + + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test + unset FOLDER +} + +function testColorOverridingForCleanStateWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan' + local POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{006} master %k%F{007}%f " "$(build_left_prompt)" +} + +function testColorOverridingForModifiedStateWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red' + local POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow' + + touch testfile + git add testfile + git commit -m "test" 1>/dev/null + echo "test" > testfile + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{001} master ● %k%F{003}%f " "$(build_left_prompt)" +} + +function testColorOverridingForUntrackedStateWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND='cyan' + local POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND='yellow' + + touch testfile + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{006} master ? %k%F{003}%f " "$(build_left_prompt)" +} + +function testGitIconWorks() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_GIT_ICON='Git-Icon' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000}Git-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)" +} + +function testGitlabIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_GIT_GITLAB_ICON='GL-Icon' + + # Add a GitLab project as remote origin. This is + # sufficient to show the GitLab-specific icon. + git remote add origin https://gitlab.com/dritter/gitlab-test-project.git + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000}GL-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)" +} + +function testBitbucketIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_GIT_BITBUCKET_ICON='BB-Icon' + + # Add a BitBucket project as remote origin. This is + # sufficient to show the BitBucket-specific icon. + git remote add origin https://dritter@bitbucket.org/dritter/dr-test.git + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000}BB-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)" +} + +function testGitHubIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_GIT_GITHUB_ICON='GH-Icon' + + # Add a GitHub project as remote origin. This is + # sufficient to show the GitHub-specific icon. + git remote add origin https://github.com/dritter/test.git + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000}GH-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)" +} + +function testUntrackedFilesIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Create untracked file + touch "i-am-untracked.txt" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} master ? %k%F{002}%f " "$(build_left_prompt)" +} + +function testStagedFilesIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_STAGED_ICON='+' + + # Create staged file + touch "i-am-added.txt" + git add i-am-added.txt &>/dev/null + git commit -m "initial commit" &>/dev/null + echo "xx" >> i-am-added.txt + git add i-am-added.txt &>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000} master + %k%F{003}%f " "$(build_left_prompt)" +} + +function testUnstagedFilesIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_UNSTAGED_ICON='M' + + # Create unstaged (modified, but not added to index) file + touch "i-am-modified.txt" + git add i-am-modified.txt + git commit -m "Add File" 1>/dev/null + echo "xx" > i-am-modified.txt + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000} master M %k%F{003}%f " "$(build_left_prompt)" +} + +function testStashIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_STASH_ICON='S' + + # Create modified file + touch "i-am-modified.txt" + git add i-am-modified.txt + git commit -m "Add File" 1>/dev/null + echo "xx" > i-am-modified.txt + git stash 1>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} master S1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testTagIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_TAG_ICON='T' + + touch "file.txt" + git add file.txt + git commit -m "Add File" 1>/dev/null + git tag "v0.0.1" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} master Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testTagIconInDetachedHeadState() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_TAG_ICON='T' + + touch "file.txt" + git add file.txt + git commit -m "Add File" &>/dev/null + git tag "v0.0.1" + touch "file2.txt" + git add file2.txt + git commit -m "Add File2" &>/dev/null + git checkout v0.0.1 &>/dev/null + local hash=$(git rev-list -n 1 --abbrev-commit --abbrev=8 HEAD) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} ${hash} Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testActionHintWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + + touch "i-am-modified.txt" + git add i-am-modified.txt + git commit -m "Add File" &>/dev/null + + git clone . ../vcs-test2 &>/dev/null + echo "xx" >> i-am-modified.txt + git commit -a -m "Modified file" &>/dev/null + + cd ../vcs-test2 + echo "yy" >> i-am-modified.txt + git commit -a -m "Provoke conflict" &>/dev/null + git pull &>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000} master %F{red}| merge%f %k%F{003}%f " "$(build_left_prompt)" +} + +function testIncomingHintWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON='I' + + touch "i-am-modified.txt" + git add i-am-modified.txt + git commit -m "Add File" &>/dev/null + + git clone . ../vcs-test2 &>/dev/null + echo "xx" >> i-am-modified.txt + git commit -a -m "Modified file" &>/dev/null + + cd ../vcs-test2 + git fetch &>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} master I1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testOutgoingHintWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON='o' + + touch "i-am-modified.txt" + git add i-am-modified.txt + git commit -m "Add File" &>/dev/null + + git clone . ../vcs-test2 &>/dev/null + + cd ../vcs-test2 + + echo "xx" >> i-am-modified.txt + git commit -a -m "Modified file" &>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} master o1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testShorteningCommitHashWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_SHOW_CHANGESET=true + local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4' + + touch "file.txt" + git add file.txt + git commit -m "Add File" 1>/dev/null + local hash=$(git rev-list -n 1 --abbrev-commit --abbrev=3 HEAD) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + # This test needs to call powerlevel9k_vcs_init, where + # the changeset is truncated. + powerlevel9k_vcs_init + assertEquals "%K{002} %F{000}${hash}  master %k%F{002}%f " "$(build_left_prompt)" +} + +function testShorteningCommitHashIsNotShownIfShowChangesetIsFalse() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_SHOW_CHANGESET=false + local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4' + + touch "file.txt" + git add file.txt + git commit -m "Add File" 1>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + # This test needs to call powerlevel9k_vcs_init, where + # the changeset is truncated. + powerlevel9k_vcs_init + assertEquals "%K{002} %F{000} master %k%F{002}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-hg.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-hg.spec new file mode 100755 index 0000000..2903f54 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs-hg.spec @@ -0,0 +1,207 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + + P9K_HOME=$(pwd) + ### Test specific + # Create default folder and hg init it. + FOLDER=/tmp/powerlevel9k-test/vcs-test + mkdir -p "${FOLDER}" + cd $FOLDER + + export HGUSER="Test bot " + + hg init 1>/dev/null +} + +function tearDown() { + # Go back to powerlevel9k folder + cd "${P9K_HOME}" + # Remove eventually created test-specific folder + rm -fr "${FOLDER}" &>/dev/null + # At least remove test folder completely + rm -fr /tmp/powerlevel9k-test &>/dev/null + unset FOLDER + unset HGUSER +} + +function testColorOverridingForCleanStateWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan' + local POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{007} %F{006} default %k%F{007}%f " "$(build_left_prompt)" +} + +function testColorOverridingForModifiedStateWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red' + local POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow' + + touch testfile + hg add testfile + hg commit -m "test" 1>/dev/null + echo "test" > testfile + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{001} default ● %k%F{003}%f " "$(build_left_prompt)" +} + +# There is no staging area in mercurial, therefore there are no "untracked" +# files.. In case there are added files, we show the VCS segment with a +# yellow background. +# This may be improved in future versions, to be a bit more consistent with +# the git part. +function testAddedFilesIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + touch "myfile.txt" + hg add myfile.txt + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000} default ● %k%F{003}%f " "$(build_left_prompt)" +} + +# We don't support tagging in mercurial right now.. +function testTagIconWorks() { + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_TAG_ICON='T' + + touch "file.txt" + hg add file.txt + hg commit -m "Add File" 1>/dev/null + hg tag "v0.0.1" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} default Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testTagIconInDetachedHeadState() { + startSkipping # Skip test + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_TAG_ICON='T' + + touch "file.txt" + hg add file.txt + hg commit -m "Add File" &>/dev/null + hg tag "v0.0.1" + touch "file2.txt" + hg add file2.txt + hg commit -m "Add File2" &>/dev/null + hg checkout v0.0.1 &>/dev/null + local hash=$(hg id) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} ${hash} Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)" +} + +function testActionHintWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + touch "i-am-modified.txt" + hg add i-am-modified.txt + hg commit -m "Add File" &>/dev/null + + hg clone . ../vcs-test2 &>/dev/null + echo "xx" >> i-am-modified.txt + hg commit -m "Modified file" &>/dev/null + + cd ../vcs-test2 + echo "yy" >> i-am-modified.txt + hg commit -m "Provoke conflict" 2>/dev/null + hg pull 1>/dev/null + hg merge --tool internal:merge >/dev/null 2>&1 + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{003} %F{000} default %F{red}| merging%f %k%F{003}%f " "$(build_left_prompt)" +} + +function testShorteningCommitHashWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_SHOW_CHANGESET=true + local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4' + + touch "file.txt" + hg add file.txt + hg commit -m "Add File" 1>/dev/null + local hash=$(hg id | head -c ${POWERLEVEL9K_CHANGESET_HASH_LENGTH}) + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + # This test needs to call powerlevel9k_vcs_init, where + # the changeset is truncated. + powerlevel9k_vcs_init + + assertEquals "%K{002} %F{000}${hash}  default %k%F{002}%f " "$(build_left_prompt)" +} + +function testShorteningCommitHashIsNotShownIfShowChangesetIsFalse() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_SHOW_CHANGESET=false + local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4' + + touch "file.txt" + hg add file.txt + hg commit -m "Add File" 1>/dev/null + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + # This test needs to call powerlevel9k_vcs_init, where + # the changeset is truncated. + powerlevel9k_vcs_init + + assertEquals "%K{002} %F{000} default %k%F{002}%f " "$(build_left_prompt)" +} + +function testMercurialIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_HG_ICON='HG-Icon' + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000}HG-Icon %f%F{000} default %k%F{002}%f " "$(build_left_prompt)" +} + +function testBookmarkIconWorks() { + local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) + local POWERLEVEL9K_VCS_BOOKMARK_ICON='B' + hg bookmark "initial" + + # Load Powerlevel9k + source ${P9K_HOME}/powerlevel9k.zsh-theme + + assertEquals "%K{002} %F{000} default Binitial %k%F{002}%f " "$(build_left_prompt)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs.spec deleted file mode 100755 index f6474f6..0000000 --- a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vcs.spec +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env zsh -#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 - -# Required for shunit2 to run correctly -setopt shwordsplit -SHUNIT_PARENT=$0 - -function setUp() { - export TERM="xterm-256color" - # Load Powerlevel9k - source powerlevel9k.zsh-theme -} - -function testColorOverridingForCleanStateWorks() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan' - POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white' - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - - assertEquals "%K{white} %F{cyan} master %k%F{white}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_CLEAN_FOREGROUND - unset POWERLEVEL9K_VCS_CLEAN_BACKGROUND -} - -function testColorOverridingForModifiedStateWorks() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red' - POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow' - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - git config user.email "test@powerlevel9k.theme" - git config user.name "Testing Tester" - touch testfile - git add testfile - git commit -m "test" 1>/dev/null - echo "test" > testfile - - assertEquals "%K{yellow} %F{red} master ● %k%F{yellow}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_MODIFIED_FOREGROUND - unset POWERLEVEL9K_VCS_MODIFIED_BACKGROUND -} - -function testColorOverridingForUntrackedStateWorks() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND='cyan' - POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND='yellow' - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - touch testfile - - assertEquals "%K{yellow} %F{cyan} master ? %k%F{yellow}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND - unset POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND -} - -function testBranchNameTruncatingShortenLength() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_SHORTEN_LENGTH=6 - POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=3 - POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right" - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - touch testfile - - assertEquals "%K{green} %F{black} master ? %k%F{green}%f " "$(build_left_prompt)" - - POWERLEVEL9K_VCS_SHORTEN_LENGTH=3 - assertEquals "%K{green} %F{black} mas… ? %k%F{green}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_SHORTEN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY -} - -function testBranchNameTruncatingMinLength() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_SHORTEN_LENGTH=3 - POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=6 - POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right" - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - touch testfile - - assertEquals "%K{green} %F{black} master ? %k%F{green}%f " "$(build_left_prompt)" - - POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=7 - - assertEquals "%K{green} %F{black} master ? %k%F{green}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_SHORTEN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY -} - -function testBranchNameTruncatingShortenStrategy() { - POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs) - POWERLEVEL9K_VCS_SHORTEN_LENGTH=3 - POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=3 - POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right" - - FOLDER=/tmp/powerlevel9k-test/vcs-test - mkdir -p $FOLDER - cd $FOLDER - git init 1>/dev/null - touch testfile - - assertEquals "%K{green} %F{black} mas… ? %k%F{green}%f " "$(build_left_prompt)" - - POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_middle" - - assertEquals "%K{green} %F{black} mas…ter ? %k%F{green}%f " "$(build_left_prompt)" - - cd - - rm -fr /tmp/powerlevel9k-test - - unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS - unset POWERLEVEL9K_VCS_SHORTEN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH - unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY -} - -source shunit2/source/2.1/src/shunit2 diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vi_mode.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vi_mode.spec new file mode 100755 index 0000000..6a3a07b --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/segments/vi_mode.spec @@ -0,0 +1,48 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" +} + +function testViInsertModeWorks() { + local KEYMAP='viins' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{004}INSERT " "$(prompt_vi_mode left 1 false)" +} + +function testViInsertModeWorksWhenLabeledAsMain() { + local KEYMAP='main' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{004}INSERT " "$(prompt_vi_mode left 1 false)" +} + +function testViCommandModeWorks() { + local KEYMAP='vicmd' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{007}NORMAL " "$(prompt_vi_mode left 1 false)" +} + +function testViInsertModeStringIsCustomizable() { + local KEYMAP='viins' + + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + assertEquals "%K{000} %F{004}INSERT " "$(prompt_vi_mode left 1 false)" +} + +source shunit2/shunit2 \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/powerlevel9k/test/suite.spec b/.zprezto/modules/prompt/external/powerlevel9k/test/suite.spec new file mode 100755 index 0000000..0e51d32 --- /dev/null +++ b/.zprezto/modules/prompt/external/powerlevel9k/test/suite.spec @@ -0,0 +1,17 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +local failed=false + +for test in **/*.spec; do + echo + echo "Now executing ${test}" + if [[ "${test}" == "test/suite.spec" ]]; then + continue; + fi + ./${test} || failed=true +done + +if [[ "${failed}" == "true" ]]; then + exit 1 +fi \ No newline at end of file diff --git a/.zprezto/modules/prompt/external/pure/package.json b/.zprezto/modules/prompt/external/pure/package.json index 0d5a8cc..467f8f4 100644 --- a/.zprezto/modules/prompt/external/pure/package.json +++ b/.zprezto/modules/prompt/external/pure/package.json @@ -1,6 +1,6 @@ { "name": "pure-prompt", - "version": "1.7.0", + "version": "1.8.0", "description": "Pretty, minimal and fast ZSH prompt", "license": "MIT", "repository": "sindresorhus/pure", diff --git a/.zprezto/modules/prompt/external/pure/pure.plugin.zsh b/.zprezto/modules/prompt/external/pure/pure.plugin.zsh deleted file mode 100644 index 2fd19e8..0000000 --- a/.zprezto/modules/prompt/external/pure/pure.plugin.zsh +++ /dev/null @@ -1,486 +0,0 @@ -# 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} )) - typeset -g 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_set_title() { - setopt localoptions noshwordsplit - - # emacs terminal does not support settings the title - (( ${+EMACS} )) && return - - case $TTY in - # Don't set title over serial console. - /dev/ttyS[0-9]*) return;; - esac - - # 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() { - if [[ -n $prompt_pure_git_fetch_pattern ]]; then - # detect when git is performing pull/fetch (including git aliases). - local -H MATCH MBEGIN MEND match mbegin mend - if [[ $2 =~ (git|hub)\ (.*\ )?($prompt_pure_git_fetch_pattern)(\ .*)?$ ]]; then - # we must flush the async jobs to cancel our git fetch in order - # to avoid conflicts with the user issued pull / fetch. - async_flush_jobs 'prompt_pure' - fi - fi - - typeset -g 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" - - # Disallow python virtualenv from updating the prompt, set it to 12 if - # untouched by the user to indicate that Pure modified it. Here we use - # magic number 12, same as in psvar. - export VIRTUAL_ENV_DISABLE_PROMPT=${VIRTUAL_ENV_DISABLE_PROMPT:-12} -} - -# 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() { - setopt localoptions noshwordsplit - - # 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 - - # Initialize the preprompt array. - local -a preprompt_parts - - # Set the path. - preprompt_parts+=('%F{blue}%~%f') - - # Add git branch and dirty status info. - typeset -gA prompt_pure_vcs_info - if [[ -n $prompt_pure_vcs_info[branch] ]]; then - preprompt_parts+=("%F{$git_color}"'${prompt_pure_vcs_info[branch]}${prompt_pure_git_dirty}%f') - fi - # Git pull/push arrows. - if [[ -n $prompt_pure_git_arrows ]]; then - preprompt_parts+=('%F{cyan}${prompt_pure_git_arrows}%f') - fi - - # Username and machine, if applicable. - [[ -n $prompt_pure_username ]] && preprompt_parts+=('$prompt_pure_username') - # Execution time. - [[ -n $prompt_pure_cmd_exec_time ]] && preprompt_parts+=('%F{yellow}${prompt_pure_cmd_exec_time}%f') - - local cleaned_ps1=$PROMPT - local -H MATCH MBEGIN MEND - if [[ $PROMPT = *$prompt_newline* ]]; then - # When the prompt contains newlines, we keep everything before the first - # and after the last newline, leaving us with everything except the - # preprompt. This is needed because some software prefixes the prompt - # (e.g. virtualenv). - cleaned_ps1=${PROMPT%%${prompt_newline}*}${PROMPT##*${prompt_newline}} - fi - unset MATCH MBEGIN MEND - - # Construct the new prompt with a clean preprompt. - local -ah ps1 - ps1=( - $prompt_newline # Initial newline, for spaciousness. - ${(j. .)preprompt_parts} # Join parts, space separated. - $prompt_newline # Separate preprompt and prompt. - $cleaned_ps1 - ) - - PROMPT="${(j..)ps1}" - - # Expand the prompt for future comparision. - local expanded_prompt - expanded_prompt="${(S%%)PROMPT}" - - if [[ $1 != precmd ]] && [[ $prompt_pure_last_prompt != $expanded_prompt ]]; then - # Redraw the prompt. - zle && zle .reset-prompt - fi - - typeset -g prompt_pure_last_prompt=$expanded_prompt -} - -prompt_pure_precmd() { - # check exec time and store it in a variable - prompt_pure_check_cmd_exec_time - unset prompt_pure_cmd_timestamp - - # shows the full path in the title - prompt_pure_set_title 'expand-prompt' '%~' - - # preform async git dirty check and fetch - prompt_pure_async_tasks - - # Check if we should display the virtual env, we use a sufficiently high - # index of psvar (12) here to avoid collisions with user defined entries. - psvar[12]= - # When VIRTUAL_ENV_DISABLE_PROMPT is empty, it was unset by the user and - # Pure should take back control. - if [[ -n $VIRTUAL_ENV ]] && [[ -z $VIRTUAL_ENV_DISABLE_PROMPT || $VIRTUAL_ENV_DISABLE_PROMPT = 12 ]]; then - psvar[12]="${VIRTUAL_ENV:t}" - export VIRTUAL_ENV_DISABLE_PROMPT=12 - fi - - # print the preprompt - prompt_pure_preprompt_render "precmd" -} - -prompt_pure_async_git_aliases() { - setopt localoptions noshwordsplit - local dir=$1 - local -a gitalias pullalias - - # we enter repo to get local aliases as well. - builtin cd -q $dir - - # list all aliases and split on newline. - gitalias=(${(@f)"$(command git config --get-regexp "^alias\.")"}) - for line in $gitalias; do - parts=(${(@)=line}) # split line on spaces - aliasname=${parts[1]#alias.} # grab the name (alias.[name]) - shift parts # remove aliasname - - # check alias for pull or fetch (must be exact match). - if [[ $parts =~ ^(.*\ )?(pull|fetch)(\ .*)?$ ]]; then - pullalias+=($aliasname) - fi - done - - print -- ${(j:|:)pullalias} # join on pipe (for use in regex). -} - -prompt_pure_async_vcs_info() { - setopt localoptions noshwordsplit - builtin cd -q $1 2>/dev/null - - # configure vcs_info inside async task, this frees up vcs_info - # to be used or configured as the user pleases. - 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 - # export branch (%b) and git toplevel (%R) - zstyle ':vcs_info:git*' formats '%b' '%R' - zstyle ':vcs_info:git*' actionformats '%b|%a' '%R' - - vcs_info - - local -A info - info[top]=$vcs_info_msg_1_ - info[branch]=$vcs_info_msg_0_ - - print -r - ${(@kvq)info} -} - -# fastest possible way to check if repo is dirty -prompt_pure_async_git_dirty() { - setopt localoptions noshwordsplit - local untracked_dirty=$1 dir=$2 - - # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks - builtin cd -q $dir - - 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 - - return $? -} - -prompt_pure_async_git_fetch() { - setopt localoptions noshwordsplit - # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks - builtin cd -q $1 - - # set GIT_TERMINAL_PROMPT=0 to disable auth prompting for git fetch (git 2.3+) - export GIT_TERMINAL_PROMPT=0 - # set ssh BachMode to disable all interactive ssh password prompting - export GIT_SSH_COMMAND=${GIT_SSH_COMMAND:-"ssh -o BatchMode=yes"} - - command git -c gc.auto=0 fetch &>/dev/null || return 99 - - # check arrow status after a successful git fetch - prompt_pure_async_git_arrows $1 -} - -prompt_pure_async_git_arrows() { - setopt localoptions noshwordsplit - builtin cd -q $1 - command git rev-list --left-right --count HEAD...@'{u}' -} - -prompt_pure_async_tasks() { - setopt localoptions noshwordsplit - - # initialize async worker - ((!${prompt_pure_async_init:-0})) && { - async_start_worker "prompt_pure" -u -n - async_register_callback "prompt_pure" prompt_pure_async_callback - typeset -g prompt_pure_async_init=1 - } - - typeset -gA prompt_pure_vcs_info - - local -H MATCH MBEGIN MEND - if ! [[ $PWD = ${prompt_pure_vcs_info[pwd]}* ]]; 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 - unset prompt_pure_git_arrows - unset prompt_pure_git_fetch_pattern - prompt_pure_vcs_info[branch]= - prompt_pure_vcs_info[top]= - fi - unset MATCH MBEGIN MEND - - async_job "prompt_pure" prompt_pure_async_vcs_info $PWD - - # # only perform tasks inside git working tree - [[ -n $prompt_pure_vcs_info[top] ]] || return - - prompt_pure_async_refresh -} - -prompt_pure_async_refresh() { - setopt localoptions noshwordsplit - - if [[ -z $prompt_pure_git_fetch_pattern ]]; then - # we set the pattern here to avoid redoing the pattern check until the - # working three has changed. pull and fetch are always valid patterns. - typeset -g prompt_pure_git_fetch_pattern="pull|fetch" - async_job "prompt_pure" prompt_pure_async_git_aliases $working_tree - fi - - async_job "prompt_pure" prompt_pure_async_git_arrows $PWD - - # 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 $PWD - 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} $PWD - fi -} - -prompt_pure_check_git_arrows() { - setopt localoptions noshwordsplit - local arrows left=${1:-0} right=${2:-0} - - (( right > 0 )) && arrows+=${PURE_GIT_DOWN_ARROW:-⇣} - (( left > 0 )) && arrows+=${PURE_GIT_UP_ARROW:-⇡} - - [[ -n $arrows ]] || return - typeset -g REPLY=$arrows -} - -prompt_pure_async_callback() { - setopt localoptions noshwordsplit - local job=$1 code=$2 output=$3 exec_time=$4 next_pending=$6 - local do_render=0 - - case $job in - prompt_pure_async_vcs_info) - local -A info - typeset -gA prompt_pure_vcs_info - - # parse output (z) and unquote as array (Q@) - info=("${(Q@)${(z)output}}") - local -H MATCH MBEGIN MEND - # check if git toplevel has changed - if [[ $info[top] = $prompt_pure_vcs_info[top] ]]; then - # if stored pwd is part of $PWD, $PWD is shorter and likelier - # to be toplevel, so we update pwd - if [[ $prompt_pure_vcs_info[pwd] = ${PWD}* ]]; then - prompt_pure_vcs_info[pwd]=$PWD - fi - else - # store $PWD to detect if we (maybe) left the git path - prompt_pure_vcs_info[pwd]=$PWD - fi - unset MATCH MBEGIN MEND - - # update has a git toplevel set which means we just entered a new - # git directory, run the async refresh tasks - [[ -n $info[top] ]] && [[ -z $prompt_pure_vcs_info[top] ]] && prompt_pure_async_refresh - - # always update branch and toplevel - prompt_pure_vcs_info[branch]=$info[branch] - prompt_pure_vcs_info[top]=$info[top] - - do_render=1 - ;; - prompt_pure_async_git_aliases) - if [[ -n $output ]]; then - # append custom git aliases to the predefined ones. - prompt_pure_git_fetch_pattern+="|$output" - fi - ;; - prompt_pure_async_git_dirty) - local prev_dirty=$prompt_pure_git_dirty - if (( code == 0 )); then - unset prompt_pure_git_dirty - else - typeset -g prompt_pure_git_dirty="*" - fi - - [[ $prev_dirty != $prompt_pure_git_dirty ]] && do_render=1 - - # 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 > 5 )) && prompt_pure_git_last_dirty_check_timestamp=$EPOCHSECONDS - ;; - prompt_pure_async_git_fetch|prompt_pure_async_git_arrows) - # prompt_pure_async_git_fetch executes prompt_pure_async_git_arrows - # after a successful fetch. - if (( code == 0 )); then - local REPLY - prompt_pure_check_git_arrows ${(ps:\t:)output} - if [[ $prompt_pure_git_arrows != $REPLY ]]; then - typeset -g prompt_pure_git_arrows=$REPLY - do_render=1 - fi - elif (( code != 99 )); then - # Unless the exit code is 99, prompt_pure_async_git_arrows - # failed with a non-zero exit status, meaning there is no - # upstream configured. - if [[ -n $prompt_pure_git_arrows ]]; then - unset prompt_pure_git_arrows - do_render=1 - fi - fi - ;; - esac - - if (( next_pending )); then - (( do_render )) && typeset -g prompt_pure_async_render_requested=1 - return - fi - - [[ ${prompt_pure_async_render_requested:-$do_render} = 1 ]] && prompt_pure_preprompt_render - unset prompt_pure_async_render_requested -} - -prompt_pure_setup() { - # Prevent percentage showing up if output doesn't end with a newline. - export PROMPT_EOL_MARK='' - - prompt_opts=(subst percent) - - # borrowed from promptinit, sets the prompt options in case pure was not - # initialized via promptinit. - setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}" - - if [[ -z $prompt_newline ]]; then - # This variable needs to be set, usually set by promptinit. - typeset -g prompt_newline=$'\n%{\r%}' - fi - - zmodload zsh/datetime - zmodload zsh/zle - zmodload zsh/parameter - - 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 - - # 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' - - # if a virtualenv is activated, display it in grey - PROMPT='%(12V.%F{242}%12v%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/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 index 2fd19e8..429cbbf 100644 --- a/.zprezto/modules/prompt/external/pure/pure.zsh +++ b/.zprezto/modules/prompt/external/pure/pure.zsh @@ -63,18 +63,22 @@ prompt_pure_set_title() { /dev/ttyS[0-9]*) return;; esac - # tell the terminal we are setting the title - print -n '\e]0;' - # show hostname if connected through ssh - [[ -n $SSH_CONNECTION ]] && print -Pn '(%m) ' + # Show hostname if connected via ssh. + local hostname= + if [[ -n $prompt_pure_state[username] ]]; then + # Expand in-place in case ignore-escape is used. + hostname="${(%):-(%m) }" + fi + + local -a opts case $1 in - expand-prompt) - print -Pn $2;; - ignore-escape) - print -rn $2;; + expand-prompt) opts=(-P);; + ignore-escape) opts=(-r);; esac - # end set title - print -n '\a' + + # Set title atomically in one print statement so that it works + # when XTRACE is enabled. + print -n $opts $'\e]0;'${hostname}${2}$'\a' } prompt_pure_preexec() { @@ -99,16 +103,6 @@ prompt_pure_preexec() { export VIRTUAL_ENV_DISABLE_PROMPT=${VIRTUAL_ENV_DISABLE_PROMPT:-12} } -# 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() { setopt localoptions noshwordsplit @@ -134,25 +128,22 @@ prompt_pure_preprompt_render() { fi # Username and machine, if applicable. - [[ -n $prompt_pure_username ]] && preprompt_parts+=('$prompt_pure_username') + [[ -n $prompt_pure_state[username] ]] && preprompt_parts+=('${prompt_pure_state[username]}') # Execution time. [[ -n $prompt_pure_cmd_exec_time ]] && preprompt_parts+=('%F{yellow}${prompt_pure_cmd_exec_time}%f') local cleaned_ps1=$PROMPT local -H MATCH MBEGIN MEND if [[ $PROMPT = *$prompt_newline* ]]; then - # When the prompt contains newlines, we keep everything before the first - # and after the last newline, leaving us with everything except the - # preprompt. This is needed because some software prefixes the prompt - # (e.g. virtualenv). - cleaned_ps1=${PROMPT%%${prompt_newline}*}${PROMPT##*${prompt_newline}} + # Remove everything from the prompt until the newline. This + # removes the preprompt and only the original PROMPT remains. + cleaned_ps1=${PROMPT##*${prompt_newline}} fi unset MATCH MBEGIN MEND # Construct the new prompt with a clean preprompt. local -ah ps1 ps1=( - $prompt_newline # Initial newline, for spaciousness. ${(j. .)preprompt_parts} # Join parts, space separated. $prompt_newline # Separate preprompt and prompt. $cleaned_ps1 @@ -164,7 +155,10 @@ prompt_pure_preprompt_render() { local expanded_prompt expanded_prompt="${(S%%)PROMPT}" - if [[ $1 != precmd ]] && [[ $prompt_pure_last_prompt != $expanded_prompt ]]; then + if [[ $1 == precmd ]]; then + # Initial newline, for spaciousness. + print + elif [[ $prompt_pure_last_prompt != $expanded_prompt ]]; then # Redraw the prompt. zle && zle .reset-prompt fi @@ -193,8 +187,17 @@ prompt_pure_precmd() { export VIRTUAL_ENV_DISABLE_PROMPT=12 fi + # Make sure VIM prompt is reset. + prompt_pure_reset_vim_prompt + # print the preprompt prompt_pure_preprompt_render "precmd" + + if [[ -n $ZSH_THEME ]]; then + print "WARNING: Oh My Zsh themes are enabled (ZSH_THEME='${ZSH_THEME}'). Pure might not be working correctly." + print "For more information, see: https://github.com/sindresorhus/pure#oh-my-zsh" + unset ZSH_THEME # Only show this warning once. + fi } prompt_pure_async_git_aliases() { @@ -269,9 +272,37 @@ prompt_pure_async_git_fetch() { # set GIT_TERMINAL_PROMPT=0 to disable auth prompting for git fetch (git 2.3+) export GIT_TERMINAL_PROMPT=0 # set ssh BachMode to disable all interactive ssh password prompting - export GIT_SSH_COMMAND=${GIT_SSH_COMMAND:-"ssh -o BatchMode=yes"} + export GIT_SSH_COMMAND="${GIT_SSH_COMMAND:-"ssh"} -o BatchMode=yes" - command git -c gc.auto=0 fetch &>/dev/null || return 99 + # Default return code, indicates Git fetch failure. + local fail_code=99 + + # Guard against all forms of password prompts. By setting the shell into + # MONITOR mode we can notice when a child process prompts for user input + # because it will be suspended. Since we are inside an async worker, we + # have no way of transmitting the password and the only option is to + # kill it. If we don't do it this way, the process will corrupt with the + # async worker. + setopt localtraps monitor + + # Make sure local HUP trap is unset to allow for signal propagation when + # the async worker is flushed. + trap - HUP + + trap ' + # Unset trap to prevent infinite loop + trap - CHLD + if [[ $jobstates = suspended* ]]; then + # Set fail code to password prompt and kill the fetch. + fail_code=98 + kill %% + fi + ' CHLD + + command git -c gc.auto=0 fetch >/dev/null & + wait $! || return $fail_code + + unsetopt monitor # check arrow status after a successful git fetch prompt_pure_async_git_arrows $1 @@ -416,22 +447,27 @@ prompt_pure_async_callback() { prompt_pure_async_git_fetch|prompt_pure_async_git_arrows) # prompt_pure_async_git_fetch executes prompt_pure_async_git_arrows # after a successful fetch. - if (( code == 0 )); then - local REPLY - prompt_pure_check_git_arrows ${(ps:\t:)output} - if [[ $prompt_pure_git_arrows != $REPLY ]]; then - typeset -g prompt_pure_git_arrows=$REPLY - do_render=1 - fi - elif (( code != 99 )); then - # Unless the exit code is 99, prompt_pure_async_git_arrows - # failed with a non-zero exit status, meaning there is no - # upstream configured. - if [[ -n $prompt_pure_git_arrows ]]; then - unset prompt_pure_git_arrows - do_render=1 - fi - fi + case $code in + 0) + local REPLY + prompt_pure_check_git_arrows ${(ps:\t:)output} + if [[ $prompt_pure_git_arrows != $REPLY ]]; then + typeset -g prompt_pure_git_arrows=$REPLY + do_render=1 + fi + ;; + 99|98) + # Git fetch failed. + ;; + *) + # Non-zero exit status from prompt_pure_async_git_arrows, + # indicating that there is no upstream configured. + if [[ -n $prompt_pure_git_arrows ]]; then + unset prompt_pure_git_arrows + do_render=1 + fi + ;; + esac ;; esac @@ -444,6 +480,67 @@ prompt_pure_async_callback() { unset prompt_pure_async_render_requested } +prompt_pure_update_vim_prompt() { + setopt localoptions noshwordsplit + prompt_pure_state[prompt]=${${KEYMAP/vicmd/${PURE_PROMPT_VICMD_SYMBOL:-❮}}/(main|viins)/${PURE_PROMPT_SYMBOL:-❯}} + zle && zle .reset-prompt +} + +prompt_pure_reset_vim_prompt() { + setopt localoptions noshwordsplit + prompt_pure_state[prompt]=${PURE_PROMPT_SYMBOL:-❯} + zle && zle .reset-prompt +} + +prompt_pure_state_setup() { + setopt localoptions noshwordsplit + + # Check SSH_CONNECTION and the current state. + local ssh_connection=${SSH_CONNECTION:-$PROMPT_PURE_SSH_CONNECTION} + local username + if [[ -z $ssh_connection ]] && (( $+commands[who] )); then + # When changing user on a remote system, the $SSH_CONNECTION + # environment variable can be lost, attempt detection via who. + local who_out + who_out=$(who -m 2>/dev/null) + if (( $? )); then + # Who am I not supported, fallback to plain who. + who_out=$(who 2>/dev/null | grep ${TTY#/dev/}) + fi + + local reIPv6='(([0-9a-fA-F]+:)|:){2,}[0-9a-fA-F]+' # Simplified, only checks partial pattern. + local reIPv4='([0-9]{1,3}\.){3}[0-9]+' # Simplified, allows invalid ranges. + # Here we assume two non-consecutive periods represents a + # hostname. This matches foo.bar.baz, but not foo.bar. + local reHostname='([.][^. ]+){2}' + + # Usually the remote address is surrounded by parenthesis, but + # not on all systems (e.g. busybox). + local -H MATCH MBEGIN MEND + if [[ $who_out =~ "\(?($reIPv4|$reIPv6|$reHostname)\)?\$" ]]; then + ssh_connection=$MATCH + + # Export variable to allow detection propagation inside + # shells spawned by this one (e.g. tmux does not always + # inherit the same tty, which breaks detection). + export PROMPT_PURE_SSH_CONNECTION=$ssh_connection + fi + unset MATCH MBEGIN MEND + fi + + # show username@host if logged in through SSH + [[ -n $ssh_connection ]] && username='%F{242}%n@%m%f' + + # show username@host if root, with username in white + [[ $UID -eq 0 ]] && username='%F{white}%n%f%F{242}@%m%f' + + typeset -gA prompt_pure_state + prompt_pure_state=( + username "$username" + prompt "${PURE_PROMPT_SYMBOL:-❯}" + ) +} + prompt_pure_setup() { # Prevent percentage showing up if output doesn't end with a newline. export PROMPT_EOL_MARK='' @@ -467,20 +564,56 @@ prompt_pure_setup() { autoload -Uz vcs_info autoload -Uz async && async + # The add-zle-hook-widget function is not guaranteed + # to be available, it was added in Zsh 5.3. + autoload -Uz +X add-zle-hook-widget 2>/dev/null + add-zsh-hook precmd prompt_pure_precmd add-zsh-hook preexec prompt_pure_preexec - # show username@host if logged in through SSH - [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username='%F{242}%n@%m%f' + prompt_pure_state_setup - # show username@host if root, with username in white - [[ $UID -eq 0 ]] && prompt_pure_username='%F{white}%n%f%F{242}@%m%f' + zle -N prompt_pure_update_vim_prompt + zle -N prompt_pure_reset_vim_prompt + if (( $+functions[add-zle-hook-widget] )); then + add-zle-hook-widget zle-line-finish prompt_pure_reset_vim_prompt + add-zle-hook-widget zle-keymap-select prompt_pure_update_vim_prompt + fi # if a virtualenv is activated, display it in grey PROMPT='%(12V.%F{242}%12v%f .)' # prompt turns red if the previous command didn't exit with 0 - PROMPT+='%(?.%F{magenta}.%F{red})${PURE_PROMPT_SYMBOL:-❯}%f ' + PROMPT+='%(?.%F{magenta}.%F{red})${prompt_pure_state[prompt]}%f ' + + # Store prompt expansion symbols for in-place expansion via (%). For + # some reason it does not work without storing them in a variable first. + typeset -ga prompt_pure_debug_depth + prompt_pure_debug_depth=('%e' '%N' '%x') + + # Compare is used to check if %N equals %x. When they differ, the main + # prompt is used to allow displaying both file name and function. When + # they match, we use the secondary prompt to avoid displaying duplicate + # information. + local -A ps4_parts + ps4_parts=( + depth '%F{yellow}${(l:${(%)prompt_pure_debug_depth[1]}::+:)}%f' + compare '${${(%)prompt_pure_debug_depth[2]}:#${(%)prompt_pure_debug_depth[3]}}' + main '%F{blue}${${(%)prompt_pure_debug_depth[3]}:t}%f%F{242}:%I%f %F{242}@%f%F{blue}%N%f%F{242}:%i%f' + secondary '%F{blue}%N%f%F{242}:%i' + prompt '%F{242}>%f ' + ) + # Combine the parts with conditional logic. First the `:+` operator is + # used to replace `compare` either with `main` or an ampty string. Then + # the `:-` operator is used so that if `compare` becomes an empty + # string, it is replaced with `secondary`. + local ps4_symbols='${${'${ps4_parts[compare]}':+"'${ps4_parts[main]}'"}:-"'${ps4_parts[secondary]}'"}' + + # Improve the debug prompt (PS4), show depth by repeating the +-sign and + # add colors to highlight essential parts like file and function name. + PROMPT4="${ps4_parts[depth]} ${ps4_symbols}${ps4_parts[prompt]}" + + unset ZSH_THEME # Guard against Oh My Zsh themes overriding Pure. } prompt_pure_setup "$@" diff --git a/.zprezto/modules/prompt/external/pure/readme.md b/.zprezto/modules/prompt/external/pure/readme.md index e3d9958..9c93517 100644 --- a/.zprezto/modules/prompt/external/pure/readme.md +++ b/.zprezto/modules/prompt/external/pure/readme.md @@ -19,6 +19,7 @@ Most prompts are cluttered, ugly and slow. I wanted something visually pleasing - 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. +- Support VI-mode indication by reverse prompt symbol (Zsh 5.3+). - Makes an excellent starting point for your own custom prompt. @@ -41,7 +42,7 @@ That's it. Skip to [Getting started](#getting-started). - add it as a submodule, or - just download [`pure.zsh`](pure.zsh) and [`async.zsh`](async.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`. +2. Symlink `pure.zsh` to somewhere in [`$fpath`](https://www.refining-linux.org/archives/46-ZSH-Gem-12-Autoloading-functions.html) with the name `prompt_pure_setup`. 3. Symlink `async.zsh` in `$fpath` with the name `async`. @@ -81,33 +82,16 @@ 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 > 5 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 `⇡`. +| Option | Description | Default value | +| :------------------------------- | :--------------------------------------------------------------------------------------------- | :------------- | +| **`PURE_CMD_MAX_EXEC_TIME`** | The max execution time of a process before its run time is shown when it exits. | `5` seconds | +| **`PURE_GIT_PULL=0`** | Prevents Pure from checking whether the current Git remote has been updated. | | +| **`PURE_GIT_UNTRACKED_DIRTY=0`** | Do not include untracked files in dirtiness check. Mostly useful on large repos (like WebKit). | | +| **`PURE_GIT_DELAY_DIRTY_CHECK`** | Time in seconds to delay git dirty checking when `git status` takes > 5 seconds. | `1800` seconds | +| **`PURE_PROMPT_SYMBOL`** | Defines the prompt symbol. | `❯` | +| **`PURE_PROMPT_VICMD_SYMBOL`** | Defines the prompt symbol used when the `vicmd` keymap is active (VI-mode). | `❮` | +| **`PURE_GIT_DOWN_ARROW`** | Defines the git down arrow symbol. | `⇣` | +| **`PURE_GIT_UP_ARROW`** | Defines the git up arrow symbol. | `⇡` | ## Example @@ -139,6 +123,7 @@ To have commands colorized as seen in the screenshot, install [zsh-syntax-highli 1. Set `ZSH_THEME=""` in your `.zshrc` to disable oh-my-zsh themes. 2. Follow the Pure [Install](#install) instructions. +3. Do not enable the following (incompatible) plugins: `vi-mode`, `virtualenv`. **NOTE:** `oh-my-zsh` overrides the prompt so Pure must be activated *after* `source $ZSH/oh-my-zsh.sh`. @@ -192,26 +177,9 @@ zplugin light sindresorhus/pure ## FAQ -### I am stuck in a shell loop in my terminal that asks 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 - -```console -$ 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)). +There are currently no FAQs. +See [FAQ Archive](https://github.com/sindresorhus/pure/wiki/FAQ-Archive) for previous FAQs. ## Ports diff --git a/.zprezto/modules/prompt/functions/async b/.zprezto/modules/prompt/functions/async deleted file mode 100644 index 1257029..0000000 --- a/.zprezto/modules/prompt/functions/async +++ /dev/null @@ -1,499 +0,0 @@ -#!/usr/bin/env zsh - -# -# zsh-async -# -# version: 1.6.2 -# author: Mathias Fredriksson -# url: https://github.com/mafredri/zsh-async -# - -typeset -g ASYNC_VERSION=1.6.2 -# Produce debug output from zsh-async when set to 1. -typeset -g ASYNC_DEBUG=${ASYNC_DEBUG:-0} - -# Wrapper for jobs executed by the async worker, gives output in parseable format with execution time -_async_job() { - # Disable xtrace as it would mangle the output. - setopt localoptions noxtrace - - # Store start time for job. - float -F duration=$EPOCHREALTIME - - # Run the command and capture both stdout (`eval`) and stderr (`cat`) in - # separate subshells. When the command is complete, we grab write lock - # (mutex token) and output everything except stderr inside the command - # block, after the command block has completed, the stdin for `cat` is - # closed, causing stderr to be appended with a $'\0' at the end to mark the - # end of output from this job. - local stdout stderr ret tok - { - stdout=$(eval "$@") - ret=$? - duration=$(( EPOCHREALTIME - duration )) # Calculate duration. - - # Grab mutex lock, stalls until token is available. - read -r -k 1 -p tok || exit 1 - - # Return output ( ). - print -r -n - ${(q)1} $ret ${(q)stdout} $duration - } 2> >(stderr=$(cat) && print -r -n - " "${(q)stderr}$'\0') - - # Unlock mutex by inserting a token. - print -n -p $tok -} - -# The background worker manages all tasks and runs them without interfering with other processes -_async_worker() { - # Reset all options to defaults inside async worker. - emulate -R zsh - - # Make sure monitor is unset to avoid printing the - # pids of child processes. - unsetopt monitor - - # Redirect stderr to `/dev/null` in case unforseen errors produced by the - # worker. For example: `fork failed: resource temporarily unavailable`. - # Some older versions of zsh might also print malloc errors (know to happen - # on at least zsh 5.0.2 and 5.0.8) likely due to kill signals. - exec 2>/dev/null - - # When a zpty is deleted (using -d) all the zpty instances created before - # the one being deleted receive a SIGHUP, unless we catch it, the async - # worker would simply exit (stop working) even though visible in the list - # of zpty's (zpty -L). - TRAPHUP() { - return 0 # Return 0, indicating signal was handled. - } - - local -A storage - local unique=0 - local notify_parent=0 - local parent_pid=0 - local coproc_pid=0 - local processing=0 - - local -a zsh_hooks zsh_hook_functions - zsh_hooks=(chpwd periodic precmd preexec zshexit zshaddhistory) - zsh_hook_functions=(${^zsh_hooks}_functions) - unfunction $zsh_hooks &>/dev/null # Deactivate all zsh hooks inside the worker. - unset $zsh_hook_functions # And hooks with registered functions. - unset zsh_hooks zsh_hook_functions # Cleanup. - - child_exit() { - local -a pids - pids=(${${(v)jobstates##*:*:}%\=*}) - - # If coproc (cat) is the only child running, we close it to avoid - # leaving it running indefinitely and cluttering the process tree. - if (( ! processing )) && [[ $#pids = 1 ]] && [[ $coproc_pid = $pids[1] ]]; then - coproc : - coproc_pid=0 - fi - - # On older version of zsh (pre 5.2) we notify the parent through a - # SIGWINCH signal because `zpty` did not return a file descriptor (fd) - # prior to that. - if (( notify_parent )); then - # We use SIGWINCH for compatibility with older versions of zsh - # (pre 5.1.1) where other signals (INFO, ALRM, USR1, etc.) could - # cause a deadlock in the shell under certain circumstances. - kill -WINCH $parent_pid - fi - } - - # Register a SIGCHLD trap to handle the completion of child processes. - trap child_exit CHLD - - # Process option parameters passed to worker - while getopts "np:u" opt; do - case $opt in - n) notify_parent=1;; - p) parent_pid=$OPTARG;; - u) unique=1;; - esac - done - - killjobs() { - local tok - local -a pids - pids=(${${(v)jobstates##*:*:}%\=*}) - - # No need to send SIGHUP if no jobs are running. - (( $#pids == 0 )) && continue - (( $#pids == 1 )) && [[ $coproc_pid = $pids[1] ]] && continue - - # Grab lock to prevent half-written output in case a child - # process is in the middle of writing to stdin during kill. - (( coproc_pid )) && read -r -k 1 -p tok - - kill -HUP -$$ # Send to entire process group. - coproc : # Quit coproc. - coproc_pid=0 # Reset pid. - } - - local request - local -a cmd - while :; do - # Wait for jobs sent by async_job. - read -r -d $'\0' request || { - # Since we handle SIGHUP above (and thus do not know when `zpty -d`) - # occurs, a failure to read probably indicates that stdin has - # closed. This is why we propagate the signal to all children and - # exit manually. - kill -HUP -$$ # Send SIGHUP to all jobs. - exit 0 - } - - # Check for non-job commands sent to worker - case $request in - _unset_trap) notify_parent=0; continue;; - _killjobs) killjobs; continue;; - esac - - # Parse the request using shell parsing (z) to allow commands - # to be parsed from single strings and multi-args alike. - cmd=("${(z)request}") - - # Name of the job (first argument). - local job=$cmd[1] - - # 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 - - # Guard against closing coproc from trap before command has started. - processing=1 - - # Because we close the coproc after the last job has completed, we must - # recreate it when there are no other jobs running. - if (( ! coproc_pid )); then - # Use coproc as a mutex for synchronized output between children. - coproc cat - coproc_pid="$!" - # Insert token into coproc - print -n -p "t" - fi - - # Run job in background, completed jobs are printed to stdout. - _async_job $cmd & - # Store pid because zsh job manager is extremely unflexible (show jobname as non-unique '$job')... - storage[$job]="$!" - - processing=0 # Disable guard. - 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 -# $6 = has next result in buffer (0 = buffer empty, 1 = yes) -# -async_process_results() { - setopt localoptions unset noshwordsplit noksharrays noposixidentifiers noposixstrings - - local worker=$1 - local callback=$2 - local caller=$3 - local -a items - local null=$'\0' data - integer -l len pos num_processed has_next - - typeset -gA ASYNC_PROCESS_BUFFER - - # Read output from zpty and parse it if available. - while zpty -r -t $worker data 2>/dev/null; do - ASYNC_PROCESS_BUFFER[$worker]+=$data - len=${#ASYNC_PROCESS_BUFFER[$worker]} - pos=${ASYNC_PROCESS_BUFFER[$worker][(i)$null]} # Get index of NULL-character (delimiter). - - # Keep going until we find a NULL-character. - if (( ! len )) || (( pos > len )); then - continue - fi - - while (( pos <= len )); do - # Take the content from the beginning, until the NULL-character and - # perform shell parsing (z) and unquoting (Q) as an array (@). - items=("${(@Q)${(z)ASYNC_PROCESS_BUFFER[$worker][1,$pos-1]}}") - - # Remove the extracted items from the buffer. - ASYNC_PROCESS_BUFFER[$worker]=${ASYNC_PROCESS_BUFFER[$worker][$pos+1,$len]} - - len=${#ASYNC_PROCESS_BUFFER[$worker]} - if (( len > 1 )); then - pos=${ASYNC_PROCESS_BUFFER[$worker][(i)$null]} # Get index of NULL-character (delimiter). - fi - - has_next=$(( len != 0 )) - if (( $#items == 5 )); then - items+=($has_next) - $callback "${(@)items}" # Send all parsed items to the callback. - else - # In case of corrupt data, invoke callback with *async* as job - # name, non-zero exit status and an error message on stderr. - $callback "async" 1 "" 0 "$0:$LINENO: error: bad format, got ${#items} items (${(q)items})" $has_next - fi - - (( num_processed++ )) - done - done - - (( num_processed )) && return 0 - - # Avoid printing exit value when `setopt printexitvalue` is active.` - [[ $caller = trap || $caller = watcher ]] && return 0 - - # No results were processed - return 1 -} - -# Watch worker for output -_async_zle_watcher() { - setopt localoptions noshwordsplit - typeset -gA ASYNC_PTYS ASYNC_CALLBACKS - local worker=$ASYNC_PTYS[$1] - local callback=$ASYNC_CALLBACKS[$worker] - - if [[ -n $callback ]]; then - async_process_results $worker $callback watcher - fi -} - -# -# Start a new asynchronous job on specified worker, assumes the worker is running. -# -# usage: -# async_job [] -# -async_job() { - setopt localoptions noshwordsplit noksharrays noposixidentifiers noposixstrings - - local worker=$1; shift - - local -a cmd - cmd=("$@") - if (( $#cmd > 1 )); then - cmd=(${(q)cmd}) # Quote special characters in multi argument commands. - fi - - # Quote the cmd in case RC_EXPAND_PARAM is set. - zpty -w $worker "$cmd"$'\0' -} - -# This function traps notification signals and calls all registered callbacks -_async_notify_trap() { - setopt localoptions noshwordsplit - - local k - for k in ${(k)ASYNC_CALLBACKS}; do - async_process_results $k ${ASYNC_CALLBACKS[$k]} trap - 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() { - setopt localoptions noshwordsplit nolocaltraps - - typeset -gA ASYNC_CALLBACKS - local worker=$1; shift - - ASYNC_CALLBACKS[$worker]="$*" - - # Enable trap when the ZLE watcher is unavailable, allows - # workers to notify (via -n) when a job is done. - if [[ ! -o interactive ]] || [[ ! -o zle ]]; then - trap '_async_notify_trap' WINCH - fi -} - -# -# 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() { - setopt localoptions noshwordsplit - - local worker=$1; shift - - # Check if the worker exists - zpty -t $worker &>/dev/null || return 1 - - # Send kill command to worker - async_job $worker "_killjobs" - - # Clear the zpty buffer. - local junk - if zpty -r -t $worker junk '*'; then - (( ASYNC_DEBUG )) && print -n "async_flush_jobs $worker: ${(V)junk}" - while zpty -r -t $worker junk '*'; do - (( ASYNC_DEBUG )) && print -n "${(V)junk}" - done - (( ASYNC_DEBUG )) && print - fi - - # Finally, clear the process buffer in case of partially parsed responses. - typeset -gA ASYNC_PROCESS_BUFFER - unset "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() { - setopt localoptions noshwordsplit - - local worker=$1; shift - zpty -t $worker &>/dev/null && return - - typeset -gA ASYNC_PTYS - typeset -h REPLY - typeset has_xtrace=0 - - # Make sure async worker is started without xtrace - # (the trace output interferes with the worker). - [[ -o xtrace ]] && { - has_xtrace=1 - unsetopt xtrace - } - - if (( ! ASYNC_ZPTY_RETURNS_FD )) && [[ -o interactive ]] && [[ -o zle ]]; then - # When zpty doesn't return a file descriptor (on older versions of zsh) - # we try to guess it anyway. - integer -l zptyfd - exec {zptyfd}>&1 # Open a new file descriptor (above 10). - exec {zptyfd}>&- # Close it so it's free to be used by zpty. - fi - - zpty -b $worker _async_worker -p $$ $@ || { - async_stop_worker $worker - return 1 - } - - # Re-enable it if it was enabled, for debugging. - (( has_xtrace )) && setopt xtrace - - if [[ $ZSH_VERSION < 5.0.8 ]]; then - # For ZSH versions older than 5.0.8 we delay a bit to give - # time for the worker to start before issuing commands, - # otherwise it will not be ready to receive them. - sleep 0.001 - fi - - if [[ -o interactive ]] && [[ -o zle ]]; then - if (( ! ASYNC_ZPTY_RETURNS_FD )); then - REPLY=$zptyfd # Use the guessed value for the file desciptor. - fi - - ASYNC_PTYS[$REPLY]=$worker # Map the file desciptor to the worker. - zle -F $REPLY _async_zle_watcher # Register the ZLE handler. - - # Disable trap in favor of ZLE handler when notify is enabled (-n). - async_job $worker _unset_trap - fi -} - -# -# Stop one or multiple workers that are running, all unfetched and incomplete work will be lost. -# -# usage: -# async_stop_worker [] -# -async_stop_worker() { - setopt localoptions noshwordsplit - - local ret=0 worker k v - for worker in $@; do - # Find and unregister the zle handler for the worker - for k v in ${(@kv)ASYNC_PTYS}; do - if [[ $v == $worker ]]; then - zle -F $k - unset "ASYNC_PTYS[$k]" - fi - done - async_unregister_callback $worker - zpty -d $worker 2>/dev/null || ret=$? - - # Clear any partial buffers. - typeset -gA ASYNC_PROCESS_BUFFER - unset "ASYNC_PROCESS_BUFFER[$worker]" - done - - return $ret -} - -# -# Initialize the required modules for zsh-async. To be called before using the zsh-async library. -# -# usage: -# async_init -# -async_init() { - (( ASYNC_INIT_DONE )) && return - typeset -g ASYNC_INIT_DONE=1 - - zmodload zsh/zpty - zmodload zsh/datetime - - # Check if zsh/zpty returns a file descriptor or not, - # shell must also be interactive with zle enabled. - typeset -g ASYNC_ZPTY_RETURNS_FD=0 - [[ -o interactive ]] && [[ -o zle ]] && { - typeset -h REPLY - zpty _async_test : - (( REPLY )) && ASYNC_ZPTY_RETURNS_FD=1 - zpty -d _async_test - } -} - -async() { - async_init -} - -async "$@" diff --git a/.zprezto/modules/prompt/functions/async b/.zprezto/modules/prompt/functions/async new file mode 120000 index 0000000..ae0ec55 --- /dev/null +++ b/.zprezto/modules/prompt/functions/async @@ -0,0 +1 @@ +../external/async/async.zsh \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_agnoster_setup b/.zprezto/modules/prompt/functions/prompt_agnoster_setup deleted file mode 100644 index 4eceafd..0000000 --- a/.zprezto/modules/prompt/functions/prompt_agnoster_setup +++ /dev/null @@ -1,165 +0,0 @@ -# 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' -if [[ -z "$PRIMARY_FG" ]]; then - PRIMARY_FG=black -fi - -# 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 -n " $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 " -} - -# Display current virtual environment -prompt_virtualenv() { - if [[ -n $VIRTUAL_ENV ]]; then - color=cyan - prompt_segment $color $PRIMARY_FG - print -Pn " $(basename $VIRTUAL_ENV) " - fi -} - -## Main prompt -prompt_agnoster_main() { - RETVAL=$? - CURRENT_BG='NONE' - prompt_status - prompt_context - prompt_virtualenv - 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/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_minimal_setup b/.zprezto/modules/prompt/functions/prompt_minimal_setup index 7456ffd..b600768 100644 --- a/.zprezto/modules/prompt/functions/prompt_minimal_setup +++ b/.zprezto/modules/prompt/functions/prompt_minimal_setup @@ -47,4 +47,13 @@ function prompt_minimal_setup { RPROMPT='' } +function prompt_minimal_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2> /dev/null + prompt_preview_theme 'minimal' +} + prompt_minimal_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup b/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup deleted file mode 100755 index c1ea754..0000000 --- a/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup +++ /dev/null @@ -1,1912 +0,0 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# powerlevel9k Theme -# https://github.com/bhilburn/powerlevel9k -# -# This theme was inspired by agnoster's Theme: -# https://gist.github.com/3712874 -################################################################ - -################################################################ -# For basic documentation, please refer to the README.md in the top-level -# directory. For more detailed documentation, refer to the project wiki, hosted -# on Github: https://github.com/bhilburn/powerlevel9k/wiki -# -# There are a lot of easy ways you can customize your prompt segments and -# theming with simple variables defined in your `~/.zshrc`. -################################################################ - -## Turn on for Debugging -#PS4='%s%f%b%k%F{blue}%{λ%}%L %F{240}%N:%i%(?.. %F{red}%?) %1(_.%F{yellow}%-1_ .)%s%f%b%k ' -#zstyle ':vcs_info:*+*:*' debug true -#set -o xtrace - -# Try to set the installation path -if [[ -n "$POWERLEVEL9K_INSTALLATION_DIR" ]]; then - p9k_directory=${POWERLEVEL9K_INSTALLATION_DIR:A} -else - if [[ "${(%):-%N}" == '(eval)' ]]; then - if [[ "$0" == '-antigen-load' ]] && [[ -r "${PWD}/powerlevel9k.zsh-theme" ]]; then - # Antigen uses eval to load things so it can change the plugin (!!) - # https://github.com/zsh-users/antigen/issues/581 - p9k_directory=$PWD - else - print -P "%F{red}You must set POWERLEVEL9K_INSTALLATION_DIR work from within an (eval).%f" - return 1 - fi - else - # Get the path to file this code is executing in; then - # get the absolute path and strip the filename. - # See https://stackoverflow.com/a/28336473/108857 - p9k_directory=${${(%):-%x}:A:h} - fi -fi - -################################################################ -# Source icon functions -################################################################ - -source "${p9k_directory}/functions/icons.zsh" - -################################################################ -# Source utility functions -################################################################ - -source "${p9k_directory}/functions/utilities.zsh" - -################################################################ -# Source color functions -################################################################ - -source "${p9k_directory}/functions/colors.zsh" - -################################################################ -# Source VCS_INFO hooks / helper functions -################################################################ - -source "${p9k_directory}/functions/vcs.zsh" - -# cleanup temporary variables. -unset p9k_directory - -################################################################ -# Color Scheme -################################################################ - -if [[ "$POWERLEVEL9K_COLOR_SCHEME" == "light" ]]; then - DEFAULT_COLOR=white - DEFAULT_COLOR_INVERTED=black -else - DEFAULT_COLOR=black - DEFAULT_COLOR_INVERTED=white -fi - -################################################################ -# Prompt Segment Constructors -# -# Methodology behind user-defined variables overwriting colors: -# The first parameter to the segment constructors is the calling function's -# name. From this function name, we strip the "prompt_"-prefix and -# uppercase it. This is then prefixed with "POWERLEVEL9K_" and suffixed -# with either "_BACKGROUND" or "_FOREGROUND", thus giving us the variable -# name. So each new segment is user-overwritten by a variable following -# this naming convention. -################################################################ - -# The `CURRENT_BG` variable is used to remember what the last BG color used was -# when building the left-hand prompt. Because the RPROMPT is created from -# right-left but reads the opposite, this isn't necessary for the other side. -CURRENT_BG='NONE' - -# Begin a left prompt segment -# Takes four arguments: -# * $1: Name of the function that was originally invoked (mandatory). -# Necessary, to make the dynamic color-overwrite mechanism work. -# * $2: The array index of the current segment -# * $3: Background color -# * $4: Foreground color -# * $5: The segment content -# * $6: An identifying icon (must be a key of the icons array) -# The latter three can be omitted, -set_default last_left_element_index 1 -set_default POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS " " -left_prompt_segment() { - local current_index=$2 - # Check if the segment should be joined with the previous one - local joined - segmentShouldBeJoined $current_index $last_left_element_index "$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS" && joined=true || joined=false - - # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND - local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" - - # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND - local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" - - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" - - if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$3" "$CURRENT_BG"; then - echo -n "$bg%F{$CURRENT_BG}" - if [[ $joined == false ]]; then - # Middle segment - echo -n "$(print_icon 'LEFT_SEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - elif isSameColor "$CURRENT_BG" "$3"; then - # Middle segment with same color as previous segment - # We take the current foreground color as color for our - # subsegment (or the default color). This should have - # enough contrast. - local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" - echo -n "${bg}${complement}" - if [[ $joined == false ]]; then - echo -n "$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - else - # First segment - echo -n "${bg}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" - fi - - local visual_identifier - if [[ -n $6 ]]; then - visual_identifier="$(print_icon $6)" - if [[ -n "$visual_identifier" ]]; then - # Add an whitespace if we print more than just the visual identifier. - # To avoid cutting off the visual identifier in some terminal emulators (e.g., Konsole, st), - # we need to color both the visual identifier and the whitespace. - [[ -n "$5" ]] && visual_identifier="$visual_identifier " - # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" - fi - fi - - # Print the visual identifier - echo -n "${visual_identifier}" - # Print the content of the segment, if there is any - [[ -n "$5" ]] && echo -n "${fg}${5}" - echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS}" - - CURRENT_BG=$3 - last_left_element_index=$current_index -} - -# End the left prompt, closes the final segment. -left_prompt_end() { - if [[ -n $CURRENT_BG ]]; then - echo -n "%k%F{$CURRENT_BG}$(print_icon 'LEFT_SEGMENT_SEPARATOR')" - else - echo -n "%k" - fi - echo -n "%f$(print_icon 'LEFT_SEGMENT_END_SEPARATOR')" - CURRENT_BG='' -} - -CURRENT_RIGHT_BG='NONE' - -# Begin a right prompt segment -# Takes four arguments: -# * $1: Name of the function that was originally invoked (mandatory). -# Necessary, to make the dynamic color-overwrite mechanism work. -# * $2: The array index of the current segment -# * $3: Background color -# * $4: Foreground color -# * $5: The segment content -# * $6: An identifying icon (must be a key of the icons array) -# No ending for the right prompt segment is needed (unlike the left prompt, above). -set_default last_right_element_index 1 -set_default POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS " " -right_prompt_segment() { - local current_index=$2 - - # Check if the segment should be joined with the previous one - local joined - segmentShouldBeJoined $current_index $last_right_element_index "$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS" && joined=true || joined=false - - # Overwrite given background-color by user defined variable for this segment. - local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND - local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} - [[ -n $BG_COLOR_MODIFIER ]] && 3="$BG_COLOR_MODIFIER" - - # Overwrite given foreground-color by user defined variable for this segment. - local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND - local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} - [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" - - local bg fg - [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)" - [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)" - - # If CURRENT_RIGHT_BG is "NONE", we are the first right segment. - - if [[ "$CURRENT_RIGHT_BG" != "NONE" ]]; then - # This is the closing whitespace for the previous segment - echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS}%f" - fi - - if [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]]; then - if isSameColor "$CURRENT_RIGHT_BG" "$3"; then - # Middle segment with same color as previous segment - # We take the current foreground color as color for our - # subsegment (or the default color). This should have - # enough contrast. - local complement - [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)" - echo -n "$complement$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f" - else - # Use the new BG color for the foreground with separator - echo -n "$(foregroundColor $3)$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f" - fi - fi - - local visual_identifier - if [[ -n "$6" ]]; then - visual_identifier="$(print_icon $6)" - if [[ -n "$visual_identifier" ]]; then - # Add an whitespace if we print more than just the visual identifier. - # To avoid cutting off the visual identifier in some terminal emulators (e.g., Konsole, st), - # we need to color both the visual identifier and the whitespace. - [[ -n "$5" ]] && visual_identifier=" $visual_identifier" - # Allow users to overwrite the color for the visual identifier only. - local visual_identifier_color_variable=POWERLEVEL9K_${(U)1#prompt_}_VISUAL_IDENTIFIER_COLOR - set_default $visual_identifier_color_variable $4 - visual_identifier="%F{${(P)visual_identifier_color_variable}%}$visual_identifier%f" - fi - fi - - echo -n "${bg}${fg}" - - # Print whitespace only if segment is not joined or first right segment - [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]] && echo -n "${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS}" - - # Print segment content if there is any - [[ -n "$5" ]] && echo -n "${5}" - # Print the visual identifier - echo -n "${visual_identifier}" - - CURRENT_RIGHT_BG=$3 - last_right_element_index=$current_index -} - -################################################################ -# Prompt Segment Definitions -################################################################ - -# The `CURRENT_BG` variable is used to remember what the last BG color used was -# when building the left-hand prompt. Because the RPROMPT is created from -# right-left but reads the opposite, this isn't necessary for the other side. -CURRENT_BG='NONE' - -################################################################ -# Anaconda Environment -prompt_anaconda() { - # Depending on the conda version, either might be set. This - # variant works even if both are set. - local _path=$CONDA_ENV_PATH$CONDA_PREFIX - if ! [ -z "$_path" ]; then - # config - can be overwritten in users' zshrc file. - set_default POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "(" - set_default POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")" - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$POWERLEVEL9K_ANACONDA_LEFT_DELIMITER$(basename $_path)$POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER" 'PYTHON_ICON' - fi -} - -################################################################ -# AWS Profile -prompt_aws() { - local aws_profile="${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}" - - if [[ -n "$aws_profile" ]]; then - "$1_prompt_segment" "$0" "$2" red white "$aws_profile" 'AWS_ICON' - fi -} - -################################################################ -# Current Elastic Beanstalk environment -prompt_aws_eb_env() { - local eb_env=$(grep environment .elasticbeanstalk/config.yml 2> /dev/null | awk '{print $2}') - - if [[ -n "$eb_env" ]]; then - "$1_prompt_segment" "$0" "$2" black green "$eb_env" 'AWS_EB_ICON' - fi -} - -################################################################ -# Segment to indicate background jobs with an icon. -set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE true -set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS false -prompt_background_jobs() { - local background_jobs_number=${$(jobs -l | wc -l)// /} - local wrong_lines=`jobs -l | awk '/pwd now/{ count++ } END {print count}'` - if [[ wrong_lines -gt 0 ]]; then - background_jobs_number=$(( $background_jobs_number - $wrong_lines )) - fi - if [[ background_jobs_number -gt 0 ]]; then - local background_jobs_number_print="" - if [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE" == "true" ]] && ([[ "$background_jobs_number" -gt 1 ]] || [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS" == "true" ]]); then - background_jobs_number_print="$background_jobs_number" - fi - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "cyan" "$background_jobs_number_print" 'BACKGROUND_JOBS_ICON' - fi -} - -################################################################ -# A newline in your prompt, so you can segments on multiple lines. -prompt_newline() { - local lws newline - [[ "$1" == "right" ]] && return - newline=$'\n' - lws=$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS - if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then - newline="${newline}$(print_icon 'MULTILINE_NEWLINE_PROMPT_PREFIX')" - fi - POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS= - "$1_prompt_segment" \ - "$0" \ - "$2" \ - "NONE" "NONE" "${newline}" - POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS=$lws -} - -################################################################ -# Segment that indicates usage level of current partition. -set_default POWERLEVEL9K_DISK_USAGE_ONLY_WARNING false -set_default POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90 -set_default POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95 -prompt_disk_usage() { - local current_state="unknown" - typeset -AH hdd_usage_forecolors - hdd_usage_forecolors=( - 'normal' 'yellow' - 'warning' "$DEFAULT_COLOR" - 'critical' 'white' - ) - typeset -AH hdd_usage_backcolors - hdd_usage_backcolors=( - 'normal' $DEFAULT_COLOR - 'warning' 'yellow' - 'critical' 'red' - ) - - local disk_usage="${$(\df -P . | sed -n '2p' | awk '{ print $5 }')%%\%}" - - if [ "$disk_usage" -ge "$POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL" ]; then - current_state='warning' - if [ "$disk_usage" -ge "$POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL" ]; then - current_state='critical' - fi - else - if [[ "$POWERLEVEL9K_DISK_USAGE_ONLY_WARNING" == true ]]; then - current_state='' - return - fi - current_state='normal' - fi - - local message="${disk_usage}%%" - - # Draw the prompt_segment - if [[ -n $disk_usage ]]; then - "$1_prompt_segment" "${0}_${current_state}" "$2" "${hdd_usage_backcolors[$current_state]}" "${hdd_usage_forecolors[$current_state]}" "$message" 'DISK_ICON' - fi -} - -################################################################ -# Segment that displays the battery status in levels and colors -prompt_battery() { - # The battery can have four different states - default to 'unknown'. - local current_state='unknown' - typeset -AH battery_states - battery_states=( - 'low' 'red' - 'charging' 'yellow' - 'charged' 'green' - 'disconnected' "$DEFAULT_COLOR_INVERTED" - ) - # Set default values if the user did not configure them - set_default POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 - - if [[ $OS =~ OSX && -f /usr/bin/pmset && -x /usr/bin/pmset ]]; then - # obtain battery information from system - local raw_data="$(pmset -g batt | awk 'FNR==2{print}')" - # return if there is no battery on system - [[ -z $(echo $raw_data | grep "InternalBattery") ]] && return - - # Time remaining on battery operation (charging/discharging) - local tstring=$(echo $raw_data | awk -F ';' '{print $3}' | awk '{print $1}') - # If time has not been calculated by system yet - [[ $tstring =~ '(\(no|not)' ]] && tstring="..." - - # percent of battery charged - typeset -i 10 bat_percent - bat_percent=$(echo $raw_data | grep -o '[0-9]*%' | sed 's/%//') - - local remain="" - # Logic for string output - case $(echo $raw_data | awk -F ';' '{print $2}' | awk '{$1=$1};1') in - # for a short time after attaching power, status will be 'AC attached;' - 'charging'|'finishing charge'|'AC attached') - current_state="charging" - remain=" ($tstring)" - ;; - 'discharging') - [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" - remain=" ($tstring)" - ;; - *) - current_state="charged" - ;; - esac - fi - - if [[ "$OS" == 'Linux' ]] || [[ "$OS" == 'Android' ]]; then - local sysp="/sys/class/power_supply" - - # Reported BAT0 or BAT1 depending on kernel version - [[ -a $sysp/BAT0 ]] && local bat=$sysp/BAT0 - [[ -a $sysp/BAT1 ]] && local bat=$sysp/BAT1 - - # Android-related - # Tested on: Moto G falcon (CM 13.0) - [[ -a $sysp/battery ]] && local bat=$sysp/battery - - # Return if no battery found - [[ -z $bat ]] && return - local capacity=$(cat $bat/capacity) - local battery_status=$(cat $bat/status) - [[ $capacity -gt 100 ]] && local bat_percent=100 || local bat_percent=$capacity - [[ $battery_status =~ Charging || $battery_status =~ Full ]] && local connected=true - if [[ -z $connected ]]; then - [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" - else - [[ $bat_percent =~ 100 ]] && current_state="charged" - [[ $bat_percent -lt 100 ]] && current_state="charging" - fi - if [[ -f /usr/bin/acpi ]]; then - local time_remaining=$(acpi | awk '{ print $5 }') - if [[ $time_remaining =~ rate ]]; then - local tstring="..." - elif [[ $time_remaining =~ "[[:digit:]]+" ]]; then - local tstring=${(f)$(date -u -d "$(echo $time_remaining)" +%k:%M 2> /dev/null)} - fi - fi - [[ -n $tstring ]] && local remain=" ($tstring)" - fi - - local message - # Default behavior: Be verbose! - set_default POWERLEVEL9K_BATTERY_VERBOSE true - if [[ "$POWERLEVEL9K_BATTERY_VERBOSE" == true ]]; then - message="$bat_percent%%$remain" - else - message="$bat_percent%%" - fi - - # override default icon if we are using battery stages - if [[ -n "$POWERLEVEL9K_BATTERY_STAGES" ]]; then - local segment=$(( 100.0 / (${#POWERLEVEL9K_BATTERY_STAGES} - 1 ) )) - if [[ $segment > 1 ]]; then - local offset=$(( ($bat_percent / $segment) + 1 )) - # check if the stages are in an array or a string - [[ "${(t)POWERLEVEL9K_BATTERY_STAGES}" =~ "array" ]] && POWERLEVEL9K_BATTERY_ICON="$POWERLEVEL9K_BATTERY_STAGES[$offset]" || POWERLEVEL9K_BATTERY_ICON=${POWERLEVEL9K_BATTERY_STAGES:$offset:1} - fi - fi - # return if POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD is set and the battery percentage is greater or equal - if [[ -v "POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD" && "${bat_percent}" -ge $POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD ]]; then - return - fi - - # override the default color if we are using a color level array - if [[ -n "$POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND" ]] && [[ "${(t)POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND}" =~ "array" ]]; then - local segment=$(( 100.0 / (${#POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND} - 1 ) )) - local offset=$(( ($bat_percent / $segment) + 1 )) - "$1_prompt_segment" "$0_${current_state}" "$2" "${POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND[$offset]}" "${battery_states[$current_state]}" "${message}" "BATTERY_ICON" - else - # Draw the prompt_segment - "$1_prompt_segment" "$0_${current_state}" "$2" "${DEFAULT_COLOR}" "${battery_states[$current_state]}" "${message}" "BATTERY_ICON" - fi -} - -################################################################ -# Public IP segment -# Parameters: -# * $1 Alignment: string - left|right -# * $2 Index: integer -# * $3 Joined: bool - If the segment should be joined -prompt_public_ip() { - # set default values for segment - set_default POWERLEVEL9K_PUBLIC_IP_TIMEOUT "300" - set_default POWERLEVEL9K_PUBLIC_IP_NONE "" - set_default POWERLEVEL9K_PUBLIC_IP_FILE "/tmp/p9k_public_ip" - set_default POWERLEVEL9K_PUBLIC_IP_HOST "http://ident.me" - defined POWERLEVEL9K_PUBLIC_IP_METHODS || POWERLEVEL9K_PUBLIC_IP_METHODS=(dig curl wget) - - # Do we need a fresh IP? - local refresh_ip=false - if [[ -f $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then - typeset -i timediff - # if saved IP is more than - if [[ "$OS" == "OSX" ]]; then - timediff=$(($(date +%s) - $(stat -f "%m" $POWERLEVEL9K_PUBLIC_IP_FILE))) - else - timediff=$(($(date +%s) - $(date -r $POWERLEVEL9K_PUBLIC_IP_FILE +%s))) - fi - [[ $timediff -gt $POWERLEVEL9K_PUBLIC_IP_TIMEOUT ]] && refresh_ip=true - # If tmp file is empty get a fresh IP - [[ -z $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) ]] && refresh_ip=true - [[ -n $POWERLEVEL9K_PUBLIC_IP_NONE ]] && [[ $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) =~ "$POWERLEVEL9K_PUBLIC_IP_NONE" ]] && refresh_ip=true - else - touch $POWERLEVEL9K_PUBLIC_IP_FILE && refresh_ip=true - fi - - # grab a fresh IP if needed - local fresh_ip - if [[ $refresh_ip =~ true && -w $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then - for method in "${POWERLEVEL9K_PUBLIC_IP_METHODS[@]}"; do - case $method in - 'dig') - fresh_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2> /dev/null)" - [[ "$fresh_ip" =~ ^\; ]] && unset fresh_ip - ;; - 'curl') - fresh_ip="$(curl --max-time 10 -w '\n' "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)" - ;; - 'wget') - fresh_ip="$(wget -T 10 -qO- "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)" - ;; - esac - # If we found a fresh IP, break loop. - if [[ -n "${fresh_ip}" ]]; then - break; - fi - done - - # write IP to tmp file or clear tmp file if an IP was not retrieved - # Redirection with `>!`. From the manpage: Same as >, except that the file - # is truncated to zero length if it exists, even if CLOBBER is unset. - # If the file already exists, and a simple `>` redirection and CLOBBER - # unset, ZSH will produce an error. - [[ -n "${fresh_ip}" ]] && echo $fresh_ip >! $POWERLEVEL9K_PUBLIC_IP_FILE || echo $POWERLEVEL9K_PUBLIC_IP_NONE >! $POWERLEVEL9K_PUBLIC_IP_FILE - fi - - # read public IP saved to tmp file - local public_ip="$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)" - - # Draw the prompt segment - if [[ -n $public_ip ]]; then - icon='PUBLIC_IP_ICON' - # Check VPN is on if VPN interface is set - if [[ -n $POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then - for vpn_iface in $(/sbin/ifconfig | grep -e ^"$POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE" | cut -d":" -f1) - do - icon='VPN_ICON' - break - done - fi - $1_prompt_segment "$0" "$2" "$DEFAULT_COLOR" "$DEFAULT_COLOR_INVERTED" "${public_ip}" "$icon" - fi -} - -################################################################ -# Context: user@hostname (who am I and where am I) -# Note that if $DEFAULT_USER is not set, this prompt segment will always print -set_default POWERLEVEL9K_ALWAYS_SHOW_CONTEXT false -set_default POWERLEVEL9K_ALWAYS_SHOW_USER false -set_default POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m" -prompt_context() { - local current_state="DEFAULT" - typeset -AH context_states - context_states=( - "ROOT" "yellow" - "SUDO" "yellow" - "DEFAULT" "yellow" - "REMOTE" "yellow" - "REMOTE_SUDO" "yellow" - ) - - local content="" - - if [[ "$POWERLEVEL9K_ALWAYS_SHOW_CONTEXT" == true ]] || [[ "$(whoami)" != "$DEFAULT_USER" ]] || [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then - content="${POWERLEVEL9K_CONTEXT_TEMPLATE}" - elif [[ "$POWERLEVEL9K_ALWAYS_SHOW_USER" == true ]]; then - content="$(whoami)" - else - return - fi - - if [[ $(print -P "%#") == '#' ]]; then - current_state="ROOT" - elif [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then - if sudo -n true 2>/dev/null; then - current_state="REMOTE_SUDO" - else - current_state="REMOTE" - fi - elif sudo -n true 2>/dev/null; then - current_state="SUDO" - fi - - "$1_prompt_segment" "${0}_${current_state}" "$2" "$DEFAULT_COLOR" "${context_states[$current_state]}" "${content}" -} - -################################################################ -# User: user (who am I) -# Note that if $DEFAULT_USER is not set, this prompt segment will always print -set_default POWERLEVEL9K_USER_TEMPLATE "%n" -prompt_user() { - local current_state="DEFAULT" - typeset -AH user_state - if [[ "$POWERLEVEL9K_ALWAYS_SHOW_USER" == true ]] || [[ "$(whoami)" != "$DEFAULT_USER" ]]; then - if [[ $(print -P "%#") == '#' ]]; then - user_state=( - "STATE" "ROOT" - "CONTENT" "${POWERLEVEL9K_USER_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "ROOT_ICON" - ) - elif sudo -n true 2>/dev/null; then - user_state=( - "STATE" "SUDO" - "CONTENT" "${POWERLEVEL9K_USER_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "SUDO_ICON" - ) - else - user_state=( - "STATE" "DEFAULT" - "CONTENT" "$(whoami)" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "USER_ICON" - ) - fi - "$1_prompt_segment" "${0}_${user_state[STATE]}" "$2" "${user_state[BACKGROUND_COLOR]}" "${user_state[FOREGROUND_COLOR]}" "${user_state[CONTENT]}" "${user_state[VISUAL_IDENTIFIER]}" - fi -} - -################################################################ -# Host: machine (where am I) -set_default POWERLEVEL9K_HOST_TEMPLATE "%m" -prompt_host() { - local current_state="LOCAL" - typeset -AH host_state - if [[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]; then - host_state=( - "STATE" "REMOTE" - "CONTENT" "${POWERLEVEL9K_HOST_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "SSH_ICON" - ) - else - host_state=( - "STATE" "LOCAL" - "CONTENT" "${POWERLEVEL9K_HOST_TEMPLATE}" - "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "yellow" - "VISUAL_IDENTIFIER" "HOST_ICON" - ) - fi - "$1_prompt_segment" "$0_${host_state[STATE]}" "$2" "${host_state[BACKGROUND_COLOR]}" "${host_state[FOREGROUND_COLOR]}" "${host_state[CONTENT]}" "${host_state[VISUAL_IDENTIFIER]}" -} - -################################################################ -# The 'custom` prompt provides a way for users to invoke commands and display -# the output in a segment. -prompt_custom() { - local command=POWERLEVEL9K_CUSTOM_$3:u - local segment_content="$(eval ${(P)command})" - - if [[ -n $segment_content ]]; then - "$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" - fi -} - -################################################################ -# Display the duration the command needed to run. -prompt_command_execution_time() { - set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3 - set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2 - - # Print time in human readable format - # For that use `strftime` and convert - # the duration (float) to an seconds - # (integer). - # See http://unix.stackexchange.com/a/89748 - local humanReadableDuration - if (( _P9K_COMMAND_DURATION > 3600 )); then - humanReadableDuration=$(TZ=GMT; strftime '%H:%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) ))) - elif (( _P9K_COMMAND_DURATION > 60 )); then - humanReadableDuration=$(TZ=GMT; strftime '%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) ))) - else - # If the command executed in seconds, print as float. - # Convert to float - if [[ "${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION}" == "0" ]]; then - # If user does not want microseconds, then we need to convert - # the duration to an integer. - typeset -i humanReadableDuration - else - typeset -F ${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION} humanReadableDuration - fi - humanReadableDuration=$_P9K_COMMAND_DURATION - fi - - if (( _P9K_COMMAND_DURATION >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )); then - "$1_prompt_segment" "$0" "$2" "red" "yellow1" "${humanReadableDuration}" 'EXECUTION_TIME_ICON' - fi -} - -################################################################ -# Dir: current working directory -# Parameters: -# * $1 Alignment: string - left|right -# * $2 Index: integer -set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/" -set_default POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~" -set_default POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD false -prompt_dir() { - # using $PWD instead of "$(print -P '%~')" to allow use of POWERLEVEL9K_DIR_PATH_ABSOLUTE - local current_path=$PWD # WAS: local current_path="$(print -P '%~')" - # check if the user wants to use absolute paths or "~" paths - [[ ${(L)POWERLEVEL9K_DIR_PATH_ABSOLUTE} != "true" ]] && current_path=${current_path//$HOME/"~"} - # declare all local variables - local paths directory test_dir test_dir_length trunc_path threshhold - # if we are not in "~" or "/", split the paths into an array and exclude "~" - (( ${#current_path} > 1 )) && paths=(${(s:/:)${current_path//"~\/"/}}) || paths=() - # only run the code if SHORTEN_DIR_LENGTH is set, or we are using the two strategies that don't rely on it. - if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_with_folder_marker" || "$POWERLEVEL9K_SHORTEN_STRATEGY" == "truncate_to_last" ]]; then - set_default POWERLEVEL9K_SHORTEN_DELIMITER "\u2026" - # convert delimiter from unicode to literal character, so that we can get the correct length later - local delim=$(echo -n $POWERLEVEL9K_SHORTEN_DELIMITER) - - case "$POWERLEVEL9K_SHORTEN_STRATEGY" in - truncate_absolute_chars) - if [ ${#current_path} -gt $(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH + ${#POWERLEVEL9K_SHORTEN_DELIMITER} )) ]; then - current_path=$POWERLEVEL9K_SHORTEN_DELIMITER${current_path:(-POWERLEVEL9K_SHORTEN_DIR_LENGTH)} - fi - ;; - truncate_middle) - # truncate characters from the middle of the path - current_path=$(truncatePath $current_path $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER "middle") - ;; - truncate_from_right) - # truncate characters from the right of the path - current_path=$(truncatePath "$current_path" $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER) - ;; - truncate_absolute) - # truncate all characters except the last POWERLEVEL9K_SHORTEN_DIR_LENGTH characters - if [ ${#current_path} -gt $(( $POWERLEVEL9K_SHORTEN_DIR_LENGTH + ${#POWERLEVEL9K_SHORTEN_DELIMITER} )) ]; then - current_path=$POWERLEVEL9K_SHORTEN_DELIMITER${current_path:(-POWERLEVEL9K_SHORTEN_DIR_LENGTH)} - fi - ;; - truncate_to_last) - # truncate all characters before the current directory - current_path=${current_path##*/} - ;; - truncate_to_first_and_last) - if (( ${#current_path} > 1 )) && (( ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} > 0 )); then - threshhold=$(( ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} * 2)) - # if we are in "~", add it back into the paths array - [[ $current_path == '~'* ]] && paths=("~" "${paths[@]}") - if (( ${#paths} > $threshhold )); then - local num=$(( ${#paths} - ${POWERLEVEL9K_SHORTEN_DIR_LENGTH} )) - # repace the middle elements - for (( i=$POWERLEVEL9K_SHORTEN_DIR_LENGTH; i<$num; i++ )); do - paths[$i+1]=$POWERLEVEL9K_SHORTEN_DELIMITER - done - [[ $current_path != '~'* ]] && current_path="/" || current_path="" - current_path+="${(j:/:)paths}" - fi - fi - ;; - truncate_to_unique) - # for each parent path component find the shortest unique beginning - # characters sequence. Source: https://stackoverflow.com/a/45336078 - if (( ${#current_path} > 1 )); then # root and home are exceptions and won't have paths - local matching - local cur_path='/' - [[ $current_path != "~"* ]] && trunc_path='/' || trunc_path='' - for directory in ${paths[@]}; do - test_dir='' - for (( i=0; i<${#directory}; i++ )); do - test_dir+="${directory:$i:1}" - matching=("$cur_path"/"$test_dir"*/) - if [[ ${#matching[@]} -eq 1 ]]; then - break - fi - done - trunc_path+="$test_dir/" - cur_path+="$directory/" - done - [[ $current_path == "~"* ]] && trunc_path="~/$trunc_path" - current_path="${trunc_path: : -1}" - fi - ;; - truncate_with_folder_marker) - if (( ${#paths} > 0 )); then # root and home are exceptions and won't have paths, so skip this - local last_marked_folder marked_folder - set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER ".shorten_folder_marker" - - # Search for the folder marker in the parent directories and - # buildup a pattern that is removed from the current path - # later on. - for marked_folder in $(upsearch $POWERLEVEL9K_SHORTEN_FOLDER_MARKER); do - if [[ "$marked_folder" == "/" ]]; then - # If we reached root folder, stop upsearch. - trunc_path="/" - elif [[ "$marked_folder" == "$HOME" ]]; then - # If we reached home folder, stop upsearch. - trunc_path="~" - elif [[ "${marked_folder%/*}" == $last_marked_folder ]]; then - trunc_path="${trunc_path%/}/${marked_folder##*/}" - else - trunc_path="${trunc_path%/}/$POWERLEVEL9K_SHORTEN_DELIMITER/${marked_folder##*/}" - fi - last_marked_folder=$marked_folder - done - - # Replace the shortest possible match of the marked folder from - # the current path. - current_path=$trunc_path${current_path#${last_marked_folder}*} - fi - ;; - truncate_with_package_name) - local name repo_path package_path current_dir zero - - # Get the path of the Git repo, which should have the package.json file - if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == "true" ]]; then - # Get path from the root of the git repository to the current dir - local gitPath=$(git rev-parse --show-prefix) - # Remove trailing slash from git path, so that we can - # remove that git path from the pwd. - gitPath=${gitPath%/} - package_path=${$(pwd)%%$gitPath} - # Remove trailing slash - package_path=${package_path%/} - elif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) == "true" ]]; then - package_path=${$(pwd)%%/.git*} - fi - - # Replace the shortest possible match of the marked folder from - # the current path. Remove the amount of characters up to the - # folder marker from the left. Count only the visible characters - # in the path (this is done by the "zero" pattern; see - # http://stackoverflow.com/a/40855342/5586433). - local zero='%([BSUbfksu]|([FB]|){*})' - trunc_path=$(pwd) - # Then, find the length of the package_path string, and save the - # subdirectory path as a substring of the current directory's path from 0 - # to the length of the package path's string - subdirectory_path=$(truncatePath "${trunc_path:${#${(S%%)package_path//$~zero/}}}" $POWERLEVEL9K_SHORTEN_DIR_LENGTH $POWERLEVEL9K_SHORTEN_DELIMITER) - # Parse the 'name' from the package.json; if there are any problems, just - # print the file path - defined POWERLEVEL9K_DIR_PACKAGE_FILES || POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json) - - local pkgFile="unknown" - for file in "${POWERLEVEL9K_DIR_PACKAGE_FILES[@]}"; do - if [[ -f "${package_path}/${file}" ]]; then - pkgFile="${package_path}/${file}" - break; - fi - done - - local packageName=$(jq '.name' ${pkgFile} 2> /dev/null \ - || node -e 'console.log(require(process.argv[1]).name);' ${pkgFile} 2>/dev/null \ - || cat "${pkgFile}" 2> /dev/null | grep -m 1 "\"name\"" | awk -F ':' '{print $2}' | awk -F '"' '{print $2}' 2>/dev/null \ - ) - if [[ -n "${packageName}" ]]; then - # Instead of printing out the full path, print out the name of the package - # from the package.json and append the current subdirectory - current_path="`echo $packageName | tr -d '"'`$subdirectory_path" - fi - ;; - *) - if [[ $current_path != "~" ]]; then - current_path="$(print -P "%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c")" - fi - ;; - esac - fi - - # save state of path for highlighting and bold options - local path_opt=$current_path - - typeset -AH dir_states - dir_states=( - "DEFAULT" "FOLDER_ICON" - "HOME" "HOME_ICON" - "HOME_SUBFOLDER" "HOME_SUB_ICON" - "NOT_WRITABLE" "LOCK_ICON" - "ETC" "ETC_ICON" - ) - local state_path="$(print -P '%~')" - local current_state="DEFAULT" - if [[ $state_path == '/etc'* ]]; then - current_state='ETC' - elif [[ "${POWERLEVEL9K_DIR_SHOW_WRITABLE}" == true && ! -w "$PWD" ]]; then - current_state="NOT_WRITABLE" - elif [[ $state_path == '~' ]]; then - current_state="HOME" - elif [[ $state_path == '~'* ]]; then - current_state="HOME_SUBFOLDER" - fi - - # declare variables used for bold and state colors - local bld_on bld_off dir_state_foreground dir_state_user_foreground - # test if user wants the last directory printed in bold - if [[ "${(L)POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD}" == "true" ]]; then - bld_on="%B" - bld_off="%b" - else - bld_on="" - bld_off="" - fi - # determine is the user has set a last directory color - local dir_state_user_foreground=POWERLEVEL9K_DIR_${current_state}_FOREGROUND - local dir_state_foreground=${(P)dir_state_user_foreground} - [[ -z ${dir_state_foreground} ]] && dir_state_foreground="${DEFAULT_COLOR}" - - local dir_name base_name - # use ZSH substitution to get the dirname and basename instead of calling external functions - dir_name=${path_opt%/*} - base_name=${path_opt##*/} - - # if the user wants the last directory colored... - if [[ -n ${POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND} ]]; then - # it the path is "/" or "~" - if [[ $path_opt == "/" || $path_opt == "~" ]]; then - current_path="${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${current_path}${bld_off}" - else # has a subfolder - # test if dirname != basename - they are equal if we use truncate_to_last or truncate_absolute - if [[ $dir_name != $base_name ]]; then - current_path="${dir_name}/${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${base_name}${bld_off}" - else - current_path="${bld_on}%F{$POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND}${base_name}${bld_off}" - fi - fi - else # no coloring - # it the path is "/" or "~" - if [[ $path_opt == "/" || $path_opt == "~" ]]; then - current_path="${bld_on}${current_path}${bld_off}" - else # has a subfolder - # test if dirname != basename - they are equal if we use truncate_to_last or truncate_absolute - if [[ $dir_name != $base_name ]]; then - current_path="${dir_name}/${bld_on}${base_name}${bld_off}" - else - current_path="${bld_on}${base_name}${bld_off}" - fi - fi - fi - - # check if we need to omit the first character and only do it if we are not in "~" or "/" - if [[ "${POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER}" == "true" && $path_opt != "/" && $path_opt != "~" ]]; then - current_path="${current_path[2,-1]}" - fi - - # check if the user wants the separator colored. - if [[ -n ${POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND} && $path_opt != "/" ]]; then - # because this contains color changing codes, it is easier to set a variable for what should be replaced - local repl="%F{$POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND}/%F{$dir_state_foreground}" - # escape the / with a \ - current_path=${current_path//\//$repl} - fi - - if [[ "${POWERLEVEL9K_DIR_PATH_SEPARATOR}" != "/" && $path_opt != "/" ]]; then - current_path=${current_path//\//$POWERLEVEL9K_DIR_PATH_SEPARATOR} - fi - - if [[ "${POWERLEVEL9K_HOME_FOLDER_ABBREVIATION}" != "~" && ! "${(L)POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER}" == "true" ]]; then - # use :s to only replace the first occurance - current_path=${current_path:s/~/$POWERLEVEL9K_HOME_FOLDER_ABBREVIATION} - fi - - "$1_prompt_segment" "$0_${current_state}" "$2" "blue" "$DEFAULT_COLOR" "${current_path}" "${dir_states[$current_state]}" -} - -################################################################ -# Docker machine -prompt_docker_machine() { - local docker_machine="$DOCKER_MACHINE_NAME" - - if [[ -n "$docker_machine" ]]; then - "$1_prompt_segment" "$0" "$2" "magenta" "$DEFAULT_COLOR" "$docker_machine" 'SERVER_ICON' - fi -} - -################################################################ -# GO prompt -prompt_go_version() { - local go_version - local go_path - go_version=$(go version 2>/dev/null | sed -E "s/.*(go[0-9.]*).*/\1/") - go_path=$(go env GOPATH 2>/dev/null) - - if [[ -n "$go_version" && "${PWD##$go_path}" != "$PWD" ]]; then - "$1_prompt_segment" "$0" "$2" "green" "grey93" "$go_version" "GO_ICON" - fi -} - -################################################################ -# Command number (in local history) -prompt_history() { - "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" '%h' -} - -################################################################ -# Detection for virtualization (systemd based systems only) -prompt_detect_virt() { - if ! command -v systemd-detect-virt > /dev/null; then - return - fi - local virt=$(systemd-detect-virt) - if [[ "$virt" == "none" ]]; then - if [[ "$(ls -di / | grep -o 2)" != "2" ]]; then - virt="chroot" - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" - else - ; - fi - else - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "$virt" - fi -} - -################################################################ -# Test icons -prompt_icons_test() { - for key in ${(@k)icons}; do - # The lower color spectrum in ZSH makes big steps. Choosing - # the next color has enough contrast to read. - local random_color=$((RANDOM % 8)) - local next_color=$((random_color+1)) - "$1_prompt_segment" "$0" "$2" "$random_color" "$next_color" "$key" "$key" - done -} - -################################################################ -# Segment to display the current IP address -prompt_ip() { - if [[ "$OS" == "OSX" ]]; then - if defined POWERLEVEL9K_IP_INTERFACE; then - # Get the IP address of the specified interface. - ip=$(ipconfig getifaddr "$POWERLEVEL9K_IP_INTERFACE") - else - local interfaces callback - # Get network interface names ordered by service precedence. - interfaces=$(networksetup -listnetworkserviceorder | grep -o "Device:\s*[a-z0-9]*" | grep -o -E '[a-z0-9]*$') - callback='ipconfig getifaddr $item' - - ip=$(getRelevantItem "$interfaces" "$callback") - fi - else - if defined POWERLEVEL9K_IP_INTERFACE; then - # Get the IP address of the specified interface. - ip=$(ip -4 a show "$POWERLEVEL9K_IP_INTERFACE" | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*") - else - local interfaces callback - # Get all network interface names that are up - interfaces=$(ip link ls up | grep -o -E ":\s+[a-z0-9]+:" | grep -v "lo" | grep -o "[a-z0-9]*") - callback='ip -4 a show $item | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*"' - - ip=$(getRelevantItem "$interfaces" "$callback") - fi - fi - - "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'NETWORK_ICON' -} - -################################################################ -# Segment to display if VPN is active -set_default POWERLEVEL9K_VPN_IP_INTERFACE "tun" -# prompt if vpn active -prompt_vpn_ip() { - for vpn_iface in $(/sbin/ifconfig | grep -e ^"$POWERLEVEL9K_VPN_IP_INTERFACE" | cut -d":" -f1) - do - ip=$(/sbin/ifconfig "$vpn_iface" | grep -o "inet\s.*" | cut -d' ' -f2) - "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" "$ip" 'VPN_ICON' - done -} - -################################################################ -# Segment to display laravel version -prompt_laravel_version() { - local laravel_version="$(php artisan --version 2>/dev/null)" - if [[ -n "${laravel_version}" ]]; then - # Remove unrelevant infos - laravel_version="${laravel_version//Laravel Framework version /}" - - "$1_prompt_segment" "$0" "$2" "maroon" "white" "${laravel_version}" 'LARAVEL_ICON' - fi -} - -################################################################ -# Segment to display load -set_default POWERLEVEL9K_LOAD_WHICH 5 -prompt_load() { - # The load segment can have three different states - local current_state="unknown" - local load_select=2 - local load_avg - local cores - - typeset -AH load_states - load_states=( - 'critical' 'red' - 'warning' 'yellow' - 'normal' 'green' - ) - - case "$POWERLEVEL9K_LOAD_WHICH" in - 1) - load_select=1 - ;; - 5) - load_select=2 - ;; - 15) - load_select=3 - ;; - esac - - case "$OS" in - OSX|BSD) - load_avg=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | sed -n ${load_select}p) - if [[ "$OS" == "OSX" ]]; then - cores=$(sysctl -n hw.logicalcpu) - else - cores=$(sysctl -n hw.ncpu) - fi - ;; - *) - load_avg=$(cut -d" " -f${load_select} /proc/loadavg) - cores=$(nproc) - esac - - # Replace comma - load_avg=${load_avg//,/.} - - if [[ "$load_avg" -gt $((${cores} * 0.7)) ]]; then - current_state="critical" - elif [[ "$load_avg" -gt $((${cores} * 0.5)) ]]; then - current_state="warning" - else - current_state="normal" - fi - - "$1_prompt_segment" "${0}_${current_state}" "$2" "${load_states[$current_state]}" "$DEFAULT_COLOR" "$load_avg" 'LOAD_ICON' -} - -################################################################ -# Segment to diplay Node version -prompt_node_version() { - local node_version=$(node -v 2>/dev/null) - [[ -z "${node_version}" ]] && return - - "$1_prompt_segment" "$0" "$2" "green" "white" "${node_version:1}" 'NODE_ICON' -} - -################################################################ -# Segment to display Node version from NVM -# Only prints the segment if different than the default value -prompt_nvm() { - local node_version nvm_default - (( $+functions[nvm_version] )) || return - - node_version=$(nvm_version current) - [[ -z "${node_version}" || ${node_version} == "none" ]] && return - - nvm_default=$(nvm_version default) - [[ "$node_version" =~ "$nvm_default" ]] && return - - $1_prompt_segment "$0" "$2" "magenta" "black" "${node_version:1}" 'NODE_ICON' -} - -################################################################ -# Segment to display NodeEnv -prompt_nodeenv() { - local nodeenv_path="$NODE_VIRTUAL_ENV" - if [[ -n "$nodeenv_path" && "$NODE_VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then - local info="$(node -v)[$(basename "$nodeenv_path")]" - "$1_prompt_segment" "$0" "$2" "black" "green" "$info" 'NODE_ICON' - fi -} - -################################################################ -# Segment to print a little OS icon -prompt_os_icon() { - "$1_prompt_segment" "$0" "$2" "black" "white" "$OS_ICON" -} - -################################################################ -# Segment to display PHP version number -prompt_php_version() { - local php_version - php_version=$(php -v 2>&1 | grep -oe "^PHP\s*[0-9.]*") - - if [[ -n "$php_version" ]]; then - "$1_prompt_segment" "$0" "$2" "fuchsia" "grey93" "$php_version" - fi -} - -################################################################ -# Segment to display free RAM and used Swap -prompt_ram() { - local base='' - local ramfree=0 - if [[ "$OS" == "OSX" ]]; then - # Available = Free + Inactive - # See https://support.apple.com/en-us/HT201538 - ramfree=$(vm_stat | grep "Pages free" | grep -o -E '[0-9]+') - ramfree=$((ramfree + $(vm_stat | grep "Pages inactive" | grep -o -E '[0-9]+'))) - # Convert pages into Bytes - ramfree=$(( ramfree * 4096 )) - else - if [[ "$OS" == "BSD" ]]; then - ramfree=$(grep 'avail memory' /var/run/dmesg.boot | awk '{print $4}') - else - ramfree=$(grep -o -E "MemAvailable:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - base='K' - fi - fi - - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "$(printSizeHumanReadable "$ramfree" $base)" 'RAM_ICON' -} - - -set_default POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW false -# rbenv information -prompt_rbenv() { - if command which rbenv 2>/dev/null >&2; then - local rbenv_version_name="$(rbenv version-name)" - local rbenv_global="$(rbenv global)" - - # Don't show anything if the current Ruby is the same as the global Ruby - # unless `POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW` is set. - if [[ $rbenv_version_name == $rbenv_global && "$POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW" = false ]]; then - return - fi - - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to display chruby information -# see https://github.com/postmodern/chruby/issues/245 for chruby_auto issue with ZSH -prompt_chruby() { - # Uses $RUBY_VERSION and $RUBY_ENGINE set by chruby - set_default POWERLEVEL9K_CHRUBY_SHOW_VERSION true - set_default POWERLEVEL9K_CHRUBY_SHOW_ENGINE true - local chruby_label="" - - if [[ "$POWERLEVEL9K_CHRUBY_SHOW_ENGINE" == true ]]; then - chruby_label+="$RUBY_ENGINE " - fi - if [[ "$POWERLEVEL9K_CHRUBY_SHOW_VERSION" == true ]]; then - chruby_label+="$RUBY_VERSION" - fi - - # Truncate trailing spaces - chruby_label="${chruby_label%"${chruby_label##*[![:space:]]}"}" - - # Don't show anything if the chruby did not change the default ruby - if [[ "$RUBY_ENGINE" != "" ]]; then - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "${chruby_label}" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to print an icon if user is root. -prompt_root_indicator() { - if [[ "$UID" -eq 0 ]]; then - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "" 'ROOT_ICON' - fi -} - -################################################################ -# Segment to display Rust version number -prompt_rust_version() { - local rust_version - rust_version=$(command rustc --version 2>/dev/null) - # Remove "rustc " (including the whitespace) from the beginning - # of the version string and remove everything after the next - # whitespace. This way we'll end up with only the version. - rust_version=${${rust_version/rustc /}%% *} - - if [[ -n "$rust_version" ]]; then - "$1_prompt_segment" "$0" "$2" "darkorange" "$DEFAULT_COLOR" "$rust_version" 'RUST_ICON' - fi -} - -# RSpec test ratio -prompt_rspec_stats() { - if [[ (-d app && -d spec) ]]; then - local code_amount tests_amount - code_amount=$(ls -1 app/**/*.rb | wc -l) - tests_amount=$(ls -1 spec/**/*.rb | wc -l) - - build_test_stats "$1" "$0" "$2" "$code_amount" "$tests_amount" "RSpec" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Ruby Version Manager information -prompt_rvm() { - local version_and_gemset=${rvm_env_string/ruby-} - - if [[ -n "$version_and_gemset" ]]; then - "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$version_and_gemset" 'RUBY_ICON' - fi -} - -################################################################ -# Segment to display SSH icon when connected -prompt_ssh() { - if [[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]; then - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" "" 'SSH_ICON' - fi -} - -################################################################ -# Status: When an error occur, return the error code, or a cross icon if option is set -# Display an ok icon when no error occur, or hide the segment if option is set to false -# -set_default POWERLEVEL9K_STATUS_CROSS false -set_default POWERLEVEL9K_STATUS_OK true -set_default POWERLEVEL9K_STATUS_SHOW_PIPESTATUS true -set_default POWERLEVEL9K_STATUS_HIDE_SIGNAME false -# old options, retro compatibility -set_default POWERLEVEL9K_STATUS_VERBOSE true -set_default POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE false - -exit_code_or_status() { - local ec=$1 - if [[ "$POWERLEVEL9K_STATUS_HIDE_SIGNAME" = true ]]; then - echo "$ec" - elif (( ec <= 128 )); then - echo "$ec" - else - local sig=$(( ec - 128 )) - local idx=$(( sig + 1 )) - echo "SIG${signals[$idx]}(${sig})" - fi -} - -prompt_status() { - local ec_text - local ec_sum - local ec - - if [[ $POWERLEVEL9K_STATUS_SHOW_PIPESTATUS == true ]]; then - if (( $#RETVALS > 1 )); then - ec_text=$(exit_code_or_status "${RETVALS[1]}") - ec_sum=${RETVALS[1]} - else - ec_text=$(exit_code_or_status "${RETVAL}") - ec_sum=${RETVAL} - fi - - for ec in "${(@)RETVALS[2,-1]}"; do - ec_text="${ec_text}|$(exit_code_or_status "$ec")" - ec_sum=$(( $ec_sum + $ec )) - done - else - # We use RETVAL instead of the right-most RETVALS item because - # PIPE_FAIL may be set. - ec_text=$(exit_code_or_status "${RETVAL}") - ec_sum=${RETVAL} - fi - - if (( ec_sum > 0 )); then - if [[ "$POWERLEVEL9K_STATUS_CROSS" == false && "$POWERLEVEL9K_STATUS_VERBOSE" == true ]]; then - "$1_prompt_segment" "$0_ERROR" "$2" "red" "yellow1" "$ec_text" 'CARRIAGE_RETURN_ICON' - else - "$1_prompt_segment" "$0_ERROR" "$2" "$DEFAULT_COLOR" "red" "" 'FAIL_ICON' - fi - elif [[ "$POWERLEVEL9K_STATUS_OK" == true ]] && [[ "$POWERLEVEL9K_STATUS_VERBOSE" == true || "$POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE" == true ]]; then - "$1_prompt_segment" "$0_OK" "$2" "$DEFAULT_COLOR" "green" "" 'OK_ICON' - fi -} - -################################################################ -# Segment to display Swap information -prompt_swap() { - local swap_used=0 - local base='' - - if [[ "$OS" == "OSX" ]]; then - local raw_swap_used - raw_swap_used=$(sysctl vm.swapusage | grep -o "used\s*=\s*[0-9,.A-Z]*" | grep -o "[0-9,.A-Z]*$") - - typeset -F 2 swap_used - swap_used=${$(echo $raw_swap_used | grep -o "[0-9,.]*")//,/.} - # Replace comma - swap_used=${swap_used//,/.} - - base=$(echo "$raw_swap_used" | grep -o "[A-Z]*$") - else - swap_total=$(grep -o -E "SwapTotal:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - swap_free=$(grep -o -E "SwapFree:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*") - swap_used=$(( swap_total - swap_free )) - base='K' - fi - - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "$(printSizeHumanReadable "$swap_used" $base)" 'SWAP_ICON' -} - -################################################################ -# Symfony2-PHPUnit test ratio -prompt_symfony2_tests() { - if [[ (-d src && -d app && -f app/AppKernel.php) ]]; then - local code_amount tests_amount - code_amount=$(ls -1 src/**/*.php | grep -vc Tests) - tests_amount=$(ls -1 src/**/*.php | grep -c Tests) - - build_test_stats "$1" "$0" "$2" "$code_amount" "$tests_amount" "SF2" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Symfony2-Version -prompt_symfony2_version() { - if [[ -f app/bootstrap.php.cache ]]; then - local symfony2_version - symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g') - "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$symfony2_version" 'SYMFONY_ICON' - fi -} - -################################################################ -# Show a ratio of tests vs code -build_test_stats() { - local code_amount="$4" - local tests_amount="$5"+0.00001 - local headline="$6" - - # Set float precision to 2 digits: - typeset -F 2 ratio - local ratio=$(( (tests_amount/code_amount) * 100 )) - - (( ratio >= 75 )) && "$1_prompt_segment" "${2}_GOOD" "$3" "cyan" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" - (( ratio >= 50 && ratio < 75 )) && "$1_prompt_segment" "$2_AVG" "$3" "yellow" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" - (( ratio < 50 )) && "$1_prompt_segment" "$2_BAD" "$3" "red" "$DEFAULT_COLOR" "$headline: $ratio%%" "$6" -} - -################################################################ -# System time -prompt_time() { - set_default POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}" - - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_TIME_FORMAT" "TIME_ICON" -} - -################################################################ -# System date -prompt_date() { - set_default POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}" - - "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_DATE_FORMAT" "DATE_ICON" -} - -################################################################ -# todo.sh: shows the number of tasks in your todo.sh file -prompt_todo() { - if $(hash todo.sh 2>&-); then - count=$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }') - if [[ "$count" = <-> ]]; then - "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" "$count" 'TODO_ICON' - fi - fi -} - -################################################################ -# VCS segment: shows the state of your repository, if you are in a folder under -# version control -set_default POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND "red" -# Default: Just display the first 8 characters of our changeset-ID. -set_default POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH "8" -powerlevel9k_vcs_init() { - if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then - POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH" - fi - - # Load VCS_INFO - autoload -Uz vcs_info - - VCS_WORKDIR_DIRTY=false - VCS_WORKDIR_HALF_DIRTY=false - - # The vcs segment can have three different states - defaults to 'clean'. - typeset -gAH vcs_states - vcs_states=( - 'clean' 'green' - 'modified' 'yellow' - 'untracked' 'green' - ) - - VCS_CHANGESET_PREFIX='' - if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then - VCS_CHANGESET_PREFIX="$(print_icon 'VCS_COMMIT_ICON')%0.$POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH""i " - fi - - zstyle ':vcs_info:*' enable git hg svn - zstyle ':vcs_info:*' check-for-changes true - - VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%b%c%u%m" - zstyle ':vcs_info:*' formats "$VCS_DEFAULT_FORMAT" - - zstyle ':vcs_info:*' actionformats "%b %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f" - - zstyle ':vcs_info:*' stagedstr " $(print_icon 'VCS_STAGED_ICON')" - zstyle ':vcs_info:*' unstagedstr " $(print_icon 'VCS_UNSTAGED_ICON')" - - defined POWERLEVEL9K_VCS_GIT_HOOKS || POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname) - zstyle ':vcs_info:git*+set-message:*' hooks $POWERLEVEL9K_VCS_GIT_HOOKS - defined POWERLEVEL9K_VCS_HG_HOOKS || POWERLEVEL9K_VCS_HG_HOOKS=(vcs-detect-changes) - zstyle ':vcs_info:hg*+set-message:*' hooks $POWERLEVEL9K_VCS_HG_HOOKS - defined POWERLEVEL9K_VCS_SVN_HOOKS || POWERLEVEL9K_VCS_SVN_HOOKS=(vcs-detect-changes svn-detect-changes) - zstyle ':vcs_info:svn*+set-message:*' hooks $POWERLEVEL9K_VCS_SVN_HOOKS - - # For Hg, only show the branch name - zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b" - # The `get-revision` function must be turned on for dirty-check to work for Hg - zstyle ':vcs_info:hg*:*' get-revision true - zstyle ':vcs_info:hg*:*' get-bookmarks true - zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks - - # For svn, only - # TODO fix the %b (branch) format for svn. Using %b breaks - # color-encoding of the foreground for the rest of the powerline. - zstyle ':vcs_info:svn*:*' formats "$VCS_CHANGESET_PREFIX%c%u" - zstyle ':vcs_info:svn*:*' actionformats "$VCS_CHANGESET_PREFIX%c%u %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f" - - if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then - zstyle ':vcs_info:*' get-revision true - fi -} - -################################################################ -# Segment to show VCS information -prompt_vcs() { - VCS_WORKDIR_DIRTY=false - VCS_WORKDIR_HALF_DIRTY=false - local current_state="" - - # Actually invoke vcs_info manually to gather all information. - vcs_info - local vcs_prompt="${vcs_info_msg_0_}" - - if [[ -n "$vcs_prompt" ]]; then - if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then - # $vcs_visual_identifier gets set in +vi-vcs-detect-changes in functions/vcs.zsh, - # as we have there access to vcs_info internal hooks. - current_state='modified' - else - if [[ "$VCS_WORKDIR_HALF_DIRTY" == true ]]; then - current_state='untracked' - else - current_state='clean' - fi - fi - "$1_prompt_segment" "${0}_${(U)current_state}" "$2" "${vcs_states[$current_state]}" "$DEFAULT_COLOR" "$vcs_prompt" "$vcs_visual_identifier" - fi -} - -################################################################ -# Vi Mode: show editing mode (NORMAL|INSERT) -set_default POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT" -set_default POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL" -prompt_vi_mode() { - case ${KEYMAP} in - vicmd) - "$1_prompt_segment" "$0_NORMAL" "$2" "$DEFAULT_COLOR" "default" "$POWERLEVEL9K_VI_COMMAND_MODE_STRING" - ;; - main|viins|*) - if [[ -z $POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then return; fi - "$1_prompt_segment" "$0_INSERT" "$2" "$DEFAULT_COLOR" "blue" "$POWERLEVEL9K_VI_INSERT_MODE_STRING" - ;; - esac -} - -################################################################ -# Virtualenv: current working virtualenv -# More information on virtualenv (Python): -# https://virtualenv.pypa.io/en/latest/ -prompt_virtualenv() { - local virtualenv_path="$VIRTUAL_ENV" - if [[ -n "$virtualenv_path" && "$VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$(basename "$virtualenv_path")" 'PYTHON_ICON' - fi -} - -################################################################ -# pyenv: current active python version (with restrictions) -# https://github.com/pyenv/pyenv#choosing-the-python-version -prompt_pyenv() { - if [[ -n "$PYENV_VERSION" ]]; then - "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" "$PYENV_VERSION" 'PYTHON_ICON' - fi -} - -################################################################ -# Display openfoam information -prompt_openfoam() { - local wm_project_version="$WM_PROJECT_VERSION" - local wm_fork="$WM_FORK" - if [[ -n "$wm_project_version" ]] && [[ -z "$wm_fork" ]] ; then - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "OF: $(basename "$wm_project_version")" - elif [[ -n "$wm_project_version" ]] && [[ -n "$wm_fork" ]] ; then - "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" "F-X: $(basename "$wm_project_version")" - fi -} - -################################################################ -# Segment to display Swift version -prompt_swift_version() { - # Get the first number as this is probably the "main" version number.. - local swift_version=$(swift --version 2>/dev/null | grep -o -E "[0-9.]+" | head -n 1) - [[ -z "${swift_version}" ]] && return - - "$1_prompt_segment" "$0" "$2" "magenta" "white" "${swift_version}" 'SWIFT_ICON' -} - -################################################################ -# dir_writable: Display information about the user's permission to write in the current directory -prompt_dir_writable() { - if [[ ! -w "$PWD" ]]; then - "$1_prompt_segment" "$0_FORBIDDEN" "$2" "red" "yellow1" "" 'LOCK_ICON' - fi -} - -################################################################ -# Kubernetes Current Context/Namespace -prompt_kubecontext() { - local kubectl_version="$(kubectl version --client 2>/dev/null)" - - if [[ -n "$kubectl_version" ]]; then - # Get the current Kuberenetes context - local cur_ctx=$(kubectl config view -o=jsonpath='{.current-context}') - cur_namespace="$(kubectl config view -o=jsonpath="{.contexts[?(@.name==\"${cur_ctx}\")].context.namespace}")" - # If the namespace comes back empty set it default. - if [[ -z "${cur_namespace}" ]]; then - cur_namespace="default" - fi - - local k8s_final_text="" - - if [[ "$cur_ctx" == "$cur_namespace" ]]; then - # No reason to print out the same identificator twice - k8s_final_text="$cur_ctx" - else - k8s_final_text="$cur_ctx/$cur_namespace" - fi - - "$1_prompt_segment" "$0" "$2" "magenta" "white" "$k8s_final_text" "KUBERNETES_ICON" - fi -} - -################################################################ -# Dropbox status -prompt_dropbox() { - # The first column is just the directory, so cut it - local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" - - # Only show if the folder is tracked and dropbox is running - if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then - # If "up to date", only show the icon - if [[ "$dropbox_status" =~ 'up to date' ]]; then - dropbox_status="" - fi - - "$1_prompt_segment" "$0" "$2" "white" "blue" "$dropbox_status" "DROPBOX_ICON" - fi -} - -# print Java version number -prompt_java_version() { - local java_version - # Stupid: Java prints its version on STDERR. - # The first version ouput will print nothing, we just - # use it to transport whether the command was successful. - # If yes, we parse the version string (and need to - # redirect the stderr to stdout to make the pipe work). - java_version=$(java -version 2>/dev/null && java -fullversion 2>&1 | cut -d '"' -f 2) - - if [[ -n "$java_version" ]]; then - "$1_prompt_segment" "$0" "$2" "red" "white" "$java_version" "JAVA_ICON" - fi -} - -################################################################ -# Prompt processing and drawing -################################################################ -# Main prompt -build_left_prompt() { - local index=1 - local element - for element in "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[@]}"; do - # Remove joined information in direct calls - element=${element%_joined} - - # Check if it is a custom command, otherwise interpet it as - # a prompt. - if [[ $element[0,7] =~ "custom_" ]]; then - "prompt_custom" "left" "$index" $element[8,-1] - else - "prompt_$element" "left" "$index" - fi - - index=$((index + 1)) - done - - left_prompt_end -} - -# Right prompt -build_right_prompt() { - local index=1 - local element - for element in "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[@]}"; do - # Remove joined information in direct calls - element=${element%_joined} - - # Check if it is a custom command, otherwise interpet it as - # a prompt. - if [[ $element[0,7] =~ "custom_" ]]; then - "prompt_custom" "right" "$index" $element[8,-1] - else - "prompt_$element" "right" "$index" - fi - - index=$((index + 1)) - done - - # Clear to the end of the line - echo -n "%E" -} - -powerlevel9k_preexec() { - _P9K_TIMER_START=$EPOCHREALTIME -} - -set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false -powerlevel9k_prepare_prompts() { - local RETVAL RPROMPT_PREFIX RPROMPT_SUFFIX - RETVAL=$? - RETVALS=( "$pipestatus[@]" ) - - _P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START)) - - # Reset start time - _P9K_TIMER_START=0x7FFFFFFF - - if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then - PROMPT='$(print_icon 'MULTILINE_FIRST_PROMPT_PREFIX')%f%b%k$(build_left_prompt) -$(print_icon 'MULTILINE_LAST_PROMPT_PREFIX')' - if [[ "$POWERLEVEL9K_RPROMPT_ON_NEWLINE" != true ]]; then - # The right prompt should be on the same line as the first line of the left - # prompt. To do so, there is just a quite ugly workaround: Before zsh draws - # the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we - # advise it to go one line down. See: - # http://superuser.com/questions/357107/zsh-right-justify-in-ps1 - local LC_ALL="" LC_CTYPE="en_US.UTF-8" # Set the right locale to protect special characters - RPROMPT_PREFIX='%{'$'\e[1A''%}' # one line up - RPROMPT_SUFFIX='%{'$'\e[1B''%}' # one line down - else - RPROMPT_PREFIX='' - RPROMPT_SUFFIX='' - fi - else - PROMPT='%f%b%k$(build_left_prompt)' - RPROMPT_PREFIX='' - RPROMPT_SUFFIX='' - fi - - if [[ "$POWERLEVEL9K_DISABLE_RPROMPT" != true ]]; then - RPROMPT="${RPROMPT_PREFIX}"'%f%b%k$(build_right_prompt)%{$reset_color%}'"${RPROMPT_SUFFIX}" - fi - -local NEWLINE=' -' - - if [[ $POWERLEVEL9K_PROMPT_ADD_NEWLINE == true ]]; then - NEWLINES="" - repeat ${POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT:-1} { NEWLINES+=$NEWLINE } - PROMPT="$NEWLINES$PROMPT" - fi - - # Allow iTerm integration to work - [[ $ITERM_SHELL_INTEGRATION_INSTALLED == "Yes" ]] && PROMPT="%{$(iterm2_prompt_mark)%}$PROMPT" -} - -zle-keymap-select () { - zle reset-prompt - zle -R -} - -set_default POWERLEVEL9K_IGNORE_TERM_COLORS false -set_default POWERLEVEL9K_IGNORE_TERM_LANG false - -prompt_powerlevel9k_setup() { - # The value below was set to better support 32-bit CPUs. - # It's the maximum _signed_ integer value on 32-bit CPUs. - # Please don't change it until 19 January of 2038. ;) - - # Disable false display of command execution time - _P9K_TIMER_START=0x7FFFFFFF - - # The prompt function will set these prompt_* options after the setup function - # returns. We need prompt_subst so we can safely run commands in the prompt - # without them being double expanded and we need prompt_percent to expand the - # common percent escape sequences. - prompt_opts=(cr percent sp subst) - - # Borrowed from promptinit, sets the prompt options in case the theme was - # not initialized via promptinit. - setopt noprompt{bang,cr,percent,sp,subst} "prompt${^prompt_opts[@]}" - - # Display a warning if the terminal does not support 256 colors - termColors - - # If the terminal `LANG` is set to `C`, this theme will not work at all. - if [[ $POWERLEVEL9K_IGNORE_TERM_LANG == false ]]; then - local term_lang - term_lang=$(echo $LANG) - if [[ $term_lang == 'C' ]]; then - print -P "\t%F{red}WARNING!%f Your terminal's 'LANG' is set to 'C', which breaks this theme!" - print -P "\t%F{red}WARNING!%f Please set your 'LANG' to a UTF-8 language, like 'en_US.UTF-8'" - print -P "\t%F{red}WARNING!%f _before_ loading this theme in your \~\.zshrc. Putting" - print -P "\t%F{red}WARNING!%f %F{blue}export LANG=\"en_US.UTF-8\"%f at the top of your \~\/.zshrc is sufficient." - fi - fi - - defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) - defined POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS || POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time) - - # Display a warning if deprecated segments are in use. - typeset -AH deprecated_segments - # old => new - deprecated_segments=( - 'longstatus' 'status' - ) - print_deprecation_warning deprecated_segments - - # initialize colors - autoload -U colors && colors - - if segment_in_use "vcs"; then - powerlevel9k_vcs_init - fi - - # initialize timing functions - zmodload zsh/datetime - - # Initialize math functions - zmodload zsh/mathfunc - - # initialize hooks - autoload -Uz add-zsh-hook - - # prepare prompts - add-zsh-hook precmd powerlevel9k_prepare_prompts - add-zsh-hook preexec powerlevel9k_preexec - - zle -N zle-keymap-select -} - -prompt_powerlevel9k_teardown() { - add-zsh-hook -D precmd powerlevel9k_\* - add-zsh-hook -D preexec powerlevel9k_\* - PROMPT='%m%# ' - RPROMPT= -} - -prompt_powerlevel9k_setup "$@" diff --git a/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup b/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup new file mode 120000 index 0000000..f692e0a --- /dev/null +++ b/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup @@ -0,0 +1 @@ +../external/powerlevel9k/powerlevel9k.zsh-theme \ No newline at end of file diff --git a/.zprezto/modules/prompt/functions/prompt_powerline_setup b/.zprezto/modules/prompt/functions/prompt_powerline_setup deleted file mode 100644 index a27b67b..0000000 --- a/.zprezto/modules/prompt/functions/prompt_powerline_setup +++ /dev/null @@ -1,185 +0,0 @@ -# -# 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 -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 -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 -} - -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 -} - -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' -} - -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=$'\uE0B0' - POWERLINE_R_SEPARATOR=$'\uE0B2' - - 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/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 deleted file mode 100644 index 2fd19e8..0000000 --- a/.zprezto/modules/prompt/functions/prompt_pure_setup +++ /dev/null @@ -1,486 +0,0 @@ -# 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} )) - typeset -g 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_set_title() { - setopt localoptions noshwordsplit - - # emacs terminal does not support settings the title - (( ${+EMACS} )) && return - - case $TTY in - # Don't set title over serial console. - /dev/ttyS[0-9]*) return;; - esac - - # 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() { - if [[ -n $prompt_pure_git_fetch_pattern ]]; then - # detect when git is performing pull/fetch (including git aliases). - local -H MATCH MBEGIN MEND match mbegin mend - if [[ $2 =~ (git|hub)\ (.*\ )?($prompt_pure_git_fetch_pattern)(\ .*)?$ ]]; then - # we must flush the async jobs to cancel our git fetch in order - # to avoid conflicts with the user issued pull / fetch. - async_flush_jobs 'prompt_pure' - fi - fi - - typeset -g 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" - - # Disallow python virtualenv from updating the prompt, set it to 12 if - # untouched by the user to indicate that Pure modified it. Here we use - # magic number 12, same as in psvar. - export VIRTUAL_ENV_DISABLE_PROMPT=${VIRTUAL_ENV_DISABLE_PROMPT:-12} -} - -# 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() { - setopt localoptions noshwordsplit - - # 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 - - # Initialize the preprompt array. - local -a preprompt_parts - - # Set the path. - preprompt_parts+=('%F{blue}%~%f') - - # Add git branch and dirty status info. - typeset -gA prompt_pure_vcs_info - if [[ -n $prompt_pure_vcs_info[branch] ]]; then - preprompt_parts+=("%F{$git_color}"'${prompt_pure_vcs_info[branch]}${prompt_pure_git_dirty}%f') - fi - # Git pull/push arrows. - if [[ -n $prompt_pure_git_arrows ]]; then - preprompt_parts+=('%F{cyan}${prompt_pure_git_arrows}%f') - fi - - # Username and machine, if applicable. - [[ -n $prompt_pure_username ]] && preprompt_parts+=('$prompt_pure_username') - # Execution time. - [[ -n $prompt_pure_cmd_exec_time ]] && preprompt_parts+=('%F{yellow}${prompt_pure_cmd_exec_time}%f') - - local cleaned_ps1=$PROMPT - local -H MATCH MBEGIN MEND - if [[ $PROMPT = *$prompt_newline* ]]; then - # When the prompt contains newlines, we keep everything before the first - # and after the last newline, leaving us with everything except the - # preprompt. This is needed because some software prefixes the prompt - # (e.g. virtualenv). - cleaned_ps1=${PROMPT%%${prompt_newline}*}${PROMPT##*${prompt_newline}} - fi - unset MATCH MBEGIN MEND - - # Construct the new prompt with a clean preprompt. - local -ah ps1 - ps1=( - $prompt_newline # Initial newline, for spaciousness. - ${(j. .)preprompt_parts} # Join parts, space separated. - $prompt_newline # Separate preprompt and prompt. - $cleaned_ps1 - ) - - PROMPT="${(j..)ps1}" - - # Expand the prompt for future comparision. - local expanded_prompt - expanded_prompt="${(S%%)PROMPT}" - - if [[ $1 != precmd ]] && [[ $prompt_pure_last_prompt != $expanded_prompt ]]; then - # Redraw the prompt. - zle && zle .reset-prompt - fi - - typeset -g prompt_pure_last_prompt=$expanded_prompt -} - -prompt_pure_precmd() { - # check exec time and store it in a variable - prompt_pure_check_cmd_exec_time - unset prompt_pure_cmd_timestamp - - # shows the full path in the title - prompt_pure_set_title 'expand-prompt' '%~' - - # preform async git dirty check and fetch - prompt_pure_async_tasks - - # Check if we should display the virtual env, we use a sufficiently high - # index of psvar (12) here to avoid collisions with user defined entries. - psvar[12]= - # When VIRTUAL_ENV_DISABLE_PROMPT is empty, it was unset by the user and - # Pure should take back control. - if [[ -n $VIRTUAL_ENV ]] && [[ -z $VIRTUAL_ENV_DISABLE_PROMPT || $VIRTUAL_ENV_DISABLE_PROMPT = 12 ]]; then - psvar[12]="${VIRTUAL_ENV:t}" - export VIRTUAL_ENV_DISABLE_PROMPT=12 - fi - - # print the preprompt - prompt_pure_preprompt_render "precmd" -} - -prompt_pure_async_git_aliases() { - setopt localoptions noshwordsplit - local dir=$1 - local -a gitalias pullalias - - # we enter repo to get local aliases as well. - builtin cd -q $dir - - # list all aliases and split on newline. - gitalias=(${(@f)"$(command git config --get-regexp "^alias\.")"}) - for line in $gitalias; do - parts=(${(@)=line}) # split line on spaces - aliasname=${parts[1]#alias.} # grab the name (alias.[name]) - shift parts # remove aliasname - - # check alias for pull or fetch (must be exact match). - if [[ $parts =~ ^(.*\ )?(pull|fetch)(\ .*)?$ ]]; then - pullalias+=($aliasname) - fi - done - - print -- ${(j:|:)pullalias} # join on pipe (for use in regex). -} - -prompt_pure_async_vcs_info() { - setopt localoptions noshwordsplit - builtin cd -q $1 2>/dev/null - - # configure vcs_info inside async task, this frees up vcs_info - # to be used or configured as the user pleases. - 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 - # export branch (%b) and git toplevel (%R) - zstyle ':vcs_info:git*' formats '%b' '%R' - zstyle ':vcs_info:git*' actionformats '%b|%a' '%R' - - vcs_info - - local -A info - info[top]=$vcs_info_msg_1_ - info[branch]=$vcs_info_msg_0_ - - print -r - ${(@kvq)info} -} - -# fastest possible way to check if repo is dirty -prompt_pure_async_git_dirty() { - setopt localoptions noshwordsplit - local untracked_dirty=$1 dir=$2 - - # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks - builtin cd -q $dir - - 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 - - return $? -} - -prompt_pure_async_git_fetch() { - setopt localoptions noshwordsplit - # use cd -q to avoid side effects of changing directory, e.g. chpwd hooks - builtin cd -q $1 - - # set GIT_TERMINAL_PROMPT=0 to disable auth prompting for git fetch (git 2.3+) - export GIT_TERMINAL_PROMPT=0 - # set ssh BachMode to disable all interactive ssh password prompting - export GIT_SSH_COMMAND=${GIT_SSH_COMMAND:-"ssh -o BatchMode=yes"} - - command git -c gc.auto=0 fetch &>/dev/null || return 99 - - # check arrow status after a successful git fetch - prompt_pure_async_git_arrows $1 -} - -prompt_pure_async_git_arrows() { - setopt localoptions noshwordsplit - builtin cd -q $1 - command git rev-list --left-right --count HEAD...@'{u}' -} - -prompt_pure_async_tasks() { - setopt localoptions noshwordsplit - - # initialize async worker - ((!${prompt_pure_async_init:-0})) && { - async_start_worker "prompt_pure" -u -n - async_register_callback "prompt_pure" prompt_pure_async_callback - typeset -g prompt_pure_async_init=1 - } - - typeset -gA prompt_pure_vcs_info - - local -H MATCH MBEGIN MEND - if ! [[ $PWD = ${prompt_pure_vcs_info[pwd]}* ]]; 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 - unset prompt_pure_git_arrows - unset prompt_pure_git_fetch_pattern - prompt_pure_vcs_info[branch]= - prompt_pure_vcs_info[top]= - fi - unset MATCH MBEGIN MEND - - async_job "prompt_pure" prompt_pure_async_vcs_info $PWD - - # # only perform tasks inside git working tree - [[ -n $prompt_pure_vcs_info[top] ]] || return - - prompt_pure_async_refresh -} - -prompt_pure_async_refresh() { - setopt localoptions noshwordsplit - - if [[ -z $prompt_pure_git_fetch_pattern ]]; then - # we set the pattern here to avoid redoing the pattern check until the - # working three has changed. pull and fetch are always valid patterns. - typeset -g prompt_pure_git_fetch_pattern="pull|fetch" - async_job "prompt_pure" prompt_pure_async_git_aliases $working_tree - fi - - async_job "prompt_pure" prompt_pure_async_git_arrows $PWD - - # 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 $PWD - 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} $PWD - fi -} - -prompt_pure_check_git_arrows() { - setopt localoptions noshwordsplit - local arrows left=${1:-0} right=${2:-0} - - (( right > 0 )) && arrows+=${PURE_GIT_DOWN_ARROW:-⇣} - (( left > 0 )) && arrows+=${PURE_GIT_UP_ARROW:-⇡} - - [[ -n $arrows ]] || return - typeset -g REPLY=$arrows -} - -prompt_pure_async_callback() { - setopt localoptions noshwordsplit - local job=$1 code=$2 output=$3 exec_time=$4 next_pending=$6 - local do_render=0 - - case $job in - prompt_pure_async_vcs_info) - local -A info - typeset -gA prompt_pure_vcs_info - - # parse output (z) and unquote as array (Q@) - info=("${(Q@)${(z)output}}") - local -H MATCH MBEGIN MEND - # check if git toplevel has changed - if [[ $info[top] = $prompt_pure_vcs_info[top] ]]; then - # if stored pwd is part of $PWD, $PWD is shorter and likelier - # to be toplevel, so we update pwd - if [[ $prompt_pure_vcs_info[pwd] = ${PWD}* ]]; then - prompt_pure_vcs_info[pwd]=$PWD - fi - else - # store $PWD to detect if we (maybe) left the git path - prompt_pure_vcs_info[pwd]=$PWD - fi - unset MATCH MBEGIN MEND - - # update has a git toplevel set which means we just entered a new - # git directory, run the async refresh tasks - [[ -n $info[top] ]] && [[ -z $prompt_pure_vcs_info[top] ]] && prompt_pure_async_refresh - - # always update branch and toplevel - prompt_pure_vcs_info[branch]=$info[branch] - prompt_pure_vcs_info[top]=$info[top] - - do_render=1 - ;; - prompt_pure_async_git_aliases) - if [[ -n $output ]]; then - # append custom git aliases to the predefined ones. - prompt_pure_git_fetch_pattern+="|$output" - fi - ;; - prompt_pure_async_git_dirty) - local prev_dirty=$prompt_pure_git_dirty - if (( code == 0 )); then - unset prompt_pure_git_dirty - else - typeset -g prompt_pure_git_dirty="*" - fi - - [[ $prev_dirty != $prompt_pure_git_dirty ]] && do_render=1 - - # 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 > 5 )) && prompt_pure_git_last_dirty_check_timestamp=$EPOCHSECONDS - ;; - prompt_pure_async_git_fetch|prompt_pure_async_git_arrows) - # prompt_pure_async_git_fetch executes prompt_pure_async_git_arrows - # after a successful fetch. - if (( code == 0 )); then - local REPLY - prompt_pure_check_git_arrows ${(ps:\t:)output} - if [[ $prompt_pure_git_arrows != $REPLY ]]; then - typeset -g prompt_pure_git_arrows=$REPLY - do_render=1 - fi - elif (( code != 99 )); then - # Unless the exit code is 99, prompt_pure_async_git_arrows - # failed with a non-zero exit status, meaning there is no - # upstream configured. - if [[ -n $prompt_pure_git_arrows ]]; then - unset prompt_pure_git_arrows - do_render=1 - fi - fi - ;; - esac - - if (( next_pending )); then - (( do_render )) && typeset -g prompt_pure_async_render_requested=1 - return - fi - - [[ ${prompt_pure_async_render_requested:-$do_render} = 1 ]] && prompt_pure_preprompt_render - unset prompt_pure_async_render_requested -} - -prompt_pure_setup() { - # Prevent percentage showing up if output doesn't end with a newline. - export PROMPT_EOL_MARK='' - - prompt_opts=(subst percent) - - # borrowed from promptinit, sets the prompt options in case pure was not - # initialized via promptinit. - setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}" - - if [[ -z $prompt_newline ]]; then - # This variable needs to be set, usually set by promptinit. - typeset -g prompt_newline=$'\n%{\r%}' - fi - - zmodload zsh/datetime - zmodload zsh/zle - zmodload zsh/parameter - - 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 - - # 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' - - # if a virtualenv is activated, display it in grey - PROMPT='%(12V.%F{242}%12v%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/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_sorin_setup b/.zprezto/modules/prompt/functions/prompt_sorin_setup index 30e71a9..14f8858 100644 --- a/.zprezto/modules/prompt/functions/prompt_sorin_setup +++ b/.zprezto/modules/prompt/functions/prompt_sorin_setup @@ -144,16 +144,17 @@ function prompt_sorin_setup { zstyle ':prezto:module:git:info:keys' format \ 'status' '%b %p %c:%s%A%B%S%a%d%m%r%U%u' + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '%f%F{3}(%v)%F{7} ' + # Set up non-zero return value display local show_return="✘ " # Default is to show the return value if zstyle -T ':prezto:module:prompt' show-return-val; then show_return+='%? ' fi - # Set python-info format - zstyle ':prezto:module:python:info:virtualenv' format '%f%F{3}(%v)%F{7} ' - # Get the async worker set up + # Get the async worker set up. _sorin_cur_git_root='' _prompt_sorin_git='' diff --git a/.zprezto/modules/prompt/functions/prompt_steeef_setup b/.zprezto/modules/prompt/functions/prompt_steeef_setup index b241f9a..ca39f93 100644 --- a/.zprezto/modules/prompt/functions/prompt_steeef_setup +++ b/.zprezto/modules/prompt/functions/prompt_steeef_setup @@ -72,6 +72,9 @@ function prompt_steeef_setup { local unstaged_format="${_prompt_steeef_colors[2]}●%f" local staged_format="${_prompt_steeef_colors[5]}●%f" + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:keymap:primary' format '$' + # Set vcs_info parameters. zstyle ':vcs_info:*' enable bzr git hg svn zstyle ':vcs_info:*:prompt:*' check-for-changes true @@ -87,8 +90,17 @@ function prompt_steeef_setup { # 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]'"$ " +"'$python_info[virtualenv]${editor_info[keymap]} ' RPROMPT='' } +function prompt_steeef_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2> /dev/null + prompt_preview_theme 'steeef' +} + prompt_steeef_setup "$@" diff --git a/.zprezto/modules/python/README.md b/.zprezto/modules/python/README.md index e7b72c4..121ea37 100644 --- a/.zprezto/modules/python/README.md +++ b/.zprezto/modules/python/README.md @@ -6,7 +6,9 @@ Enables local Python and local Python package installation. Settings -------- -This module supports virtual environments from conda and virtualenvwrapper. By default, only virtualenvwrapper is enabled. To disable virtualenvwrapper, add the following to *zpreztorc*. +This module supports virtual environments from conda and virtualenvwrapper. By +default, only virtualenvwrapper is enabled. To disable virtualenvwrapper, add +the following to *zpreztorc*. ```sh zstyle ':prezto:module:python' skip-virtualenvwrapper-init 'on' @@ -52,8 +54,8 @@ 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. +`virtualenv` creates isolated Python environments and `virtualenvwrapper` +provides convenient shell functions to create, switch, and manage them. ### Usage diff --git a/.zprezto/modules/python/init.zsh b/.zprezto/modules/python/init.zsh index 28f671e..9796294 100644 --- a/.zprezto/modules/python/init.zsh +++ b/.zprezto/modules/python/init.zsh @@ -7,15 +7,18 @@ # Patrick Bos # -# Load manually installed pyenv into the shell session. -if [[ -s "$HOME/.pyenv/bin/pyenv" ]]; then +# Load manually installed pyenv into the path +if [[ -n "$PYENV_ROOT" && -s "$PYENV_ROOT/bin/pyenv" ]]; then + path=("$PYENV_ROOT/bin" $path) +elif [[ -s "$HOME/.pyenv/bin/pyenv" ]]; then path=("$HOME/.pyenv/bin" $path) - export PYENV_ROOT=$(pyenv root) - eval "$(pyenv init - --no-rehash zsh)" +fi -# Load package manager installed pyenv into the shell session. -elif (( $+commands[pyenv] )); then - export PYENV_ROOT=$(pyenv root) +# Load pyenv into the current python session +if (( $+commands[pyenv] )); then + if [[ -z "$PYENV_ROOT" ]]; then + export PYENV_ROOT=$(pyenv root) + fi eval "$(pyenv init - --no-rehash zsh)" # Prepend PEP 370 per user site packages directory, which defaults to @@ -57,7 +60,7 @@ function _python-workon-cwd { local ENV_NAME="" if [[ -f "$PROJECT_ROOT/.venv" ]]; then ENV_NAME="$(cat "$PROJECT_ROOT/.venv")" - elif [[ -f "$PROJECT_ROOT/.venv/bin/activate" ]];then + elif [[ -f "$PROJECT_ROOT/.venv/bin/activate" ]]; then ENV_NAME="$PROJECT_ROOT/.venv" elif [[ "$PROJECT_ROOT" != "." ]]; then ENV_NAME="${PROJECT_ROOT:t}" @@ -93,8 +96,11 @@ if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) && \ # Set the directory where virtual environments are stored. export WORKON_HOME="${WORKON_HOME:-$HOME/.virtualenvs}" - # Disable the virtualenv prompt. - export VIRTUAL_ENV_DISABLE_PROMPT=1 + # Disable the virtualenv prompt. Note that we use the magic value used by the + # pure prompt because there's some additional logic in that prompt which tries + # to figure out if a user set this variable and disable the python portion of + # that prompt based on it which is the exact opposite of what we want to do. + export VIRTUAL_ENV_DISABLE_PROMPT=12 # Create a sorted array of available virtualenv related 'pyenv' commands to # look for plugins of interest. Scanning shell '$path' isn't enough as they diff --git a/.zprezto/modules/rsync/init.zsh b/.zprezto/modules/rsync/init.zsh index a802222..3618812 100644 --- a/.zprezto/modules/rsync/init.zsh +++ b/.zprezto/modules/rsync/init.zsh @@ -14,7 +14,8 @@ fi # Aliases # -_rsync_cmd='rsync --verbose --progress --human-readable --compress --archive --hard-links --one-file-system' +_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" diff --git a/.zprezto/modules/syntax-highlighting/external/INSTALL.md b/.zprezto/modules/syntax-highlighting/external/INSTALL.md index 1f0d923..468e9bd 100644 --- a/.zprezto/modules/syntax-highlighting/external/INSTALL.md +++ b/.zprezto/modules/syntax-highlighting/external/INSTALL.md @@ -33,17 +33,17 @@ See also [repology's cross-distro index](https://repology.org/metapackage/zsh-sy Simply clone this repository and source the script: - git clone https://github.com/zsh-users/zsh-syntax-highlighting.git - echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git + echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc Then, enable syntax highlighting in the current interactive shell: - source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh If `git` is not installed, download and extract a snapshot of the latest development tree from: - https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz + https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz Note the `source` command must be **at the end** of `~/.zshrc`. @@ -69,15 +69,15 @@ your `.zshrc`. 1. Clone this repository in oh-my-zsh's plugins directory: - git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting 2. Activate the plugin in `~/.zshrc`: - plugins=( [plugins...] zsh-syntax-highlighting) + plugins=( [plugins...] zsh-syntax-highlighting) 3. Source `~/.zshrc` to take changes into account: - source ~/.zshrc + source ~/.zshrc #### [Prezto](https://github.com/sorin-ionescu/prezto) diff --git a/.zprezto/modules/syntax-highlighting/external/docs/highlighters/main.md b/.zprezto/modules/syntax-highlighting/external/docs/highlighters/main.md index c14b32f..005fc4d 100644 --- a/.zprezto/modules/syntax-highlighting/external/docs/highlighters/main.md +++ b/.zprezto/modules/syntax-highlighting/external/docs/highlighters/main.md @@ -32,10 +32,19 @@ This highlighter defines the following styles: * `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default) * `globbing` - globbing expressions (`*.txt`) * `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`) +* `command-substitution` - command substitutions (`$(echo foo)`) +* `command-substitution-unquoted` - an unquoted command substitution (`$(echo foo)`) +* `command-substitution-quoted` - a quoted command substitution (`"$(echo foo)"`) +* `command-substitution-delimiter` - command substitution delimiters (`$(` and `)`) +* `command-substitution-delimiter-unquoted` - an unquoted command substitution delimiters (`$(` and `)`) +* `command-substitution-delimiter-quoted` - a quoted command substitution delimiters (`"$(` and `)"`) +* `process-substitution` - process substitutions (`<(echo foo)`) +* `process-substitution-delimiter` - process substitution delimiters (`<(` and `)`) * `single-hyphen-option` - single-hyphen options (`-o`) * `double-hyphen-option` - double-hyphen options (`--option`) * `back-quoted-argument` - backtick command substitution (`` `foo` ``) * `back-quoted-argument-unclosed` - unclosed backtick command substitution (`` `foo ``) +* `back-quoted-argument-delimiter` - backtick command substitution delimiters (`` ` ``) * `single-quoted-argument` - single-quoted arguments (`` 'foo' ``) * `single-quoted-argument-unclosed` - unclosed single-quoted arguments (`` 'foo ``) * `double-quoted-argument` - double-quoted arguments (`` "foo" ``) @@ -49,6 +58,7 @@ This highlighter defines the following styles: * `assign` - parameter assignments (`x=foo` and `x=( )`) * `redirection` - redirection operators (`<`, `>`, etc) * `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) +* `named-fd` - named file descriptor (`echo foo {fd}>&2`) * `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command). * `default` - everything else diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md deleted file mode 100644 index 9001074..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md +++ /dev/null @@ -1,29 +0,0 @@ -zsh-syntax-highlighting / highlighters / brackets -------------------------------------------------- - -This is the `brackets` highlighter, that highlights brackets and parentheses, and -matches them. - - -### 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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..6997bd6 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/brackets/README.md @@ -0,0 +1 @@ +../../docs/highlighters/brackets.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md deleted file mode 100644 index 7295fd1..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md +++ /dev/null @@ -1,22 +0,0 @@ -zsh-syntax-highlighting / highlighters / cursor ------------------------------------------------ - -This is the `cursor` highlighter, that highlights the 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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..70e0c8c --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/cursor/README.md @@ -0,0 +1 @@ +../../docs/highlighters/cursor.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md deleted file mode 100644 index 4ba14e9..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md +++ /dev/null @@ -1,22 +0,0 @@ -zsh-syntax-highlighting / highlighters / line ---------------------------------------------- - -This is the `line` highlighter, that highlights the whole 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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..052fe20 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/line/README.md @@ -0,0 +1 @@ +../../docs/highlighters/line.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md deleted file mode 100644 index c14b32f..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md +++ /dev/null @@ -1,103 +0,0 @@ -zsh-syntax-highlighting / highlighters / main ---------------------------------------------- - -This is the `main` highlighter, that highlights: - -* Commands -* Options -* Arguments -* Paths -* Strings - -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 (`if`, `for`) -* `alias` - aliases -* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer) -* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`) -* `function` - function names -* `command` - command names -* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`) -* `commandseparator` - command separation tokens (`;`, `&&`) -* `hashed-command` - hashed commands -* `path` - existing filenames -* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default) -* `path_prefix` - prefixes of existing filenames -* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default) -* `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` - backtick command substitution (`` `foo` ``) -* `back-quoted-argument-unclosed` - unclosed backtick command substitution (`` `foo ``) -* `single-quoted-argument` - single-quoted arguments (`` 'foo' ``) -* `single-quoted-argument-unclosed` - unclosed single-quoted arguments (`` 'foo ``) -* `double-quoted-argument` - double-quoted arguments (`` "foo" ``) -* `double-quoted-argument-unclosed` - unclosed double-quoted arguments (`` "foo ``) -* `dollar-quoted-argument` - dollar-quoted arguments (`` $'foo' ``) -* `dollar-quoted-argument-unclosed` - unclosed dollar-quoted arguments (`` $'foo ``) -* `rc-quote` - two single quotes inside single quotes when the `RC_QUOTES` option is set (`` 'foo''bar' ``) -* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`) -* `back-double-quoted-argument` - backslash escape sequences inside double-quoted arguments (`\"` in `"foo\"bar"`) -* `back-dollar-quoted-argument` - backslash escape sequences inside dollar-quoted arguments (`\x` in `$'\x48'`) -* `assign` - parameter assignments (`x=foo` and `x=( )`) -* `redirection` - redirection operators (`<`, `>`, etc) -* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) -* `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command). -* `default` - everything else - -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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -#### Parameters - -To avoid partial path lookups on a path, add the path to the `X_ZSH_HIGHLIGHT_DIRS_BLACKLIST` array. -This interface is still experimental. - - X_ZSH_HIGHLIGHT_DIRS_BLACKLIST+=(/mnt/slow_share) - -### Useless trivia - -#### Forward compatibility. - -zsh-syntax-highlighting attempts to be forward-compatible with zsh. -Specifically, we attempt to facilitate highlighting _command word_ types that -had not yet been invented when this version of zsh-syntax-highlighting was -released. - -A _command word_ is something like a function name, external command name, et -cetera. (See -[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines] -for a formal definition.) - -If a new _kind_ of command word is ever added to zsh — something conceptually -different than "function" and "alias" and "external command" — then command words -of that (new) kind will be highlighted by the style `arg0_$kind`, -where `$kind` is the output of `type -w` on the new kind of command word. If that -style is not defined, then the style `arg0` will be used instead. - -[zshmisc-Simple-Commands-And-Pipelines]: http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..0354731 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/README.md @@ -0,0 +1 @@ +../../docs/highlighters/main.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh index 8b373ab..06839ce 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/main-highlighter.zsh @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2017 zsh-syntax-highlighting contributors +# Copyright (c) 2010-2018 zsh-syntax-highlighting contributors # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, are permitted @@ -40,9 +40,14 @@ : ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=} : ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue} : ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue} +: ${ZSH_HIGHLIGHT_STYLES[command-substitution]:=none} +: ${ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]:=fg=magenta} +: ${ZSH_HIGHLIGHT_STYLES[process-substitution]:=none} +: ${ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]:=fg=magenta} : ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none} : ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none} : ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none} +: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]:=fg=magenta} : ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} : ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} : ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} @@ -53,6 +58,7 @@ : ${ZSH_HIGHLIGHT_STYLES[assign]:=none} : ${ZSH_HIGHLIGHT_STYLES[redirection]:=none} : ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold} +: ${ZSH_HIGHLIGHT_STYLES[named-fd]:=none} : ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green} # Whether the highlighter should be called or not. @@ -67,47 +73,14 @@ _zsh_highlight_main_add_region_highlight() { integer start=$1 end=$2 shift 2 - if (( $+argv[2] )); then - # Caller specified inheritance explicitly. - else - # Automate inheritance. - typeset -A fallback_of; fallback_of=( - alias arg0 - suffix-alias arg0 - builtin arg0 - function arg0 - command arg0 - precommand arg0 - hashed-command arg0 + (( highlighted_alias )) && return + (( in_alias )) && highlighted_alias=1 - path_prefix path - # The path separator fallback won't ever be used, due to the optimisation - # in _zsh_highlight_main_highlighter_highlight_path_separators(). - path_pathseparator path - path_prefix_pathseparator path_prefix + # The calculation was relative to $buf but region_highlight is relative to $BUFFER. + (( start += buf_offset )) + (( end += buf_offset )) - single-quoted-argument{-unclosed,} - double-quoted-argument{-unclosed,} - dollar-quoted-argument{-unclosed,} - back-quoted-argument{-unclosed,} - ) - local needle=$1 value - while [[ -n ${value::=$fallback_of[$needle]} ]]; do - unset "fallback_of[$needle]" # paranoia against infinite loops - argv+=($value) - needle=$value - done - fi - - # The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is - # relative to $BUFFER. - (( start -= $#PREBUFFER )) - (( end -= $#PREBUFFER )) - - (( start >= end )) && { print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_add_region_highlight: start($start) >= end($end)"; return } - (( end <= 0 )) && return - (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings - _zsh_highlight_add_highlight $start $end "$@" + list_highlights+=($start $end $1) } _zsh_highlight_main_add_many_region_highlights() { @@ -116,29 +89,81 @@ _zsh_highlight_main_add_many_region_highlights() { done } +_zsh_highlight_main_calculate_fallback() { + local -A fallback_of; fallback_of=( + alias arg0 + suffix-alias arg0 + builtin arg0 + function arg0 + command arg0 + precommand arg0 + hashed-command arg0 + arg0_\* arg0 + + path_prefix path + # The path separator fallback won't ever be used, due to the optimisation + # in _zsh_highlight_main_highlighter_highlight_path_separators(). + path_pathseparator path + path_prefix_pathseparator path_prefix + + single-quoted-argument{-unclosed,} + double-quoted-argument{-unclosed,} + dollar-quoted-argument{-unclosed,} + back-quoted-argument{-unclosed,} + + command-substitution{-quoted,,-unquoted,} + command-substitution-delimiter{-quoted,,-unquoted,} + + command-substitution{-delimiter,} + process-substitution{-delimiter,} + back-quoted-argument{-delimiter,} + ) + local needle=$1 value + reply=($1) + while [[ -n ${value::=$fallback_of[(k)$needle]} ]]; do + unset "fallback_of[$needle]" # paranoia against infinite loops + reply+=($value) + needle=$value + done +} + # Get the type of a command. # # Uses the zsh/parameter module if available to avoid forks, and a # wrapper around 'type -w' as fallback. # -# Takes a single argument. +# If $2 is 0, do not consider aliases. # # The result will be stored in REPLY. _zsh_highlight_main__type() { + integer -r aliases_allowed=${2-1} + # We won't cache replies of anything that exists as an alias at all, to + # ensure the cached value is correct regardless of $aliases_allowed. + # + # ### We probably _should_ cache them in a cache that's keyed on the value of + # ### $aliases_allowed, on the assumption that aliases are the common case. + integer may_cache=1 + + # Cache lookup if (( $+_zsh_highlight_main__command_type_cache )); then REPLY=$_zsh_highlight_main__command_type_cache[(e)$1] if [[ -n "$REPLY" ]]; then return fi fi + + # Main logic if (( $#options_to_set )); then setopt localoptions $options_to_set; fi unset REPLY if zmodload -e zsh/parameter; then if (( $+aliases[(e)$1] )); then + may_cache=0 + fi + if (( $+aliases[(e)$1] )) && (( aliases_allowed )); then REPLY=alias - elif (( $+saliases[(e)${1##*.}] )); then + elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[(e)${1##*.}] )); then REPLY='suffix alias' elif (( $reswords[(Ie)$1] )); then REPLY=reserved @@ -161,11 +186,36 @@ _zsh_highlight_main__type() { fi if ! (( $+REPLY )); then # Note that 'type -w' will run 'rehash' implicitly. - REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }" + # + # We 'unalias' in a subshell, so the parent shell is not affected. + # + # The colon command is there just to avoid a command substitution that + # starts with an arithmetic expression [«((…))» as the first thing inside + # «$(…)»], which is area that has had some parsing bugs before 5.6 + # (approximately). + REPLY="${$(:; (( aliases_allowed )) || unalias -- $1 2>/dev/null; LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }" + if [[ $REPLY == 'alias' ]]; then + may_cache=0 + fi fi - if (( $+_zsh_highlight_main__command_type_cache )); then + + # Cache population + if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then _zsh_highlight_main__command_type_cache[(e)$1]=$REPLY fi + [[ -n $REPLY ]] + return $? +} + +# Checks whether $1 is something that can be run. +# +# Return 0 if runnable, 1 if not runnable, 2 if trouble. +_zsh_highlight_main__is_runnable() { + if _zsh_highlight_main__type "$1"; then + [[ $REPLY != none ]] + else + return 2 + fi } # Check whether the first argument is a redirection operator token. @@ -196,13 +246,18 @@ _zsh_highlight_main__resolve_alias() { # the style according to $2; otherwise, set style=unknown-token. # # $1: character expected to be at the top of $braces_stack -# $2: assignment to execute it if matches +# $2: optional assignment to style it if matches +# return value is 0 if there is a match else 1 _zsh_highlight_main__stack_pop() { if [[ $braces_stack[1] == $1 ]]; then braces_stack=${braces_stack:1} - eval "$2" + if (( $+2 )); then + style=$2 + fi + return 0 else style=unknown-token + return 1 fi } @@ -220,24 +275,37 @@ _zsh_highlight_highlighter_main_paint() return fi - ## Variable declarations and initializations - local start_pos=0 end_pos highlight_glob=true arg style - local in_array_assignment=false # true between 'a=(' and the matching ')' typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR - typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW - local -a options_to_set # used in callees - local buf="$PREBUFFER$BUFFER" - integer len="${#buf}" + local -a options_to_set reply # used in callees + local REPLY - # "R" for round - # "Q" for square - # "Y" for curly - # "D" for do/done - # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while) - # "?" for 'if'/'fi'; also checked by 'elif'/'else' - # ":" for 'then' - local braces_stack + # $flags_with_argument is a set of letters, corresponding to the option letters + # that would be followed by a colon in a getopts specification. + local flags_with_argument + # $flags_sans_argument is a set of letters, corresponding to the option letters + # that wouldn't be followed by a colon in a getopts specification. + local flags_sans_argument + # $precommand_options maps precommand name to values of $flags_with_argument and + # $flags_sans_argument for that precommand, joined by a colon. + # + # Currently, setting $flags_sans_argument is only important for commands that + # have a non-empty $flags_with_argument; see test-data/precommand4.zsh. + local -A precommand_options + precommand_options=( + # Precommand modifiers as of zsh 5.6.2 cf. zshmisc(1). + '-' '' + 'builtin' '' + 'command' :pvV + 'exec' a:cl + 'nocorrect' '' + 'noglob' '' + + 'doas' aCu:Lns # as of OpenBSD's doas(1) dated September 4, 2016 + 'nice' n: # as of current POSIX spec + 'pkexec' '' # doesn't take short options; immune to #121 because it's usually not passed --option flags + 'sudo' Cgprtu:AEHKPSVbhiklnsv # as of sudo 1.8.21p2 + ) if [[ $zsyh_user_options[ignorebraces] == on || ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]; then local right_brace_is_recognised_everywhere=false @@ -256,10 +324,6 @@ _zsh_highlight_highlighter_main_paint() # ### 'case' syntax, but followed by a pattern, not by a command # ';;' ';&' ';|' ) - ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS=( - 'builtin' 'command' 'exec' 'nocorrect' 'noglob' - 'pkexec' # immune to #121 because it's usually not passed --option flags - ) # Tokens that, at (naively-determined) "command position", are followed by # a de jure command position. All of these are reserved words. @@ -279,14 +343,66 @@ _zsh_highlight_highlighter_main_paint() '!' # reserved word; unrelated to $histchars[1] ) - local -a match mbegin mend + _zsh_highlight_main_highlighter_highlight_list -$#PREBUFFER '' 1 "$PREBUFFER$BUFFER" + + # end is a reserved word + local start end_ style + for start end_ style in $reply; do + (( start >= end_ )) && { print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_highlighter_main_paint: start($start) >= end($end_)"; return } + (( end_ <= 0 )) && continue + (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings + _zsh_highlight_main_calculate_fallback $style + _zsh_highlight_add_highlight $start $end_ $reply + done +} + +# $1 is the offset of $4 from the parent buffer. Added to the returned highlights. +# $2 is the initial braces_stack (for a closing paren). +# $3 is 1 if $4 contains the end of $BUFFER, else 0. +# $4 is the buffer to highlight. +# Returns: +# $REPLY: $buf[REPLY] is the last character parsed. +# $reply is an array of region_highlight additions. +# exit code is 0 if the braces_stack is empty, 1 otherwise. +_zsh_highlight_main_highlighter_highlight_list() +{ + integer start_pos end_pos=0 buf_offset=$1 has_end=$3 + # last_alias is the last alias arg (lhs) expanded (if in an alias). + # This allows for expanding alias ls='ls -l' while avoiding loops. + local arg buf=$4 highlight_glob=true last_alias style + local in_array_assignment=false # true between 'a=(' and the matching ')' + # highlighted_alias is 1 when the alias arg has been highlighted with a non-alias style. + # E.g. alias x=ls; x has been highlighted as alias AND command. + # in_alias is equal to the number of shifts needed until arg=args[1] pops an + # arg from BUFFER and not added by an alias. + integer highlighted_alias=0 in_alias=0 len=$#buf + local -a match mbegin mend list_highlights + # seen_alias is a map of aliases already seen to avoid loops like alias a=b b=a + local -A seen_alias + # Pattern for parameter names + readonly parameter_name_pattern='([A-Za-z_][A-Za-z0-9_]*|[0-9]+)' + list_highlights=() + + # "R" for round + # "Q" for square + # "Y" for curly + # "T" for [[ ]] + # "S" for $( ) + # "D" for do/done + # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while) + # "?" for 'if'/'fi'; also checked by 'elif'/'else' + # ":" for 'then' + local braces_stack=$2 # 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, + # - :start_of_pipeline: Start of a 'pipeline' as defined in zshmisc(1). + # Only valid when :start: is present + # - :sudo_opt: A leading-dash option to a precommand, whether it takes an + # argument or not. (Example: sudo's "-u" or "-i".) + # - :sudo_arg: The argument to a precommand's leading-dash option, # 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", and command delimiters are permitted. @@ -317,7 +433,7 @@ _zsh_highlight_highlighter_main_paint() # $in_redirection. The value of $next_word from the iteration that processed # the operator is discarded. # - local this_word=':start:' next_word + local this_word next_word=':start::start_of_pipeline:' integer in_redirection # Processing buffer local proc_buf="$buf" @@ -327,30 +443,29 @@ _zsh_highlight_highlighter_main_paint() else args=(${(z)buf}) fi - for arg in $args; do - # Initialize $next_word. - if (( in_redirection )); then - (( --in_redirection )) + while (( $#args )); do + arg=$args[1] + shift args + if (( in_alias )); then + (( in_alias-- )) + (( in_alias == 0 )) && highlighted_alias=0 last_alias= seen_alias=() fi + + # Initialize this_word and next_word. if (( in_redirection == 0 )); then - # Initialize $next_word to its default value. + this_word=$next_word next_word=':regular:' else # Stall $next_word. + (( --in_redirection )) fi # Initialize per-"simple command" [zshmisc(1)] variables: # - # $already_added (see next paragraph) # $style how to highlight $arg # $in_array_assignment boolean flag for "between '(' and ')' of array assignment" # $highlight_glob boolean flag for "'noglob' is in effect" # - # $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 style=unknown-token if [[ $this_word == *':start:'* ]]; then in_array_assignment=false @@ -359,59 +474,33 @@ _zsh_highlight_highlighter_main_paint() fi fi - # Compute the new $start_pos and $end_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=$(( ${proc_buf[(i)$needle]} - 1 )) - (( start_pos += offset )) + if (( in_alias == 0 )); then + # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf. + [[ "$proc_buf" = (#b)(#s)(([ $'\t']|\\$'\n')#)* ]] + # The first, outer parenthesis + integer offset="${#match[1]}" + (( start_pos = end_pos + offset )) (( end_pos = start_pos + $#arg )) - else - # The line was: - # - # integer offset=$(((len-start_pos)-${#${proc_buf##([[:space:]]|\\[[:space:]])#}})) - # - # - len-start_pos is length of current proc_buf; basically: initial length minus where - # we are, and proc_buf is chopped to the "where we are" (compare the "previous value - # of start_pos" below, and the len-(start_pos-offset) = len-start_pos+offset) - # - what's after main minus sign is: length of proc_buf without spaces at the beginning - # - so what the line actually did, was computing length of the spaces! - # - this can be done via (#b) flag, like below - if [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then - # The first, outer parenthesis - integer offset="${#match[1]}" - else - integer offset=0 - fi - ((start_pos+=offset)) - ((end_pos=$start_pos+${#arg})) - fi - # Compute the new $proc_buf. We advance it - # (chop off characters from the beginning) - # beyond what end_pos points to, by skipping - # as many characters as end_pos was advanced. - # - # end_pos was advanced by $offset (via start_pos) - # and by $#arg. Note the `start_pos=$end_pos` - # below. - # - # As for the [,len]. We could use [,len-start_pos+offset] - # here, but to make it easier on eyes, we use len and - # rely on the fact that Zsh simply handles that. The - # length of proc_buf is len-start_pos+offset because - # we're chopping it to match current start_pos, so its - # length matches the previous value of start_pos. - # - # Why [,-1] is slower than [,length] isn't clear. - proc_buf="${proc_buf[offset + $#arg + 1,len]}" + # Compute the new $proc_buf. We advance it + # (chop off characters from the beginning) + # beyond what end_pos points to, by skipping + # as many characters as end_pos was advanced. + # + # end_pos was advanced by $offset (via start_pos) + # and by $#arg. Note the `start_pos=$end_pos` + # below. + # + # As for the [,len]. We could use [,len-start_pos+offset] + # here, but to make it easier on eyes, we use len and + # rely on the fact that Zsh simply handles that. The + # length of proc_buf is len-start_pos+offset because + # we're chopping it to match current start_pos, so its + # length matches the previous value of start_pos. + # + # Why [,-1] is slower than [,length] isn't clear. + proc_buf="${proc_buf[offset + $#arg + 1,len]}" + fi # Handle the INTERACTIVE_COMMENTS option. # @@ -423,41 +512,139 @@ _zsh_highlight_highlighter_main_paint() style=unknown-token # prematurely terminated fi _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style - already_added=1 - start_pos=$end_pos + # Stall this arg + in_redirection=1 continue fi + if [[ $this_word == *:start:* ]] && ! (( in_redirection )); then + # Expand aliases. + _zsh_highlight_main__type "$arg" + local res="$REPLY" + if [[ $res == "alias" ]] && [[ $last_alias != $arg ]]; then + # Avoid looping forever on alias a=b b=c c=b, but allow alias foo='foo bar' + # Also mark insane aliases as unknown-token (cf. #263). + if (( $+seen_alias[$arg] )) || [[ $arg == ?*=* ]]; then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token + continue + fi + seen_alias[$arg]=1 + last_alias=$arg + _zsh_highlight_main__resolve_alias $arg + local -a alias_args + # Elision is desired in case alias x='' + alias_args=( ${interactive_comments-${(z)REPLY}} + ${interactive_comments+${(zZ+c+)REPLY}} ) + args=( $alias_args $args ) + if (( in_alias == 0 )); then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos alias + # Add one because we will in_alias-- on the next loop iteration so + # this iteration should be considered in in_alias as well + (( in_alias += $#alias_args + 1 )) + else + # This arg is already included in the count, so no need to + 1. + (( in_alias += $#alias_args )) + fi + (( in_redirection++ )) # Stall this arg + continue + else + _zsh_highlight_main_highlighter_expand_path $arg + arg=$REPLY + _zsh_highlight_main__type "$arg" 0 + res="$REPLY" + fi + fi + # Analyse the current word. if _zsh_highlight_main__is_redirection $arg ; then - if (( in_redirection )); then + if (( in_redirection == 1 )); then + # The condition excludes the case that BUFFER='{foo}>&2' and we're on the '>&'. _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token - already_added=1 else in_redirection=2 + _zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection fi + continue + elif [[ $arg == '{'${~parameter_name_pattern}'}' ]] && _zsh_highlight_main__is_redirection $args[1]; then + # named file descriptor: {foo}>&2 + in_redirection=3 + _zsh_highlight_main_add_region_highlight $start_pos $end_pos named-fd + continue fi - # Special-case the first word after 'sudo'. - if (( ! in_redirection )); then - if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then - this_word=${this_word//:sudo_opt:/} + # Expand parameters. + # + # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with + # ### no other features of the parameter expansion syntax. (No ${(x)foo}, + # ### no ${foo[x]}, no ${foo:-x}.) + () { + # That's not entirely correct --- if the parameter's value happens to be a reserved + # word, the parameter expansion will be highlighted as a reserved word --- but that + # incorrectness is outweighed by the usability improvement of permitting the use of + # parameters that refer to commands, functions, and builtins. + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local parameter_name + if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then + parameter_name=${${arg:2}%?} + elif [[ $arg[1] == '$' ]]; then + parameter_name=${arg:1} fi - fi + if [[ $res == none ]] && zmodload -e zsh/parameter && + [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] && + (( ${+parameters[(e)${MATCH}]} )) && [[ ${parameters[(e)$MATCH]} != *special* ]] + then + # Set $arg. + case ${(tP)MATCH} in + (*array*|*assoc*) + local -a words; words=( ${(P)MATCH} ) + arg=${words[1]} + ;; + (*) + # scalar, presumably + arg=${(P)MATCH} + ;; + esac + _zsh_highlight_main__type "$arg" 0 + res=$REPLY + fi + } # Parse the sudo command line if (( ! in_redirection )); then if [[ $this_word == *':sudo_opt:'* ]]; then - case "$arg" in + if [[ -n $flags_with_argument ]] && + { [[ -n $flags_sans_argument ]] && [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument] ]] || + [[ $arg == '-'[$flags_with_argument] ]] }; then # 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 + this_word=${this_word//:start:/} + next_word=':sudo_arg:' + elif [[ -n $flags_with_argument ]] && + { [[ -n $flags_sans_argument ]] && [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument]* ]] || + [[ $arg == '-'[$flags_with_argument]* ]] }; then + # Argument attached in the same word + this_word=${this_word//:start:/} + next_word+=':start:' + next_word+=':sudo_opt:' + elif [[ -n $flags_sans_argument ]] && + [[ $arg == '-'[$flags_sans_argument]# ]]; then + # Flag that requires no argument + this_word=:sudo_opt: + next_word+=':start:' + next_word+=':sudo_opt:' + elif [[ $arg == '-'* ]]; then + # Unknown flag + this_word=:sudo_opt: + next_word+=':start:' + next_word+=':sudo_opt:' + _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token + continue + else + # Not an option flag; nothing to do. (If the command line is + # syntactically valid, ${this_word//:sudo_opt:/} should be + # non-empty now.) + this_word=${this_word//:sudo_opt:/} + fi elif [[ $this_word == *':sudo_arg:'* ]]; then next_word+=':sudo_opt:' next_word+=':start:' @@ -465,67 +652,69 @@ _zsh_highlight_highlighter_main_paint() fi # The Great Fork: is this a command word? Is this a non-command word? - if [[ $this_word == *':always:'* && $arg == 'always' ]]; then + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + if _zsh_highlight_main__stack_pop T || _zsh_highlight_main__stack_pop Q; then + # Missing closing square bracket(s) + style=unknown-token + elif [[ $this_word == *':regular:'* ]]; then + # This highlights empty commands (semicolon follows nothing) as an error. + # Zsh accepts them, though. + style=commandseparator + else + style=unknown-token + fi + if [[ $arg == ';' ]] && $in_array_assignment; then + # literal newline inside an array assignment + next_word=':regular:' + else + next_word=':start:' + highlight_glob=true + if [[ $arg != '|' && $arg != '|&' ]]; then + next_word+=':start_of_pipeline:' + fi + fi + elif ! (( in_redirection)) && [[ $this_word == *':always:'* && $arg == 'always' ]]; then # try-always construct style=reserved-word # de facto a reserved word, although not de jure - next_word=':start:' - elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word - if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then - style=precommand - elif [[ "$arg" = "sudo" ]] && { _zsh_highlight_main__type sudo; [[ -n $REPLY && $REPLY != "none" ]] }; then + next_word=':start:' # only left brace is allowed, apparently + elif ! (( in_redirection)) && [[ $this_word == *':start:'* ]]; then # $arg is the command word + if (( ${+precommand_options[$arg]} )) && _zsh_highlight_main__is_runnable $arg; then style=precommand + flags_with_argument=${precommand_options[$arg]%:*} + flags_sans_argument=${precommand_options[$arg]#*:} next_word=${next_word//:regular:/} next_word+=':sudo_opt:' next_word+=':start:' else - _zsh_highlight_main_highlighter_expand_path $arg - local expanded_arg="$REPLY" - _zsh_highlight_main__type ${expanded_arg} - local res="$REPLY" - () { - # Special-case: command word is '$foo', like that, without braces or anything. - # - # That's not entirely correct --- if the parameter's value happens to be a reserved - # word, the parameter expansion will be highlighted as a reserved word --- but that - # incorrectness is outweighed by the usability improvement of permitting the use of - # parameters that refer to commands, functions, and builtins. - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - if [[ $res == none ]] && (( ${+parameters} )) && - [[ ${arg[1]} == \$ ]] && [[ ${arg:1} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+)$ ]] && - (( ${+parameters[(e)${MATCH}]} )) && [[ ${parameters[(e)$MATCH]} != *special* ]] - then - _zsh_highlight_main__type ${(P)MATCH} - res=$REPLY - fi - } case $res in reserved) # reserved word style=reserved-word - # - # Match braces. + # Match braces and handle special cases. case $arg in ($'\x7b') braces_stack='Y'"$braces_stack" ;; ($'\x7d') # We're at command word, so no need to check $right_brace_is_recognised_everywhere - _zsh_highlight_main__stack_pop 'Y' style=reserved-word + _zsh_highlight_main__stack_pop 'Y' reserved-word if [[ $style == reserved-word ]]; then next_word+=':always:' fi ;; + ($'\x5b\x5b') + braces_stack='T'"$braces_stack" + ;; ('do') braces_stack='D'"$braces_stack" ;; ('done') - _zsh_highlight_main__stack_pop 'D' style=reserved-word + _zsh_highlight_main__stack_pop 'D' reserved-word ;; ('if') braces_stack=':?'"$braces_stack" ;; ('then') - _zsh_highlight_main__stack_pop ':' style=reserved-word + _zsh_highlight_main__stack_pop ':' reserved-word ;; ('elif') if [[ ${braces_stack[1]} == '?' ]]; then @@ -542,69 +731,68 @@ _zsh_highlight_highlighter_main_paint() fi ;; ('fi') - _zsh_highlight_main__stack_pop '?' "" + _zsh_highlight_main__stack_pop '?' ;; ('foreach') braces_stack='$'"$braces_stack" ;; ('end') - _zsh_highlight_main__stack_pop '$' style=reserved-word + _zsh_highlight_main__stack_pop '$' reserved-word + ;; + ('repeat') + # skip the repeat-count word + in_redirection=2 + # The redirection mechanism assumes $this_word describes the word + # following the redirection. Make it so. + # + # That word can be a command word with shortloops (`repeat 2 ls`) + # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). + # + # The repeat-count word will be handled like a redirection target. + this_word=':start::regular:' + ;; + ('!') + if [[ $this_word != *':start_of_pipeline:'* ]]; then + style=unknown-token + else + # '!' reserved word at start of pipeline; style already set above + fi ;; esac ;; 'suffix alias') style=suffix-alias;; - alias) () { - integer insane_alias - case $arg in - # Issue #263: aliases with '=' on their LHS. - # - # There are three cases: - # - # - Unsupported, breaks 'alias -L' output, but invokable: - ('='*) :;; - # - Unsupported, not invokable: - (*'='*) insane_alias=1;; - # - The common case: - (*) :;; - esac - if (( insane_alias )); then - style=unknown-token - else - # The common case. - style=alias - _zsh_highlight_main__resolve_alias $arg - local alias_target="$REPLY" - [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$alias_target"} && -z ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg) - fi - } + alias) :;; + builtin) style=builtin + [[ $arg == $'\x5b' ]] && braces_stack='Q'"$braces_stack" ;; - builtin) style=builtin;; function) style=function;; command) style=command;; hashed) style=hashed-command;; none) if _zsh_highlight_main_highlighter_check_assign; then - style=assign - if [[ $arg[-1] == '(' ]]; then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign + local i=$(( arg[(i)=] + 1 )) + if [[ $arg[i] == '(' ]]; then in_array_assignment=true else # assignment to a scalar parameter. # (For array assignments, the command doesn't start until the ")" token.) + # + # Discard :start_of_pipeline:, if present, as '!' is not valid + # after assignments. next_word+=':start:' + if (( start_pos + i <= end_pos )); then + () { + local highlight_glob=false + [[ $zsyh_user_options[globassign] == on ]] && highlight_glob=true + _zsh_highlight_main_highlighter_highlight_argument $i + } + fi fi + continue elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then style=history-expansion elif [[ $arg[0,1] == $histchars[2,2] ]]; then style=history-expansion - elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $this_word == *':regular:'* ]]; then - # This highlights empty commands (semicolon follows nothing) as an error. - # Zsh accepts them, though. - style=commandseparator - else - style=unknown-token - fi - elif (( in_redirection == 2 )); then - style=redirection elif [[ $arg[1,2] == '((' ]]; then # Arithmetic evaluation. # @@ -615,13 +803,11 @@ _zsh_highlight_highlighter_main_paint() # # We highlight just the opening parentheses, as a reserved word; this # is how [[ ... ]] is highlighted, too. - style=reserved-word - _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) $style - already_added=1 + _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) reserved-word if [[ $arg[-2,-1] == '))' ]]; then - _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos $style - already_added=1 + _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos reserved-word fi + continue elif [[ $arg == '()' ]]; then # anonymous function style=reserved-word @@ -630,103 +816,90 @@ _zsh_highlight_highlighter_main_paint() style=reserved-word braces_stack='R'"$braces_stack" elif [[ $arg == $'\x29' ]]; then - # end of subshell - _zsh_highlight_main__stack_pop 'R' style=reserved-word + # end of subshell or command substitution + if _zsh_highlight_main__stack_pop 'S'; then + REPLY=$start_pos + reply=($list_highlights) + return 0 + fi + _zsh_highlight_main__stack_pop 'R' reserved-word else - if _zsh_highlight_main_highlighter_check_path; then + if _zsh_highlight_main_highlighter_check_path $arg; then style=$REPLY else style=unknown-token fi fi ;; - *) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res arg0 - already_added=1 + *) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res + continue ;; esac fi - fi - if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath - { (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] } - then # $arg is a non-command word + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} ]]; then + next_word=':start::start_of_pipeline:' + fi + else # $arg is a non-command word case $arg in $'\x29') # subshell or end of array assignment if $in_array_assignment; then style=assign in_array_assignment=false next_word+=':start:' + elif (( in_redirection )); then + style=unknown-token else - _zsh_highlight_main__stack_pop 'R' style=reserved-word + if _zsh_highlight_main__stack_pop 'S'; then + REPLY=$start_pos + reply=($list_highlights) + return 0 + fi + _zsh_highlight_main__stack_pop 'R' reserved-word fi;; $'\x28\x29') # possibly a function definition - if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word - then - next_word+=':start:' + if (( in_redirection )) || $in_array_assignment; then + style=unknown-token + else + if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word + then + next_word+=':start::start_of_pipeline:' + fi + style=reserved-word fi - style=reserved-word ;; *) if false; then elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then - # Parsing rule: } + # Parsing rule: { # # Additionally, `tt(})' is recognized in any position if neither the # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set. - _zsh_highlight_main__stack_pop 'Y' style=reserved-word - if [[ $style == reserved-word ]]; then - next_word+=':always:' + if (( in_redirection )) || $in_array_assignment; then + style=unknown-token + else + _zsh_highlight_main__stack_pop 'Y' reserved-word + if [[ $style == reserved-word ]]; then + next_word+=':always:' + fi fi elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then style=history-expansion - elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $this_word == *':regular:'* ]]; then - style=commandseparator - else - style=unknown-token - fi - elif (( in_redirection == 2 )); then - style=redirection + elif [[ $arg == $'\x5d\x5d' ]] && _zsh_highlight_main__stack_pop 'T' reserved-word; then + : + elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then + : else - _zsh_highlight_main_highlighter_highlight_argument - already_added=1 + _zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 != in_redirection )) + continue fi ;; esac fi - if ! (( already_added )); then - _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style - fi - if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $arg == ';' ]] && $in_array_assignment; then - # literal newline inside an array assignment - next_word=':regular:' - else - next_word=':start:' - highlight_glob=true - fi - 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. - # - # That word can be a command word with shortloops (`repeat 2 ls`) - # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). - # - # The repeat-count word will be handled like a redirection target. - this_word=':start::regular:' - fi - start_pos=$end_pos - if (( in_redirection == 0 )); then - # This is the default/common codepath. - this_word=$next_word - else - # Stall $this_word. - fi + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style done + [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\$'\n')#) ]] + REPLY=$(( end_pos + ${#match[1]} - 1 )) + reply=($list_highlights) + return $(( $#braces_stack > 0 )) } # Check if $arg is variable assignment @@ -750,19 +923,17 @@ _zsh_highlight_main_highlighter_highlight_path_separators() done } -# Check if $arg is a path. +# Check if $1 is a path. # If yes, return 0 and in $REPLY the style to use. # Else, return non-zero (and the contents of $REPLY is undefined). _zsh_highlight_main_highlighter_check_path() { - _zsh_highlight_main_highlighter_expand_path $arg; + _zsh_highlight_main_highlighter_expand_path "$1" local expanded_path="$REPLY" tmp_path REPLY=path [[ -z $expanded_path ]] && return 1 - [[ -L $expanded_path ]] && return 0 - [[ -e $expanded_path ]] && return 0 # Check if this is a blacklisted path if [[ $expanded_path[1] == / ]]; then @@ -773,21 +944,24 @@ _zsh_highlight_main_highlighter_check_path() tmp_path=$tmp_path:a while [[ $tmp_path != / ]]; do - [[ -n "${(M)X_ZSH_HIGHLIGHT_DIRS_BLACKLIST:#$tmp_path}" ]] && return 1 + [[ -n ${(M)X_ZSH_HIGHLIGHT_DIRS_BLACKLIST:#$tmp_path} ]] && return 1 tmp_path=$tmp_path:h done + [[ -L $expanded_path ]] && return 0 + [[ -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. + # If dirname($1) doesn't exist, neither does $1. [[ ! -d ${expanded_path:h} ]] && return 1 # If this word ends the buffer, check if it's the prefix of a valid path. - if [[ ${BUFFER[1]} != "-" && $len == $end_pos ]] && + if (( has_end && (len == end_pos) )) && [[ $WIDGET != zle-line-finish ]]; then local -a tmp tmp=( ${expanded_path}*(N) ) @@ -798,26 +972,46 @@ _zsh_highlight_main_highlighter_check_path() return 1 } -# Highlight an argument and possibly special chars in quotes -# This command will at least highlight start_pos to end_pos with the default style +# Highlight an argument and possibly special chars in quotes starting at $1 in $arg +# This command will at least highlight $1 to end_pos with the default style +# If $2 is set to 0, the argument cannot be highlighted as an option. _zsh_highlight_main_highlighter_highlight_argument() { - local base_style=default i path_eligible=1 style - local -a highlights reply + local base_style=default i=$1 option_eligible=${2:-1} path_eligible=1 ret start style + local -a highlights local -a match mbegin mend local MATCH; integer MBEGIN MEND - if [[ $arg[1] == - ]]; then - if [[ $arg[2] == - ]]; then - base_style=double-hyphen-option - else - base_style=single-hyphen-option - fi - path_eligible=0 - fi + case "$arg[i]" in + '-') + if (( option_eligible )); then + if [[ $arg[i+1] == - ]]; then + base_style=double-hyphen-option + else + base_style=single-hyphen-option + fi + path_eligible=0 + fi + ;; + '=') + if [[ $arg[i+1] == $'\x28' ]]; then + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + $1 - 1 )) $(( start_pos + i )) process-substitution + $(( start_pos + $1 - 1 )) $(( start_pos + $1 + 1 )) process-substitution-delimiter + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1 )) $(( start_pos + i )) process-substitution-delimiter) + fi + fi + esac - for (( i = 1 ; i <= end_pos - start_pos ; i += 1 )); do + for (( ; i <= end_pos - start_pos ; i += 1 )); do case "$arg[$i]" in "\\") (( i += 1 )); continue;; "'") @@ -843,6 +1037,21 @@ _zsh_highlight_main_highlighter_highlight_argument() (( i = REPLY )) highlights+=($reply) continue + elif [[ $arg[i+1] == $'\x28' ]]; then + start=$i + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + start - 1)) $(( start_pos + i )) command-substitution-unquoted + $(( start_pos + start - 1)) $(( start_pos + start + 1)) command-substitution-delimiter-unquoted + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) command-substitution-delimiter-unquoted) + fi + continue fi while [[ $arg[i+1] == [\^=~#+] ]]; do (( i += 1 )) @@ -850,6 +1059,24 @@ _zsh_highlight_main_highlighter_highlight_argument() if [[ $arg[i+1] == [*@#?$!-] ]]; then (( i += 1 )) fi;; + [\<\>]) + if [[ $arg[i+1] == $'\x28' ]]; then # \x28 = open paren + start=$i + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + start - 1)) $(( start_pos + i )) process-substitution + $(( start_pos + start - 1)) $(( start_pos + start + 1 )) process-substitution-delimiter + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) process-substitution-delimiter) + fi + continue + fi + ;| *) if $highlight_glob && [[ ${arg[$i]} =~ ^[*?] || ${arg:$i-1} =~ ^\<[0-9]*-[0-9]*\> ]]; then highlights+=($(( start_pos + i - 1 )) $(( start_pos + i + $#MATCH - 1)) globbing) @@ -862,13 +1089,13 @@ _zsh_highlight_main_highlighter_highlight_argument() esac done - if (( path_eligible )) && _zsh_highlight_main_highlighter_check_path; then + if (( path_eligible )) && _zsh_highlight_main_highlighter_check_path $arg[$1,end_pos]; then base_style=$REPLY _zsh_highlight_main_highlighter_highlight_path_separators $base_style highlights+=($reply) fi - highlights=($start_pos $end_pos $base_style $highlights) + highlights=($(( start_pos + $1 - 1 )) $end_pos $base_style $highlights) _zsh_highlight_main_add_many_region_highlights $highlights } @@ -909,9 +1136,9 @@ _zsh_highlight_main_highlighter_highlight_single_quote() # Highlight special chars inside double-quoted strings _zsh_highlight_main_highlighter_highlight_double_quote() { - local -a match mbegin mend saved_reply - local MATCH; integer MBEGIN MEND - local i j k style + local -a breaks match mbegin mend saved_reply + local MATCH; integer last_break=$(( start_pos + $1 - 1 )) MBEGIN MEND + local i j k ret style reply=() for (( i = $1 + 1 ; i <= end_pos - start_pos ; i += 1 )) ; do @@ -942,7 +1169,23 @@ _zsh_highlight_main_highlighter_highlight_double_quote() (( k += 1 )) # highlight both dollar signs (( i += 1 )) # don't consider the second one as introducing another parameter expansion elif [[ $arg[i+1] == $'\x28' ]]; then - # Highlight just the '$'. + breaks+=( $last_break $(( start_pos + i - 1 )) ) + (( i += 2 )) + saved_reply=($reply) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] + ret=$? + (( i += REPLY )) + last_break=$(( start_pos + i )) + reply=( + $saved_reply + $j $(( start_pos + i )) command-substitution-quoted + $j $(( j + 2 )) command-substitution-delimiter-quoted + $reply + ) + if (( ret == 0 )); then + reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter-quoted) + fi + continue else continue fi @@ -975,7 +1218,13 @@ _zsh_highlight_main_highlighter_highlight_double_quote() (( i-- )) style=double-quoted-argument-unclosed fi - reply=($(( start_pos + $1 - 1)) $(( start_pos + i )) $style $reply) + (( last_break != start_pos + i )) && breaks+=( $last_break $(( start_pos + i )) ) + saved_reply=($reply) + reply=() + for 1 2 in $breaks; do + reply+=($1 $2 $style) + done + reply+=($saved_reply) REPLY=$i } @@ -1033,21 +1282,73 @@ _zsh_highlight_main_highlighter_highlight_dollar_quote() REPLY=$i } -# Highlight backtick subshells +# Highlight backtick substitutions _zsh_highlight_main_highlighter_highlight_backtick() { - local arg1=$1 i=$1 q=\` style + # buf is the contents of the backticks with a layer of backslashes removed. + # last is the index of arg for the start of the string to be copied into buf. + # It is either one past the beginning backtick or one past the last backslash. + # offset is a count of consumed \ (the delta between buf and arg). + # offsets is an array indexed by buf offset of when the delta between buf and arg changes. + # It is sparse, so search backwards to the last value + local buf highlight style=back-quoted-argument-unclosed style_end + local -i arg1=$1 end_ i=$1 last offset=0 start subshell_has_end=0 + local -a highlight_zone highlights offsets reply=() - while i=$arg[(ib:i+1:)$q]; [[ $arg[i-1] == '\' && $i -lt $(( end_pos - start_pos )) ]]; do done - if [[ $arg[i] == '`' ]]; then - style=back-quoted-argument - else - # If unclosed, i points past the end - (( i-- )) - style=back-quoted-argument-unclosed + last=$(( arg1 + 1 )) + # Remove one layer of backslashes and find the end + while i=$arg[(ib:i+1:)[\\\\\`]]; do # find the next \ or ` + if (( i > end_pos - start_pos )); then + buf=$buf$arg[last,i] + offsets[i-arg1-offset]='' # So we never index past the end + (( i-- )) + subshell_has_end=$(( has_end && (start_pos + i == len) )) + break + fi + + if [[ $arg[i] == '\' ]]; then + (( i++ )) + # POSIX XCU 2.6.3 + if [[ $arg[i] == ('$'|'`'|'\') ]]; then + buf=$buf$arg[last,i-2] + (( offset++ )) + # offsets is relative to buf, so adjust by -arg1 + offsets[i-arg1-offset]=$offset + else + buf=$buf$arg[last,i-1] + fi + else # it's an unquoted ` and this is the end + style=back-quoted-argument + style_end=back-quoted-argument-delimiter + buf=$buf$arg[last,i-1] + offsets[i-arg1-offset]='' # So we never index past the end + break + fi + last=$i + done + + _zsh_highlight_main_highlighter_highlight_list 0 '' $subshell_has_end $buf + + # Munge the reply to account for removed backslashes + for start end_ highlight in $reply; do + start=$(( start_pos + arg1 + start + offsets[(Rb:start:)?*] )) + end_=$(( start_pos + arg1 + end_ + offsets[(Rb:end_:)?*] )) + highlights+=($start $end_ $highlight) + if [[ $highlight == back-quoted-argument-unclosed && $style == back-quoted-argument ]]; then + # An inner backtick command substitution is unclosed, but this level is closed + style_end=unknown-token + fi + done + + reply=( + $(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style + $(( start_pos + arg1 - 1 )) $(( start_pos + arg1 )) back-quoted-argument-delimiter + $highlights + ) + if (( $#style_end )); then + reply+=($(( start_pos + i - 1)) $(( start_pos + i )) $style_end) fi - reply=($(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style) REPLY=$i } diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment1.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment1.zsh new file mode 100644 index 0000000..0c449e1 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment1.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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 +# ------------------------------------------------------------------------------------------------- + +# see alias-comment2.zsh +setopt interactivecomments +alias x=$'# foo\npwd' +BUFFER='x' + +expected_region_highlight=( + '1 1 alias' # x + '1 1 comment' # x (#) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment2.zsh new file mode 100644 index 0000000..8bdc5a8 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-comment2.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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 +# ------------------------------------------------------------------------------------------------- + +# see alias-comment1.zsh +setopt NO_interactivecomments +alias x=$'# foo\npwd' +BUFFER='x' + +expected_region_highlight=( + '1 1 alias' # x + '1 1 unknown-token' # x (#) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-complex.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-complex.zsh new file mode 100644 index 0000000..7a9626e --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-complex.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='echo && ls; >' + +BUFFER='x file echo' + +expected_region_highlight=( + '1 1 alias' # x + '1 1 builtin' # x (echo) + '3 6 default' # file + '8 11 builtin' # echo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-empty.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-empty.zsh new file mode 100644 index 0000000..535fccc --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-empty.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='' + +BUFFER='x echo foo' + +expected_region_highlight=( + '1 1 alias' # x + '3 6 builtin' # echo + '8 10 default' # foo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-loop.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-loop.zsh new file mode 100644 index 0000000..b36d1c9 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-loop.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 a=b b=c c=b + +BUFFER='a foo; :' + +expected_region_highlight=( + '1 1 alias' # a + '1 1 unknown-token' # a (invalid alias loop) + '3 5 default' # foo + '6 6 commandseparator' # ; + '8 8 builtin' # : +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested-precommand.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested-precommand.zsh new file mode 100644 index 0000000..7c2eeeb --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested-precommand.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 a=b b=sudo +sudo(){} + +BUFFER='a -u phy1729 echo; :' + +expected_region_highlight=( + '1 1 alias' # a + '1 1 precommand' # a (sudo) + '3 4 single-hyphen-option' # -u + '6 12 default' # phy1729 + '14 17 builtin' # echo + '18 18 commandseparator' # ; + '20 20 builtin' # : +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested.zsh new file mode 100644 index 0000000..44ab22b --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-nested.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 a=b b=: + +BUFFER='a foo; :' + +expected_region_highlight=( + '1 1 alias' # a + '1 1 builtin' # a (:) + '3 5 default' # foo + '6 6 commandseparator' # ; + '8 8 builtin' # : +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument1.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument1.zsh new file mode 100644 index 0000000..ad16962 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument1.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 sdu='sudo -u' +sudo(){} + +BUFFER='sdu phy1729 echo foo' + +expected_region_highlight=( + '1 3 alias' # sdu + '1 3 precommand' # sdu (sudo) + '5 11 default' # phy1729 + '13 16 commmand "issue #540"' # echo (not builtin) + '18 20 default' # foo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument2.zsh new file mode 100644 index 0000000..2fceff8 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-precommand-option-argument2.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 sde='sudo -e' +alias seu='sde -u' +sudo(){} + +BUFFER='seu phy1729 echo foo' + +expected_region_highlight=( + '1 3 alias' # seu + '1 3 precommand' # seu (sudo) + '5 11 default' # phy1729 + '13 16 commmand "issue #540"' # echo (not builtin) + '18 20 default' # foo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-quoted.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-quoted.zsh new file mode 100644 index 0000000..e42e2f0 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-quoted.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) YYYY 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 a=: ls='ls -l' +BUFFER='"a" foo; \ls' + +expected_region_highlight=( + '1 3 unknown-token' # "a" + '5 7 default' # foo + '8 8 commandseparator' # ; + '10 12 command' # \ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-redirect.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-redirect.zsh new file mode 100644 index 0000000..a6a0aab --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-redirect.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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=\> +BUFFER='x foo echo bar' + +expected_region_highlight=( + '1 1 alias' # x + '1 1 redirection' # x (>) + '3 5 default' # foo + '7 10 builtin' # echo + '12 14 default' # bar +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-self.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-self.zsh new file mode 100644 index 0000000..88ed3c8 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-self.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 echo='echo foo' + +BUFFER='echo bar' + +expected_region_highlight=( + '1 4 alias' # echo + '1 4 builtin' # echo + '6 8 default' # bar +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-to-dir.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-to-dir.zsh new file mode 100644 index 0000000..93aaa62 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias-to-dir.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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=/ +BUFFER=$'x' + +expected_region_highlight=( + '1 1 alias' # x + '1 1 unknown-token "issue #202"' # x (/) +) 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 index fd867bf..03ca0be 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/alias.zsh @@ -27,14 +27,11 @@ # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------------------------- -alias alias1="unused expansion" +alias alias1="ls" alias -s alias2="echo" -if set -o | grep -q aliasfuncdef; then - setopt alias_func_def # 5.4+ -fi -alias1() {} # to check that it's highlighted as an alias, not as a function +function alias1() {} # to check that it's highlighted as an alias, not as a function -BUFFER='x.alias2; alias1' +BUFFER='x.alias2; alias1; alias2' # Set expected_region_highlight as a function of zsh version. # @@ -51,4 +48,7 @@ fi expected_region_highlight+=( "9 9 commandseparator" # ; "11 16 alias" # alias1 + "11 16 command" # alias1 (ls) + "17 17 commandseparator" # ; + "19 24 unknown-token" # alias2 ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-argv.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-argv.zsh index fdf30aa..ec5acc2 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-argv.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-argv.zsh @@ -27,9 +27,12 @@ # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------------------------- +touch foo BUFFER='42=foo 43+=bar' expected_region_highlight=( "1 6 assign" # 42=foo + "4 6 path" # foo "8 14 assign" # 43+=bar + "12 14 default" # bar ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-array3.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-array3.zsh index 4e20cfc..986d71f 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-array3.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-array3.zsh @@ -35,4 +35,5 @@ expected_region_highlight=( "10 14 default" # world "15 15 assign" # ) "17 20 assign" # b=42 + "19 20 default" # 42 ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array.zsh new file mode 100644 index 0000000..651ab80 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='a=foo( bar ) :' + +expected_region_highlight=( + '1 12 assign' # a=foo( bar ) + '3 12 default' # foo( bar ) + '14 14 builtin' # : +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array2.zsh new file mode 100644 index 0000000..dfda106 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-not-array2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='a=foo\( :' + +expected_region_highlight=( + '1 7 assign' # a=foo\( + '3 7 default' # foo\( + '9 9 builtin' # : +) 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 index fe55b6a..f748c94 100644 --- 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 @@ -31,6 +31,7 @@ BUFFER='A=1; echo hello world' expected_region_highlight=( "1 3 assign" # A=1 + "3 3 default" # 1 "4 4 commandseparator" # ; "6 9 builtin" # echo "11 15 default" # hello diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-subshell.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-subshell.zsh index fc04f6b..2022889 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-subshell.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign-subshell.zsh @@ -32,5 +32,6 @@ BUFFER='(A=1)' expected_region_highlight=( "1 1 reserved-word" # ( "2 4 assign" # A=1 + "4 4 default" # 1 "5 5 reserved-word" # ) ) 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 index 36fa5d1..6e797ac 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/assign.zsh @@ -31,6 +31,7 @@ BUFFER='A=1 b=("foo" bar)' expected_region_highlight=( "1 3 assign" # A=1 + "3 3 default" # 1 "5 7 assign" # b=( "8 12 default" # "foo" "8 12 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 index 346d9fa..d504a2c 100644 --- 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 @@ -27,16 +27,32 @@ # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------------------------- -# 42 is in the command position in a nested subshell. BUFFER='echo `echo \`42\`` "is `echo equal` to" `echo 6 times 9' expected_region_highlight=( "1 4 builtin" # echo "6 18 default" # `echo \`42\`` "6 18 back-quoted-argument" # `echo \`42\`` + "6 6 back-quoted-argument-delimiter" # ` + "7 10 builtin" # echo + "12 17 default" # \`42\` + "12 17 back-quoted-argument" # \`42\` + "12 13 back-quoted-argument-delimiter" # \` + "14 15 unknown-token" # 42 + "16 17 back-quoted-argument-delimiter" # \` + "18 18 back-quoted-argument-delimiter" # ` "20 39 default" # "is `echo equal` to" "20 39 double-quoted-argument" # "is `echo equal` to" "24 35 back-quoted-argument" # `echo equal` + "24 24 back-quoted-argument-delimiter" # ` + "25 28 builtin" # echo + "30 34 default" # equal + "35 35 back-quoted-argument-delimiter" # ` "41 55 default" # `echo 6 times 9 "41 55 back-quoted-argument-unclosed" # `echo 6 times 9 + "41 41 back-quoted-argument-delimiter" # ` + "42 45 builtin" # echo + "47 47 default" # 6 + "49 53 default" # times + "55 55 default" # 9 ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-open.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-open.zsh new file mode 100644 index 0000000..f188d81 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/back-quoted-open.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 +# ------------------------------------------------------------------------------------------------- + +touch foo +BUFFER=$': `ls fo' + +expected_region_highlight=( + '1 1 builtin' # : + '3 8 default' # `ls fo + '3 8 back-quoted-argument-unclosed' # `ls fo + '3 3 back-quoted-argument-delimiter' # ` + '4 5 command' # ls + '7 8 path_prefix' # fo +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-space.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-space.zsh new file mode 100644 index 0000000..0d8a63c --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/backslash-space.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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\' ; ls' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 12 default' # \ \'foo\' + '8 12 single-quoted-argument' # 'foo' + '14 14 commandseparator' # ; + '16 17 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-array.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-array.zsh new file mode 100644 index 0000000..77b57e6 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-array.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 abaz) \! ls' + +expected_region_highlight=( + '1 5 assign' # foo=( + '6 8 default' # bar + '10 13 default' # abaz + '14 14 assign' # ) + '16 16 unknown-token' # \! + '18 19 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-scalar.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-scalar.zsh new file mode 100644 index 0000000..e919050 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-assign-scalar.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 \! ls' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 9 unknown-token' # \! + '11 12 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-pipeline.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-pipeline.zsh new file mode 100644 index 0000000..fef25f1 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/bang-pipeline.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 | \! ls' + +expected_region_highlight=( + '1 1 reserved-word' # \! + '3 4 command' # ls + '6 6 commandseparator' # | + '8 8 unknown-token' # \! + '10 11 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching1.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching1.zsh new file mode 100644 index 0000000..7cc6de5 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching1.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='[[ -n foo ]]' + +expected_region_highlight=( + '1 2 reserved-word' # [[ + '4 5 single-hyphen-option' # -n + '7 9 default' # foo + '11 12 reserved-word' # ]] +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching2.zsh new file mode 100644 index 0000000..19c7f0d --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-matching2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='[ -n foo ]' + +expected_region_highlight=( + '1 1 builtin' # [ + '3 4 single-hyphen-option' # -n + '6 8 default' # foo + '10 10 builtin' # ] +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-premature-termination.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-premature-termination.zsh new file mode 100644 index 0000000..fa813da --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/brackets-premature-termination.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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='[[ -n foo; echo ]]' + +expected_region_highlight=( + '1 2 reserved-word' # [[ + '4 5 single-hyphen-option' # -n + '7 9 default' # foo + '10 10 unknown-token' # ; + '12 15 builtin' # echo + '17 18 default' # ]] +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-in-assignment.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-in-assignment.zsh new file mode 100644 index 0000000..fafda49 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-in-assignment.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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=$(echo bar) :' + +expected_region_highlight=( + '1 15 assign' # foo=$(echo bar) + '5 15 default' # $(echo bar) + '5 15 command-substitution-unquoted' # $(echo bar) + '5 6 command-substitution-delimiter-unquoted' # $( + '7 10 builtin' # echo + '12 14 default' # bar + '15 15 command-substitution-delimiter-unquoted' # ) + '17 17 builtin' # : +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-unclosed.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-unclosed.zsh new file mode 100644 index 0000000..3229dfc --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/command-substitution-unclosed.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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$(echo bar' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # foo$(echo bar + '6 15 command-substitution-unquoted' # $(echo bar + '6 7 command-substitution-delimiter-unquoted' # $( + '8 11 builtin' # echo + '13 15 default' # bar +) + +if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug + expected_region_highlight[2]='3 16 default' # foo$(echo bar + expected_region_highlight[3]='6 16 command-substitution-unquoted' # $(echo bar +fi diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commmand-parameter.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commmand-parameter.zsh index 07dfc4c..48d20ba 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commmand-parameter.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/commmand-parameter.zsh @@ -28,10 +28,18 @@ # ------------------------------------------------------------------------------------------------- local x=/usr/bin/env -BUFFER='$x "argument"' +local y=sudo +local -a z; z=(zsh -f) +sudo(){} + +BUFFER='$x "argument"; $y; $z' expected_region_highlight=( "1 2 command" # $x "4 13 default" # "argument" "4 13 double-quoted-argument" # "argument" + "14 14 commandseparator" # ; + "16 17 precommand" # $y (sudo) + "18 18 unknown-token" # ; + "20 21 command" # $z - 'zsh' being the command ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/cthulhu.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/cthulhu.zsh new file mode 100644 index 0000000..c8119a8 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/cthulhu.zsh @@ -0,0 +1,70 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 +# ------------------------------------------------------------------------------------------------- + +# 0000000 0 01111111111222222 222233333 3 333344 4 4 444444555555555 5 6 6666 6 6 6667777777777888 8 8 88888999 9 9999 9 9 00 00 0000001111 +# 1234567 8 90123456789012345 678901234 5 678901 2 3 456789012345678 9 0 1234 5 6 7890123456789012 3 4 56789012 3 4567 8 9 01 23 4567890123 +BUFFER=$'echo Ph\\\'ng`echo lui "mg"\\`echo lw\\\'nafh \\\\\\`echo Cthu"lhu\\\\\\` R\\\\\'ly$(echo eh wag\\\\\\`echo h\\\'nag\\\\\\`\'l\' fht)agn`' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 113 default' # Ph\'ng`echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` + '12 113 back-quoted-argument' # `echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` + '12 12 back-quoted-argument-delimiter' # ` + '13 16 builtin' # echo + '18 20 default' # lui + '22 112 default' # "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '22 25 double-quoted-argument' # "mg" + '26 112 back-quoted-argument-unclosed' # \`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '26 27 back-quoted-argument-delimiter' # \` + '28 31 builtin' # echo + '33 40 default' # lw\'nafh + '42 62 default' # \\\`echo Cthu"lhu\\\` + '42 62 back-quoted-argument' # \\\`echo Cthu"lhu\\\` + '42 45 back-quoted-argument-delimiter' # \\\` + '46 49 builtin' # echo + '51 58 default' # Cthu"lhu + '55 58 double-quoted-argument-unclosed' # "lhu + '59 62 back-quoted-argument-delimiter' # \\\` + '64 112 default' # R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '70 109 command-substitution-unquoted' # $(echo eh wag\\\`echo h\'nag\\\`'l' fht) + '70 71 command-substitution-delimiter-unquoted' # $( + '72 75 builtin' # echo + '77 78 default' # eh + '80 104 default' # wag\\\`echo h\'nag\\\`'l' + '83 101 back-quoted-argument' # \\\`echo h\'nag\\\` + '83 86 back-quoted-argument-delimiter' # \\\` + '87 90 builtin' # echo + '92 97 default' # h\'nag + '98 101 back-quoted-argument-delimiter' # \\\` + '102 104 single-quoted-argument' # 'l' + '106 108 default' # fht + '109 109 command-substitution-delimiter-unquoted' # ) + '113 113 unknown-token' # ` +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dirs_blacklist.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dirs_blacklist.zsh index 0d4d666..8cf04be 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dirs_blacklist.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dirs_blacklist.zsh @@ -30,11 +30,11 @@ mkdir foo touch foo/bar BUFFER=": foo/bar $PWD/foo foo/b" -X_ZSH_HIGHLIGHT_DIRS_BLACKLIST=($PWD/foo) +X_ZSH_HIGHLIGHT_DIRS_BLACKLIST=($PWD/foo $PWD/bar) expected_region_highlight=( '1 1 builtin' # : - '3 9 path' # foo/bar - "11 $(( 14 + $#PWD )) path" # $PWD/foo + '3 9 default' # foo/bar + "11 $(( 14 + $#PWD )) default" # $PWD/foo "$(( 16 + $#PWD )) $(( 20 + $#PWD )) default" # foo/b ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-paren.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-paren.zsh index 2a1aecd..2bbcef1 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-paren.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/dollar-paren.zsh @@ -28,11 +28,22 @@ # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------------------------- -BUFFER=': "$(:)"' +BUFFER=': "$(:)" "foo$(:)bar' expected_region_highlight=( '1 1 builtin' # : '3 8 default' # "$(:)" - '3 8 double-quoted-argument' # "$(:)" - '4 4 dollar-double-quoted-argument' # $ + '3 3 double-quoted-argument' # "$(:)" + '8 8 double-quoted-argument' # "$(:)" + '4 7 command-substitution-quoted' # $(:) + '4 5 command-substitution-delimiter-quoted' # $( + '6 6 builtin' # : + '7 7 command-substitution-delimiter-quoted' # ) + '10 20 default' # "foo$(:)bar + '10 13 double-quoted-argument-unclosed' # "foo + '18 20 double-quoted-argument-unclosed' # bar + '14 17 command-substitution-quoted' # $(:) + '14 15 command-substitution-delimiter-quoted' # $( + '16 16 builtin' # : + '17 17 command-substitution-delimiter-quoted' # ) ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-line.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-line.zsh new file mode 100644 index 0000000..a4d6685 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/empty-line.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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=$'\\\n; ls' + +expected_region_highlight=( + '3 3 unknown-token' # ; + '5 6 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/exec-redirection1.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/exec-redirection1.zsh index caec2f1..78a0c62 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/exec-redirection1.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/exec-redirection1.zsh @@ -31,8 +31,8 @@ BUFFER='exec {foo}>&/tmp ls' expected_region_highlight=( "1 4 precommand" # exec - "6 10 redirection 'issue #238'" # {foo} + "6 10 named-fd" # {foo} "11 12 redirection" # >& "13 16 path" # /tmp - "18 19 command 'issue #238'" # ls + "18 19 command" # ls ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function-altsyntax.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function-altsyntax.zsh new file mode 100644 index 0000000..0f9a833 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/function-altsyntax.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 named and anonymous function using the alternative syntax +BUFFER=$'function f { pwd }; function { pwd }' + +expected_region_highlight=( + '1 8 reserved-word' # function + '10 10 default' # f + '12 12 reserved-word "issue #237"' # { + '14 16 command "issue #237"' # pwd + '18 18 reserved-word "issue #237"' # } + '19 19 commandseparator' # ; + '21 28 reserved-word' # function + '30 30 reserved-word "issue #237"' # { + '32 34 command "issue #237"' # pwd + '36 36 reserved-word "issue #237"' # } +) 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 index 2f96445..5676b5a 100644 --- 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 @@ -32,5 +32,6 @@ BUFFER='x ls' expected_region_highlight=( "1 1 alias" # x + "1 1 precommand" # x (command) "3 4 command" # ls ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-always.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-always.zsh new file mode 100644 index 0000000..481722f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob-always.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 * } always { echo * }' + +expected_region_highlight=( + '1 1 reserved-word' # { + '3 8 precommand' # noglob + '10 13 builtin' # echo + '15 15 default' # * + '17 17 reserved-word' # } + '19 24 reserved-word' # always + '26 26 reserved-word' # { + '28 31 builtin' # echo + '33 33 globbing "issue #577"' # * + '35 35 reserved-word' # } +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob4.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob4.zsh new file mode 100644 index 0000000..cc7065f --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/noglob4.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 cat <(print -r -- *)' + +expected_region_highlight=( + '1 6 precommand' # noglob + '8 10 command' # cat + '12 27 default' # <(print -r -- *) + '12 27 process-substitution' # <(print -r -- *) + '12 13 process-substitution-delimiter' # <( + '14 18 builtin' # print + '20 21 single-hyphen-option' # -r + '23 24 double-hyphen-option' # -- + '26 26 default' # * + '26 26 globbing' # * + '27 27 process-substitution-delimiter' # ) +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/off-by-one.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/off-by-one.zsh index 550c09f..7d6961a 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/off-by-one.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/off-by-one.zsh @@ -27,14 +27,15 @@ # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------------------------- -alias a=A +alias a=: f() {} BUFFER='a;f;' expected_region_highlight=( - "1 1 alias" # f + "1 1 alias" # a + "1 1 builtin" # a (:) "2 2 commandseparator" # ; - "3 3 function" # g + "3 3 function" # f "4 4 commandseparator" # ; ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-dollared-word3.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-dollared-word3.zsh index a9a5fa3..6921cba 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-dollared-word3.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/path-dollared-word3.zsh @@ -29,10 +29,12 @@ # «/usr» at this point would be highlighted as path_prefix; so should # a parameter that expands to an equivalent string be highlighted. +# +# More complicated parameter substitutions aren't eval'd; issue #328. BUFFER='$PWD; ${PWD}' expected_region_highlight=( - "1 4 unknown-token" # $PWD - not eval'd; issue #328 + "1 4 path" # $PWD "5 5 commandseparator" # ; - "7 12 unknown-token" # ${PWD} + "7 12 path" # ${PWD} ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand-unknown-option.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand-unknown-option.zsh new file mode 100644 index 0000000..1fba1b9 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand-unknown-option.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +BUFFER='sudo -ux ls; sudo -x ls' + +expected_region_highlight=( + '1 4 precommand' # sudo + '6 8 single-hyphen-option' # -ux + '10 11 command' # ls + '12 12 commandseparator' # ; + '14 17 precommand' # sudo + '19 20 unknown-token' # -x + '22 23 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand2.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand2.zsh index 3d8f332..75dceab 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand2.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand2.zsh @@ -31,6 +31,6 @@ BUFFER='command -v ls' expected_region_highlight=( "1 7 precommand" # command - "9 10 single-hyphen-option 'issue #343'" # -v - "12 13 command 'issue #343'" # ls + "9 10 single-hyphen-option" # -v + "12 13 command" # ls ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand3.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand3.zsh new file mode 100644 index 0000000..f8b0c78 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand3.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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='nice -n10 ls; nice -n 10 ls' + +expected_region_highlight=( + "1 4 precommand" # nice + "6 9 single-hyphen-option" # -n10 + "11 12 command" # ls + "13 13 commandseparator" # ; + "15 18 precommand" # nice + "20 21 single-hyphen-option" # -n + "23 24 default" # 10 + "26 27 command" # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand4.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand4.zsh new file mode 100644 index 0000000..b9e6119 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/precommand4.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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 +# ------------------------------------------------------------------------------------------------- + +doas(){} +BUFFER=$'doas -nu phy1729 ls' + +expected_region_highlight=( + '1 4 precommand' # doas + '6 8 single-hyphen-option' # -nu + '10 16 default' # phy1729 + '18 19 command' # ls +) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh index 05c11b8..f8dbd6b 100644 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh @@ -33,4 +33,9 @@ BUFFER=$': =((wc) + "4 8 default" # >(wc) + "4 8 process-substitution" # >(wc) + "4 5 process-substitution-delimiter" # >( + "6 7 command" # wc + "8 8 process-substitution-delimiter" # ) "10 10 commandseparator" # | "12 13 command" # nl ) diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md deleted file mode 100644 index 3ad5f24..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md +++ /dev/null @@ -1,19 +0,0 @@ -zsh-syntax-highlighting / highlighters / pattern ------------------------------------------------- - -This is the `pattern` highlighter, that highlights user-defined patterns. - - -### How to tweak it - -To use this highlighter, associate patterns with styles in the -`ZSH_HIGHLIGHT_PATTERNS` associative 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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..5ff00e6 --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/pattern/README.md @@ -0,0 +1 @@ +../../docs/highlighters/pattern.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md deleted file mode 100644 index 25f1b6c..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md +++ /dev/null @@ -1,27 +0,0 @@ -zsh-syntax-highlighting / highlighters / regexp ------------------------------------------------- - -This is the `regexp` highlighter, that highlights user-defined regular -expressions. It's similar to the `pattern` highlighter, but allows more complex -patterns. - -### How to tweak it - -To use this highlighter, associate regular expressions with styles in the -`ZSH_HIGHLIGHT_REGEXP` associative array, for example in `~/.zshrc`: - - ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' fg=123,bold) - -This will highlight "sudo" only as a complete word, i.e., "sudo cmd", but not -"sudoedit" - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -See also: [regular expressions tutorial][perlretut], zsh regexp operator `=~` -in [the `zshmisc(1)` manual page][zshmisc-Conditional-Expressions] - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting -[perlretut]: http://perldoc.perl.org/perlretut.html -[zshmisc-Conditional-Expressions]: http://zsh.sourceforge.net/Doc/Release/Conditional-Expressions.html#Conditional-Expressions diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md new file mode 120000 index 0000000..9f2522d --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/regexp/README.md @@ -0,0 +1 @@ +../../docs/highlighters/regexp.md \ No newline at end of file diff --git a/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md b/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md deleted file mode 100644 index 0b0d41f..0000000 --- a/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md +++ /dev/null @@ -1,23 +0,0 @@ -zsh-syntax-highlighting / highlighters / root ---------------------------------------------- - -This is the `root` highlighter, that highlights the whole line if the current -user is 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 values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting 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 120000 index 0000000..ca6799d --- /dev/null +++ b/.zprezto/modules/syntax-highlighting/external/highlighters/root/README.md @@ -0,0 +1 @@ +../../docs/highlighters/root.md \ 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 index 6838e1d..4caf3a8 100644 --- a/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh +++ b/.zprezto/modules/syntax-highlighting/external/zsh-syntax-highlighting.zsh @@ -305,7 +305,7 @@ _zsh_highlight_bind_widgets() # Override ZLE widgets to make them invoke _zsh_highlight. local -U widgets_to_bind - widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank)}) + widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|yank-pop)}) # Always wrap special zle-line-finish widget. This is needed to decide if the # current line ends and special highlighting logic needs to be applied. @@ -363,7 +363,7 @@ _zsh_highlight_bind_widgets() # 1) Path to the highlighters directory. _zsh_highlight_load_highlighters() { - setopt localoptions noksharrays + setopt localoptions noksharrays bareglobqual # Check the directory exists. [[ -d "$1" ]] || { diff --git a/.zprezto/modules/utility/README.md b/.zprezto/modules/utility/README.md index 84e81f5..3b25b3a 100644 --- a/.zprezto/modules/utility/README.md +++ b/.zprezto/modules/utility/README.md @@ -8,8 +8,8 @@ Settings ### Highlighting -If you have enabled color globally in *zpreztorc*, you may disable it for certain -commands. +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. @@ -18,6 +18,12 @@ disabled, type indicators (\*, /, =>, @, =, |, %) will be appended to entries. zstyle ':prezto:module:utility:ls' color 'no' ``` +To disable GNU coreutils `ls` to list directories grouped first, add the following line to *zpreztorc*: + +```sh +zstyle ':prezto:module:utility:ls' dirs-first 'no' +``` + To disable `diff` highlighting, add the following line to *zpreztorc*: ```sh @@ -109,7 +115,8 @@ Aliases ### Resource Usage - - `df` displays free disk space using human readable units (aliases to `pydf`, if installed). + - `df` displays free disk space using human readable units (aliases to `pydf`, + if installed). - `du` displays disk usage using human readable units. - `top` displays information about processes. - `topc` displays information about processes sorted by CPU usage. diff --git a/.zprezto/modules/utility/init.zsh b/.zprezto/modules/utility/init.zsh index 942090d..6b07bf0 100644 --- a/.zprezto/modules/utility/init.zsh +++ b/.zprezto/modules/utility/init.zsh @@ -73,7 +73,10 @@ fi # ls if is-callable 'dircolors'; then # GNU Core Utilities - alias ls='ls --group-directories-first' + + if zstyle -T ':prezto:module:utility:ls' dirs-first; then + alias ls="${aliases[ls]:-ls} --group-directories-first" + fi if zstyle -t ':prezto:module:utility:ls' color; then # Call dircolors to define colors if they're missing diff --git a/.zprezto/runcoms/README.md b/.zprezto/runcoms/README.md index 9df890e..29d9f8a 100644 --- a/.zprezto/runcoms/README.md +++ b/.zprezto/runcoms/README.md @@ -10,7 +10,7 @@ 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 +stored in the `$ZDOTDIR` environment variable. However, if said variable is not defined, Zsh will use the user's home directory. File Descriptions diff --git a/.zprezto/runcoms/zshenv b/.zprezto/runcoms/zshenv index faa2411..2dbf12a 100644 --- a/.zprezto/runcoms/zshenv +++ b/.zprezto/runcoms/zshenv @@ -9,5 +9,3 @@ if [[ ( "$SHLVL" -eq 1 && ! -o LOGIN ) && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then source "${ZDOTDIR:-$HOME}/.zprofile" fi - -unset LC_CTYPE