From a482a42128862b1f10fcdb89f843d5fba6f261f7 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 13 Dec 2021 04:19:39 +0000 Subject: [PATCH 001/470] new file: .github/workflows/code-docs.yml new file: docs/COMMITLOG.md new file: docs/README.md new file: docs/code/asciidoc/autoload.zsh.adoc new file: docs/code/asciidoc/install.zsh.adoc new file: docs/code/asciidoc/side.zsh.adoc new file: docs/code/asciidoc/zi.zsh.adoc new file: docs/code/pdf/autoload.zsh.pdf new file: docs/code/pdf/install.zsh.pdf new file: docs/code/pdf/side.zsh.pdf new file: docs/code/pdf/zi.zsh.pdf --- .github/workflows/code-docs.yml | 86 ++ docs/COMMITLOG.md | 1 + docs/README.md | 3 + docs/code/asciidoc/autoload.zsh.adoc | 1517 +++++++++++++++++++++++++ docs/code/asciidoc/install.zsh.adoc | 746 ++++++++++++ docs/code/asciidoc/side.zsh.adoc | 300 +++++ docs/code/asciidoc/zi.zsh.adoc | 1566 ++++++++++++++++++++++++++ docs/code/pdf/autoload.zsh.pdf | Bin 0 -> 410492 bytes docs/code/pdf/install.zsh.pdf | Bin 0 -> 210079 bytes docs/code/pdf/side.zsh.pdf | Bin 0 -> 109159 bytes docs/code/pdf/zi.zsh.pdf | Bin 0 -> 379616 bytes 11 files changed, 4219 insertions(+) create mode 100644 .github/workflows/code-docs.yml create mode 100644 docs/COMMITLOG.md create mode 100644 docs/README.md create mode 100644 docs/code/asciidoc/autoload.zsh.adoc create mode 100644 docs/code/asciidoc/install.zsh.adoc create mode 100644 docs/code/asciidoc/side.zsh.adoc create mode 100644 docs/code/asciidoc/zi.zsh.adoc create mode 100644 docs/code/pdf/autoload.zsh.pdf create mode 100644 docs/code/pdf/install.zsh.pdf create mode 100644 docs/code/pdf/side.zsh.pdf create mode 100644 docs/code/pdf/zi.zsh.pdf diff --git a/.github/workflows/code-docs.yml b/.github/workflows/code-docs.yml new file mode 100644 index 0000000..eca27ea --- /dev/null +++ b/.github/workflows/code-docs.yml @@ -0,0 +1,86 @@ +--- +name: ZI Code Documentation +on: + workflow_dispatch: + schedule: + - cron: "30 4 * * 4" + +jobs: + doxygen: + runs-on: ubuntu-latest + steps: + - name: Install zsdoc + run: | + sudo apt-get install -y zsh + git clone https://github.com/z-shell/zsdoc.git /tmp/zsdoc + sudo make -C /tmp/zsdoc install + - name: ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + - name: asciidoctor-pdf + run: | + gem install asciidoctor-pdf + - uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Clone repository + run: | + git clone https://github.com/z-shell/zi.git zi + - name: Parse scripts and generate Asciidoc documents + run: | + make -C zi/docs doc + - name: Generate PDF from Asciidoc documents + run: | + make -C zi/docs/zsdoc pdf + mv -vf zi/docs/zsdoc/*.adoc docs/code/asciidoc/ + mv -vf zi/docs/zsdoc/pdf/*.pdf docs/code/pdf/ + echo "$(git log --relative-date)" > docs/COMMITLOG.md + - name: Tar Code documentation + run: | + tar cvzf code-documentation.tar.gz docs/code + - name: Upload docs.tar.gz + uses: actions/upload-artifact@v2 + with: + name: Upload Code documentation artifact + path: | + code-documentation.tar.gz + - name: Check if update required for zsdoc + run: | + git --no-pager diff docs/code + if git --no-pager diff --quiet docs/code + then + echo "The Code Doocumentation are up to date" + else + { + echo "The Code Doocumentation in the repo are not up to date" + echo 'Please regenerate them with $ make doc' + } >&2 + exit 1 + fi + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "Code Documentation Update" + branch: main + # See https://git-scm.com/docs/git-commit#_options + commit_options: '--no-verify --signoff' + # See the `pathspec`-documentation for git + # - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203 + # - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec + file_pattern: docs + repository: . + commit_user_name: Z-Shell Bot + commit_user_email: z-shell@digitalclouds.dev + commit_author: Z-Shell ZI + #tagging_message: 'v1.0.0' + # See https://git-scm.com/docs/git-status#_options + status_options: '--untracked-files=no' + # See https://git-scm.com/docs/git-add#_options + #add_options: '-u' + push_options: '--force' + skip_dirty_check: true + skip_fetch: true + # Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html + disable_globbing: true diff --git a/docs/COMMITLOG.md b/docs/COMMITLOG.md new file mode 100644 index 0000000..4da8cdc --- /dev/null +++ b/docs/COMMITLOG.md @@ -0,0 +1 @@ +git log --relative-date diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..eeeec55 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# Documentation + +- ZI Code documentation changes reflects every `Thursday 4:30 UTC` diff --git a/docs/code/asciidoc/autoload.zsh.adoc b/docs/code/asciidoc/autoload.zsh.adoc new file mode 100644 index 0000000..834b74c --- /dev/null +++ b/docs/code/asciidoc/autoload.zsh.adoc @@ -0,0 +1,1517 @@ +autoload.zsh(1) +=============== +:compat-mode!: + +NAME +---- +autoload.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-analytics-menu + .zi-any-to-uspl2 + .zi-at-eval + .zi-build-module + .zi-cd + .zi-cdisable + .zi-cenable + .zi-changes + .zi-check-comp-consistency + .zi-check-which-completions-are-enabled + .zi-check-which-completions-are-installed + .zi-clear-completions + .zi-clear-report-for + .zi-compile-uncompile-all + .zi-compiled + .zi-confirm + .zi-control-menu + .zi-create + .zi-delete + .zi-diff-env-compute + .zi-diff-functions-compute + .zi-diff-options-compute + .zi-diff-parameter-compute + .zi-edit + .zi-exists-message + .zi-find-completions-of-plugin + .zi-format-env + .zi-format-functions + .zi-format-options + .zi-format-parameter + .zi-get-completion-owner + .zi-get-completion-owner-uspl2col + .zi-get-path + .zi-glance + .zi-help + .zi-list-bindkeys + .zi-list-compdef-replay + .zi-ls + .zi-module + .zi-pager + .zi-prepare-readlink + .zi-recall + .zi-recently + .zi-restore-extendedglob + .zi-run-delete-hooks + .zi-save-set-extendedglob + .zi-search-completions + .zi-self-update + .zi-show-all-reports + .zi-show-completions + .zi-show-debug-report + .zi-show-registered-plugins + .zi-show-report + .zi-show-times + .zi-show-zstatus + .zi-stress + .zi-uncompile-plugin + .zi-uninstall-completions + .zi-unload + .zi-unregister-plugin + .zi-update-all-parallel + .zi-update-or-status + .zi-update-or-status-all + .zi-update-or-status-snippet + .zi-wait-for-update-jobs + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-analytics-menu +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-analytics-menu [[[ + Shows ❮ ZI ❯ analytics. + + User-action entry point. +____ + +Has 23 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-any-to-uspl2 +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-uspl2 [[[ + Converts given plugin-spec to format that's used in keys for hash tables. + So basically, creates string "user/plugin" (this format is called: uspl2). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 2 line(s). Calls functions: + + .zi-any-to-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-clear-report-for + .zi-exists-message + +.zi-at-eval +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-build-module +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-build-module [[[ + Performs ./configure && make on the module and displays information how to load the module in .zshrc. +____ + +Has 41 line(s). Calls functions: + + .zi-build-module + `-- zi.zsh/+zi-message + +Called by: + + .zi-module + +.zi-cd +~~~~~~ + +____ + + FUNCTION: .zi-cd [[[ + Jumps to plugin's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 15 line(s). Calls functions: + + .zi-cd + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-cdisable +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cdisable [[[ + Enables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 27 line(s). Calls functions: + + .zi-cdisable + +Called by: + + zi.zsh/zi + +.zi-cenable +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cenable [[[ + Disables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 26 line(s). Calls functions: + + .zi-cenable + +Called by: + + zi.zsh/zi + +.zi-changes +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-changes [[[ + Shows `git log` of given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-changes + |-- side.zsh/.zi-exists-physically-message + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-check-comp-consistency +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-comp-consistency [[[ + ❮ ZI ❯ creates symlink for each installed completion. + This function checks whether given completion (i.e. + file like "_mkdir") is indeed a symlink. Backup file + is a completion that is disabled - has the leading "_" removed. + + $1 - path to completion within plugin's directory + $2 - path to backup file within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-check-which-completions-are-enabled +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-enabled [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is disabled - returns 0 or 1 on corresponding positions in reply. + + Uninstalled completions will be reported as "0" - i.e. disabled + + $1, ... - path to completion within plugin's directory +____ + +Has 10 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-check-which-completions-are-installed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-installed [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is installed - returns 0 or 1 on corresponding positions in reply. + + $1, ... - path to completion within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-clear-completions +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-completions [[[ + Delete stray and improper completions. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 35 line(s). Calls functions: + + .zi-clear-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-clear-report-for +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-report-for [[[ + Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 23 line(s). Calls functions: + + .zi-clear-report-for + +Called by: + + .zi-unload + +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-compiled +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. + + User-action entry point. +____ + +Has 23 line(s). Calls functions: + + .zi-compiled + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-confirm +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-confirm [[[ + Prints given question, waits for "y" key, evals given expression if "y" obtained + + $1 - question + $2 - expression +____ + +Has 22 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _read_ + +Called by: + + .zi-delete + +.zi-control-menu +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-control-menu [[[ + Shows control options. + + User-action entry point. +____ + +Has 22 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-create +~~~~~~~~~~ + +____ + + FUNCTION: .zi-create [[[ + Creates a plugin, also on Github (if not "_local/name" plugin). + + User-action entry point. + + $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 103 line(s). Calls functions: + + .zi-create + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _autoload_, _setopt_, _vared_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-delete +~~~~~~~~~~ + +____ + + FUNCTION: .zi-delete [[[ + Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 93 line(s). Calls functions: + + .zi-delete + |-- side.zsh/.zi-compute-ice + |-- zi.zsh/+zi-prehelp-usage-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-parse-opts + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-diff-env-compute +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env-compute [[[ + Computes ZI_PATH, ZI_FPATH that hold (f)path components + added by plugin. Uses data gathered earlier by .zi-diff-env(). + + $1 - user/plugin +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-functions-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions-compute [[[ + Computes FUNCTIONS that holds new functions added by plugin. + Uses data gathered earlier by .zi-diff-functions(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-options-compute +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options-compute [[[ + Computes OPTIONS that holds options changed by plugin. + Uses data gathered earlier by .zi-diff-options(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-parameter-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter-compute [[[ + Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold + parameters created or changed (their type) by plugin. Uses + data gathered earlier by .zi-diff-parameter(). + + $1 - user/plugin +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-edit +~~~~~~~~ + +____ + + FUNCTION: .zi-edit [[[ + Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-edit + `-- side.zsh/.zi-compute-ice + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-exists-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-message [[[ + Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 7 line(s). Calls functions: + + .zi-exists-message + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-show-report + .zi-unload + +.zi-find-completions-of-plugin +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-completions-of-plugin [[[ + Searches for completions owned by given plugin. + Returns them in `reply' array. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 5 line(s). Calls functions: + + .zi-find-completions-of-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-format-env +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-env [[[ + Creates one-column text about FPATH or PATH elements added when given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) + $2 - if 1, then examine PATH, if 2, then examine FPATH +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-functions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-functions [[[ + Creates a one or two columns text with functions created by given plugin. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 34 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-options +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-options [[[ + Creates one-column text about options that changed when plugin "$1" was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 19 line(s). Calls functions: + + .zi-format-options + +Called by: + + .zi-show-report + +.zi-format-parameter +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-parameter [[[ + Creates one column text that lists global parameters that changed when the given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-get-completion-owner +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner [[[ + Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. + + Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. + + :A will read the link "twice" and give the final repository + directory, possibly without username in the uspl format; readlink will read the link "once" + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-clear-completions + .zi-get-completion-owner-uspl2col + .zi-show-completions + +.zi-get-completion-owner-uspl2col +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner-uspl2col [[[ + For shortening of code - returns colorized plugin name + that owns given completion. + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 2 line(s). Calls functions: + + .zi-get-completion-owner-uspl2col + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-get-path +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-path [[[ + Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path + ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. +____ + +Has 5 line(s). Calls functions: + + .zi-get-path + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-cd + .zi-uninstall-completions + +.zi-glance +~~~~~~~~~~ + +____ + + FUNCTION: .zi-glance [[[ + Shows colorized source code of plugin. Is able to use pygmentize, + highlight, GNU source-highlight. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 37 line(s). Calls functions: + + .zi-glance + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-help +~~~~~~~~ + +____ + + FUNCTION: .zi-help [[[ + Shows usage information. + + User-action entry point. +____ + +Has 31 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-list-bindkeys +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-bindkeys [[[ +____ + +Has 39 line(s). Calls functions: + + .zi-list-bindkeys + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + zi.zsh/zi + +.zi-list-compdef-replay +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-compdef-replay [[[ + Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping + for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. + + User-action entry point. +____ + +Has 5 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-ls +~~~~~~ + +____ + + FUNCTION: .zi-ls [[[ +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-module +~~~~~~~~~~ + +____ + + FUNCTION: .zi-module [[[ + Function that has sub-commands passed as long-options (with two dashes, --). + It's an attempt to plugin only this one function into `zi' function + defined in zi.zsh, to not make this file longer than it's needed. +____ + +Has 24 line(s). Calls functions: + + .zi-module + +Called by: + + .zi-build-module + zi.zsh/Script-Body + zi.zsh/zi + +.zi-pager +~~~~~~~~~ + +____ + + FUNCTION: .zi-pager [[[ + BusyBox less lacks the -X and -i options, so it can use more +____ + +Has 14 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-glance + .zi-self-update + .zi-update-or-status + +.zi-prepare-readlink +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-readlink [[[ + Prepares readlink command, used for establishing completion's owner. + + $REPLY = ":" or "readlink" +____ + +Has 4 line(s). Doesn't call other functions. + +Uses feature(s): _type_ + +Called by: + + .zi-cdisable + .zi-cenable + .zi-clear-completions + .zi-show-completions + +.zi-recall +~~~~~~~~~~ + +____ + + FUNCTION: .zi-recall [[[ +____ + +Has 33 line(s). Calls functions: + + .zi-recall + |-- side.zsh/.zi-compute-ice + `-- zi.zsh/+zi-deploy-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-recently +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-recently [[[ + Shows plugins that obtained commits in specified past time. + + User-action entry point. + + $1 - time spec, e.g. "1 week" +____ + +Has 23 line(s). Calls functions: + + .zi-recently + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-restore-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-restore-extendedglob [[[ + Restores extendedglob-option from state saved earlier. +____ + +Has 1 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-run-delete-hooks +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-delete-hooks [[[ +____ + +Has 17 line(s). Calls functions: + + .zi-run-delete-hooks + `-- side.zsh/.zi-countdown + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-save-set-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-save-set-extendedglob [[[ + Enables extendedglob-option first saving if it was already + enabled, for restoration of this state later. +____ + +Has 2 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-search-completions +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-search-completions [[[ + While .zi-show-completions() shows what completions are + installed, this functions searches through all plugin dirs + showing what's available in general (for installation). + + User-action entry point. +____ + +Has 39 line(s). Calls functions: + + .zi-search-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-self-update +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-self-update [[[ + Updates ❮ ZI ❯ code (does a git pull). + + User-action entry point. +____ + +Has 43 line(s). Calls functions: + + .zi-self-update + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_, _zcompile_ + +Called by: + + .zi-update-or-status-all + zi.zsh/zi + +.zi-show-all-reports +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-all-reports [[[ + Displays reports of all loaded plugins. + + User-action entry point. +____ + +Has 5 line(s). Calls functions: + + .zi-show-all-reports + +Called by: + + zi.zsh/zi + +.zi-show-completions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-completions [[[ + Display installed (enabled and disabled), completions. Detect + stray and improper ones. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 61 line(s). Calls functions: + + .zi-show-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-debug-report +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-debug-report [[[ + Displays dtrace report (data recorded in interactive session). + + User-action entry point. +____ + +Has 1 line(s). Calls functions: + + .zi-show-debug-report + +Called by: + + zi.zsh/zi + +.zi-show-registered-plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-registered-plugins [[[ + Lists loaded plugins (subcommands list, loaded). + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-show-registered-plugins + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-report +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-report [[[ + Displays report of the plugin given. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 66 line(s). Calls functions: + + .zi-show-report + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-all-reports + .zi-show-debug-report + zi.zsh/zi + +.zi-show-times +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-times [[[ + Shows loading times of all loaded plugins. + + User-action entry point. +____ + +Has 51 line(s). Calls functions: + + .zi-show-times + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-zstatus +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-zstatus [[[ + Shows ❮ ZI ❯ status, i.e. number of loaded plugins, + of available completions, etc. + + User-action entry point. +____ + +Has 47 line(s). Calls functions: + + .zi-show-zstatus + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-stress +~~~~~~~~~~ + +____ + + FUNCTION: .zi-stress [[[ + Compiles plugin with various options on and off to see how well the code is written. The options are: + + NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 31 line(s). Calls functions: + + .zi-stress + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_, _zcompile_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-uncompile-plugin +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uncompile-plugin [[[ + Uncompiles given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 20 line(s). Calls functions: + + .zi-uncompile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compile-uncompile-all + zi.zsh/zi + +.zi-uninstall-completions +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uninstall-completions [[[ + Removes all completions of given plugin from Zshell (i.e. from FPATH). + The FPATH is typically `~/.zi/completions/'. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 39 line(s). Calls functions: + + .zi-uninstall-completions + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-unload +~~~~~~~~~~ + +____ + + FUNCTION: .zi-unload [[[ + 0. Call the Zsh Plugin's Standard *_plugin_unload function + 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update + 1. Delete bindkeys (...) + 2. Delete Zstyles + 3. Restore options + 4. Remove aliases + 5. Restore Zle state + 6. Unfunction functions (created by plugin) + 7. Clean-up FPATH and PATH + 8. Delete created variables + 9. Forget the plugin + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 380 line(s). Calls functions: + + .zi-unload + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi.zsh/.zi-run-task + zi.zsh/zi + +.zi-unregister-plugin +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-unregister-plugin [[[ + Removes the plugin from ZI_REGISTERED_PLUGINS array and from the + zsh_loaded_plugins array (managed according to the plugin standard) +____ + +Has 5 line(s). Calls functions: + + .zi-unregister-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-unload + +.zi-update-all-parallel +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-in-parallel [[[ +____ + +Has 63 line(s). Calls functions: + + .zi-update-all-parallel + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-update-or-status-all + +.zi-update-or-status +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status [[[ + Updates (git pull) or does `git status' for given plugin. + + User-action entry point. + + $1 - "status" for status, other for update + $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $3 - plugin (only when $1 - i.e. user - given) +____ + +Has 263 line(s). Calls functions: + + .zi-update-or-status + |-- install.zsh/.zi-get-latest-gh-r-url-part + |-- install.zsh/.zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-exists-physically + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-store-ices + |-- side.zsh/.zi-two-paths + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-set-m-func + +Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + zi.zsh/zi + +.zi-update-or-status-all +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-all [[[ + Updates (git pull) or does `git status` for all existing plugins. + This includes also plugins that are not loaded into Zsh (but exist + on disk). Also updates (i.e. redownloads) snippets. + + User-action entry point. +____ + +Has 96 line(s). Calls functions: + + .zi-update-or-status-all + |-- install.zsh/.zi-compinit + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-update-or-status-snippet +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-snippet [[[ + + Implements update or status operation for snippet given by URL. + + $1 - "status" or "update" + $2 - snippet URL +____ + +Has 28 line(s). Calls functions: + + .zi-update-or-status-snippet + |-- install.zsh/.zi-update-snippet + `-- side.zsh/.zi-compute-ice + +Uses feature(s): _source_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + .zi-update-or-status + +.zi-wait-for-update-jobs +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-wait-for-update-jobs [[[ +____ + +Has 14 line(s). Calls functions: + + .zi-wait-for-update-jobs + `-- zi.zsh/+zi-message + +Uses feature(s): _wait_ + +Called by: + + .zi-update-all-parallel + diff --git a/docs/code/asciidoc/install.zsh.adoc b/docs/code/asciidoc/install.zsh.adoc new file mode 100644 index 0000000..4d06554 --- /dev/null +++ b/docs/code/asciidoc/install.zsh.adoc @@ -0,0 +1,746 @@ +install.zsh(1) +============== +:compat-mode!: + +NAME +---- +install.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-at-eval + .zi-compile-plugin + .zi-compinit + .zi-download-file-stdout + .zi-download-snippet + .zi-extract + .zi-forget-completion + .zi-get-cygwin-package + .zi-get-latest-gh-r-url-part + .zi-get-package + .zi-get-url-mtime + .zi-install-completions + .zi-mirror-using-svn + .zi-parse-json + .zi-setup-plugin-dir + .zi-update-snippet + zicp + ziextract + zimv + zpextract + ∞zi-atclone-hook + ∞zi-atpull-e-hook + ∞zi-atpull-hook + ∞zi-compile-plugin-hook + ∞zi-cp-hook + ∞zi-extract-hook + ∞zi-make-e-hook + ∞zi-make-ee-hook + ∞zi-make-hook + ∞zi-mv-hook + ∞zi-ps-on-update-hook + ∞zi-reset-hook +AUTOLOAD compinit + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-at-eval +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Called by: + + ∞zi-atpull-e-hook + ∞zi-atpull-hook + +.zi-compile-plugin +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-plugin [[[ + Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 84 line(s). Calls functions: + + .zi-compile-plugin + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-first + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _zcompile_ + +Called by: + + ∞zi-compile-plugin-hook + autoload.zsh/.zi-compile-uncompile-all + zi.zsh/zi + +.zi-compinit +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compinit [[[ + User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. + After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. + + No arguments. +____ + +Has 26 line(s). Calls functions: + + .zi-compinit + |-- compinit + `-- zi.zsh/+zi-message + +Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ + +Called by: + + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-or-status-all + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-download-file-stdout +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-file-stdout [[[ + Downloads file to stdout. Supports following backend commands: + curl, wget, lftp, lynx. Used by snippet loading. +____ + +Has 46 line(s). Calls functions: + + .zi-download-file-stdout + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + .zi-get-cygwin-package + .zi-get-package + .zi-setup-plugin-dir + +.zi-download-snippet +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-snippet [[[ + Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, + with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows + to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. +____ + +Has 309 line(s). Calls functions: + + .zi-download-snippet + |-- side.zsh/.zi-store-ices + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _zcompile_ + +Called by: + + .zi-update-snippet + zi.zsh/.zi-load-snippet + +.zi-extract +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-extract() [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-extract + |-- zi.zsh/+zi-message + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + ∞zi-extract-hook + +.zi-forget-completion +~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-forget-completion [[[ + Implements alternation of Zsh state so that already initialized + completion stops being visible to Zsh. + + $1 - completion function name, e.g. "_cp"; can also be "cp" +____ + +Has 20 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-compinit + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + zi.zsh/zi + +.zi-get-cygwin-package +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-cygwin-package [[[ +____ + +Has 70 line(s). Calls functions: + + .zi-get-cygwin-package + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + +.zi-get-latest-gh-r-url-part +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-latest-gh-r-url-part [[[ + Gets version string of latest release of given Github package. + Connects to Github releases page. +____ + +Has 101 line(s). Calls functions: + + .zi-get-latest-gh-r-url-part + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + autoload.zsh/.zi-update-or-status + +.zi-get-package +~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-package [[[ +____ + +Has 194 line(s). Calls functions: + + .zi-get-package + |-- zi.zsh/+zi-message + |-- zi.zsh/@zi-substitute + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _trap_ + +Called by: + + zi.zsh/.zi-load + +_Environment variables used:_ zi.zsh -> ZPFX + +.zi-get-url-mtime +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-url-mtime [[[ + For the given URL returns the date in the Last-Modified header as a time stamp +____ + +Has 34 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + +.zi-install-completions +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-install-completions [[[ + Installs all completions of given plugin. After that they are + visible to `compinit'. Visible completions can be selectively + disabled and enabled. User can access completion data with + `clist' or `completions' subcommand. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $3 - if 1, then reinstall, otherwise only install completions that aren't there +____ + +Has 61 line(s). Calls functions: + + .zi-install-completions + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + .zi-setup-plugin-dir + zi.zsh/zi + +.zi-mirror-using-svn +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-mirror-using-svn [[[ + Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', + in normal mode invokes `svn checkout --non-interactive -q '. In test mode only + compares remote and local revision and outputs true if update is needed. + + $1 - URL + $2 - mode, "" - normal, "-u" - update, "-t" - test + $3 - subdirectory (not path) with working copy, needed for -t and -u +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + +.zi-parse-json +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. +____ + +Has 102 line(s). Calls functions: + + .zi-parse-json + +Uses feature(s): _setopt_ + +Called by: + + .zi-get-package + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin +____ + +Has 189 line(s). Calls functions: + + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_ + +Called by: + + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-update-snippet [[[ +____ + +Has 72 line(s). Calls functions: + + .zi-update-snippet + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zimv + +_Environment variables used:_ zi.zsh -> ZPFX + +ziextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file +____ + +Has 274 line(s). Calls functions: + + ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zpextract [[[ +____ + +Has 1 line(s). Calls functions: + + zpextract + `-- ziextract + `-- zi.zsh/+zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-cp-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-cp-hook [[[ +____ + +Has 24 line(s). Calls functions: + + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-extract-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: ∞zi-reset-opt-hook [[[ +____ + +Has 79 line(s). Calls functions: + + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + .zi-compinit + diff --git a/docs/code/asciidoc/side.zsh.adoc b/docs/code/asciidoc/side.zsh.adoc new file mode 100644 index 0000000..da9afa2 --- /dev/null +++ b/docs/code/asciidoc/side.zsh.adoc @@ -0,0 +1,300 @@ +side.zsh(1) +=========== +:compat-mode!: + +NAME +---- +side.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-any-colorify-as-uspl2 + .zi-compute-ice + .zi-countdown + .zi-exists-physically + .zi-exists-physically-message + .zi-first + .zi-store-ices + .zi-two-paths +AUTOLOAD zmv + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-any-colorify-as-uspl2 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-colorify-as-uspl2 [[[ + Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $REPLY = ANSI-colorified "user/plugin" string +____ + +Has 22 line(s). Calls functions: + + .zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-clear-completions + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-exists-message + autoload.zsh/.zi-get-completion-owner-uspl2col + autoload.zsh/.zi-list-bindkeys + autoload.zsh/.zi-recently + autoload.zsh/.zi-search-completions + autoload.zsh/.zi-show-completions + autoload.zsh/.zi-show-registered-plugins + autoload.zsh/.zi-show-times + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + zi.zsh/.zi-formatter-pid + +.zi-compute-ice +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compute-ice [[[ + Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, + taking priorities into account. Also returns path to snippet directory and optional name of snippet file + (only valid if ICE[svn] is not set). + + Can also pack resulting ices into ZI_SICE (see $2). + + $1 - URL (also plugin-spec) + $2 - "pack" or "nopack" or "pack-nf" - packing means ICE + wins with static ice; "pack-nf" means that disk-ices will + be ignored (no-file?) + $3 - name of output associative array, "ICE" is the default + $4 - name of output string parameter, to hold path to directory ("local_dir") + $5 - name of output string parameter, to hold filename ("filename") + $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") +____ + +Has 116 line(s). Calls functions: + + .zi-compute-ice + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-pack-ice + `-- zmv + +Uses feature(s): _autoload_, _setopt_, _zmv_ + +Called by: + + autoload.zsh/.zi-delete + autoload.zsh/.zi-edit + autoload.zsh/.zi-recall + autoload.zsh/.zi-update-or-status-snippet + autoload.zsh/.zi-update-or-status + install.zsh/.zi-compile-plugin + +.zi-countdown +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-countdown [[[ + Displays a countdown 5...4... etc. and returns 0 if it + sucessfully reaches 0, or 1 if Ctrl-C will be pressed. +____ + +Has 14 line(s). Calls functions: + + .zi-countdown + `-- zi.zsh/+zi-message + +Uses feature(s): _trap_ + +Called by: + + autoload.zsh/.zi-run-delete-hooks + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-atpull-e-hook + install.zsh/∞zi-atpull-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + +.zi-exists-physically +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically [[[ + Checks if directory of given plugin exists in PLUGIN_DIR. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-create + autoload.zsh/.zi-update-or-status + +.zi-exists-physically-message +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically-message [[[ + Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 22 line(s). Calls functions: + + .zi-exists-physically-message + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-changes + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + +.zi-first +~~~~~~~~~ + +____ + + FUNCTION: .zi-first [[[ + Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct + ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching + is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-first + |-- zi.zsh/.zi-any-to-pid + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-find-other-matches + `-- zi.zsh/.zi-get-object-path + +Called by: + + .zi-two-paths + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + install.zsh/.zi-compile-plugin + +.zi-store-ices +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-store-ices [[[ + Saves ice mods in given hash onto disk. + + $1 - directory where to create / delete files + $2 - name of hash that holds values + $3 - additional keys of hash to store, space separated + $4 - additional keys of hash to store, empty-meaningful ices, space separated + $5 - the URL, if applicable + $6 - the mode (1 - svn, 0 - single file), if applicable +____ + +Has 28 line(s). Doesn't call other functions. + +Called by: + + autoload.zsh/.zi-update-or-status + install.zsh/.zi-download-snippet + install.zsh/.zi-setup-plugin-dir + +.zi-two-paths +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-two-paths [[[ + Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), + returns 2 possible paths for further examination +____ + +Has 22 line(s). Calls functions: + + .zi-two-paths + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-update-or-status + +zmv +~~~ + +____ + + function zmv { + zmv, zcp, zln: + + This is a multiple move based on zsh pattern matching. To get the full + power of it, you need a postgraduate degree in zsh. However, simple + tasks work OK, so if that's all you need, here are some basic examples: + zmv '(*).txt' '$1.lis' + Rename foo.txt to foo.lis, etc. The parenthesis is the thing that + gets replaced by the $1 (not the `*', as happens in mmv, and note the + `$', not `=', so that you need to quote both words). +____ + +Has 299 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _getopts_, _read_, _setopt_ + +Called by: + + .zi-compute-ice + diff --git a/docs/code/asciidoc/zi.zsh.adoc b/docs/code/asciidoc/zi.zsh.adoc new file mode 100644 index 0000000..6f1cba4 --- /dev/null +++ b/docs/code/asciidoc/zi.zsh.adoc @@ -0,0 +1,1566 @@ +zi.zsh(1) +========= +:compat-mode!: + +NAME +---- +zi.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + +zi-deploy-message + +zi-message + +zi-prehelp-usage-message + -zi_scheduler_add_sh + .zi-add-fpath + .zi-add-report + .zi-any-to-pid + .zi-any-to-user-plugin + .zi-compdef-clear + .zi-compdef-replay + .zi-diff + .zi-diff-env + .zi-diff-functions + .zi-diff-options + .zi-diff-parameter + .zi-find-other-matches + .zi-formatter-bar + .zi-formatter-bar-util + .zi-formatter-pid + .zi-formatter-th-bar + .zi-formatter-url + .zi-get-mtime-into + .zi-get-object-path + .zi-ice + .zi-load + .zi-load-ices + .zi-load-object + .zi-load-plugin + .zi-load-snippet + .zi-main-message-formatter + .zi-pack-ice + .zi-parse-opts + .zi-prepare-home + .zi-register-plugin + .zi-run + .zi-run-task + .zi-set-m-func + .zi-setup-params + .zi-submit-turbo + .zi-tmp-subst-off + .zi-tmp-subst-on + .zi-util-shands-path + :zi-reload-and-run + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + @autoload + @zi-register-annex + @zi-register-hook + @zi-substitute + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + pmodload + zi + zi-turbo + zicdclear + zicdreplay + zicompdef + zicompinit + zpcdclear + zpcdreplay + zpcompdef + zpcompinit +AUTOLOAD add-zsh-hook +AUTOLOAD compinit +AUTOLOAD is-at-least +PRECMD-HOOK @zi-scheduler + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 202 line(s). Calls functions: + + Script-Body + |-- +zi-message + |-- @zi-register-hook + |-- add-zsh-hook + |-- autoload.zsh/.zi-module + `-- is-at-least + +Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ + +_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR + ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked +____ + +Has 13 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _zle_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + ++zi-message +~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message. [[[ +____ + +Has 14 line(s). Doesn't call other functions. + +Called by: + + +zi-prehelp-usage-message + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + Script-Body + zi + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + install.zsh/ziextract + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message + ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-prehelp-usage-message. [[[ +____ + +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: + + zi + autoload.zsh/.zi-delete + +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ + +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-add-fpath +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-fpath. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-add-fpath + +Called by: + + zi + +.zi-add-report +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-report. [[[ + Adds a report line for given plugin. + + $1 - uspl2, i.e. user/plugin + $2, ... - the text +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + +.zi-any-to-pid +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-pid. [[[ +____ + +Has 21 line(s). Calls functions: + + .zi-any-to-pid + +Uses feature(s): _setopt_ + +Called by: + + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-exists-physically-message + side.zsh/.zi-first + +.zi-any-to-user-plugin +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-user-plugin. [[[ + Allows elastic plugin-spec across the code. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + + Returns user and plugin in $reply. + +____ + +Has 25 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-add-fpath + .zi-get-object-path + .zi-load + .zi-run + :zi-tmp-subst-autoload + autoload.zsh/.zi-any-to-uspl2 + autoload.zsh/.zi-changes + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-delete + autoload.zsh/.zi-find-completions-of-plugin + autoload.zsh/.zi-glance + autoload.zsh/.zi-show-report + autoload.zsh/.zi-stress + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-unregister-plugin + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-compute-ice + side.zsh/.zi-exists-physically-message + side.zsh/.zi-exists-physically + side.zsh/.zi-first + +_Environment variables used:_ ZPFX + +.zi-compdef-clear +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-clear. [[[ + Implements user-exposed functionality to clear gathered compdefs. +____ + +Has 3 line(s). Calls functions: + + .zi-compdef-clear + `-- +zi-message + +Called by: + + zi + zicdclear + zpcdclear + +.zi-compdef-replay +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-replay. [[[ + Runs gathered compdef calls. This allows to run `compinit' after loading plugins. +____ + +Has 16 line(s). Calls functions: + + .zi-compdef-replay + `-- +zi-message + +Uses feature(s): _compdef_ + +Called by: + + zi + zicdreplay + zpcdreplay + +.zi-diff +~~~~~~~~ + +____ + + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types +____ + +Has 4 line(s). Calls functions: + + .zi-diff + +Called by: + + .zi-load-plugin + +.zi-diff-env +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env. [[[ + Implements detection of change in PATH and FPATH. + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + .zi-load-plugin + +.zi-diff-functions +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions. [[[ + Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-options +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options. [[[ + Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-parameter +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter. [[[ + Implements detection of change in any parameter's existence and type. + Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-find-other-matches +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-other-matches. [[[ + Plugin's main source file is in general `name.plugin.zsh'. However, + there can be different conventions, if that file is not found, then + this functions examines other conventions in the most sane order. +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + side.zsh/.zi-first + +.zi-formatter-bar +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-bar-util +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar-util. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-formatter-bar + .zi-formatter-th-bar + +.zi-formatter-pid +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-pid. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-formatter-pid + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _source_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-th-bar +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-th-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-th-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-url +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-url. [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-get-mtime-into +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-mtime-into. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + Script-Body + autoload.zsh/.zi-self-update + autoload.zsh/.zi-update-or-status-all + +.zi-get-object-path +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-object-path. [[[ +____ + +Has 23 line(s). Calls functions: + + .zi-get-object-path + +Called by: + + .zi-load-ices + .zi-load-snippet + .zi-run + zi + autoload.zsh/.zi-get-path + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-first + side.zsh/.zi-two-paths + +.zi-ice +~~~~~~~ + +____ + + FUNCTION: .zi-ice. [[[ + Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for + next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. +____ + +Has 12 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load +~~~~~~~~ + +____ + + FUNCTION: .zi-load. [[[ + Implements the exposed-to-user action of loading a plugin. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin name, if the third format is used +____ + +Has 76 line(s). Calls functions: + + .zi-load + |-- +zi-deploy-message + |-- install.zsh/.zi-get-package + `-- install.zsh/.zi-setup-plugin-dir + +Uses feature(s): _eval_, _setopt_, _source_, _zle_ + +Called by: + + .zi-load-object + .zi-run-task + +.zi-load-ices +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-ices. [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-load-ices + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load-object +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-object. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-load-object + +Called by: + + zi + +.zi-load-plugin +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-plugin. [[[ + Lower-level function for loading a plugin. + + $1 - user + $2 - plugin + $3 - mode (light or load) +____ + +Has 107 line(s). Calls functions: + + .zi-load-plugin + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ + +Called by: + + .zi-load + +.zi-load-snippet +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-snippet. [[[ + Implements the exposed-to-user action of loading a snippet. + + $1 - url (can be local, absolute path). +____ + +Has 173 line(s). Calls functions: + + .zi-load-snippet + |-- +zi-deploy-message + |-- +zi-message + `-- install.zsh/.zi-download-snippet + +Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ + +Called by: + + .zi-load-object + .zi-load + .zi-run-task + pmodload + +.zi-main-message-formatter +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message-formatter [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-pack-ice +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-pack-ice. [[[ + Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for + second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin + or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + install.zsh/.zi-update-snippet + side.zsh/.zi-compute-ice + +.zi-parse-opts +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: +zi-parse-opts. [[[ +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + zi + autoload.zsh/.zi-delete + +.zi-prepare-home +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-home. [[[ + Creates all directories needed by ZI, first checks if they already exist. +____ + +Has 38 line(s). Calls functions: + + .zi-prepare-home + |-- autoload.zsh/.zi-clear-completions + `-- install.zsh/.zi-compinit + +Uses feature(s): _source_ + +Called by: + + Script-Body + +_Environment variables used:_ ZPFX + +.zi-register-plugin +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-register-plugin. [[[ + Adds the plugin to ZI_REGISTERED_PLUGINS array and to the + zsh_loaded_plugins array (managed according to the plugin standard: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). +____ + +Has 20 line(s). Calls functions: + + .zi-register-plugin + `-- +zi-message + +Called by: + + .zi-load + +.zi-run +~~~~~~~ + +____ + + FUNCTION: .zi-run. [[[ + Run code inside plugin's folder + It uses the `correct' parameter from upper's scope zi(). +____ + +Has 24 line(s). Calls functions: + + .zi-run + `-- +zi-message + +Uses feature(s): _eval_, _setopt_ + +Called by: + + zi + +.zi-run-task +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-task. [[[ + A backend, worker function of .zi-scheduler. It obtains the tasks + index and a few of its properties (like the type: plugin, snippet, + service plugin, service snippet) and executes it first checking for + additional conditions (like non-numeric wait'' ice). + + $1 - the pass number, either 1st or 2nd pass + $2 - the time assigned to the task + $3 - type: plugin, snippet, service plugin, service snippet + $4 - task's index in the ZI[WAIT_ICE_...] fields + $5 - mode: load or light + $6 - the plugin-spec or snippet URL or alias name (from id-as'') +____ + +Has 45 line(s). Calls functions: + + .zi-run-task + `-- autoload.zsh/.zi-unload + +Uses feature(s): _eval_, _source_, _zle_, _zpty_ + +Called by: + + @zi-scheduler + +.zi-set-m-func +~~~~~~~~~~~~~~ + +____ + + FUNCTION:.zi-set-m-func() [[[ + Sets and withdraws the temporary, atclone/atpull time function `m`. +____ + +Has 17 line(s). Calls functions: + + .zi-set-m-func + `-- +zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-update-or-status + +.zi-setup-params +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-params. [[[ +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + +.zi-submit-turbo +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-submit-turbo. [[[ + If `zi load`, `zi light` or `zi snippet` will be + preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' + ice-mods then the plugin or snipped is to be loaded in turbo-mode, + and this function adds it to internal data structures, so that + @zi-scheduler can run (load, unload) this as a task. +____ + +Has 16 line(s). Doesn't call other functions. + +Called by: + + zi + +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). +____ + +Has 17 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-load-plugin + +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _source_ + +Called by: + + .zi-load-plugin + +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-autoload +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-autoload. [[[ + Function defined to hijack plugin's calls to the `autoload' builtin. + + The hijacking is not only to gather report data, but also to. + run custom `autoload' function, that doesn't need FPATH. +____ + +Has 106 line(s). Calls functions: + + :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ + +Called by: + + .zi-load-plugin + @autoload + +:zi-tmp-subst-bindkey +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-bindkey. [[[ + Function defined to hijack plugin's calls to the `bindkey' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 107 line(s). Calls functions: + + :zi-tmp-subst-bindkey + `-- is-at-least + +Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-compdef +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-compdef. [[[ + Function defined to hijack plugin's calls to the `compdef' function. + The hijacking is not only for reporting, but also to save compdef + calls so that `compinit' can be called after loading plugins. +____ + +Has 5 line(s). Calls functions: + + :zi-tmp-subst-compdef + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zle +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 33 line(s). Calls functions: + + :zi-tmp-subst-zle + +Uses feature(s): _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 19 line(s). Calls functions: + + :zi-tmp-subst-zstyle + +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. + +____ + +Has 74 line(s). *Is a precmd hook*. Calls functions: + + @zi-scheduler + `-- add-zsh-hook + +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-substitute +~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/.zi-at-eval + install.zsh/.zi-get-package + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-unload + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + +zi-turbo +~~~~~~~~ + +____ + + FUNCTION: zi-turbo. [[[ + With zi-turbo first argument is a wait time and suffix, i.e. "0a". + Anything that doesn't match will be passed as if it were an ice mod. + Default ices depth'3' and lucid, allowed values [0-9][a-d]. +____ + +Has 1 line(s). Calls functions: + + zi-turbo + `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdclear +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. +____ + +Has 1 line(s). Calls functions: + + zicdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdreplay +~~~~~~~~~~ + +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdclear +~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdreplay +~~~~~~~~~~ + +____ + + ]]] + Compatibility functions. [[[ + zinit() { zi "$@"; } +____ + +Has 1 line(s). Calls functions: + + zpcdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompdef +~~~~~~~~~ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompinit +~~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +add-zsh-hook +~~~~~~~~~~~~ + +____ + + Add to HOOK the given FUNCTION. + HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, + zshexit, zsh_directory_name (the _functions subscript is not required). + + With -d, remove the function from the hook instead; delete the hook + variable if it is empty. + + -D behaves like -d, but pattern characters are active in the + function name, so any matching function will be deleted from the hook. + +____ + +Has 93 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _getopts_ + +Called by: + + @zi-scheduler + Script-Body + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi + zicompinit + zpcompinit + +is-at-least +~~~~~~~~~~~ + +____ + + + Test whether $ZSH_VERSION (or some value of your choice, if a second argument + is provided) is greater than or equal to x.y.z-r (in argument one). In fact, + it'll accept any dot/dash-separated string of numbers as its second argument + and compare it to the dot/dash-separated first argument. Leading non-number + parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered + when the comparison is done; only the numbers matter. Any left-out segments + in the first argument that are present in the version string compared are + considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. + +____ + +Has 56 line(s). Doesn't call other functions. + +Called by: + + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + Script-Body + diff --git a/docs/code/pdf/autoload.zsh.pdf b/docs/code/pdf/autoload.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1d3ebe2867f4ae59246d11dd2c63ded7e97d7066 GIT binary patch literal 410492 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�PC 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 Z(YCVr?fr}%IB2u6z`TDiC?y2*{{YmPf{g$G literal 0 HcmV?d00001 diff --git a/docs/code/pdf/side.zsh.pdf b/docs/code/pdf/side.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..896a6eea0e18f171c94ebd0892d3d44a52f64107 GIT binary patch literal 109159 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 literal 0 HcmV?d00001 diff --git a/docs/code/pdf/zi.zsh.pdf b/docs/code/pdf/zi.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..784128a92597aa18383b5f49b67072aa02e91ef3 GIT binary patch literal 379616 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%0D{!4Fr)GGMc&Y*_IsE)8CA6I*eW?TYR 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 literal 0 HcmV?d00001 From 10897faaaed14ae6d83725f9356a0e47003175a8 Mon Sep 17 00:00:00 2001 From: Z-Shell ZI Date: Mon, 13 Dec 2021 04:22:51 +0000 Subject: [PATCH 002/470] Code Documentation Update Signed-off-by: Z-Shell Bot --- docs/COMMITLOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/COMMITLOG.md b/docs/COMMITLOG.md index 4da8cdc..fe5727c 100644 --- a/docs/COMMITLOG.md +++ b/docs/COMMITLOG.md @@ -1 +1,15 @@ -git log --relative-date +commit a482a42128862b1f10fcdb89f843d5fba6f261f7 +Author: Salvydas Lukosius +Date: 3 minutes ago + + new file: .github/workflows/code-docs.yml + new file: docs/COMMITLOG.md + new file: docs/README.md + new file: docs/code/asciidoc/autoload.zsh.adoc + new file: docs/code/asciidoc/install.zsh.adoc + new file: docs/code/asciidoc/side.zsh.adoc + new file: docs/code/asciidoc/zi.zsh.adoc + new file: docs/code/pdf/autoload.zsh.pdf + new file: docs/code/pdf/install.zsh.pdf + new file: docs/code/pdf/side.zsh.pdf + new file: docs/code/pdf/zi.zsh.pdf From 8145b9a21871e569c54a588e182110f94809c740 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 13 Dec 2021 18:08:31 +0000 Subject: [PATCH 003/470] Create Makefile --- zsdoc/Makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 zsdoc/Makefile diff --git a/zsdoc/Makefile b/zsdoc/Makefile new file mode 100644 index 0000000..cd09570 --- /dev/null +++ b/zsdoc/Makefile @@ -0,0 +1,23 @@ +all: zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc + +%.zwc: % + zi/lib/zcompile $< + +doc: zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh + git clone --depth 1 --branch main https://github.com/z-shell/zi + rm -rvf data *.adoc + zsd -v --scomm --cignore '(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)' zi.zsh \ + lib/zsh/side.zsh \ + lib/zsh/install.zsh \ + lib/zsh/autoload.zsh + +html: doc + asciidoctor zi.zsh.adoc && asciidoctor side.zsh.adoc && \ + asciidoctor install.zsh.adoc && asciidoctor autoload.zsh.adoc && \ + asciidoctor additional.zsh.adoc + +clean: + rm -vrf zi + rm -vrf data + +.PHONY: all clean doc html From 6daf6a66bca21b4635bf0b8d980e50886a312dff Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 13 Dec 2021 20:12:01 +0000 Subject: [PATCH 004/470] Changes how docs are generated new file: code/Makefile new file: code/zsdoc/Makefile new file: code/zsdoc/asciidoc/autoload.zsh.adoc new file: code/zsdoc/asciidoc/install.zsh.adoc new file: code/zsdoc/asciidoc/side.zsh.adoc new file: code/zsdoc/asciidoc/zi.zsh.adoc new file: code/zsdoc/html/autoload.zsh.html new file: code/zsdoc/html/install.zsh.html new file: code/zsdoc/html/side.zsh.html new file: code/zsdoc/html/zi.zsh.html new file: code/zsdoc/pdf/autoload.zsh.pdf new file: code/zsdoc/pdf/install.zsh.pdf new file: code/zsdoc/pdf/side.zsh.pdf new file: code/zsdoc/pdf/zi.zsh.pdf --- code/.editorconfig | 57 + code/Makefile | 36 + code/zsdoc/Makefile | 66 + code/zsdoc/asciidoc/autoload.zsh.adoc | 1517 +++++++ code/zsdoc/asciidoc/install.zsh.adoc | 746 ++++ code/zsdoc/asciidoc/side.zsh.adoc | 300 ++ code/zsdoc/asciidoc/zi.zsh.adoc | 1566 ++++++++ code/zsdoc/data/autoload/install.zsh/compinit | 549 +++ code/zsdoc/data/autoload/side.zsh/zmv | 299 ++ code/zsdoc/data/autoload/zi.zsh/add-zsh-hook | 93 + code/zsdoc/data/autoload/zi.zsh/compinit | 549 +++ code/zsdoc/data/autoload/zi.zsh/is-at-least | 56 + code/zsdoc/data/bodies/autoload.zsh | 4 + code/zsdoc/data/bodies/autoload.zsh.comments | 362 ++ code/zsdoc/data/bodies/install.zsh | 3 + code/zsdoc/data/bodies/install.zsh.comments | 94 + code/zsdoc/data/bodies/side.zsh | 1 + code/zsdoc/data/bodies/side.zsh.comments | 60 + code/zsdoc/data/bodies/zi.zsh | 202 + code/zsdoc/data/bodies/zi.zsh.comments | 314 ++ code/zsdoc/data/call_tree.zsd | 44 + .../autoload.zsh/.zi-analytics-menu | 4 + .../autoload.zsh/.zi-any-to-uspl2 | 6 + .../descriptions/autoload.zsh/.zi-at-eval | 1 + .../autoload.zsh/.zi-build-module | 2 + .../data/descriptions/autoload.zsh/.zi-cd | 7 + .../descriptions/autoload.zsh/.zi-cdisable | 6 + .../descriptions/autoload.zsh/.zi-cenable | 6 + .../descriptions/autoload.zsh/.zi-changes | 7 + .../autoload.zsh/.zi-check-comp-consistency | 8 + .../.zi-check-which-completions-are-enabled | 8 + .../.zi-check-which-completions-are-installed | 6 + .../autoload.zsh/.zi-clear-completions | 7 + .../autoload.zsh/.zi-clear-report-for | 5 + .../autoload.zsh/.zi-compile-uncompile-all | 4 + .../descriptions/autoload.zsh/.zi-compiled | 4 + .../descriptions/autoload.zsh/.zi-confirm | 5 + .../autoload.zsh/.zi-control-menu | 4 + .../data/descriptions/autoload.zsh/.zi-create | 7 + .../data/descriptions/autoload.zsh/.zi-delete | 7 + .../autoload.zsh/.zi-diff-env-compute | 5 + .../autoload.zsh/.zi-diff-functions-compute | 5 + .../autoload.zsh/.zi-diff-options-compute | 5 + .../autoload.zsh/.zi-diff-parameter-compute | 6 + .../data/descriptions/autoload.zsh/.zi-edit | 7 + .../autoload.zsh/.zi-exists-message | 5 + .../.zi-find-completions-of-plugin | 6 + .../descriptions/autoload.zsh/.zi-format-env | 5 + .../autoload.zsh/.zi-format-functions | 4 + .../autoload.zsh/.zi-format-options | 4 + .../autoload.zsh/.zi-format-parameter | 4 + .../autoload.zsh/.zi-get-completion-owner | 10 + .../.zi-get-completion-owner-uspl2col | 6 + .../descriptions/autoload.zsh/.zi-get-path | 3 + .../data/descriptions/autoload.zsh/.zi-glance | 8 + .../data/descriptions/autoload.zsh/.zi-help | 4 + .../autoload.zsh/.zi-list-bindkeys | 1 + .../autoload.zsh/.zi-list-compdef-replay | 5 + .../data/descriptions/autoload.zsh/.zi-ls | 1 + .../data/descriptions/autoload.zsh/.zi-module | 4 + .../data/descriptions/autoload.zsh/.zi-pager | 2 + .../autoload.zsh/.zi-prepare-readlink | 4 + .../data/descriptions/autoload.zsh/.zi-recall | 1 + .../descriptions/autoload.zsh/.zi-recently | 6 + .../autoload.zsh/.zi-restore-extendedglob | 2 + .../autoload.zsh/.zi-run-delete-hooks | 1 + .../autoload.zsh/.zi-save-set-extendedglob | 3 + .../autoload.zsh/.zi-search-completions | 6 + .../descriptions/autoload.zsh/.zi-self-update | 4 + .../autoload.zsh/.zi-show-all-reports | 4 + .../autoload.zsh/.zi-show-completions | 8 + .../autoload.zsh/.zi-show-debug-report | 4 + .../autoload.zsh/.zi-show-registered-plugins | 4 + .../descriptions/autoload.zsh/.zi-show-report | 7 + .../descriptions/autoload.zsh/.zi-show-times | 4 + .../autoload.zsh/.zi-show-zstatus | 5 + .../data/descriptions/autoload.zsh/.zi-stress | 9 + .../autoload.zsh/.zi-uncompile-plugin | 7 + .../autoload.zsh/.zi-uninstall-completions | 6 + .../data/descriptions/autoload.zsh/.zi-unload | 17 + .../autoload.zsh/.zi-unregister-plugin | 3 + .../autoload.zsh/.zi-update-all-parallel | 1 + .../autoload.zsh/.zi-update-or-status | 8 + .../autoload.zsh/.zi-update-or-status-all | 6 + .../autoload.zsh/.zi-update-or-status-snippet | 6 + .../autoload.zsh/.zi-wait-for-update-jobs | 2 + .../data/descriptions/install.zsh/.zi-at-eval | 2 + .../install.zsh/.zi-compile-plugin | 5 + .../descriptions/install.zsh/.zi-compinit | 5 + .../install.zsh/.zi-download-file-stdout | 3 + .../install.zsh/.zi-download-snippet | 4 + .../data/descriptions/install.zsh/.zi-extract | 1 + .../install.zsh/.zi-forget-completion | 6 + .../install.zsh/.zi-get-cygwin-package | 1 + .../install.zsh/.zi-get-latest-gh-r-url-part | 4 + .../descriptions/install.zsh/.zi-get-package | 2 + .../install.zsh/.zi-get-url-mtime | 2 + .../install.zsh/.zi-install-completions | 9 + .../install.zsh/.zi-mirror-using-svn | 8 + .../descriptions/install.zsh/.zi-parse-json | 2 + .../install.zsh/.zi-setup-plugin-dir | 7 + .../install.zsh/.zi-update-snippet | 2 + .../data/descriptions/install.zsh/compinit | 10 + code/zsdoc/data/descriptions/install.zsh/zicp | 2 + .../data/descriptions/install.zsh/ziextract | 9 + code/zsdoc/data/descriptions/install.zsh/zimv | 2 + .../data/descriptions/install.zsh/zpextract | 2 + .../install.zsh/\342\210\236zi-atclone-hook" | 1 + .../install.zsh/\342\210\236zi-atpull-e-hook" | 1 + .../install.zsh/\342\210\236zi-atpull-hook" | 1 + .../\342\210\236zi-compile-plugin-hook" | 1 + .../install.zsh/\342\210\236zi-cp-hook" | 1 + .../install.zsh/\342\210\236zi-extract-hook" | 1 + .../install.zsh/\342\210\236zi-make-e-hook" | 1 + .../install.zsh/\342\210\236zi-make-ee-hook" | 1 + .../install.zsh/\342\210\236zi-make-hook" | 1 + .../install.zsh/\342\210\236zi-mv-hook" | 1 + .../\342\210\236zi-ps-on-update-hook" | 1 + .../install.zsh/\342\210\236zi-reset-hook" | 2 + .../side.zsh/.zi-any-colorify-as-uspl2 | 6 + .../descriptions/side.zsh/.zi-compute-ice | 15 + .../data/descriptions/side.zsh/.zi-countdown | 3 + .../side.zsh/.zi-exists-physically | 7 + .../side.zsh/.zi-exists-physically-message | 7 + .../data/descriptions/side.zsh/.zi-first | 7 + .../data/descriptions/side.zsh/.zi-store-ices | 9 + .../data/descriptions/side.zsh/.zi-two-paths | 3 + code/zsdoc/data/descriptions/side.zsh/zmv | 10 + .../descriptions/zi.zsh/+zi-deploy-message | 3 + .../data/descriptions/zi.zsh/+zi-message | 1 + .../zi.zsh/+zi-prehelp-usage-message | 1 + .../descriptions/zi.zsh/-zi_scheduler_add_sh | 4 + .../data/descriptions/zi.zsh/.zi-add-fpath | 1 + .../data/descriptions/zi.zsh/.zi-add-report | 5 + .../data/descriptions/zi.zsh/.zi-any-to-pid | 1 + .../zi.zsh/.zi-any-to-user-plugin | 8 + .../descriptions/zi.zsh/.zi-compdef-clear | 2 + .../descriptions/zi.zsh/.zi-compdef-replay | 2 + code/zsdoc/data/descriptions/zi.zsh/.zi-diff | 2 + .../data/descriptions/zi.zsh/.zi-diff-env | 5 + .../descriptions/zi.zsh/.zi-diff-functions | 5 + .../data/descriptions/zi.zsh/.zi-diff-options | 5 + .../descriptions/zi.zsh/.zi-diff-parameter | 6 + .../zi.zsh/.zi-find-other-matches | 4 + .../descriptions/zi.zsh/.zi-formatter-bar | 1 + .../zi.zsh/.zi-formatter-bar-util | 1 + .../descriptions/zi.zsh/.zi-formatter-pid | 1 + .../descriptions/zi.zsh/.zi-formatter-th-bar | 1 + .../descriptions/zi.zsh/.zi-formatter-url | 1 + .../descriptions/zi.zsh/.zi-get-mtime-into | 1 + .../descriptions/zi.zsh/.zi-get-object-path | 1 + code/zsdoc/data/descriptions/zi.zsh/.zi-ice | 3 + code/zsdoc/data/descriptions/zi.zsh/.zi-load | 5 + .../data/descriptions/zi.zsh/.zi-load-ices | 1 + .../data/descriptions/zi.zsh/.zi-load-object | 1 + .../data/descriptions/zi.zsh/.zi-load-plugin | 6 + .../data/descriptions/zi.zsh/.zi-load-snippet | 4 + .../zi.zsh/.zi-main-message-formatter | 1 + .../data/descriptions/zi.zsh/.zi-pack-ice | 4 + .../data/descriptions/zi.zsh/.zi-parse-opts | 2 + .../data/descriptions/zi.zsh/.zi-prepare-home | 2 + .../descriptions/zi.zsh/.zi-register-plugin | 4 + code/zsdoc/data/descriptions/zi.zsh/.zi-run | 3 + .../data/descriptions/zi.zsh/.zi-run-task | 12 + .../data/descriptions/zi.zsh/.zi-set-m-func | 2 + .../data/descriptions/zi.zsh/.zi-setup-params | 1 + .../data/descriptions/zi.zsh/.zi-submit-turbo | 6 + .../descriptions/zi.zsh/.zi-tmp-subst-off | 3 + .../data/descriptions/zi.zsh/.zi-tmp-subst-on | 4 + .../descriptions/zi.zsh/.zi-util-shands-path | 2 + .../descriptions/zi.zsh/:zi-reload-and-run | 12 + .../descriptions/zi.zsh/:zi-tmp-subst-alias | 4 + .../zi.zsh/:zi-tmp-subst-autoload | 5 + .../descriptions/zi.zsh/:zi-tmp-subst-bindkey | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-compdef | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-zle | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-zstyle | 4 + code/zsdoc/data/descriptions/zi.zsh/@autoload | 2 + .../descriptions/zi.zsh/@zi-register-annex | 2 + .../descriptions/zi.zsh/@zi-register-hook | 2 + .../data/descriptions/zi.zsh/@zi-scheduler | 16 + .../data/descriptions/zi.zsh/@zi-substitute | 1 + .../zi.zsh/@zsh-plugin-run-on-unload | 3 + .../zi.zsh/@zsh-plugin-run-on-update | 2 + .../data/descriptions/zi.zsh/add-zsh-hook | 10 + code/zsdoc/data/descriptions/zi.zsh/compinit | 10 + .../data/descriptions/zi.zsh/is-at-least | 10 + code/zsdoc/data/descriptions/zi.zsh/pmodload | 2 + code/zsdoc/data/descriptions/zi.zsh/zi | 2 + code/zsdoc/data/descriptions/zi.zsh/zi-turbo | 4 + code/zsdoc/data/descriptions/zi.zsh/zicdclear | 3 + .../zsdoc/data/descriptions/zi.zsh/zicdreplay | 3 + code/zsdoc/data/descriptions/zi.zsh/zicompdef | 3 + .../zsdoc/data/descriptions/zi.zsh/zicompinit | 5 + .../zsdoc/data/descriptions/zi.zsh/zpcdreplay | 3 + .../.zi-get-package/zi.zsh/Script_Body_/ZPFX | 0 .../install.zsh/zicp/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-load-ices/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-prepare-home/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../@zi-substitute/zi.zsh/Script_Body_/ZPFX | 0 .../zsd_script_body/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZSH_CACHE_DIR | 0 .../data/exports/zi.zsh/Script_Body_/PMSPEC | 1 + .../data/exports/zi.zsh/Script_Body_/ZPFX | 1 + .../exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR | 1 + code/zsdoc/data/extended/autoload.zsh | 3072 ++++++++++++++ code/zsdoc/data/extended/install.zsh | 2691 +++++++++++++ code/zsdoc/data/extended/side.zsh | 670 ++++ code/zsdoc/data/extended/zi.zsh | 3521 +++++++++++++++++ .../features/autoload.zsh/.zi-at-eval/eval | 1 + .../data/features/autoload.zsh/.zi-cd/setopt | 1 + .../autoload.zsh/.zi-clear-completions/setopt | 1 + .../.zi-compile-uncompile-all/setopt | 1 + .../features/autoload.zsh/.zi-compiled/setopt | 1 + .../features/autoload.zsh/.zi-confirm/eval | 1 + .../features/autoload.zsh/.zi-confirm/read | 1 + .../features/autoload.zsh/.zi-create/autoload | 1 + .../features/autoload.zsh/.zi-create/setopt | 1 + .../features/autoload.zsh/.zi-create/vared | 1 + .../features/autoload.zsh/.zi-delete/setopt | 1 + .../autoload.zsh/.zi-diff-env-compute/setopt | 1 + .../.zi-diff-functions-compute/setopt | 1 + .../.zi-diff-options-compute/setopt | 1 + .../.zi-diff-parameter-compute/setopt | 1 + .../.zi-find-completions-of-plugin/setopt | 1 + .../autoload.zsh/.zi-format-parameter/setopt | 1 + .../.zi-get-completion-owner/setopt | 1 + .../features/autoload.zsh/.zi-get-path/setopt | 1 + .../features/autoload.zsh/.zi-pager/setopt | 1 + .../autoload.zsh/.zi-prepare-readlink/type | 1 + .../features/autoload.zsh/.zi-recall/setopt | 1 + .../features/autoload.zsh/.zi-recently/setopt | 1 + .../.zi-restore-extendedglob/setopt | 1 + .../autoload.zsh/.zi-run-delete-hooks/eval | 1 + .../.zi-save-set-extendedglob/setopt | 1 + .../.zi-search-completions/setopt | 1 + .../autoload.zsh/.zi-self-update/setopt | 1 + .../autoload.zsh/.zi-self-update/source | 1 + .../autoload.zsh/.zi-self-update/zcompile | 1 + .../autoload.zsh/.zi-show-completions/setopt | 1 + .../.zi-show-registered-plugins/setopt | 1 + .../autoload.zsh/.zi-show-report/setopt | 1 + .../autoload.zsh/.zi-show-times/setopt | 1 + .../autoload.zsh/.zi-show-zstatus/setopt | 1 + .../features/autoload.zsh/.zi-stress/setopt | 1 + .../features/autoload.zsh/.zi-stress/zcompile | 1 + .../autoload.zsh/.zi-uncompile-plugin/setopt | 1 + .../.zi-uninstall-completions/setopt | 1 + .../.zi-uninstall-completions/source | 1 + .../features/autoload.zsh/.zi-unload/alias | 1 + .../features/autoload.zsh/.zi-unload/bindkey | 1 + .../features/autoload.zsh/.zi-unload/eval | 1 + .../features/autoload.zsh/.zi-unload/setopt | 1 + .../features/autoload.zsh/.zi-unload/unalias | 1 + .../autoload.zsh/.zi-unload/unfunction | 1 + .../data/features/autoload.zsh/.zi-unload/zle | 1 + .../features/autoload.zsh/.zi-unload/zstyle | 1 + .../.zi-update-all-parallel/setopt | 1 + .../.zi-update-or-status-all/setopt | 1 + .../.zi-update-or-status-all/source | 1 + .../.zi-update-or-status-snippet/source | 1 + .../autoload.zsh/.zi-update-or-status/kill | 1 + .../autoload.zsh/.zi-update-or-status/read | 1 + .../autoload.zsh/.zi-update-or-status/setopt | 1 + .../autoload.zsh/.zi-update-or-status/source | 1 + .../autoload.zsh/.zi-update-or-status/trap | 1 + .../autoload.zsh/.zi-update-or-status/wait | 1 + .../.zi-wait-for-update-jobs/wait | 1 + .../features/autoload.zsh/Script_Body_/source | 1 + .../features/install.zsh/.zi-at-eval/eval | 1 + .../install.zsh/.zi-compile-plugin/eval | 1 + .../install.zsh/.zi-compile-plugin/setopt | 1 + .../install.zsh/.zi-compile-plugin/zcompile | 1 + .../install.zsh/.zi-compinit/autoload | 1 + .../install.zsh/.zi-compinit/compinit | 1 + .../features/install.zsh/.zi-compinit/setopt | 1 + .../install.zsh/.zi-compinit/unfunction | 1 + .../.zi-download-file-stdout/setopt | 1 + .../install.zsh/.zi-download-file-stdout/trap | 1 + .../install.zsh/.zi-download-file-stdout/type | 1 + .../install.zsh/.zi-download-snippet/setopt | 1 + .../install.zsh/.zi-download-snippet/trap | 1 + .../install.zsh/.zi-download-snippet/zcompile | 1 + .../features/install.zsh/.zi-extract/setopt | 1 + .../install.zsh/.zi-forget-completion/setopt | 1 + .../.zi-forget-completion/unfunction | 1 + .../install.zsh/.zi-get-cygwin-package/setopt | 1 + .../.zi-get-latest-gh-r-url-part/setopt | 1 + .../features/install.zsh/.zi-get-package/eval | 1 + .../install.zsh/.zi-get-package/setopt | 1 + .../features/install.zsh/.zi-get-package/trap | 1 + .../install.zsh/.zi-get-url-mtime/read | 1 + .../install.zsh/.zi-get-url-mtime/setopt | 1 + .../install.zsh/.zi-get-url-mtime/trap | 1 + .../install.zsh/.zi-get-url-mtime/type | 1 + .../.zi-install-completions/setopt | 1 + .../install.zsh/.zi-mirror-using-svn/setopt | 1 + .../install.zsh/.zi-parse-json/setopt | 1 + .../install.zsh/.zi-setup-plugin-dir/setopt | 1 + .../install.zsh/.zi-setup-plugin-dir/trap | 1 + .../install.zsh/.zi-update-snippet/eval | 1 + .../install.zsh/.zi-update-snippet/setopt | 1 + .../features/install.zsh/Script_Body_/source | 1 + .../features/install.zsh/compinit/autoload | 1 + .../features/install.zsh/compinit/bindkey | 1 + .../features/install.zsh/compinit/compdef | 1 + .../features/install.zsh/compinit/compdump | 1 + .../data/features/install.zsh/compinit/eval | 1 + .../data/features/install.zsh/compinit/read | 1 + .../data/features/install.zsh/compinit/setopt | 1 + .../features/install.zsh/compinit/unfunction | 1 + .../data/features/install.zsh/compinit/zle | 1 + .../data/features/install.zsh/compinit/zstyle | 1 + .../data/features/install.zsh/zicp/setopt | 1 + .../features/install.zsh/ziextract/setopt | 1 + .../features/install.zsh/ziextract/unfunction | 1 + .../features/install.zsh/ziextract/zparseopts | 1 + .../\342\210\236zi-atclone-hook/eval" | 1 + .../\342\210\236zi-atclone-hook/setopt" | 1 + .../\342\210\236zi-atpull-e-hook/setopt" | 1 + .../\342\210\236zi-atpull-hook/setopt" | 1 + .../setopt" | 1 + .../\342\210\236zi-cp-hook/setopt" | 1 + .../\342\210\236zi-mv-hook/setopt" | 1 + .../\342\210\236zi-ps-on-update-hook/eval" | 1 + .../\342\210\236zi-reset-hook/eval" | 1 + .../side.zsh/.zi-compute-ice/autoload | 1 + .../features/side.zsh/.zi-compute-ice/setopt | 1 + .../features/side.zsh/.zi-compute-ice/zmv | 1 + .../data/features/side.zsh/.zi-countdown/trap | 1 + .../.zi-exists-physically-message/setopt | 1 + .../features/side.zsh/.zi-two-paths/setopt | 1 + code/zsdoc/data/features/side.zsh/zmv/eval | 1 + code/zsdoc/data/features/side.zsh/zmv/getopts | 1 + code/zsdoc/data/features/side.zsh/zmv/read | 1 + code/zsdoc/data/features/side.zsh/zmv/setopt | 1 + .../features/zi.zsh/+zi-deploy-message/read | 1 + .../features/zi.zsh/+zi-deploy-message/zle | 1 + .../features/zi.zsh/.zi-any-to-pid/setopt | 1 + .../zi.zsh/.zi-any-to-user-plugin/setopt | 1 + .../zi.zsh/.zi-compdef-replay/compdef | 1 + .../features/zi.zsh/.zi-formatter-pid/source | 1 + .../zsdoc/data/features/zi.zsh/.zi-ice/setopt | 1 + .../data/features/zi.zsh/.zi-load-plugin/eval | 1 + .../features/zi.zsh/.zi-load-plugin/setopt | 1 + .../features/zi.zsh/.zi-load-plugin/source | 1 + .../zi.zsh/.zi-load-plugin/unfunction | 1 + .../data/features/zi.zsh/.zi-load-plugin/zle | 1 + .../features/zi.zsh/.zi-load-snippet/autoload | 1 + .../features/zi.zsh/.zi-load-snippet/eval | 1 + .../features/zi.zsh/.zi-load-snippet/setopt | 1 + .../features/zi.zsh/.zi-load-snippet/source | 1 + .../zi.zsh/.zi-load-snippet/unfunction | 1 + .../zi.zsh/.zi-load-snippet/zparseopts | 1 + .../features/zi.zsh/.zi-load-snippet/zstyle | 1 + code/zsdoc/data/features/zi.zsh/.zi-load/eval | 1 + .../data/features/zi.zsh/.zi-load/setopt | 1 + .../data/features/zi.zsh/.zi-load/source | 1 + code/zsdoc/data/features/zi.zsh/.zi-load/zle | 1 + .../features/zi.zsh/.zi-prepare-home/source | 1 + .../data/features/zi.zsh/.zi-run-task/eval | 1 + .../data/features/zi.zsh/.zi-run-task/source | 1 + .../data/features/zi.zsh/.zi-run-task/zle | 1 + .../data/features/zi.zsh/.zi-run-task/zpty | 1 + code/zsdoc/data/features/zi.zsh/.zi-run/eval | 1 + .../zsdoc/data/features/zi.zsh/.zi-run/setopt | 1 + .../features/zi.zsh/.zi-set-m-func/setopt | 1 + .../features/zi.zsh/.zi-tmp-subst-off/setopt | 1 + .../zi.zsh/.zi-tmp-subst-off/unfunction | 1 + .../features/zi.zsh/.zi-tmp-subst-on/source | 1 + .../zi.zsh/.zi-util-shands-path/setopt | 1 + .../zi.zsh/:zi-reload-and-run/autoload | 1 + .../zi.zsh/:zi-reload-and-run/unfunction | 1 + .../features/zi.zsh/:zi-tmp-subst-alias/alias | 1 + .../zi.zsh/:zi-tmp-subst-alias/setopt | 1 + .../zi.zsh/:zi-tmp-subst-alias/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-autoload/autoload | 1 + .../zi.zsh/:zi-tmp-subst-autoload/eval | 1 + .../zi.zsh/:zi-tmp-subst-autoload/is-at-least | 1 + .../zi.zsh/:zi-tmp-subst-autoload/setopt | 1 + .../zi.zsh/:zi-tmp-subst-autoload/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/bindkey | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/is-at-least | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/setopt | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-compdef/setopt | 1 + .../features/zi.zsh/:zi-tmp-subst-zle/setopt | 1 + .../features/zi.zsh/:zi-tmp-subst-zle/zle | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/setopt | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/zstyle | 1 + .../zi.zsh/@zi-scheduler/add-zsh-hook | 1 + .../data/features/zi.zsh/@zi-scheduler/sched | 1 + .../data/features/zi.zsh/@zi-scheduler/setopt | 1 + .../data/features/zi.zsh/@zi-scheduler/zle | 1 + .../features/zi.zsh/@zi-substitute/setopt | 1 + .../features/zi.zsh/Script_Body_/add-zsh-hook | 1 + .../data/features/zi.zsh/Script_Body_/alias | 1 + .../features/zi.zsh/Script_Body_/autoload | 1 + .../data/features/zi.zsh/Script_Body_/export | 1 + .../features/zi.zsh/Script_Body_/is-at-least | 1 + .../data/features/zi.zsh/Script_Body_/setopt | 1 + .../data/features/zi.zsh/Script_Body_/source | 1 + .../features/zi.zsh/Script_Body_/zmodload | 1 + .../data/features/zi.zsh/Script_Body_/zstyle | 1 + .../features/zi.zsh/add-zsh-hook/autoload | 1 + .../data/features/zi.zsh/add-zsh-hook/getopts | 1 + .../data/features/zi.zsh/compinit/autoload | 1 + .../data/features/zi.zsh/compinit/bindkey | 1 + .../data/features/zi.zsh/compinit/compdef | 1 + .../data/features/zi.zsh/compinit/compdump | 1 + code/zsdoc/data/features/zi.zsh/compinit/eval | 1 + code/zsdoc/data/features/zi.zsh/compinit/read | 1 + .../data/features/zi.zsh/compinit/setopt | 1 + .../data/features/zi.zsh/compinit/unfunction | 1 + code/zsdoc/data/features/zi.zsh/compinit/zle | 1 + .../data/features/zi.zsh/compinit/zstyle | 1 + .../data/features/zi.zsh/pmodload/zstyle | 1 + code/zsdoc/data/features/zi.zsh/zi/autoload | 1 + code/zsdoc/data/features/zi.zsh/zi/compinit | 1 + code/zsdoc/data/features/zi.zsh/zi/eval | 1 + code/zsdoc/data/features/zi.zsh/zi/setopt | 1 + code/zsdoc/data/features/zi.zsh/zi/source | 1 + .../data/features/zi.zsh/zicompinit/autoload | 1 + .../data/features/zi.zsh/zicompinit/compinit | 1 + .../data/features/zi.zsh/zpcompinit/autoload | 1 + .../data/features/zi.zsh/zpcompinit/compinit | 1 + .../functions/autoload.zsh/.zi-analytics-menu | 23 + .../functions/autoload.zsh/.zi-any-to-uspl2 | 2 + .../data/functions/autoload.zsh/.zi-at-eval | 5 + .../functions/autoload.zsh/.zi-build-module | 41 + code/zsdoc/data/functions/autoload.zsh/.zi-cd | 15 + .../data/functions/autoload.zsh/.zi-cdisable | 27 + .../data/functions/autoload.zsh/.zi-cenable | 26 + .../data/functions/autoload.zsh/.zi-changes | 6 + .../autoload.zsh/.zi-check-comp-consistency | 11 + .../.zi-check-which-completions-are-enabled | 10 + .../.zi-check-which-completions-are-installed | 11 + .../autoload.zsh/.zi-clear-completions | 35 + .../autoload.zsh/.zi-clear-report-for | 23 + .../autoload.zsh/.zi-compile-uncompile-all | 19 + .../data/functions/autoload.zsh/.zi-compiled | 23 + .../data/functions/autoload.zsh/.zi-confirm | 22 + .../functions/autoload.zsh/.zi-control-menu | 22 + .../data/functions/autoload.zsh/.zi-create | 103 + .../data/functions/autoload.zsh/.zi-delete | 93 + .../autoload.zsh/.zi-diff-env-compute | 28 + .../autoload.zsh/.zi-diff-functions-compute | 16 + .../autoload.zsh/.zi-diff-options-compute | 16 + .../autoload.zsh/.zi-diff-parameter-compute | 27 + .../data/functions/autoload.zsh/.zi-edit | 19 + .../functions/autoload.zsh/.zi-exists-message | 7 + .../.zi-find-completions-of-plugin | 5 + .../functions/autoload.zsh/.zi-format-env | 15 + .../autoload.zsh/.zi-format-functions | 34 + .../functions/autoload.zsh/.zi-format-options | 19 + .../autoload.zsh/.zi-format-parameter | 29 + .../autoload.zsh/.zi-get-completion-owner | 19 + .../.zi-get-completion-owner-uspl2col | 2 + .../data/functions/autoload.zsh/.zi-get-path | 5 + .../data/functions/autoload.zsh/.zi-glance | 37 + .../data/functions/autoload.zsh/.zi-help | 31 + .../functions/autoload.zsh/.zi-list-bindkeys | 39 + .../autoload.zsh/.zi-list-compdef-replay | 5 + code/zsdoc/data/functions/autoload.zsh/.zi-ls | 17 + .../data/functions/autoload.zsh/.zi-module | 24 + .../data/functions/autoload.zsh/.zi-pager | 14 + .../autoload.zsh/.zi-prepare-readlink | 4 + .../data/functions/autoload.zsh/.zi-recall | 33 + .../data/functions/autoload.zsh/.zi-recently | 23 + .../autoload.zsh/.zi-restore-extendedglob | 1 + .../autoload.zsh/.zi-run-delete-hooks | 17 + .../autoload.zsh/.zi-save-set-extendedglob | 2 + .../autoload.zsh/.zi-search-completions | 39 + .../functions/autoload.zsh/.zi-self-update | 43 + .../autoload.zsh/.zi-show-all-reports | 5 + .../autoload.zsh/.zi-show-completions | 61 + .../autoload.zsh/.zi-show-debug-report | 1 + .../autoload.zsh/.zi-show-registered-plugins | 19 + .../functions/autoload.zsh/.zi-show-report | 66 + .../functions/autoload.zsh/.zi-show-times | 51 + .../functions/autoload.zsh/.zi-show-zstatus | 47 + .../data/functions/autoload.zsh/.zi-stress | 31 + .../autoload.zsh/.zi-uncompile-plugin | 20 + .../autoload.zsh/.zi-uninstall-completions | 39 + .../data/functions/autoload.zsh/.zi-unload | 380 ++ .../autoload.zsh/.zi-unregister-plugin | 5 + .../autoload.zsh/.zi-update-all-parallel | 63 + .../autoload.zsh/.zi-update-or-status | 263 ++ .../autoload.zsh/.zi-update-or-status-all | 96 + .../autoload.zsh/.zi-update-or-status-snippet | 28 + .../autoload.zsh/.zi-wait-for-update-jobs | 14 + .../data/functions/install.zsh/.zi-at-eval | 5 + .../functions/install.zsh/.zi-compile-plugin | 84 + .../data/functions/install.zsh/.zi-compinit | 26 + .../install.zsh/.zi-download-file-stdout | 46 + .../install.zsh/.zi-download-snippet | 309 ++ .../data/functions/install.zsh/.zi-extract | 22 + .../install.zsh/.zi-forget-completion | 20 + .../install.zsh/.zi-get-cygwin-package | 70 + .../install.zsh/.zi-get-latest-gh-r-url-part | 101 + .../functions/install.zsh/.zi-get-package | 194 + .../functions/install.zsh/.zi-get-url-mtime | 34 + .../install.zsh/.zi-install-completions | 61 + .../install.zsh/.zi-mirror-using-svn | 27 + .../data/functions/install.zsh/.zi-parse-json | 102 + .../install.zsh/.zi-setup-plugin-dir | 189 + .../functions/install.zsh/.zi-update-snippet | 72 + code/zsdoc/data/functions/install.zsh/zicp | 28 + .../data/functions/install.zsh/ziextract | 274 ++ code/zsdoc/data/functions/install.zsh/zimv | 3 + .../data/functions/install.zsh/zpextract | 1 + .../install.zsh/\342\210\236zi-atclone-hook" | 4 + .../install.zsh/\342\210\236zi-atpull-e-hook" | 2 + .../install.zsh/\342\210\236zi-atpull-hook" | 2 + .../\342\210\236zi-compile-plugin-hook" | 14 + .../install.zsh/\342\210\236zi-cp-hook" | 24 + .../install.zsh/\342\210\236zi-extract-hook" | 4 + .../install.zsh/\342\210\236zi-make-e-hook" | 5 + .../install.zsh/\342\210\236zi-make-ee-hook" | 5 + .../install.zsh/\342\210\236zi-make-hook" | 4 + .../install.zsh/\342\210\236zi-mv-hook" | 21 + .../\342\210\236zi-ps-on-update-hook" | 14 + .../install.zsh/\342\210\236zi-reset-hook" | 79 + .../side.zsh/.zi-any-colorify-as-uspl2 | 22 + .../data/functions/side.zsh/.zi-compute-ice | 116 + .../data/functions/side.zsh/.zi-countdown | 14 + .../functions/side.zsh/.zi-exists-physically | 6 + .../side.zsh/.zi-exists-physically-message | 22 + code/zsdoc/data/functions/side.zsh/.zi-first | 19 + .../data/functions/side.zsh/.zi-store-ices | 28 + .../data/functions/side.zsh/.zi-two-paths | 22 + .../data/functions/zi.zsh/+zi-deploy-message | 13 + code/zsdoc/data/functions/zi.zsh/+zi-message | 14 + .../zi.zsh/+zi-prehelp-usage-message | 34 + .../functions/zi.zsh/-zi_scheduler_add_sh | 7 + .../zsdoc/data/functions/zi.zsh/.zi-add-fpath | 10 + .../data/functions/zi.zsh/.zi-add-report | 3 + .../data/functions/zi.zsh/.zi-any-to-pid | 21 + .../functions/zi.zsh/.zi-any-to-user-plugin | 25 + .../data/functions/zi.zsh/.zi-compdef-clear | 3 + .../data/functions/zi.zsh/.zi-compdef-replay | 16 + code/zsdoc/data/functions/zi.zsh/.zi-diff | 4 + code/zsdoc/data/functions/zi.zsh/.zi-diff-env | 15 + .../data/functions/zi.zsh/.zi-diff-functions | 3 + .../data/functions/zi.zsh/.zi-diff-options | 2 + .../data/functions/zi.zsh/.zi-diff-parameter | 7 + .../functions/zi.zsh/.zi-find-other-matches | 17 + .../data/functions/zi.zsh/.zi-formatter-bar | 1 + .../functions/zi.zsh/.zi-formatter-bar-util | 7 + .../data/functions/zi.zsh/.zi-formatter-pid | 10 + .../functions/zi.zsh/.zi-formatter-th-bar | 1 + .../data/functions/zi.zsh/.zi-formatter-url | 19 + .../data/functions/zi.zsh/.zi-get-mtime-into | 7 + .../data/functions/zi.zsh/.zi-get-object-path | 23 + code/zsdoc/data/functions/zi.zsh/.zi-ice | 12 + code/zsdoc/data/functions/zi.zsh/.zi-load | 76 + .../zsdoc/data/functions/zi.zsh/.zi-load-ices | 22 + .../data/functions/zi.zsh/.zi-load-object | 10 + .../data/functions/zi.zsh/.zi-load-plugin | 107 + .../data/functions/zi.zsh/.zi-load-snippet | 173 + .../zi.zsh/.zi-main-message-formatter | 18 + code/zsdoc/data/functions/zi.zsh/.zi-pack-ice | 3 + .../data/functions/zi.zsh/.zi-parse-opts | 2 + .../data/functions/zi.zsh/.zi-prepare-home | 38 + .../data/functions/zi.zsh/.zi-register-plugin | 20 + code/zsdoc/data/functions/zi.zsh/.zi-run | 24 + code/zsdoc/data/functions/zi.zsh/.zi-run-task | 45 + .../data/functions/zi.zsh/.zi-set-m-func | 17 + .../data/functions/zi.zsh/.zi-setup-params | 3 + .../data/functions/zi.zsh/.zi-submit-turbo | 16 + .../data/functions/zi.zsh/.zi-tmp-subst-off | 17 + .../data/functions/zi.zsh/.zi-tmp-subst-on | 29 + .../functions/zi.zsh/.zi-util-shands-path | 8 + .../data/functions/zi.zsh/:zi-reload-and-run | 9 + .../data/functions/zi.zsh/:zi-tmp-subst-alias | 30 + .../functions/zi.zsh/:zi-tmp-subst-autoload | 106 + .../functions/zi.zsh/:zi-tmp-subst-bindkey | 107 + .../functions/zi.zsh/:zi-tmp-subst-compdef | 5 + .../data/functions/zi.zsh/:zi-tmp-subst-zle | 33 + .../functions/zi.zsh/:zi-tmp-subst-zstyle | 19 + code/zsdoc/data/functions/zi.zsh/@autoload | 3 + .../data/functions/zi.zsh/@zi-register-annex | 8 + .../data/functions/zi.zsh/@zi-register-hook | 4 + .../zsdoc/data/functions/zi.zsh/@zi-scheduler | 74 + .../data/functions/zi.zsh/@zi-substitute | 36 + .../zi.zsh/@zsh-plugin-run-on-unload | 2 + .../zi.zsh/@zsh-plugin-run-on-update | 2 + code/zsdoc/data/functions/zi.zsh/pmodload | 15 + code/zsdoc/data/functions/zi.zsh/zi | 547 +++ code/zsdoc/data/functions/zi.zsh/zi-turbo | 1 + code/zsdoc/data/functions/zi.zsh/zicdclear | 1 + code/zsdoc/data/functions/zi.zsh/zicdreplay | 1 + code/zsdoc/data/functions/zi.zsh/zicompdef | 1 + code/zsdoc/data/functions/zi.zsh/zicompinit | 1 + code/zsdoc/data/functions/zi.zsh/zpcdclear | 1 + code/zsdoc/data/functions/zi.zsh/zpcdreplay | 1 + code/zsdoc/data/functions/zi.zsh/zpcompdef | 1 + code/zsdoc/data/functions/zi.zsh/zpcompinit | 1 + code/zsdoc/data/hooks/zi.zsh/@zi-scheduler | 1 + code/zsdoc/data/rev_call_tree.zsd | 57 + .../trees/autoload.zsh/.zi-any-to-uspl2.tree | 4 + .../data/trees/autoload.zsh/.zi-at-eval.tree | 4 + .../trees/autoload.zsh/.zi-build-module.tree | 4 + .../zsdoc/data/trees/autoload.zsh/.zi-cd.tree | 4 + .../data/trees/autoload.zsh/.zi-cdisable.tree | 3 + .../data/trees/autoload.zsh/.zi-cenable.tree | 3 + .../data/trees/autoload.zsh/.zi-changes.tree | 5 + .../autoload.zsh/.zi-clear-completions.tree | 4 + .../autoload.zsh/.zi-clear-report-for.tree | 3 + .../.zi-compile-uncompile-all.tree | 6 + .../data/trees/autoload.zsh/.zi-compiled.tree | 5 + .../data/trees/autoload.zsh/.zi-create.tree | 6 + .../data/trees/autoload.zsh/.zi-delete.tree | 7 + .../data/trees/autoload.zsh/.zi-edit.tree | 4 + .../autoload.zsh/.zi-exists-message.tree | 4 + .../.zi-find-completions-of-plugin.tree | 4 + .../autoload.zsh/.zi-format-options.tree | 3 + .../.zi-get-completion-owner-uspl2col.tree | 4 + .../data/trees/autoload.zsh/.zi-get-path.tree | 4 + .../data/trees/autoload.zsh/.zi-glance.tree | 6 + .../trees/autoload.zsh/.zi-list-bindkeys.tree | 4 + .../data/trees/autoload.zsh/.zi-module.tree | 3 + .../data/trees/autoload.zsh/.zi-recall.tree | 5 + .../data/trees/autoload.zsh/.zi-recently.tree | 4 + .../autoload.zsh/.zi-run-delete-hooks.tree | 4 + .../autoload.zsh/.zi-search-completions.tree | 4 + .../trees/autoload.zsh/.zi-self-update.tree | 5 + .../autoload.zsh/.zi-show-all-reports.tree | 3 + .../autoload.zsh/.zi-show-completions.tree | 4 + .../autoload.zsh/.zi-show-debug-report.tree | 3 + .../.zi-show-registered-plugins.tree | 4 + .../trees/autoload.zsh/.zi-show-report.tree | 4 + .../trees/autoload.zsh/.zi-show-times.tree | 4 + .../trees/autoload.zsh/.zi-show-zstatus.tree | 4 + .../data/trees/autoload.zsh/.zi-stress.tree | 6 + .../autoload.zsh/.zi-uncompile-plugin.tree | 5 + .../.zi-uninstall-completions.tree | 6 + .../data/trees/autoload.zsh/.zi-unload.tree | 5 + .../autoload.zsh/.zi-unregister-plugin.tree | 4 + .../autoload.zsh/.zi-update-all-parallel.tree | 6 + .../.zi-update-or-status-all.tree | 8 + .../.zi-update-or-status-snippet.tree | 5 + .../autoload.zsh/.zi-update-or-status.tree | 14 + .../.zi-wait-for-update-jobs.tree | 4 + .../data/trees/install.zsh/.zi-at-eval.tree | 4 + .../trees/install.zsh/.zi-compile-plugin.tree | 6 + .../data/trees/install.zsh/.zi-compinit.tree | 5 + .../install.zsh/.zi-download-file-stdout.tree | 4 + .../install.zsh/.zi-download-snippet.tree | 5 + .../data/trees/install.zsh/.zi-extract.tree | 6 + .../install.zsh/.zi-get-cygwin-package.tree | 4 + .../.zi-get-latest-gh-r-url-part.tree | 4 + .../trees/install.zsh/.zi-get-package.tree | 7 + .../install.zsh/.zi-install-completions.tree | 7 + .../trees/install.zsh/.zi-parse-json.tree | 3 + .../install.zsh/.zi-setup-plugin-dir.tree | 9 + .../trees/install.zsh/.zi-update-snippet.tree | 6 + .../data/trees/install.zsh/ziextract.tree | 4 + code/zsdoc/data/trees/install.zsh/zimv.tree | 4 + .../data/trees/install.zsh/zpextract.tree | 5 + .../\342\210\236zi-atclone-hook.tree" | 5 + .../\342\210\236zi-atpull-e-hook.tree" | 4 + .../\342\210\236zi-atpull-hook.tree" | 4 + .../\342\210\236zi-compile-plugin-hook.tree" | 3 + .../install.zsh/\342\210\236zi-cp-hook.tree" | 4 + .../\342\210\236zi-extract-hook.tree" | 4 + .../\342\210\236zi-make-e-hook.tree" | 5 + .../\342\210\236zi-make-ee-hook.tree" | 5 + .../\342\210\236zi-make-hook.tree" | 5 + .../install.zsh/\342\210\236zi-mv-hook.tree" | 4 + .../\342\210\236zi-ps-on-update-hook.tree" | 4 + .../\342\210\236zi-reset-hook.tree" | 4 + .../side.zsh/.zi-any-colorify-as-uspl2.tree | 5 + .../data/trees/side.zsh/.zi-compute-ice.tree | 6 + .../data/trees/side.zsh/.zi-countdown.tree | 4 + .../.zi-exists-physically-message.tree | 6 + .../trees/side.zsh/.zi-exists-physically.tree | 4 + code/zsdoc/data/trees/side.zsh/.zi-first.tree | 7 + .../data/trees/side.zsh/.zi-two-paths.tree | 4 + .../zi.zsh/+zi-prehelp-usage-message.tree | 4 + .../data/trees/zi.zsh/.zi-add-fpath.tree | 3 + .../data/trees/zi.zsh/.zi-any-to-pid.tree | 3 + .../data/trees/zi.zsh/.zi-compdef-clear.tree | 4 + .../data/trees/zi.zsh/.zi-compdef-replay.tree | 4 + code/zsdoc/data/trees/zi.zsh/.zi-diff.tree | 3 + .../data/trees/zi.zsh/.zi-formatter-bar.tree | 3 + .../data/trees/zi.zsh/.zi-formatter-pid.tree | 4 + .../trees/zi.zsh/.zi-formatter-th-bar.tree | 3 + .../trees/zi.zsh/.zi-get-object-path.tree | 3 + .../data/trees/zi.zsh/.zi-load-ices.tree | 3 + .../data/trees/zi.zsh/.zi-load-object.tree | 3 + .../data/trees/zi.zsh/.zi-load-plugin.tree | 6 + .../data/trees/zi.zsh/.zi-load-snippet.tree | 6 + code/zsdoc/data/trees/zi.zsh/.zi-load.tree | 6 + .../data/trees/zi.zsh/.zi-prepare-home.tree | 5 + .../trees/zi.zsh/.zi-register-plugin.tree | 4 + .../zsdoc/data/trees/zi.zsh/.zi-run-task.tree | 4 + code/zsdoc/data/trees/zi.zsh/.zi-run.tree | 4 + .../data/trees/zi.zsh/.zi-set-m-func.tree | 4 + .../trees/zi.zsh/:zi-tmp-subst-alias.tree | 3 + .../trees/zi.zsh/:zi-tmp-subst-autoload.tree | 5 + .../trees/zi.zsh/:zi-tmp-subst-bindkey.tree | 4 + .../trees/zi.zsh/:zi-tmp-subst-compdef.tree | 3 + .../data/trees/zi.zsh/:zi-tmp-subst-zle.tree | 3 + .../trees/zi.zsh/:zi-tmp-subst-zstyle.tree | 3 + code/zsdoc/data/trees/zi.zsh/@autoload.tree | 6 + .../data/trees/zi.zsh/@zi-scheduler.tree | 4 + .../zi.zsh/@zsh-plugin-run-on-unload.tree | 3 + .../zi.zsh/@zsh-plugin-run-on-update.tree | 3 + .../zsdoc/data/trees/zi.zsh/Script_Body_.tree | 8 + code/zsdoc/data/trees/zi.zsh/pmodload.tree | 3 + code/zsdoc/data/trees/zi.zsh/zi-turbo.tree | 39 + code/zsdoc/data/trees/zi.zsh/zi.tree | 38 + code/zsdoc/data/trees/zi.zsh/zicdclear.tree | 3 + code/zsdoc/data/trees/zi.zsh/zicdreplay.tree | 3 + code/zsdoc/data/trees/zi.zsh/zicompinit.tree | 4 + code/zsdoc/data/trees/zi.zsh/zpcdclear.tree | 3 + code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree | 3 + code/zsdoc/data/trees/zi.zsh/zpcompinit.tree | 4 + code/zsdoc/html/autoload.zsh.html | 2989 ++++++++++++++ code/zsdoc/html/install.zsh.html | 1622 ++++++++ code/zsdoc/html/side.zsh.html | 909 +++++ code/zsdoc/html/zi.zsh.html | 2834 +++++++++++++ code/zsdoc/pdf/autoload.zsh.pdf | Bin 0 -> 410740 bytes code/zsdoc/pdf/install.zsh.pdf | Bin 0 -> 210801 bytes code/zsdoc/pdf/side.zsh.pdf | Bin 0 -> 109159 bytes code/zsdoc/pdf/zi.zsh.pdf | Bin 0 -> 378687 bytes 731 files changed, 33134 insertions(+) create mode 100644 code/.editorconfig create mode 100644 code/Makefile create mode 100644 code/zsdoc/Makefile create mode 100644 code/zsdoc/asciidoc/autoload.zsh.adoc create mode 100644 code/zsdoc/asciidoc/install.zsh.adoc create mode 100644 code/zsdoc/asciidoc/side.zsh.adoc create mode 100644 code/zsdoc/asciidoc/zi.zsh.adoc create mode 100644 code/zsdoc/data/autoload/install.zsh/compinit create mode 100644 code/zsdoc/data/autoload/side.zsh/zmv create mode 100644 code/zsdoc/data/autoload/zi.zsh/add-zsh-hook create mode 100644 code/zsdoc/data/autoload/zi.zsh/compinit create mode 100644 code/zsdoc/data/autoload/zi.zsh/is-at-least create mode 100644 code/zsdoc/data/bodies/autoload.zsh create mode 100644 code/zsdoc/data/bodies/autoload.zsh.comments create mode 100644 code/zsdoc/data/bodies/install.zsh create mode 100644 code/zsdoc/data/bodies/install.zsh.comments create mode 100644 code/zsdoc/data/bodies/side.zsh create mode 100644 code/zsdoc/data/bodies/side.zsh.comments create mode 100644 code/zsdoc/data/bodies/zi.zsh create mode 100644 code/zsdoc/data/bodies/zi.zsh.comments create mode 100644 code/zsdoc/data/call_tree.zsd create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-analytics-menu create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-any-to-uspl2 create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-build-module create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cd create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cdisable create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cenable create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-changes create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-comp-consistency create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-enabled create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-installed create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-report-for create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compile-uncompile-all create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compiled create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-confirm create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-control-menu create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-create create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-delete create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-env-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-functions-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-options-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-parameter-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-edit create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-exists-message create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-find-completions-of-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-env create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-functions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-options create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-parameter create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner-uspl2col create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-path create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-glance create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-help create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-bindkeys create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-compdef-replay create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-ls create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-module create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-pager create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-prepare-readlink create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recall create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recently create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-restore-extendedglob create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-run-delete-hooks create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-save-set-extendedglob create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-search-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-self-update create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-all-reports create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-debug-report create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-registered-plugins create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-report create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-times create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-zstatus create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-stress create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uncompile-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uninstall-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unload create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unregister-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-all-parallel create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-all create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-snippet create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-wait-for-update-jobs create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compile-plugin create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compinit create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-file-stdout create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-snippet create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-extract create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-forget-completion create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-cygwin-package create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-latest-gh-r-url-part create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-package create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-url-mtime create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-install-completions create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-mirror-using-svn create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-parse-json create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-setup-plugin-dir create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-update-snippet create mode 100644 code/zsdoc/data/descriptions/install.zsh/compinit create mode 100644 code/zsdoc/data/descriptions/install.zsh/zicp create mode 100644 code/zsdoc/data/descriptions/install.zsh/ziextract create mode 100644 code/zsdoc/data/descriptions/install.zsh/zimv create mode 100644 code/zsdoc/data/descriptions/install.zsh/zpextract create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atclone-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-e-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-compile-plugin-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-cp-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-extract-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-e-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-ee-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-mv-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-ps-on-update-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-reset-hook" create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-any-colorify-as-uspl2 create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-compute-ice create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-countdown create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically-message create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-first create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-store-ices create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-two-paths create mode 100644 code/zsdoc/data/descriptions/side.zsh/zmv create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-deploy-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-prehelp-usage-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/-zi_scheduler_add_sh create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-fpath create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-report create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-pid create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-user-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-clear create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-replay create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-env create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-functions create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-options create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-parameter create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-find-other-matches create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar-util create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-pid create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-th-bar create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-url create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-mtime-into create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-object-path create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-ice create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-ices create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-object create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-snippet create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-main-message-formatter create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-pack-ice create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-parse-opts create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-prepare-home create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-register-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run-task create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-set-m-func create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-setup-params create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-submit-turbo create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-off create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-on create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-util-shands-path create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-reload-and-run create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-alias create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-autoload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-bindkey create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-compdef create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zle create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zstyle create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@autoload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-annex create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-hook create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-substitute create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-unload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-update create mode 100644 code/zsdoc/data/descriptions/zi.zsh/add-zsh-hook create mode 100644 code/zsdoc/data/descriptions/zi.zsh/compinit create mode 100644 code/zsdoc/data/descriptions/zi.zsh/is-at-least create mode 100644 code/zsdoc/data/descriptions/zi.zsh/pmodload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi-turbo create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdclear create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdreplay create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompdef create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompinit create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zpcdreplay create mode 100644 code/zsdoc/data/env-use/install.zsh/.zi-get-package/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/install.zsh/zicp/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-any-to-user-plugin/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-load-ices/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-prepare-home/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-util-shands-path/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/@zi-substitute/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZSH_CACHE_DIR create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/PMSPEC create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR create mode 100644 code/zsdoc/data/extended/autoload.zsh create mode 100644 code/zsdoc/data/extended/install.zsh create mode 100644 code/zsdoc/data/extended/side.zsh create mode 100644 code/zsdoc/data/extended/zi.zsh create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-at-eval/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-cd/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-clear-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compile-uncompile-all/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compiled/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/read create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/autoload create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/vared create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-delete/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-env-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-functions-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-options-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-parameter-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-find-completions-of-plugin/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-format-parameter/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-completion-owner/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-path/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-pager/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-prepare-readlink/type create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recall/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recently/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-restore-extendedglob/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-run-delete-hooks/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-save-set-extendedglob/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-search-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/zcompile create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-registered-plugins/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-report/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-times/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-zstatus/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/zcompile create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uncompile-plugin/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/alias create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/bindkey create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unalias create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unfunction create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zle create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zstyle create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-all-parallel/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-snippet/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/kill create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/read create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/trap create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/wait create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-wait-for-update-jobs/wait create mode 100644 code/zsdoc/data/features/autoload.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/install.zsh/.zi-at-eval/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/zcompile create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/autoload create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/compinit create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/type create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/zcompile create mode 100644 code/zsdoc/data/features/install.zsh/.zi-extract/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-cygwin-package/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-latest-gh-r-url-part/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/read create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/type create mode 100644 code/zsdoc/data/features/install.zsh/.zi-install-completions/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-mirror-using-svn/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-parse-json/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/setopt create mode 100644 code/zsdoc/data/features/install.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/install.zsh/compinit/autoload create mode 100644 code/zsdoc/data/features/install.zsh/compinit/bindkey create mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdef create mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdump create mode 100644 code/zsdoc/data/features/install.zsh/compinit/eval create mode 100644 code/zsdoc/data/features/install.zsh/compinit/read create mode 100644 code/zsdoc/data/features/install.zsh/compinit/setopt create mode 100644 code/zsdoc/data/features/install.zsh/compinit/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/compinit/zle create mode 100644 code/zsdoc/data/features/install.zsh/compinit/zstyle create mode 100644 code/zsdoc/data/features/install.zsh/zicp/setopt create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/setopt create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/zparseopts create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/eval" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-e-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-compile-plugin-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-cp-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-mv-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-ps-on-update-hook/eval" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-reset-hook/eval" create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/autoload create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/setopt create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/zmv create mode 100644 code/zsdoc/data/features/side.zsh/.zi-countdown/trap create mode 100644 code/zsdoc/data/features/side.zsh/.zi-exists-physically-message/setopt create mode 100644 code/zsdoc/data/features/side.zsh/.zi-two-paths/setopt create mode 100644 code/zsdoc/data/features/side.zsh/zmv/eval create mode 100644 code/zsdoc/data/features/side.zsh/zmv/getopts create mode 100644 code/zsdoc/data/features/side.zsh/zmv/read create mode 100644 code/zsdoc/data/features/side.zsh/zmv/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/read create mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-pid/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-user-plugin/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-compdef-replay/compdef create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-formatter-pid/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-ice/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-prepare-home/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zpty create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-set-m-func/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-on/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-util-shands-path/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/alias create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/eval create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/bindkey create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-compdef/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/zle create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/add-zsh-hook create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/sched create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/zle create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-substitute/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/add-zsh-hook create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/alias create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/export create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zmodload create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/getopts create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/bindkey create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdef create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdump create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/eval create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/read create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zle create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/pmodload/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/zi/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zi/compinit create mode 100644 code/zsdoc/data/features/zi.zsh/zi/eval create mode 100644 code/zsdoc/data/features/zi.zsh/zi/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/zi/source create mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/compinit create mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/compinit create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-analytics-menu create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-any-to-uspl2 create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-build-module create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cd create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cdisable create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cenable create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-changes create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-comp-consistency create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-enabled create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-installed create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-report-for create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compile-uncompile-all create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compiled create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-confirm create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-control-menu create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-create create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-delete create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-env-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-functions-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-options-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-parameter-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-edit create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-exists-message create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-find-completions-of-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-env create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-functions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-options create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-parameter create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner-uspl2col create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-path create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-glance create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-help create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-bindkeys create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-compdef-replay create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-ls create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-module create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-pager create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-prepare-readlink create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recall create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recently create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-restore-extendedglob create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-run-delete-hooks create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-save-set-extendedglob create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-search-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-self-update create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-all-reports create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-debug-report create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-registered-plugins create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-report create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-times create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-zstatus create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-stress create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uncompile-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uninstall-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unload create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unregister-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-all-parallel create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-all create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-snippet create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-wait-for-update-jobs create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compile-plugin create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compinit create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-file-stdout create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-snippet create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-extract create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-forget-completion create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-cygwin-package create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-latest-gh-r-url-part create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-package create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-url-mtime create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-install-completions create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-mirror-using-svn create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-parse-json create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-setup-plugin-dir create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-update-snippet create mode 100644 code/zsdoc/data/functions/install.zsh/zicp create mode 100644 code/zsdoc/data/functions/install.zsh/ziextract create mode 100644 code/zsdoc/data/functions/install.zsh/zimv create mode 100644 code/zsdoc/data/functions/install.zsh/zpextract create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atclone-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-e-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-compile-plugin-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-cp-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-extract-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-e-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-ee-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-mv-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-ps-on-update-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-reset-hook" create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-any-colorify-as-uspl2 create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-compute-ice create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-countdown create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically-message create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-first create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-store-ices create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-two-paths create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-deploy-message create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-message create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-prehelp-usage-message create mode 100644 code/zsdoc/data/functions/zi.zsh/-zi_scheduler_add_sh create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-fpath create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-report create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-pid create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-user-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-clear create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-replay create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-env create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-functions create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-options create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-parameter create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-find-other-matches create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar-util create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-pid create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-th-bar create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-url create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-mtime-into create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-object-path create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-ice create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-ices create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-object create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-snippet create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-main-message-formatter create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-pack-ice create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-parse-opts create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-prepare-home create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-register-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run-task create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-set-m-func create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-setup-params create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-submit-turbo create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-off create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-on create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-util-shands-path create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-reload-and-run create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-alias create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-autoload create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-bindkey create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-compdef create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zle create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zstyle create mode 100644 code/zsdoc/data/functions/zi.zsh/@autoload create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-annex create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-hook create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-substitute create mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-unload create mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-update create mode 100644 code/zsdoc/data/functions/zi.zsh/pmodload create mode 100644 code/zsdoc/data/functions/zi.zsh/zi create mode 100644 code/zsdoc/data/functions/zi.zsh/zi-turbo create mode 100644 code/zsdoc/data/functions/zi.zsh/zicdclear create mode 100644 code/zsdoc/data/functions/zi.zsh/zicdreplay create mode 100644 code/zsdoc/data/functions/zi.zsh/zicompdef create mode 100644 code/zsdoc/data/functions/zi.zsh/zicompinit create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdclear create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdreplay create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompdef create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompinit create mode 100644 code/zsdoc/data/hooks/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/rev_call_tree.zsd create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-any-to-uspl2.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-at-eval.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-build-module.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cd.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cdisable.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cenable.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-changes.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-report-for.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compile-uncompile-all.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compiled.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-create.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-edit.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-exists-message.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-find-completions-of-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-format-options.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-completion-owner-uspl2col.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-path.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-glance.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-list-bindkeys.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-module.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recall.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recently.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-run-delete-hooks.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-search-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-all-reports.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-debug-report.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-registered-plugins.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-report.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-times.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-zstatus.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-stress.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uncompile-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uninstall-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unload.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unregister-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-snippet.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-wait-for-update-jobs.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-at-eval.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compile-plugin.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compinit.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-file-stdout.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-snippet.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-extract.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-cygwin-package.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-latest-gh-r-url-part.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-package.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-parse-json.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree create mode 100644 code/zsdoc/data/trees/install.zsh/ziextract.tree create mode 100644 code/zsdoc/data/trees/install.zsh/zimv.tree create mode 100644 code/zsdoc/data/trees/install.zsh/zpextract.tree create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atclone-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-e-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-compile-plugin-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-cp-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-extract-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-e-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-ee-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-mv-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-ps-on-update-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-reset-hook.tree" create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-any-colorify-as-uspl2.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-compute-ice.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-countdown.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-first.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-two-paths.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/+zi-prehelp-usage-message.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-add-fpath.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-any-to-pid.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-clear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-replay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-diff.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-bar.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-pid.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-th-bar.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-get-object-path.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-ices.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-object.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-prepare-home.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-register-plugin.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run-task.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-set-m-func.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-alias.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-bindkey.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-compdef.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zle.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zstyle.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@autoload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zi-scheduler.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-unload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-update.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/Script_Body_.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/pmodload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zi-turbo.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zi.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicdclear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicdreplay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicompinit.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdclear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcompinit.tree create mode 100644 code/zsdoc/html/autoload.zsh.html create mode 100644 code/zsdoc/html/install.zsh.html create mode 100644 code/zsdoc/html/side.zsh.html create mode 100644 code/zsdoc/html/zi.zsh.html create mode 100644 code/zsdoc/pdf/autoload.zsh.pdf create mode 100644 code/zsdoc/pdf/install.zsh.pdf create mode 100644 code/zsdoc/pdf/side.zsh.pdf create mode 100644 code/zsdoc/pdf/zi.zsh.pdf diff --git a/code/.editorconfig b/code/.editorconfig new file mode 100644 index 0000000..3459a9e --- /dev/null +++ b/code/.editorconfig @@ -0,0 +1,57 @@ +# # Space or Tabs? +# https://stackoverflow.com/questions/35649847/objective-reasons-for-using-spaces-instead-of-tabs-for-indentation +# https://stackoverflow.com/questions/12093748/how-to-use-tabs-instead-of-spaces-in-a-shell-script +# +# Note: VIM users should use alternate marks [[[ and ]]] as the original ones can confuse nested substitutions, e.g.: ${${${VAR}}} +# +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[**.{md,rst}] +trim_trailing_whitespace = false + +[*.{sh,bash,zsh,fish}] +indent_style = space +indent_size = 2 +tab_width = 2 + +[Makefile] +indent_style = tab +indent_size = 4 + +[*.{xml,json}] +indent_style = space +indent_size = 2 + +[*.{css,less}] +indent_style = space +indent_size = 2 + +[*.{js,jsx,html,sass}] +indent_style = tab +indent_size = 4 + +[*.{py,rb}] +indent_style = space +indent_size = 4 + +[*.{go,java,scala,groovy,kotlin}] +indent_style = tab +indent_size = 4 + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 +tab_width = 2 + +[CHANGELOG.md] +indent_style = tab +indent_size = 4 \ No newline at end of file diff --git a/code/Makefile b/code/Makefile new file mode 100644 index 0000000..0579211 --- /dev/null +++ b/code/Makefile @@ -0,0 +1,36 @@ +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc + +clone: clean + command git clone --depth 1 --branch main https://github.com/z-shell/zi + +%.zwc: % + zi/lib/zcompile $< + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh + rm -vrf zsdoc/asciidoc/*.adoc + zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ + zi/zi.zsh \ + zi/lib/zsh/side.zsh \ + zi/lib/zsh/install.zsh \ + zi/lib/zsh/autoload.zsh + @mkdir -p zsdoc/asciidoc + mv -v zsdoc/*.adoc zsdoc/asciidoc/ + printf "Last update: [$(date '+%m/%d/%Y %H:%M:%S')]\n" >asciidoc.log + +man: + rm -vrf zsdoc/man + make -C zsdoc man + +pdf: + rm -vrf zsdoc/pdf + make -C zsdoc pdf + +html: + rm -vrf zsdoc/html + make -C zsdoc html + +clean: + rm -vrf zi + rm -vrf zsdoc/data + +.PHONY: all clean clone man pdf html adoc diff --git a/code/zsdoc/Makefile b/code/zsdoc/Makefile new file mode 100644 index 0000000..ee584ec --- /dev/null +++ b/code/zsdoc/Makefile @@ -0,0 +1,66 @@ +all: man pdf html + +# MAN +# Converted with a2x from asciidoc package + +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 + +man/zi.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc + +man/side.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc + +man/install.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc + +man/autoload.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc + +# PDF +# Uses asciidoctor not a2x (i.e. not asciidoc) + +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf + +pdf/zi.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc + +pdf/side.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc + +pdf/install.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc + +pdf/autoload.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html + +html/zi.zsh.html: + @mkdir -p html + asciidoctor -D html zi.zsh.adoc + +html/side.zsh.html: + @mkdir -p html + asciidoctor -D html side.zsh.adoc + +html/install.zsh.html: + @mkdir -p html + asciidoctor -D html install.zsh.adoc + +html/autoload.zsh.html: + @mkdir -p html + asciidoctor -D html autoload.zsh.adoc + +clean: + rm -rvf man pdf html data + +.PHONY: man pdf html clean diff --git a/code/zsdoc/asciidoc/autoload.zsh.adoc b/code/zsdoc/asciidoc/autoload.zsh.adoc new file mode 100644 index 0000000..41c5c04 --- /dev/null +++ b/code/zsdoc/asciidoc/autoload.zsh.adoc @@ -0,0 +1,1517 @@ +autoload.zsh(1) +=============== +:compat-mode!: + +NAME +---- +autoload.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-analytics-menu + .zi-any-to-uspl2 + .zi-at-eval + .zi-build-module + .zi-cd + .zi-cdisable + .zi-cenable + .zi-changes + .zi-check-comp-consistency + .zi-check-which-completions-are-enabled + .zi-check-which-completions-are-installed + .zi-clear-completions + .zi-clear-report-for + .zi-compiled + .zi-compile-uncompile-all + .zi-confirm + .zi-control-menu + .zi-create + .zi-delete + .zi-diff-env-compute + .zi-diff-functions-compute + .zi-diff-options-compute + .zi-diff-parameter-compute + .zi-edit + .zi-exists-message + .zi-find-completions-of-plugin + .zi-format-env + .zi-format-functions + .zi-format-options + .zi-format-parameter + .zi-get-completion-owner + .zi-get-completion-owner-uspl2col + .zi-get-path + .zi-glance + .zi-help + .zi-list-bindkeys + .zi-list-compdef-replay + .zi-ls + .zi-module + .zi-pager + .zi-prepare-readlink + .zi-recall + .zi-recently + .zi-restore-extendedglob + .zi-run-delete-hooks + .zi-save-set-extendedglob + .zi-search-completions + .zi-self-update + .zi-show-all-reports + .zi-show-completions + .zi-show-debug-report + .zi-show-registered-plugins + .zi-show-report + .zi-show-times + .zi-show-zstatus + .zi-stress + .zi-uncompile-plugin + .zi-uninstall-completions + .zi-unload + .zi-unregister-plugin + .zi-update-all-parallel + .zi-update-or-status + .zi-update-or-status-all + .zi-update-or-status-snippet + .zi-wait-for-update-jobs + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-analytics-menu +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-analytics-menu [[[ + Shows ❮ ZI ❯ analytics. + + User-action entry point. +____ + +Has 23 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-any-to-uspl2 +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-uspl2 [[[ + Converts given plugin-spec to format that's used in keys for hash tables. + So basically, creates string "user/plugin" (this format is called: uspl2). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 2 line(s). Calls functions: + + .zi-any-to-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-clear-report-for + .zi-exists-message + +.zi-at-eval +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-build-module +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-build-module [[[ + Performs ./configure && make on the module and displays information how to load the module in .zshrc. +____ + +Has 41 line(s). Calls functions: + + .zi-build-module + `-- zi.zsh/+zi-message + +Called by: + + .zi-module + +.zi-cd +~~~~~~ + +____ + + FUNCTION: .zi-cd [[[ + Jumps to plugin's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 15 line(s). Calls functions: + + .zi-cd + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-cdisable +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cdisable [[[ + Enables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 27 line(s). Calls functions: + + .zi-cdisable + +Called by: + + zi.zsh/zi + +.zi-cenable +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cenable [[[ + Disables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 26 line(s). Calls functions: + + .zi-cenable + +Called by: + + zi.zsh/zi + +.zi-changes +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-changes [[[ + Shows `git log` of given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-changes + |-- side.zsh/.zi-exists-physically-message + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-check-comp-consistency +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-comp-consistency [[[ + ❮ ZI ❯ creates symlink for each installed completion. + This function checks whether given completion (i.e. + file like "_mkdir") is indeed a symlink. Backup file + is a completion that is disabled - has the leading "_" removed. + + $1 - path to completion within plugin's directory + $2 - path to backup file within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-check-which-completions-are-enabled +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-enabled [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is disabled - returns 0 or 1 on corresponding positions in reply. + + Uninstalled completions will be reported as "0" - i.e. disabled + + $1, ... - path to completion within plugin's directory +____ + +Has 10 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-check-which-completions-are-installed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-installed [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is installed - returns 0 or 1 on corresponding positions in reply. + + $1, ... - path to completion within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-clear-completions +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-completions [[[ + Delete stray and improper completions. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 35 line(s). Calls functions: + + .zi-clear-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + zi.zsh/.zi-prepare-home + +.zi-clear-report-for +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-report-for [[[ + Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 23 line(s). Calls functions: + + .zi-clear-report-for + +Called by: + + .zi-unload + +.zi-compiled +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. + + User-action entry point. +____ + +Has 23 line(s). Calls functions: + + .zi-compiled + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-confirm +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-confirm [[[ + Prints given question, waits for "y" key, evals given expression if "y" obtained + + $1 - question + $2 - expression +____ + +Has 22 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _read_ + +Called by: + + .zi-delete + +.zi-control-menu +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-control-menu [[[ + Shows control options. + + User-action entry point. +____ + +Has 22 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-create +~~~~~~~~~~ + +____ + + FUNCTION: .zi-create [[[ + Creates a plugin, also on Github (if not "_local/name" plugin). + + User-action entry point. + + $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 103 line(s). Calls functions: + + .zi-create + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _autoload_, _setopt_, _vared_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-delete +~~~~~~~~~~ + +____ + + FUNCTION: .zi-delete [[[ + Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 93 line(s). Calls functions: + + .zi-delete + |-- side.zsh/.zi-compute-ice + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-parse-opts + `-- zi.zsh/+zi-prehelp-usage-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-diff-env-compute +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env-compute [[[ + Computes ZI_PATH, ZI_FPATH that hold (f)path components + added by plugin. Uses data gathered earlier by .zi-diff-env(). + + $1 - user/plugin +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-functions-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions-compute [[[ + Computes FUNCTIONS that holds new functions added by plugin. + Uses data gathered earlier by .zi-diff-functions(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-options-compute +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options-compute [[[ + Computes OPTIONS that holds options changed by plugin. + Uses data gathered earlier by .zi-diff-options(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-parameter-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter-compute [[[ + Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold + parameters created or changed (their type) by plugin. Uses + data gathered earlier by .zi-diff-parameter(). + + $1 - user/plugin +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-edit +~~~~~~~~ + +____ + + FUNCTION: .zi-edit [[[ + Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-edit + `-- side.zsh/.zi-compute-ice + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-exists-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-message [[[ + Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 7 line(s). Calls functions: + + .zi-exists-message + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-show-report + .zi-unload + +.zi-find-completions-of-plugin +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-completions-of-plugin [[[ + Searches for completions owned by given plugin. + Returns them in `reply' array. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 5 line(s). Calls functions: + + .zi-find-completions-of-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-format-env +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-env [[[ + Creates one-column text about FPATH or PATH elements added when given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) + $2 - if 1, then examine PATH, if 2, then examine FPATH +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-functions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-functions [[[ + Creates a one or two columns text with functions created by given plugin. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 34 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-options +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-options [[[ + Creates one-column text about options that changed when plugin "$1" was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 19 line(s). Calls functions: + + .zi-format-options + +Called by: + + .zi-show-report + +.zi-format-parameter +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-parameter [[[ + Creates one column text that lists global parameters that changed when the given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-get-completion-owner +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner [[[ + Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. + + Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. + + :A will read the link "twice" and give the final repository + directory, possibly without username in the uspl format; readlink will read the link "once" + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-clear-completions + .zi-get-completion-owner-uspl2col + .zi-show-completions + +.zi-get-completion-owner-uspl2col +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner-uspl2col [[[ + For shortening of code - returns colorized plugin name + that owns given completion. + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 2 line(s). Calls functions: + + .zi-get-completion-owner-uspl2col + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-get-path +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-path [[[ + Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path + ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. +____ + +Has 5 line(s). Calls functions: + + .zi-get-path + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-cd + .zi-uninstall-completions + +.zi-glance +~~~~~~~~~~ + +____ + + FUNCTION: .zi-glance [[[ + Shows colorized source code of plugin. Is able to use pygmentize, + highlight, GNU source-highlight. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 37 line(s). Calls functions: + + .zi-glance + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-help +~~~~~~~~ + +____ + + FUNCTION: .zi-help [[[ + Shows usage information. + + User-action entry point. +____ + +Has 31 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-list-bindkeys +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-bindkeys [[[ +____ + +Has 39 line(s). Calls functions: + + .zi-list-bindkeys + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + zi.zsh/zi + +.zi-list-compdef-replay +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-compdef-replay [[[ + Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping + for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. + + User-action entry point. +____ + +Has 5 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-ls +~~~~~~ + +____ + + FUNCTION: .zi-ls [[[ +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-module +~~~~~~~~~~ + +____ + + FUNCTION: .zi-module [[[ + Function that has sub-commands passed as long-options (with two dashes, --). + It's an attempt to plugin only this one function into `zi' function + defined in zi.zsh, to not make this file longer than it's needed. +____ + +Has 24 line(s). Calls functions: + + .zi-module + +Called by: + + .zi-build-module + zi.zsh/Script-Body + zi.zsh/zi + +.zi-pager +~~~~~~~~~ + +____ + + FUNCTION: .zi-pager [[[ + BusyBox less lacks the -X and -i options, so it can use more +____ + +Has 14 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-glance + .zi-self-update + .zi-update-or-status + +.zi-prepare-readlink +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-readlink [[[ + Prepares readlink command, used for establishing completion's owner. + + $REPLY = ":" or "readlink" +____ + +Has 4 line(s). Doesn't call other functions. + +Uses feature(s): _type_ + +Called by: + + .zi-cdisable + .zi-cenable + .zi-clear-completions + .zi-show-completions + +.zi-recall +~~~~~~~~~~ + +____ + + FUNCTION: .zi-recall [[[ +____ + +Has 33 line(s). Calls functions: + + .zi-recall + |-- side.zsh/.zi-compute-ice + `-- zi.zsh/+zi-deploy-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-recently +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-recently [[[ + Shows plugins that obtained commits in specified past time. + + User-action entry point. + + $1 - time spec, e.g. "1 week" +____ + +Has 23 line(s). Calls functions: + + .zi-recently + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-restore-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-restore-extendedglob [[[ + Restores extendedglob-option from state saved earlier. +____ + +Has 1 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-run-delete-hooks +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-delete-hooks [[[ +____ + +Has 17 line(s). Calls functions: + + .zi-run-delete-hooks + `-- side.zsh/.zi-countdown + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-save-set-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-save-set-extendedglob [[[ + Enables extendedglob-option first saving if it was already + enabled, for restoration of this state later. +____ + +Has 2 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-search-completions +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-search-completions [[[ + While .zi-show-completions() shows what completions are + installed, this functions searches through all plugin dirs + showing what's available in general (for installation). + + User-action entry point. +____ + +Has 39 line(s). Calls functions: + + .zi-search-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-self-update +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-self-update [[[ + Updates ❮ ZI ❯ code (does a git pull). + + User-action entry point. +____ + +Has 43 line(s). Calls functions: + + .zi-self-update + |-- zi.zsh/.zi-get-mtime-into + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_, _zcompile_ + +Called by: + + .zi-update-or-status-all + zi.zsh/zi + +.zi-show-all-reports +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-all-reports [[[ + Displays reports of all loaded plugins. + + User-action entry point. +____ + +Has 5 line(s). Calls functions: + + .zi-show-all-reports + +Called by: + + zi.zsh/zi + +.zi-show-completions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-completions [[[ + Display installed (enabled and disabled), completions. Detect + stray and improper ones. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 61 line(s). Calls functions: + + .zi-show-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-debug-report +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-debug-report [[[ + Displays dtrace report (data recorded in interactive session). + + User-action entry point. +____ + +Has 1 line(s). Calls functions: + + .zi-show-debug-report + +Called by: + + zi.zsh/zi + +.zi-show-registered-plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-registered-plugins [[[ + Lists loaded plugins (subcommands list, loaded). + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-show-registered-plugins + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-report +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-report [[[ + Displays report of the plugin given. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 66 line(s). Calls functions: + + .zi-show-report + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-all-reports + .zi-show-debug-report + zi.zsh/zi + +.zi-show-times +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-times [[[ + Shows loading times of all loaded plugins. + + User-action entry point. +____ + +Has 51 line(s). Calls functions: + + .zi-show-times + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-zstatus +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-zstatus [[[ + Shows ❮ ZI ❯ status, i.e. number of loaded plugins, + of available completions, etc. + + User-action entry point. +____ + +Has 47 line(s). Calls functions: + + .zi-show-zstatus + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-stress +~~~~~~~~~~ + +____ + + FUNCTION: .zi-stress [[[ + Compiles plugin with various options on and off to see how well the code is written. The options are: + + NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 31 line(s). Calls functions: + + .zi-stress + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_, _zcompile_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-uncompile-plugin +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uncompile-plugin [[[ + Uncompiles given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 20 line(s). Calls functions: + + .zi-uncompile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compile-uncompile-all + zi.zsh/zi + +.zi-uninstall-completions +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uninstall-completions [[[ + Removes all completions of given plugin from Zshell (i.e. from FPATH). + The FPATH is typically `~/.zi/completions/'. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 39 line(s). Calls functions: + + .zi-uninstall-completions + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-unload +~~~~~~~~~~ + +____ + + FUNCTION: .zi-unload [[[ + 0. Call the Zsh Plugin's Standard *_plugin_unload function + 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update + 1. Delete bindkeys (...) + 2. Delete Zstyles + 3. Restore options + 4. Remove aliases + 5. Restore Zle state + 6. Unfunction functions (created by plugin) + 7. Clean-up FPATH and PATH + 8. Delete created variables + 9. Forget the plugin + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 380 line(s). Calls functions: + + .zi-unload + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi.zsh/zi + zi.zsh/.zi-run-task + +.zi-unregister-plugin +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-unregister-plugin [[[ + Removes the plugin from ZI_REGISTERED_PLUGINS array and from the + zsh_loaded_plugins array (managed according to the plugin standard) +____ + +Has 5 line(s). Calls functions: + + .zi-unregister-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-unload + +.zi-update-all-parallel +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-in-parallel [[[ +____ + +Has 63 line(s). Calls functions: + + .zi-update-all-parallel + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-update-or-status-all + +.zi-update-or-status +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status [[[ + Updates (git pull) or does `git status' for given plugin. + + User-action entry point. + + $1 - "status" for status, other for update + $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $3 - plugin (only when $1 - i.e. user - given) +____ + +Has 263 line(s). Calls functions: + + .zi-update-or-status + |-- install.zsh/.zi-get-latest-gh-r-url-part + |-- install.zsh/.zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-exists-physically + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-store-ices + |-- side.zsh/.zi-two-paths + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-set-m-func + +Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + zi.zsh/zi + +.zi-update-or-status-all +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-all [[[ + Updates (git pull) or does `git status` for all existing plugins. + This includes also plugins that are not loaded into Zsh (but exist + on disk). Also updates (i.e. redownloads) snippets. + + User-action entry point. +____ + +Has 96 line(s). Calls functions: + + .zi-update-or-status-all + |-- install.zsh/.zi-compinit + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-get-mtime-into + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-update-or-status-snippet +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-snippet [[[ + + Implements update or status operation for snippet given by URL. + + $1 - "status" or "update" + $2 - snippet URL +____ + +Has 28 line(s). Calls functions: + + .zi-update-or-status-snippet + |-- install.zsh/.zi-update-snippet + `-- side.zsh/.zi-compute-ice + +Uses feature(s): _source_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + .zi-update-or-status + +.zi-wait-for-update-jobs +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-wait-for-update-jobs [[[ +____ + +Has 14 line(s). Calls functions: + + .zi-wait-for-update-jobs + `-- zi.zsh/+zi-message + +Uses feature(s): _wait_ + +Called by: + + .zi-update-all-parallel + diff --git a/code/zsdoc/asciidoc/install.zsh.adoc b/code/zsdoc/asciidoc/install.zsh.adoc new file mode 100644 index 0000000..8dad434 --- /dev/null +++ b/code/zsdoc/asciidoc/install.zsh.adoc @@ -0,0 +1,746 @@ +install.zsh(1) +============== +:compat-mode!: + +NAME +---- +install.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + ∞zi-atclone-hook + .zi-at-eval + ∞zi-atpull-e-hook + ∞zi-atpull-hook + .zi-compile-plugin + ∞zi-compile-plugin-hook + .zi-compinit + zicp + ∞zi-cp-hook + .zi-download-file-stdout + .zi-download-snippet + .zi-extract + ziextract + ∞zi-extract-hook + .zi-forget-completion + .zi-get-cygwin-package + .zi-get-latest-gh-r-url-part + .zi-get-package + .zi-get-url-mtime + .zi-install-completions + ∞zi-make-ee-hook + ∞zi-make-e-hook + ∞zi-make-hook + .zi-mirror-using-svn + zimv + ∞zi-mv-hook + .zi-parse-json + ∞zi-ps-on-update-hook + ∞zi-reset-hook + .zi-setup-plugin-dir + .zi-update-snippet + zpextract +AUTOLOAD compinit + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-at-eval +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Called by: + + ∞zi-atpull-e-hook + ∞zi-atpull-hook + +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-compile-plugin +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-plugin [[[ + Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 84 line(s). Calls functions: + + .zi-compile-plugin + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-first + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _zcompile_ + +Called by: + + ∞zi-compile-plugin-hook + autoload.zsh/.zi-compile-uncompile-all + zi.zsh/zi + +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-compinit +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compinit [[[ + User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. + After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. + + No arguments. +____ + +Has 26 line(s). Calls functions: + + .zi-compinit + |-- compinit + `-- zi.zsh/+zi-message + +Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ + +Called by: + + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-or-status-all + zi.zsh/zi + zi.zsh/.zi-prepare-home + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zimv + +_Environment variables used:_ zi.zsh -> ZPFX + +∞zi-cp-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-cp-hook [[[ +____ + +Has 24 line(s). Calls functions: + + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-download-file-stdout +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-file-stdout [[[ + Downloads file to stdout. Supports following backend commands: + curl, wget, lftp, lynx. Used by snippet loading. +____ + +Has 46 line(s). Calls functions: + + .zi-download-file-stdout + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + .zi-get-cygwin-package + .zi-get-package + .zi-setup-plugin-dir + +.zi-download-snippet +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-snippet [[[ + Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, + with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows + to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. +____ + +Has 309 line(s). Calls functions: + + .zi-download-snippet + |-- side.zsh/.zi-store-ices + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _zcompile_ + +Called by: + + .zi-update-snippet + zi.zsh/.zi-load-snippet + +.zi-extract +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-extract() [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-extract + |-- ziextract + |   `-- zi.zsh/+zi-message + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + ∞zi-extract-hook + +ziextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file +____ + +Has 274 line(s). Calls functions: + + ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +∞zi-extract-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-forget-completion +~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-forget-completion [[[ + Implements alternation of Zsh state so that already initialized + completion stops being visible to Zsh. + + $1 - completion function name, e.g. "_cp"; can also be "cp" +____ + +Has 20 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-compinit + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + zi.zsh/zi + +.zi-get-cygwin-package +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-cygwin-package [[[ +____ + +Has 70 line(s). Calls functions: + + .zi-get-cygwin-package + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + +.zi-get-latest-gh-r-url-part +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-latest-gh-r-url-part [[[ + Gets version string of latest release of given Github package. + Connects to Github releases page. +____ + +Has 101 line(s). Calls functions: + + .zi-get-latest-gh-r-url-part + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + autoload.zsh/.zi-update-or-status + +.zi-get-package +~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-package [[[ +____ + +Has 194 line(s). Calls functions: + + .zi-get-package + |-- ziextract + |   `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_, _trap_ + +Called by: + + zi.zsh/.zi-load + +_Environment variables used:_ zi.zsh -> ZPFX + +.zi-get-url-mtime +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-url-mtime [[[ + For the given URL returns the date in the Last-Modified header as a time stamp +____ + +Has 34 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + +.zi-install-completions +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-install-completions [[[ + Installs all completions of given plugin. After that they are + visible to `compinit'. Visible completions can be selectively + disabled and enabled. User can access completion data with + `clist' or `completions' subcommand. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $3 - if 1, then reinstall, otherwise only install completions that aren't there +____ + +Has 61 line(s). Calls functions: + + .zi-install-completions + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + .zi-setup-plugin-dir + zi.zsh/zi + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-mirror-using-svn +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-mirror-using-svn [[[ + Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', + in normal mode invokes `svn checkout --non-interactive -q '. In test mode only + compares remote and local revision and outputs true if update is needed. + + $1 - URL + $2 - mode, "" - normal, "-u" - update, "-t" - test + $3 - subdirectory (not path) with working copy, needed for -t and -u +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-parse-json +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. +____ + +Has 102 line(s). Calls functions: + + .zi-parse-json + +Uses feature(s): _setopt_ + +Called by: + + .zi-get-package + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: ∞zi-reset-opt-hook [[[ +____ + +Has 79 line(s). Calls functions: + + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin +____ + +Has 189 line(s). Calls functions: + + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- ziextract + |   `-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_ + +Called by: + + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-update-snippet [[[ +____ + +Has 72 line(s). Calls functions: + + .zi-update-snippet + |-- zi.zsh/.zi-get-object-path + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zpextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zpextract [[[ +____ + +Has 1 line(s). Calls functions: + + zpextract + `-- ziextract + `-- zi.zsh/+zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + .zi-compinit + diff --git a/code/zsdoc/asciidoc/side.zsh.adoc b/code/zsdoc/asciidoc/side.zsh.adoc new file mode 100644 index 0000000..b80bdb7 --- /dev/null +++ b/code/zsdoc/asciidoc/side.zsh.adoc @@ -0,0 +1,300 @@ +side.zsh(1) +=========== +:compat-mode!: + +NAME +---- +side.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-any-colorify-as-uspl2 + .zi-compute-ice + .zi-countdown + .zi-exists-physically + .zi-exists-physically-message + .zi-first + .zi-store-ices + .zi-two-paths +AUTOLOAD zmv + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-any-colorify-as-uspl2 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-colorify-as-uspl2 [[[ + Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $REPLY = ANSI-colorified "user/plugin" string +____ + +Has 22 line(s). Calls functions: + + .zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-clear-completions + autoload.zsh/.zi-compiled + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-create + autoload.zsh/.zi-exists-message + autoload.zsh/.zi-get-completion-owner-uspl2col + autoload.zsh/.zi-list-bindkeys + autoload.zsh/.zi-recently + autoload.zsh/.zi-search-completions + autoload.zsh/.zi-show-completions + autoload.zsh/.zi-show-registered-plugins + autoload.zsh/.zi-show-times + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + zi.zsh/.zi-formatter-pid + +.zi-compute-ice +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compute-ice [[[ + Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, + taking priorities into account. Also returns path to snippet directory and optional name of snippet file + (only valid if ICE[svn] is not set). + + Can also pack resulting ices into ZI_SICE (see $2). + + $1 - URL (also plugin-spec) + $2 - "pack" or "nopack" or "pack-nf" - packing means ICE + wins with static ice; "pack-nf" means that disk-ices will + be ignored (no-file?) + $3 - name of output associative array, "ICE" is the default + $4 - name of output string parameter, to hold path to directory ("local_dir") + $5 - name of output string parameter, to hold filename ("filename") + $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") +____ + +Has 116 line(s). Calls functions: + + .zi-compute-ice + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-pack-ice + `-- zmv + +Uses feature(s): _autoload_, _setopt_, _zmv_ + +Called by: + + autoload.zsh/.zi-delete + autoload.zsh/.zi-edit + autoload.zsh/.zi-recall + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-update-or-status-snippet + install.zsh/.zi-compile-plugin + +.zi-countdown +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-countdown [[[ + Displays a countdown 5...4... etc. and returns 0 if it + sucessfully reaches 0, or 1 if Ctrl-C will be pressed. +____ + +Has 14 line(s). Calls functions: + + .zi-countdown + `-- zi.zsh/+zi-message + +Uses feature(s): _trap_ + +Called by: + + autoload.zsh/.zi-run-delete-hooks + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-atpull-e-hook + install.zsh/∞zi-atpull-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-hook + +.zi-exists-physically +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically [[[ + Checks if directory of given plugin exists in PLUGIN_DIR. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-create + autoload.zsh/.zi-update-or-status + +.zi-exists-physically-message +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically-message [[[ + Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 22 line(s). Calls functions: + + .zi-exists-physically-message + |-- zi.zsh/.zi-any-to-pid + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-changes + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + +.zi-first +~~~~~~~~~ + +____ + + FUNCTION: .zi-first [[[ + Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct + ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching + is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-first + |-- zi.zsh/.zi-any-to-pid + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-find-other-matches + `-- zi.zsh/.zi-get-object-path + +Called by: + + .zi-two-paths + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + install.zsh/.zi-compile-plugin + +.zi-store-ices +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-store-ices [[[ + Saves ice mods in given hash onto disk. + + $1 - directory where to create / delete files + $2 - name of hash that holds values + $3 - additional keys of hash to store, space separated + $4 - additional keys of hash to store, empty-meaningful ices, space separated + $5 - the URL, if applicable + $6 - the mode (1 - svn, 0 - single file), if applicable +____ + +Has 28 line(s). Doesn't call other functions. + +Called by: + + autoload.zsh/.zi-update-or-status + install.zsh/.zi-download-snippet + install.zsh/.zi-setup-plugin-dir + +.zi-two-paths +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-two-paths [[[ + Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), + returns 2 possible paths for further examination +____ + +Has 22 line(s). Calls functions: + + .zi-two-paths + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-update-or-status + +zmv +~~~ + +____ + + function zmv { + zmv, zcp, zln: + + This is a multiple move based on zsh pattern matching. To get the full + power of it, you need a postgraduate degree in zsh. However, simple + tasks work OK, so if that's all you need, here are some basic examples: + zmv '(*).txt' '$1.lis' + Rename foo.txt to foo.lis, etc. The parenthesis is the thing that + gets replaced by the $1 (not the `*', as happens in mmv, and note the + `$', not `=', so that you need to quote both words). +____ + +Has 299 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _getopts_, _read_, _setopt_ + +Called by: + + .zi-compute-ice + diff --git a/code/zsdoc/asciidoc/zi.zsh.adoc b/code/zsdoc/asciidoc/zi.zsh.adoc new file mode 100644 index 0000000..c9bd488 --- /dev/null +++ b/code/zsdoc/asciidoc/zi.zsh.adoc @@ -0,0 +1,1566 @@ +zi.zsh(1) +========= +:compat-mode!: + +NAME +---- +zi.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + @autoload + pmodload + zi + .zi-add-fpath + .zi-add-report + .zi-any-to-pid + .zi-any-to-user-plugin + zicdclear + zicdreplay + zicompdef + .zi-compdef-clear + .zi-compdef-replay + zicompinit + +zi-deploy-message + .zi-diff + .zi-diff-env + .zi-diff-functions + .zi-diff-options + .zi-diff-parameter + .zi-find-other-matches + .zi-formatter-bar + .zi-formatter-bar-util + .zi-formatter-pid + .zi-formatter-th-bar + .zi-formatter-url + .zi-get-mtime-into + .zi-get-object-path + .zi-ice + .zi-load + .zi-load-ices + .zi-load-object + .zi-load-plugin + .zi-load-snippet + .zi-main-message-formatter + +zi-message + .zi-pack-ice + .zi-parse-opts + +zi-prehelp-usage-message + .zi-prepare-home + @zi-register-annex + @zi-register-hook + .zi-register-plugin + :zi-reload-and-run + .zi-run + .zi-run-task + -zi_scheduler_add_sh + .zi-set-m-func + .zi-setup-params + .zi-submit-turbo + @zi-substitute + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + .zi-tmp-subst-off + .zi-tmp-subst-on + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + zi-turbo + .zi-util-shands-path + zpcdclear + zpcdreplay + zpcompdef + zpcompinit + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update +AUTOLOAD add-zsh-hook +AUTOLOAD compinit +AUTOLOAD is-at-least +PRECMD-HOOK @zi-scheduler + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 202 line(s). Calls functions: + + Script-Body + |-- add-zsh-hook + |-- autoload.zsh/.zi-module + |-- is-at-least + |-- +zi-message + `-- @zi-register-hook + +Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ + +_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR + +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- is-at-least + `-- +zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + |-- install.zsh/.zi-install-completions + |-- +zi-message + `-- +zi-prehelp-usage-message + `-- +zi-message + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + +.zi-add-fpath +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-fpath. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-add-fpath + +Called by: + + zi + +.zi-add-report +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-report. [[[ + Adds a report line for given plugin. + + $1 - uspl2, i.e. user/plugin + $2, ... - the text +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + +.zi-any-to-pid +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-pid. [[[ +____ + +Has 21 line(s). Calls functions: + + .zi-any-to-pid + +Uses feature(s): _setopt_ + +Called by: + + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-exists-physically-message + side.zsh/.zi-first + +.zi-any-to-user-plugin +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-user-plugin. [[[ + Allows elastic plugin-spec across the code. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + + Returns user and plugin in $reply. + +____ + +Has 25 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-add-fpath + .zi-get-object-path + .zi-load + .zi-run + :zi-tmp-subst-autoload + autoload.zsh/.zi-any-to-uspl2 + autoload.zsh/.zi-changes + autoload.zsh/.zi-compiled + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-create + autoload.zsh/.zi-delete + autoload.zsh/.zi-find-completions-of-plugin + autoload.zsh/.zi-glance + autoload.zsh/.zi-show-report + autoload.zsh/.zi-stress + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-unregister-plugin + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-compute-ice + side.zsh/.zi-exists-physically-message + side.zsh/.zi-exists-physically + side.zsh/.zi-first + +_Environment variables used:_ ZPFX + +zicdclear +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. +____ + +Has 1 line(s). Calls functions: + + zicdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdreplay +~~~~~~~~~~ + +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-compdef-clear +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-clear. [[[ + Implements user-exposed functionality to clear gathered compdefs. +____ + +Has 3 line(s). Calls functions: + + .zi-compdef-clear + `-- +zi-message + +Called by: + + zicdclear + zi + zpcdclear + +.zi-compdef-replay +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-replay. [[[ + Runs gathered compdef calls. This allows to run `compinit' after loading plugins. +____ + +Has 16 line(s). Calls functions: + + .zi-compdef-replay + `-- +zi-message + +Uses feature(s): _compdef_ + +Called by: + + zicdreplay + zi + zpcdreplay + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked +____ + +Has 13 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _zle_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + +.zi-diff +~~~~~~~~ + +____ + + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types +____ + +Has 4 line(s). Calls functions: + + .zi-diff + +Called by: + + .zi-load-plugin + +.zi-diff-env +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env. [[[ + Implements detection of change in PATH and FPATH. + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + .zi-load-plugin + +.zi-diff-functions +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions. [[[ + Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-options +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options. [[[ + Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-parameter +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter. [[[ + Implements detection of change in any parameter's existence and type. + Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-find-other-matches +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-other-matches. [[[ + Plugin's main source file is in general `name.plugin.zsh'. However, + there can be different conventions, if that file is not found, then + this functions examines other conventions in the most sane order. +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + side.zsh/.zi-first + +.zi-formatter-bar +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-bar-util +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar-util. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-formatter-bar + .zi-formatter-th-bar + +.zi-formatter-pid +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-pid. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-formatter-pid + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _source_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-th-bar +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-th-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-th-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-url +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-url. [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-get-mtime-into +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-mtime-into. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + Script-Body + autoload.zsh/.zi-self-update + autoload.zsh/.zi-update-or-status-all + +.zi-get-object-path +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-object-path. [[[ +____ + +Has 23 line(s). Calls functions: + + .zi-get-object-path + +Called by: + + .zi-load-ices + .zi-load-snippet + .zi-run + zi + autoload.zsh/.zi-get-path + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-first + side.zsh/.zi-two-paths + +.zi-ice +~~~~~~~ + +____ + + FUNCTION: .zi-ice. [[[ + Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for + next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. +____ + +Has 12 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load +~~~~~~~~ + +____ + + FUNCTION: .zi-load. [[[ + Implements the exposed-to-user action of loading a plugin. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin name, if the third format is used +____ + +Has 76 line(s). Calls functions: + + .zi-load + |-- install.zsh/.zi-get-package + |-- install.zsh/.zi-setup-plugin-dir + `-- +zi-deploy-message + +Uses feature(s): _eval_, _setopt_, _source_, _zle_ + +Called by: + + .zi-load-object + .zi-run-task + +.zi-load-ices +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-ices. [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-load-ices + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load-object +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-object. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-load-object + +Called by: + + zi + +.zi-load-plugin +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-plugin. [[[ + Lower-level function for loading a plugin. + + $1 - user + $2 - plugin + $3 - mode (light or load) +____ + +Has 107 line(s). Calls functions: + + .zi-load-plugin + `-- :zi-tmp-subst-autoload + |-- is-at-least + `-- +zi-message + +Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ + +Called by: + + .zi-load + +.zi-load-snippet +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-snippet. [[[ + Implements the exposed-to-user action of loading a snippet. + + $1 - url (can be local, absolute path). +____ + +Has 173 line(s). Calls functions: + + .zi-load-snippet + |-- install.zsh/.zi-download-snippet + |-- +zi-deploy-message + `-- +zi-message + +Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ + +Called by: + + pmodload + .zi-load-object + .zi-load + .zi-run-task + +.zi-main-message-formatter +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message-formatter [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + ++zi-message +~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message. [[[ +____ + +Has 14 line(s). Doesn't call other functions. + +Called by: + + Script-Body + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + +zi-prehelp-usage-message + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + zi + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/ziextract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message + +.zi-pack-ice +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-pack-ice. [[[ + Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for + second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin + or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + install.zsh/.zi-update-snippet + side.zsh/.zi-compute-ice + +.zi-parse-opts +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: +zi-parse-opts. [[[ +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + zi + autoload.zsh/.zi-delete + ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-prehelp-usage-message. [[[ +____ + +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: + + zi + autoload.zsh/.zi-delete + +.zi-prepare-home +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-home. [[[ + Creates all directories needed by ZI, first checks if they already exist. +____ + +Has 38 line(s). Calls functions: + + .zi-prepare-home + |-- autoload.zsh/.zi-clear-completions + `-- install.zsh/.zi-compinit + +Uses feature(s): _source_ + +Called by: + + Script-Body + +_Environment variables used:_ ZPFX + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +.zi-register-plugin +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-register-plugin. [[[ + Adds the plugin to ZI_REGISTERED_PLUGINS array and to the + zsh_loaded_plugins array (managed according to the plugin standard: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). +____ + +Has 20 line(s). Calls functions: + + .zi-register-plugin + `-- +zi-message + +Called by: + + .zi-load + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-run +~~~~~~~ + +____ + + FUNCTION: .zi-run. [[[ + Run code inside plugin's folder + It uses the `correct' parameter from upper's scope zi(). +____ + +Has 24 line(s). Calls functions: + + .zi-run + `-- +zi-message + +Uses feature(s): _eval_, _setopt_ + +Called by: + + zi + +.zi-run-task +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-task. [[[ + A backend, worker function of .zi-scheduler. It obtains the tasks + index and a few of its properties (like the type: plugin, snippet, + service plugin, service snippet) and executes it first checking for + additional conditions (like non-numeric wait'' ice). + + $1 - the pass number, either 1st or 2nd pass + $2 - the time assigned to the task + $3 - type: plugin, snippet, service plugin, service snippet + $4 - task's index in the ZI[WAIT_ICE_...] fields + $5 - mode: load or light + $6 - the plugin-spec or snippet URL or alias name (from id-as'') +____ + +Has 45 line(s). Calls functions: + + .zi-run-task + `-- autoload.zsh/.zi-unload + +Uses feature(s): _eval_, _source_, _zle_, _zpty_ + +Called by: + + @zi-scheduler + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. + +____ + +Has 74 line(s). *Is a precmd hook*. Calls functions: + + @zi-scheduler + `-- add-zsh-hook + +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ + +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-set-m-func +~~~~~~~~~~~~~~ + +____ + + FUNCTION:.zi-set-m-func() [[[ + Sets and withdraws the temporary, atclone/atpull time function `m`. +____ + +Has 17 line(s). Calls functions: + + .zi-set-m-func + `-- +zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-update-or-status + +.zi-setup-params +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-params. [[[ +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + +.zi-submit-turbo +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-submit-turbo. [[[ + If `zi load`, `zi light` or `zi snippet` will be + preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' + ice-mods then the plugin or snipped is to be loaded in turbo-mode, + and this function adds it to internal data structures, so that + @zi-scheduler can run (load, unload) this as a task. +____ + +Has 16 line(s). Doesn't call other functions. + +Called by: + + zi + +@zi-substitute +~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/∞zi-atclone-hook + install.zsh/.zi-at-eval + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/.zi-get-package + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-autoload +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-autoload. [[[ + Function defined to hijack plugin's calls to the `autoload' builtin. + + The hijacking is not only to gather report data, but also to. + run custom `autoload' function, that doesn't need FPATH. +____ + +Has 106 line(s). Calls functions: + + :zi-tmp-subst-autoload + |-- is-at-least + `-- +zi-message + +Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ + +Called by: + + @autoload + .zi-load-plugin + +:zi-tmp-subst-bindkey +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-bindkey. [[[ + Function defined to hijack plugin's calls to the `bindkey' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 107 line(s). Calls functions: + + :zi-tmp-subst-bindkey + `-- is-at-least + +Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-compdef +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-compdef. [[[ + Function defined to hijack plugin's calls to the `compdef' function. + The hijacking is not only for reporting, but also to save compdef + calls so that `compinit' can be called after loading plugins. +____ + +Has 5 line(s). Calls functions: + + :zi-tmp-subst-compdef + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). +____ + +Has 17 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-load-plugin + +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _source_ + +Called by: + + .zi-load-plugin + +:zi-tmp-subst-zle +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 33 line(s). Calls functions: + + :zi-tmp-subst-zle + +Uses feature(s): _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 19 line(s). Calls functions: + + :zi-tmp-subst-zstyle + +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi-turbo +~~~~~~~~ + +____ + + FUNCTION: zi-turbo. [[[ + With zi-turbo first argument is a wait time and suffix, i.e. "0a". + Anything that doesn't match will be passed as if it were an ice mod. + Default ices depth'3' and lucid, allowed values [0-9][a-d]. +____ + +Has 1 line(s). Calls functions: + + zi-turbo + `-- zi + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + |-- install.zsh/.zi-install-completions + |-- +zi-message + `-- +zi-prehelp-usage-message + `-- +zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +zpcdclear +~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdreplay +~~~~~~~~~~ + +____ + + ]]] + Compatibility functions. [[[ + zinit() { zi "$@"; } +____ + +Has 1 line(s). Calls functions: + + zpcdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompdef +~~~~~~~~~ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompinit +~~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-unload + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +add-zsh-hook +~~~~~~~~~~~~ + +____ + + Add to HOOK the given FUNCTION. + HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, + zshexit, zsh_directory_name (the _functions subscript is not required). + + With -d, remove the function from the hook instead; delete the hook + variable if it is empty. + + -D behaves like -d, but pattern characters are active in the + function name, so any matching function will be deleted from the hook. + +____ + +Has 93 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _getopts_ + +Called by: + + Script-Body + @zi-scheduler + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi + zicompinit + zpcompinit + +is-at-least +~~~~~~~~~~~ + +____ + + + Test whether $ZSH_VERSION (or some value of your choice, if a second argument + is provided) is greater than or equal to x.y.z-r (in argument one). In fact, + it'll accept any dot/dash-separated string of numbers as its second argument + and compare it to the dot/dash-separated first argument. Leading non-number + parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered + when the comparison is done; only the numbers matter. Any left-out segments + in the first argument that are present in the version string compared are + considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. + +____ + +Has 56 line(s). Doesn't call other functions. + +Called by: + + Script-Body + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + diff --git a/code/zsdoc/data/autoload/install.zsh/compinit b/code/zsdoc/data/autoload/install.zsh/compinit new file mode 100644 index 0000000..f0f8421 --- /dev/null +++ b/code/zsdoc/data/autoload/install.zsh/compinit @@ -0,0 +1,549 @@ +# Initialisation for new style completion. This mainly contains some helper +# functions and setup. Everything else is split into different files that +# will automatically be made autoloaded (see the end of this file). The +# names of the files that will be considered for autoloading are those that +# begin with an underscores (like `_condition). +# +# The first line of each of these files is read and must indicate what +# should be done with its contents: +# +# `#compdef ' +# If the first line looks like this, the file is autoloaded as a +# function and that function will be called to generate the matches +# when completing for one of the commands whose are given. +# The names may also be interspersed with `-T ' options +# specifying for which set of functions this should be added. +# +# `#compdef -[pP] ' +# This defines a function that should be called to generate matches +# for commands whose name matches . Note that only one pattern +# may be given. +# +# `#compdef -k + + +

+
+
+

NAME

+
+
+

autoload.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
.zi-analytics-menu
+.zi-any-to-uspl2
+.zi-at-eval
+.zi-build-module
+.zi-cd
+.zi-cdisable
+.zi-cenable
+.zi-changes
+.zi-check-comp-consistency
+.zi-check-which-completions-are-enabled
+.zi-check-which-completions-are-installed
+.zi-clear-completions
+.zi-clear-report-for
+.zi-compiled
+.zi-compile-uncompile-all
+.zi-confirm
+.zi-control-menu
+.zi-create
+.zi-delete
+.zi-diff-env-compute
+.zi-diff-functions-compute
+.zi-diff-options-compute
+.zi-diff-parameter-compute
+.zi-edit
+.zi-exists-message
+.zi-find-completions-of-plugin
+.zi-format-env
+.zi-format-functions
+.zi-format-options
+.zi-format-parameter
+.zi-get-completion-owner
+.zi-get-completion-owner-uspl2col
+.zi-get-path
+.zi-glance
+.zi-help
+.zi-list-bindkeys
+.zi-list-compdef-replay
+.zi-ls
+.zi-module
+.zi-pager
+.zi-prepare-readlink
+.zi-recall
+.zi-recently
+.zi-restore-extendedglob
+.zi-run-delete-hooks
+.zi-save-set-extendedglob
+.zi-search-completions
+.zi-self-update
+.zi-show-all-reports
+.zi-show-completions
+.zi-show-debug-report
+.zi-show-registered-plugins
+.zi-show-report
+.zi-show-times
+.zi-show-zstatus
+.zi-stress
+.zi-uncompile-plugin
+.zi-uninstall-completions
+.zi-unload
+.zi-unregister-plugin
+.zi-update-all-parallel
+.zi-update-or-status
+.zi-update-or-status-all
+.zi-update-or-status-snippet
+.zi-wait-for-update-jobs
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+

Uses feature(s): source

+
+
+
zi-analytics-menu
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-analytics-menu [[[
+Shows ❮ ZI ❯ analytics.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 23 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-any-to-uspl2
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-uspl2 [[[
+Converts given plugin-spec to format that's used in keys for hash tables.
+So basically, creates string "user/plugin" (this format is called: uspl2).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
.zi-any-to-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-clear-report-for
+.zi-exists-message
+
+
+
+
zi-at-eval
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-at-eval [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-at-eval
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-build-module
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-build-module [[[
+Performs ./configure && make on the module and displays information how to load the module in .zshrc.
+
+
+
+
+
+

Has 41 line(s). Calls functions:

+
+
+
+
.zi-build-module
+`-- zi.zsh/+zi-message
+
+
+
+

Called by:

+
+
+
+
.zi-module
+
+
+
+
zi-cd
+

~~

+
+
+
+
+
+
FUNCTION: .zi-cd [[[
+Jumps to plugin's directory (in ❮ ZI ❯ home directory).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 15 line(s). Calls functions:

+
+
+
+
.zi-cd
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-cdisable
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-cdisable [[[
+Enables given installed completion.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - e.g. "_mkdir" or "mkdir"
+
+
+
+
+
+

Has 27 line(s). Calls functions:

+
+
+
+
.zi-cdisable
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-cenable
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-cenable [[[
+Disables given installed completion.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - e.g. "_mkdir" or "mkdir"
+
+
+
+
+
+

Has 26 line(s). Calls functions:

+
+
+
+
.zi-cenable
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-changes
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-changes [[[
+Shows `git log` of given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 6 line(s). Calls functions:

+
+
+
+
.zi-changes
+|-- side.zsh/.zi-exists-physically-message
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-check-comp-consistency
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-comp-consistency [[[
+❮ ZI ❯ creates symlink for each installed completion.
+This function checks whether given completion (i.e.
+file like "_mkdir") is indeed a symlink. Backup file
+is a completion that is disabled - has the leading "_" removed.
+
+
+
+
+
$1 - path to completion within plugin's directory
+$2 - path to backup file within plugin's directory
+
+
+
+
+
+

Has 11 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+
+
+
+
zi-check-which-completions-are-enabled
+

~~~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-which-completions-are-enabled [[[
+For each argument that each should be a path to completion
+within a plugin's dir, it checks whether that completion
+is disabled - returns 0 or 1 on corresponding positions in reply.
+
+
+
+
+
Uninstalled completions will be reported as "0" - i.e. disabled
+
+
+
+
+
$1, ... - path to completion within plugin's directory
+
+
+
+
+
+

Has 10 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-check-which-completions-are-installed
+

~~~~~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-which-completions-are-installed [[[
+For each argument that each should be a path to completion
+within a plugin's dir, it checks whether that completion
+is installed - returns 0 or 1 on corresponding positions in reply.
+
+
+
+
+
$1, ... - path to completion within plugin's directory
+
+
+
+
+
+

Has 11 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-clear-completions
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-clear-completions [[[
+Delete stray and improper completions.
+
+
+
+
+
Completions live even when plugin isn't loaded - if they are
+installed and enabled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 35 line(s). Calls functions:

+
+
+
+
.zi-clear-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+zi.zsh/.zi-prepare-home
+
+
+
+
zi-clear-report-for
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-clear-report-for [[[
+Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-clear-report-for
+
+
+
+

Called by:

+
+
+
+
.zi-unload
+
+
+
+
zi-compiled
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-compiled [[[
+Displays list of plugins that are compiled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-compiled
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-compile-uncompile-all
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compile-uncompile-all [[[
+Compiles or uncompiles all existing (on disk) plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-compile-uncompile-all
+|-- install.zsh/.zi-compile-plugin
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-confirm
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-confirm [[[
+Prints given question, waits for "y" key, evals given expression if "y" obtained
+
+
+
+
+
$1 - question
+$2 - expression
+
+
+
+
+
+

Has 22 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): eval, read

+
+
+

Called by:

+
+
+
+
.zi-delete
+
+
+
+
zi-control-menu
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-control-menu [[[
+Shows control options.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 22 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-create
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-create [[[
+Creates a plugin, also on Github (if not "_local/name" plugin).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 103 line(s). Calls functions:

+
+
+
+
.zi-create
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-exists-physically
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): autoload, setopt, vared

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-delete
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-delete [[[
+Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 93 line(s). Calls functions:

+
+
+
+
.zi-delete
+|-- side.zsh/.zi-compute-ice
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-parse-opts
+`-- zi.zsh/+zi-prehelp-usage-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-diff-env-compute
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-env-compute [[[
+Computes ZI_PATH, ZI_FPATH that hold (f)path components
+added by plugin. Uses data gathered earlier by .zi-diff-env().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-functions-compute
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-functions-compute [[[
+Computes FUNCTIONS that holds new functions added by plugin.
+Uses data gathered earlier by .zi-diff-functions().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-options-compute
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-options-compute [[[
+Computes OPTIONS that holds options changed by plugin.
+Uses data gathered earlier by .zi-diff-options().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-parameter-compute
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-parameter-compute [[[
+Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
+parameters created or changed (their type) by plugin. Uses
+data gathered earlier by .zi-diff-parameter().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 27 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-edit
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-edit [[[
+Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-edit
+`-- side.zsh/.zi-compute-ice
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-exists-message
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-message [[[
+Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 7 line(s). Calls functions:

+
+
+
+
.zi-exists-message
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-find-completions-of-plugin
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-find-completions-of-plugin [[[
+Searches for completions owned by given plugin.
+Returns them in `reply' array.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-find-completions-of-plugin
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-env
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-env [[[
+Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+$2 - if 1, then examine PATH, if 2, then examine FPATH
+
+
+
+
+
+

Has 15 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-functions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-functions [[[
+Creates a one or two columns text with functions created by given plugin.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 34 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-options
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-options [[[
+Creates one-column text about options that changed when plugin "$1" was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-format-options
+
+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-parameter
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-parameter [[[
+Creates one column text that lists global parameters that changed when the given plugin was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 29 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-get-completion-owner
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-completion-owner [[[
+Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
+
+
+
+
+
Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
+
+
+
+
+
:A will read the link "twice" and give the final repository
+directory, possibly without username in the uspl format; readlink will read the link "once"
+
+
+
+
+
$1 - absolute path to completion file (in COMPLETIONS_DIR)
+$2 - readlink command (":" or "readlink")
+
+
+
+
+
+

Has 19 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-clear-completions
+.zi-get-completion-owner-uspl2col
+.zi-show-completions
+
+
+
+
zi-get-completion-owner-uspl2col
+

~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-completion-owner-uspl2col [[[
+For shortening of code - returns colorized plugin name
+that owns given completion.
+
+
+
+
+
$1 - absolute path to completion file (in COMPLETIONS_DIR)
+$2 - readlink command (":" or "readlink")
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
.zi-get-completion-owner-uspl2col
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+
+
+
+
zi-get-path
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-path [[[
+Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
+("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-get-path
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-cd
+.zi-uninstall-completions
+
+
+
+
zi-glance
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-glance [[[
+Shows colorized source code of plugin. Is able to use pygmentize,
+highlight, GNU source-highlight.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 37 line(s). Calls functions:

+
+
+
+
.zi-glance
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-first
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-help
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-help [[[
+Shows usage information.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 31 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-list-bindkeys
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-list-bindkeys [[[
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-list-bindkeys
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-list-compdef-replay
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-list-compdef-replay [[[
+Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
+for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 5 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-ls
+

~~

+
+
+
+
+
+
FUNCTION: .zi-ls [[[
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-module
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-module [[[
+Function that has sub-commands passed as long-options (with two dashes, --).
+It's an attempt to plugin only this one function into `zi' function
+defined in zi.zsh, to not make this file longer than it's needed.
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
.zi-module
+
+
+
+

Called by:

+
+
+
+
.zi-build-module
+zi.zsh/Script-Body
+zi.zsh/zi
+
+
+
+
zi-pager
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-pager [[[
+BusyBox less lacks the -X and -i options, so it can use more
+
+
+
+
+
+

Has 14 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-glance
+.zi-self-update
+.zi-update-or-status
+
+
+
+
zi-prepare-readlink
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-prepare-readlink [[[
+Prepares readlink command, used for establishing completion's owner.
+
+
+
+
+
$REPLY = ":" or "readlink"
+
+
+
+
+
+

Has 4 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): type

+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+.zi-clear-completions
+.zi-show-completions
+
+
+
+
zi-recall
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-recall [[[
+
+
+
+
+
+

Has 33 line(s). Calls functions:

+
+
+
+
.zi-recall
+|-- side.zsh/.zi-compute-ice
+`-- zi.zsh/+zi-deploy-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-recently
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-recently [[[
+Shows plugins that obtained commits in specified past time.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - time spec, e.g. "1 week"
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-recently
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-restore-extendedglob
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-restore-extendedglob [[[
+Restores extendedglob-option from state saved earlier.
+
+
+
+
+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-format-options
+.zi-unload
+
+
+
+
zi-run-delete-hooks
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-run-delete-hooks [[[
+
+
+
+
+
+

Has 17 line(s). Calls functions:

+
+
+
+
.zi-run-delete-hooks
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-save-set-extendedglob
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-save-set-extendedglob [[[
+Enables extendedglob-option first saving if it was already
+enabled, for restoration of this state later.
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-format-options
+.zi-unload
+
+
+
+
zi-search-completions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-search-completions [[[
+While .zi-show-completions() shows what completions are
+installed, this functions searches through all plugin dirs
+showing what's available in general (for installation).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-search-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-self-update
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-self-update [[[
+Updates ❮ ZI ❯ code (does a git pull).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 43 line(s). Calls functions:

+
+
+
+
.zi-self-update
+|-- zi.zsh/.zi-get-mtime-into
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, source, zcompile

+
+
+

Called by:

+
+
+
+
.zi-update-or-status-all
+zi.zsh/zi
+
+
+
+
zi-show-all-reports
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-all-reports [[[
+Displays reports of all loaded plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-show-all-reports
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-completions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-completions [[[
+Display installed (enabled and disabled), completions. Detect
+stray and improper ones.
+
+
+
+
+
Completions live even when plugin isn't loaded - if they are
+installed and enabled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 61 line(s). Calls functions:

+
+
+
+
.zi-show-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-debug-report
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-debug-report [[[
+Displays dtrace report (data recorded in interactive session).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-show-debug-report
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-registered-plugins
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-registered-plugins [[[
+Lists loaded plugins (subcommands list, loaded).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-show-registered-plugins
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-report
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-report [[[
+Displays report of the plugin given.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 66 line(s). Calls functions:

+
+
+
+
.zi-show-report
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-all-reports
+.zi-show-debug-report
+zi.zsh/zi
+
+
+
+
zi-show-times
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-times [[[
+Shows loading times of all loaded plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 51 line(s). Calls functions:

+
+
+
+
.zi-show-times
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-zstatus
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-zstatus [[[
+Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
+of available completions, etc.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 47 line(s). Calls functions:

+
+
+
+
.zi-show-zstatus
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-stress
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-stress [[[
+Compiles plugin with various options on and off to see how well the code is written. The options are:
+
+
+
+
+
NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 31 line(s). Calls functions:

+
+
+
+
.zi-stress
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-first
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt, zcompile

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-uncompile-plugin
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-uncompile-plugin [[[
+Uncompiles given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 20 line(s). Calls functions:

+
+
+
+
.zi-uncompile-plugin
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compile-uncompile-all
+zi.zsh/zi
+
+
+
+
zi-uninstall-completions
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-uninstall-completions [[[
+Removes all completions of given plugin from Zshell (i.e. from FPATH).
+The FPATH is typically `~/.zi/completions/'.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-uninstall-completions
+|-- install.zsh/.zi-compinit
+|-- install.zsh/.zi-forget-completion
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, source

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-unload
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-unload [[[
+0. Call the Zsh Plugin's Standard *_plugin_unload function
+0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
+1. Delete bindkeys (...)
+2. Delete Zstyles
+3. Restore options
+4. Remove aliases
+5. Restore Zle state
+6. Unfunction functions (created by plugin)
+7. Clean-up FPATH and PATH
+8. Delete created variables
+9. Forget the plugin
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 380 line(s). Calls functions:

+
+
+
+
.zi-unload
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): alias, bindkey, eval, setopt, unalias, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+zi.zsh/.zi-run-task
+
+
+
+
zi-unregister-plugin
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-unregister-plugin [[[
+Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
+zsh_loaded_plugins array (managed according to the plugin standard)
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-unregister-plugin
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-unload
+
+
+
+
zi-update-all-parallel
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-in-parallel [[[
+
+
+
+
+
+

Has 63 line(s). Calls functions:

+
+
+
+
.zi-update-all-parallel
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-update-or-status-all
+
+
+
+
zi-update-or-status
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status [[[
+Updates (git pull) or does `git status' for given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - "status" for status, other for update
+$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$3 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 263 line(s). Calls functions:

+
+
+
+
.zi-update-or-status
+|-- install.zsh/.zi-get-latest-gh-r-url-part
+|-- install.zsh/.zi-setup-plugin-dir
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-compute-ice
+|-- side.zsh/.zi-exists-physically
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-store-ices
+|-- side.zsh/.zi-two-paths
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/+zi-message
+`-- zi.zsh/.zi-set-m-func
+
+
+
+

Uses feature(s): kill, read, setopt, source, trap, wait

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+.zi-update-or-status-all
+zi.zsh/zi
+
+
+
+
zi-update-or-status-all
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status-all [[[
+Updates (git pull) or does `git status` for all existing plugins.
+This includes also plugins that are not loaded into Zsh (but exist
+on disk). Also updates (i.e. redownloads) snippets.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 96 line(s). Calls functions:

+
+
+
+
.zi-update-or-status-all
+|-- install.zsh/.zi-compinit
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-get-mtime-into
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, source

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-update-or-status-snippet
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status-snippet [[[
+
+
+
+
+
Implements update or status operation for snippet given by URL.
+
+
+
+
+
$1 - "status" or "update"
+$2 - snippet URL
+
+
+
+
+
+

Has 28 line(s). Calls functions:

+
+
+
+
.zi-update-or-status-snippet
+|-- install.zsh/.zi-update-snippet
+`-- side.zsh/.zi-compute-ice
+
+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+.zi-update-or-status-all
+.zi-update-or-status
+
+
+
+
zi-wait-for-update-jobs
+

~~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-wait-for-update-jobs [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
.zi-wait-for-update-jobs
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): wait

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/install.zsh.html b/code/zsdoc/html/install.zsh.html new file mode 100644 index 0000000..17181c8 --- /dev/null +++ b/code/zsdoc/html/install.zsh.html @@ -0,0 +1,1622 @@ + + + + + + + +install.zsh(1) + + + + + +
+
+

NAME

+
+
+

install.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 ∞zi-atclone-hook
+ .zi-at-eval
+ ∞zi-atpull-e-hook
+ ∞zi-atpull-hook
+ .zi-compile-plugin
+ ∞zi-compile-plugin-hook
+ .zi-compinit
+ zicp
+ ∞zi-cp-hook
+ .zi-download-file-stdout
+ .zi-download-snippet
+ .zi-extract
+ ziextract
+ ∞zi-extract-hook
+ .zi-forget-completion
+ .zi-get-cygwin-package
+ .zi-get-latest-gh-r-url-part
+ .zi-get-package
+ .zi-get-url-mtime
+ .zi-install-completions
+ ∞zi-make-ee-hook
+ ∞zi-make-e-hook
+ ∞zi-make-hook
+ .zi-mirror-using-svn
+ zimv
+ ∞zi-mv-hook
+ .zi-parse-json
+ ∞zi-ps-on-update-hook
+ ∞zi-reset-hook
+ .zi-setup-plugin-dir
+ .zi-update-snippet
+ zpextract
+AUTOLOAD compinit
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+

Uses feature(s): source

+
+
+
+

∞zi-atclone-hook

+
+
+
+
+
FUNCTION: ∞zi-atclone-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-atclone-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-at-eval
+

~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-at-eval [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-at-eval
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval

+
+
+

Called by:

+
+
+
+
∞zi-atpull-e-hook
+∞zi-atpull-hook
+
+
+
+
+

∞zi-atpull-e-hook

+
+
+
+
+
FUNCTION: ∞zi-atpull-e-hook [[[
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
∞zi-atpull-e-hook
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-atpull-hook

+
+
+
+
+
FUNCTION: ∞zi-atpull-hook [[[
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
∞zi-atpull-hook
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-compile-plugin
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compile-plugin [[[
+Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 84 line(s). Calls functions:

+
+
+
+
.zi-compile-plugin
+|-- side.zsh/.zi-compute-ice
+|-- side.zsh/.zi-first
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval, setopt, zcompile

+
+
+

Called by:

+
+
+
+
∞zi-compile-plugin-hook
+autoload.zsh/.zi-compile-uncompile-all
+zi.zsh/zi
+
+
+
+
+

∞zi-compile-plugin-hook

+
+
+
+
+
FUNCTION: ∞zi-compile-plugin-hook [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
∞zi-compile-plugin-hook
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-compinit
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-compinit [[[
+User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
+After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
+
+
+
+
+
No arguments.
+
+
+
+
+
+

Has 26 line(s). Calls functions:

+
+
+
+
.zi-compinit
+|-- compinit
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): autoload, compinit, setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-install-completions
+autoload.zsh/.zi-uninstall-completions
+autoload.zsh/.zi-update-or-status-all
+zi.zsh/zi
+zi.zsh/.zi-prepare-home
+
+
+
+
+

zicp

+
+
+
+
+
]]]
+FUNCTION zicp [[[
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zimv
+
+
+
+

Environment variables used: zi.zsh → ZPFX

+
+
+
+

∞zi-cp-hook

+
+
+
+
+
FUNCTION: ∞zi-cp-hook [[[
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
∞zi-cp-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-download-file-stdout
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-download-file-stdout [[[
+Downloads file to stdout. Supports following backend commands:
+curl, wget, lftp, lynx. Used by snippet loading.
+
+
+
+
+
+

Has 46 line(s). Calls functions:

+
+
+
+
.zi-download-file-stdout
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap, type

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+.zi-get-cygwin-package
+.zi-get-package
+.zi-setup-plugin-dir
+
+
+
+
zi-download-snippet
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-download-snippet [[[
+Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
+with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
+to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
+
+
+
+
+
+

Has 309 line(s). Calls functions:

+
+
+
+
.zi-download-snippet
+|-- side.zsh/.zi-store-ices
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap, zcompile

+
+
+

Called by:

+
+
+
+
.zi-update-snippet
+zi.zsh/.zi-load-snippet
+
+
+
+
zi-extract
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-extract() [[[
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-extract
+|-- ziextract
+|   `-- zi.zsh/+zi-message
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
∞zi-extract-hook
+
+
+
+
+

ziextract

+
+
+
+
+
]]]
+FUNCTION: ziextract [[[
+If the file is an archive, it is extracted by this function.
+Next stage is scanning of files with the common utility `file',
+to detect executables. They are given +x mode. There are also
+messages to the user on performed actions.
+
+
+
+
+
$1 - url
+$2 - file
+
+
+
+
+
+

Has 274 line(s). Calls functions:

+
+
+
+
ziextract
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, unfunction, zparseopts

+
+
+

Called by:

+
+
+
+
.zi-extract
+.zi-get-package
+.zi-setup-plugin-dir
+zpextract
+
+
+
+
+

∞zi-extract-hook

+
+
+
+
+
FUNCTION: ∞zi-extract-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-extract-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-forget-completion
+

~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-forget-completion [[[
+Implements alternation of Zsh state so that already initialized
+completion stops being visible to Zsh.
+
+
+
+
+
$1 - completion function name, e.g. "_cp"; can also be "cp"
+
+
+
+
+
+

Has 20 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-compinit
+.zi-install-completions
+autoload.zsh/.zi-uninstall-completions
+zi.zsh/zi
+
+
+
+
zi-get-cygwin-package
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-cygwin-package [[[
+
+
+
+
+
+

Has 70 line(s). Calls functions:

+
+
+
+
.zi-get-cygwin-package
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-setup-plugin-dir
+
+
+
+
zi-get-latest-gh-r-url-part
+

~~~~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-get-latest-gh-r-url-part [[[
+Gets version string of latest release of given Github package.
+Connects to Github releases page.
+
+
+
+
+
+

Has 101 line(s). Calls functions:

+
+
+
+
.zi-get-latest-gh-r-url-part
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-setup-plugin-dir
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-get-package
+

~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-get-package [[[
+
+
+
+
+
+

Has 194 line(s). Calls functions:

+
+
+
+
.zi-get-package
+|-- ziextract
+|   `-- zi.zsh/+zi-message
+|-- zi.zsh/+zi-message
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval, setopt, trap

+
+
+

Called by:

+
+
+
+
zi.zsh/.zi-load
+
+
+
+

Environment variables used: zi.zsh → ZPFX

+
+
+
zi-get-url-mtime
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-url-mtime [[[
+For the given URL returns the date in the Last-Modified header as a time stamp
+
+
+
+
+
+

Has 34 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): read, setopt, trap, type

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+
+
+
+
zi-install-completions
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-install-completions [[[
+Installs all completions of given plugin. After that they are
+visible to `compinit'. Visible completions can be selectively
+disabled and enabled. User can access completion data with
+`clist' or `completions' subcommand.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+$3 - if 1, then reinstall, otherwise only install completions that aren't there
+
+
+
+
+
+

Has 61 line(s). Calls functions:

+
+
+
+
.zi-install-completions
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-exists-physically-message
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+.zi-setup-plugin-dir
+zi.zsh/zi
+
+
+
+
+

∞zi-make-ee-hook

+
+
+
+
+
FUNCTION: ∞zi-make-ee-hook [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
∞zi-make-ee-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-make-e-hook

+
+
+
+
+
FUNCTION: ∞zi-make-e-hook [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
∞zi-make-e-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-make-hook

+
+
+
+
+
FUNCTION: ∞zi-make-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-make-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-mirror-using-svn
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-mirror-using-svn [[[
+Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
+in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
+compares remote and local revision and outputs true if update is needed.
+
+
+
+
+
$1 - URL
+$2 - mode, "" - normal, "-u" - update, "-t" - test
+$3 - subdirectory (not path) with working copy, needed for -t and -u
+
+
+
+
+
+

Has 27 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+
+
+
+
+

zimv

+
+
+
+
+
]]]
+FUNCTION zimv [[[
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
zimv
+`-- zicp
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-mv-hook

+
+
+
+
+
FUNCTION: ∞zi-mv-hook [[[
+
+
+
+
+
+

Has 21 line(s). Calls functions:

+
+
+
+
∞zi-mv-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-parse-json
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-parse-json [[[
+Retrievies the ice-list from given profile from the JSON of the package.json.
+
+
+
+
+
+

Has 102 line(s). Calls functions:

+
+
+
+
.zi-parse-json
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-get-package
+
+
+
+
+

∞zi-ps-on-update-hook

+
+
+
+
+
FUNCTION: ∞zi-ps-on-update-hook [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
∞zi-ps-on-update-hook
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-reset-hook

+
+
+
+
+
]]]
+FUNCTION: ∞zi-reset-opt-hook [[[
+
+
+
+
+
+

Has 79 line(s). Calls functions:

+
+
+
+
∞zi-reset-hook
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-setup-plugin-dir
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-setup-plugin-dir [[[
+Clones given plugin into PLUGIN_DIR. Supports multiple
+sites (respecting `from' and `proto' ice modifiers).
+Invokes compilation of plugin's main file.
+
+
+
+
+
$1 - user
+$2 - plugin
+
+
+
+
+
+

Has 189 line(s). Calls functions:

+
+
+
+
.zi-setup-plugin-dir
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-store-ices
+|-- ziextract
+|   `-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-get-object-path
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status
+zi.zsh/.zi-load
+
+
+
+
zi-update-snippet
+

~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-update-snippet [[[
+
+
+
+
+
+

Has 72 line(s). Calls functions:

+
+
+
+
.zi-update-snippet
+|-- zi.zsh/.zi-get-object-path
+|-- zi.zsh/+zi-message
+`-- zi.zsh/.zi-pack-ice
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status-snippet
+
+
+
+
+

zpextract

+
+
+
+
+
]]]
+FUNCTION: zpextract [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpextract
+`-- ziextract
+    `-- zi.zsh/+zi-message
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

compinit

+
+
+
+
+
Initialisation for new style completion. This mainly contains some helper
+functions and setup. Everything else is split into different files that
+will automatically be made autoloaded (see the end of this file).  The
+names of the files that will be considered for autoloading are those that
+begin with an underscores (like `_condition).
+
+
+
+
+
The first line of each of these files is read and must indicate what
+should be done with its contents:
+
+
+
+
+
`#compdef <names ...>'
+
+
+
+
+
+

Has 549 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
.zi-compinit
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/side.zsh.html b/code/zsdoc/html/side.zsh.html new file mode 100644 index 0000000..d222711 --- /dev/null +++ b/code/zsdoc/html/side.zsh.html @@ -0,0 +1,909 @@ + + + + + + + +side.zsh(1) + + + + + +
+
+

NAME

+
+
+

side.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 .zi-any-colorify-as-uspl2
+ .zi-compute-ice
+ .zi-countdown
+ .zi-exists-physically
+ .zi-exists-physically-message
+ .zi-first
+ .zi-store-ices
+ .zi-two-paths
+AUTOLOAD zmv
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+
zi-any-colorify-as-uspl2
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-colorify-as-uspl2 [[[
+Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+$REPLY = ANSI-colorified "user/plugin" string
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-any-colorify-as-uspl2
+|-- zi.zsh/.zi-any-to-pid
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-exists-physically-message
+autoload.zsh/.zi-clear-completions
+autoload.zsh/.zi-compiled
+autoload.zsh/.zi-compile-uncompile-all
+autoload.zsh/.zi-create
+autoload.zsh/.zi-exists-message
+autoload.zsh/.zi-get-completion-owner-uspl2col
+autoload.zsh/.zi-list-bindkeys
+autoload.zsh/.zi-recently
+autoload.zsh/.zi-search-completions
+autoload.zsh/.zi-show-completions
+autoload.zsh/.zi-show-registered-plugins
+autoload.zsh/.zi-show-times
+autoload.zsh/.zi-uncompile-plugin
+autoload.zsh/.zi-unload
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+install.zsh/.zi-setup-plugin-dir
+zi.zsh/.zi-formatter-pid
+
+
+
+
zi-compute-ice
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compute-ice [[[
+Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
+taking priorities into account. Also returns path to snippet directory and optional name of snippet file
+(only valid if ICE[svn] is not set).
+
+
+
+
+
Can also pack resulting ices into ZI_SICE (see $2).
+
+
+
+
+
$1 - URL (also plugin-spec)
+$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
+wins with static ice; "pack-nf" means that disk-ices will
+be ignored (no-file?)
+$3 - name of output associative array, "ICE" is the default
+$4 - name of output string parameter, to hold path to directory ("local_dir")
+$5 - name of output string parameter, to hold filename ("filename")
+$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
+
+
+
+
+
+

Has 116 line(s). Calls functions:

+
+
+
+
.zi-compute-ice
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-pack-ice
+`-- zmv
+
+
+
+

Uses feature(s): autoload, setopt, zmv

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-delete
+autoload.zsh/.zi-edit
+autoload.zsh/.zi-recall
+autoload.zsh/.zi-update-or-status
+autoload.zsh/.zi-update-or-status-snippet
+install.zsh/.zi-compile-plugin
+
+
+
+
zi-countdown
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-countdown [[[
+Displays a countdown 5...4... etc. and returns 0 if it
+sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
.zi-countdown
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): trap

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-run-delete-hooks
+install.zsh/∞zi-atclone-hook
+install.zsh/∞zi-atpull-e-hook
+install.zsh/∞zi-atpull-hook
+install.zsh/∞zi-make-ee-hook
+install.zsh/∞zi-make-e-hook
+install.zsh/∞zi-make-hook
+
+
+
+
zi-exists-physically
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-physically [[[
+Checks if directory of given plugin exists in PLUGIN_DIR.
+
+
+
+
+
Testable.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 6 line(s). Calls functions:

+
+
+
+
.zi-exists-physically
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-exists-physically-message
+autoload.zsh/.zi-create
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-exists-physically-message
+

~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-physically-message [[[
+Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
+
+
+
+
+
Testable.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-exists-physically-message
+|-- zi.zsh/.zi-any-to-pid
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+autoload.zsh/.zi-changes
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-stress
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+
+
+
+
zi-first
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-first [[[
+Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
+ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
+is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-first
+|-- zi.zsh/.zi-any-to-pid
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-find-other-matches
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Called by:

+
+
+
+
.zi-two-paths
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-stress
+install.zsh/.zi-compile-plugin
+
+
+
+
zi-store-ices
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-store-ices [[[
+Saves ice mods in given hash onto disk.
+
+
+
+
+
$1 - directory where to create / delete files
+$2 - name of hash that holds values
+$3 - additional keys of hash to store, space separated
+$4 - additional keys of hash to store, empty-meaningful ices, space separated
+$5 - the URL, if applicable
+$6 - the mode (1 - svn, 0 - single file), if applicable
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status
+install.zsh/.zi-download-snippet
+install.zsh/.zi-setup-plugin-dir
+
+
+
+
zi-two-paths
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-two-paths [[[
+Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
+returns 2 possible paths for further examination
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-two-paths
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+autoload.zsh/.zi-update-or-status
+
+
+
+
+

zmv

+
+
+
+
+
function zmv {
+zmv, zcp, zln:
+
+
+
+
+
This is a multiple move based on zsh pattern matching.  To get the full
+power of it, you need a postgraduate degree in zsh.  However, simple
+tasks work OK, so if that's all you need, here are some basic examples:
+zmv '(*).txt' '$1.lis'
+Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
+gets replaced by the $1 (not the `*', as happens in mmv, and note the
+`$', not `=', so that you need to quote both words).
+
+
+
+
+
+

Has 299 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): eval, getopts, read, setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/zi.zsh.html b/code/zsdoc/html/zi.zsh.html new file mode 100644 index 0000000..66b7d0d --- /dev/null +++ b/code/zsdoc/html/zi.zsh.html @@ -0,0 +1,2834 @@ + + + + + + + +zi.zsh(1) + + + + + +
+
+

NAME

+
+
+

zi.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 @autoload
+ pmodload
+ zi
+ .zi-add-fpath
+ .zi-add-report
+ .zi-any-to-pid
+ .zi-any-to-user-plugin
+ zicdclear
+ zicdreplay
+ zicompdef
+ .zi-compdef-clear
+ .zi-compdef-replay
+ zicompinit
+ +zi-deploy-message
+ .zi-diff
+ .zi-diff-env
+ .zi-diff-functions
+ .zi-diff-options
+ .zi-diff-parameter
+ .zi-find-other-matches
+ .zi-formatter-bar
+ .zi-formatter-bar-util
+ .zi-formatter-pid
+ .zi-formatter-th-bar
+ .zi-formatter-url
+ .zi-get-mtime-into
+ .zi-get-object-path
+ .zi-ice
+ .zi-load
+ .zi-load-ices
+ .zi-load-object
+ .zi-load-plugin
+ .zi-load-snippet
+ .zi-main-message-formatter
+ +zi-message
+ .zi-pack-ice
+ .zi-parse-opts
+ +zi-prehelp-usage-message
+ .zi-prepare-home
+ @zi-register-annex
+ @zi-register-hook
+ .zi-register-plugin
+ :zi-reload-and-run
+ .zi-run
+ .zi-run-task
+ -zi_scheduler_add_sh
+ .zi-set-m-func
+ .zi-setup-params
+ .zi-submit-turbo
+ @zi-substitute
+ :zi-tmp-subst-alias
+ :zi-tmp-subst-autoload
+ :zi-tmp-subst-bindkey
+ :zi-tmp-subst-compdef
+ .zi-tmp-subst-off
+ .zi-tmp-subst-on
+ :zi-tmp-subst-zle
+ :zi-tmp-subst-zstyle
+ zi-turbo
+ .zi-util-shands-path
+ zpcdclear
+ zpcdreplay
+ zpcompdef
+ zpcompinit
+ @zsh-plugin-run-on-unload
+ @zsh-plugin-run-on-update
+AUTOLOAD add-zsh-hook
+AUTOLOAD compinit
+AUTOLOAD is-at-least
+PRECMD-HOOK @zi-scheduler
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 202 line(s). Calls functions:

+
+
+
+
Script-Body
+|-- add-zsh-hook
+|-- autoload.zsh/.zi-module
+|-- is-at-least
+|-- +zi-message
+`-- @zi-register-hook
+
+
+
+

Uses feature(s): add-zsh-hook, alias, autoload, export, is-at-least, setopt, source, zmodload, zstyle

+
+
+

Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

+
+
+
+

@autoload

+
+
+
+
+
]]]
+FUNCTION: @autoload. [[[
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
@autoload
+`-- :zi-tmp-subst-autoload
+    |-- is-at-least
+    `-- +zi-message
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

pmodload

+
+
+
+
+
FUNCTION: pmodload. [[[
+Compatibility with Prezto. Calls can be recursive.
+
+
+
+
+
+

Has 15 line(s). Calls functions:

+
+
+
+
pmodload
+
+
+
+

Uses feature(s): zstyle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zi

+
+
+
+
+
FUNCTION: zi. [[[
+Main function directly exposed to user, obtains subcommand and its arguments, has completion.
+
+
+
+
+
+

Has 547 line(s). Calls functions:

+
+
+
+
zi
+|-- autoload.zsh/.zi-analytics-menu
+|-- autoload.zsh/.zi-cdisable
+|-- autoload.zsh/.zi-cenable
+|-- autoload.zsh/.zi-clear-completions
+|-- autoload.zsh/.zi-compiled
+|-- autoload.zsh/.zi-compile-uncompile-all
+|-- autoload.zsh/.zi-control-menu
+|-- autoload.zsh/.zi-help
+|-- autoload.zsh/.zi-list-bindkeys
+|-- autoload.zsh/.zi-list-compdef-replay
+|-- autoload.zsh/.zi-ls
+|-- autoload.zsh/.zi-module
+|-- autoload.zsh/.zi-recently
+|-- autoload.zsh/.zi-search-completions
+|-- autoload.zsh/.zi-self-update
+|-- autoload.zsh/.zi-show-all-reports
+|-- autoload.zsh/.zi-show-completions
+|-- autoload.zsh/.zi-show-debug-report
+|-- autoload.zsh/.zi-show-registered-plugins
+|-- autoload.zsh/.zi-show-report
+|-- autoload.zsh/.zi-show-times
+|-- autoload.zsh/.zi-show-zstatus
+|-- autoload.zsh/.zi-uncompile-plugin
+|-- autoload.zsh/.zi-uninstall-completions
+|-- autoload.zsh/.zi-unload
+|-- autoload.zsh/.zi-update-or-status
+|-- autoload.zsh/.zi-update-or-status-all
+|-- compinit
+|-- install.zsh/.zi-compile-plugin
+|-- install.zsh/.zi-compinit
+|-- install.zsh/.zi-forget-completion
+|-- install.zsh/.zi-install-completions
+|-- +zi-message
+`-- +zi-prehelp-usage-message
+    `-- +zi-message
+
+
+
+

Uses feature(s): autoload, compinit, eval, setopt, source

+
+
+

Called by:

+
+
+
+
zi-turbo
+
+
+
+
zi-add-fpath
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-add-fpath. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-add-fpath
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-add-report
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-add-report. [[[
+Adds a report line for given plugin.
+
+
+
+
+
$1 - uspl2, i.e. user/plugin
+$2, ... - the text
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+.zi-load-snippet
+:zi-tmp-subst-alias
+:zi-tmp-subst-autoload
+:zi-tmp-subst-bindkey
+:zi-tmp-subst-compdef
+:zi-tmp-subst-zle
+:zi-tmp-subst-zstyle
+
+
+
+
zi-any-to-pid
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-pid. [[[
+
+
+
+
+
+

Has 21 line(s). Calls functions:

+
+
+
+
.zi-any-to-pid
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
side.zsh/.zi-any-colorify-as-uspl2
+side.zsh/.zi-exists-physically-message
+side.zsh/.zi-first
+
+
+
+
zi-any-to-user-plugin
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-user-plugin. [[[
+Allows elastic plugin-spec across the code.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
Returns user and plugin in $reply.
+
+
+
+
+
+

Has 25 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-add-fpath
+.zi-get-object-path
+.zi-load
+.zi-run
+:zi-tmp-subst-autoload
+autoload.zsh/.zi-any-to-uspl2
+autoload.zsh/.zi-changes
+autoload.zsh/.zi-compiled
+autoload.zsh/.zi-compile-uncompile-all
+autoload.zsh/.zi-create
+autoload.zsh/.zi-delete
+autoload.zsh/.zi-find-completions-of-plugin
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-show-report
+autoload.zsh/.zi-stress
+autoload.zsh/.zi-uncompile-plugin
+autoload.zsh/.zi-unload
+autoload.zsh/.zi-unregister-plugin
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+side.zsh/.zi-any-colorify-as-uspl2
+side.zsh/.zi-compute-ice
+side.zsh/.zi-exists-physically-message
+side.zsh/.zi-exists-physically
+side.zsh/.zi-first
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

zicdclear

+
+
+
+
+
]]]
+FUNCTION: zicdclear. [[[
+A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicdclear
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicdreplay

+
+
+
+
+
FUNCTION: zicdreplay. [[[
+A function that can be invoked from within `atinit', `atload', etc. ice-mod.
+It works like `zi cdreplay', which cannot be invoked from such hook ices.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicdreplay
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicompdef

+
+
+
+
+
]]]
+FUNCTION: zicompdef. [[[
+Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
+
+
+
+
+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-compdef-clear
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compdef-clear. [[[
+Implements user-exposed functionality to clear gathered compdefs.
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
.zi-compdef-clear
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
zicdclear
+zi
+zpcdclear
+
+
+
+
zi-compdef-replay
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compdef-replay. [[[
+Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
+
+
+
+
+
+

Has 16 line(s). Calls functions:

+
+
+
+
.zi-compdef-replay
+`-- +zi-message
+
+
+
+

Uses feature(s): compdef

+
+
+

Called by:

+
+
+
+
zicdreplay
+zi
+zpcdreplay
+
+
+
+
+

zicompinit

+
+
+
+
+
]]]
+FUNCTION: zicompinit. [[[
+A function that can be invoked from within `atinit', `atload', etc. ice-mod.
+It runs `autoload compinit; compinit' and respects
+ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicompinit
+`-- compinit
+
+
+
+

Uses feature(s): autoload, compinit

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

+zi-deploy-message

+
+
+
+
+
FUNCTION: +zi-deploy-message. [[[
+Deploys a sub-prompt message to be displayed OR a `zle
+.reset-prompt' call to be invoked
+
+
+
+
+
+

Has 13 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): read, zle

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+autoload.zsh/.zi-recall
+
+
+
+
zi-diff
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff. [[[
+Performs diff actions of all types
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
.zi-diff
+
+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+
+
+
+
zi-diff-env
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-env. [[[
+Implements detection of change in PATH and FPATH.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 15 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+.zi-load-plugin
+
+
+
+
zi-diff-functions
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-functions. [[[
+Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-diff-options
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-options. [[[
+Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-diff-parameter
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-parameter. [[[
+Implements detection of change in any parameter's existence and type.
+Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-find-other-matches
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-find-other-matches. [[[
+Plugin's main source file is in general `name.plugin.zsh'. However,
+there can be different conventions, if that file is not found, then
+this functions examines other conventions in the most sane order.
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+.zi-load-snippet
+side.zsh/.zi-first
+
+
+
+
zi-formatter-bar
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-bar. [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-formatter-bar
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-bar-util
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-bar-util. [[[
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-formatter-bar
+.zi-formatter-th-bar
+
+
+
+
zi-formatter-pid
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-pid. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-formatter-pid
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): source

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-th-bar
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-th-bar. [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-formatter-th-bar
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-url
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-url. [[[
+
+
+
+
+
+

Has 19 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-get-mtime-into
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-mtime-into. [[[
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+autoload.zsh/.zi-self-update
+autoload.zsh/.zi-update-or-status-all
+
+
+
+
zi-get-object-path
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-object-path. [[[
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-get-object-path
+
+
+
+

Called by:

+
+
+
+
.zi-load-ices
+.zi-load-snippet
+.zi-run
+zi
+autoload.zsh/.zi-get-path
+install.zsh/.zi-setup-plugin-dir
+install.zsh/.zi-update-snippet
+side.zsh/.zi-first
+side.zsh/.zi-two-paths
+
+
+
+
zi-ice
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-ice. [[[
+Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
+next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
+
+
+
+
+
+

Has 12 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-load
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-load. [[[
+Implements the exposed-to-user action of loading a plugin.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin name, if the third format is used
+
+
+
+
+
+

Has 76 line(s). Calls functions:

+
+
+
+
.zi-load
+|-- install.zsh/.zi-get-package
+|-- install.zsh/.zi-setup-plugin-dir
+`-- +zi-deploy-message
+
+
+
+

Uses feature(s): eval, setopt, source, zle

+
+
+

Called by:

+
+
+
+
.zi-load-object
+.zi-run-task
+
+
+
+
zi-load-ices
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-ices. [[[
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-load-ices
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-load-object
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-object. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-load-object
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-load-plugin
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-plugin. [[[
+Lower-level function for loading a plugin.
+
+
+
+
+
$1 - user
+$2 - plugin
+$3 - mode (light or load)
+
+
+
+
+
+

Has 107 line(s). Calls functions:

+
+
+
+
.zi-load-plugin
+`-- :zi-tmp-subst-autoload
+    |-- is-at-least
+    `-- +zi-message
+
+
+
+

Uses feature(s): eval, setopt, source, unfunction, zle

+
+
+

Called by:

+
+
+
+
.zi-load
+
+
+
+
zi-load-snippet
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-snippet. [[[
+Implements the exposed-to-user action of loading a snippet.
+
+
+
+
+
$1 - url (can be local, absolute path).
+
+
+
+
+
+

Has 173 line(s). Calls functions:

+
+
+
+
.zi-load-snippet
+|-- install.zsh/.zi-download-snippet
+|-- +zi-deploy-message
+`-- +zi-message
+
+
+
+

Uses feature(s): autoload, eval, setopt, source, unfunction, zparseopts, zstyle

+
+
+

Called by:

+
+
+
+
pmodload
+.zi-load-object
+.zi-load
+.zi-run-task
+
+
+
+
zi-main-message-formatter
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: +zi-message-formatter [[[
+
+
+
+
+
+

Has 18 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

+zi-message

+
+
+
+
+
FUNCTION: +zi-message. [[[
+
+
+
+
+
+

Has 14 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+.zi-compdef-clear
+.zi-compdef-replay
+.zi-load-snippet
++zi-prehelp-usage-message
+.zi-register-plugin
+.zi-run
+.zi-set-m-func
+:zi-tmp-subst-autoload
+zi
+autoload.zsh/.zi-build-module
+autoload.zsh/.zi-cd
+autoload.zsh/.zi-self-update
+autoload.zsh/.zi-show-zstatus
+autoload.zsh/.zi-uninstall-completions
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+autoload.zsh/.zi-wait-for-update-jobs
+install.zsh/.zi-compile-plugin
+install.zsh/.zi-compinit
+install.zsh/.zi-download-file-stdout
+install.zsh/.zi-download-snippet
+install.zsh/.zi-extract
+install.zsh/ziextract
+install.zsh/.zi-get-cygwin-package
+install.zsh/.zi-get-latest-gh-r-url-part
+install.zsh/.zi-get-package
+install.zsh/.zi-install-completions
+install.zsh/∞zi-ps-on-update-hook
+install.zsh/∞zi-reset-hook
+install.zsh/.zi-setup-plugin-dir
+install.zsh/.zi-update-snippet
+side.zsh/.zi-countdown
+side.zsh/.zi-exists-physically-message
+
+
+
+
zi-pack-ice
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-pack-ice. [[[
+Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
+second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
+or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+@zsh-plugin-run-on-unload
+@zsh-plugin-run-on-update
+install.zsh/.zi-update-snippet
+side.zsh/.zi-compute-ice
+
+
+
+
zi-parse-opts
+

~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: +zi-parse-opts. [[[
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi
+autoload.zsh/.zi-delete
+
+
+
+
+

+zi-prehelp-usage-message

+
+
+
+
+
FUNCTION: +zi-prehelp-usage-message. [[[
+
+
+
+
+
+

Has 34 line(s). Calls functions:

+
+
+
+
+zi-prehelp-usage-message
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
zi
+autoload.zsh/.zi-delete
+
+
+
+
zi-prepare-home
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-prepare-home. [[[
+Creates all directories needed by ZI, first checks if they already exist.
+
+
+
+
+
+

Has 38 line(s). Calls functions:

+
+
+
+
.zi-prepare-home
+|-- autoload.zsh/.zi-clear-completions
+`-- install.zsh/.zi-compinit
+
+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
Script-Body
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

@zi-register-annex

+
+
+
+
+
FUNCTION: @zi-register-annex. [[[
+Registers the z-annex inside ZI – i.e. an ZI extension
+
+
+
+
+
+

Has 8 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zi-register-hook

+
+
+
+
+
FUNCTION: @zi-register-hook. [[[
+Registers the z-annex inside ZI – i.e. an ZI extension
+
+
+
+
+
+

Has 4 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+
+
+
+
zi-register-plugin
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-register-plugin. [[[
+Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
+zsh_loaded_plugins array (managed according to the plugin standard:
+https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
+
+
+
+
+
+

Has 20 line(s). Calls functions:

+
+
+
+
.zi-register-plugin
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
.zi-load
+
+
+
+
+

:zi-reload-and-run

+
+
+
+
+
FUNCTION: :zi-reload-and-run. [[[
+Marks given function ($3) for autoloading, and executes it triggering the load.
+$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
+because using that on older Zsh versions causes problems with traps.
+
+
+
+
+
So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
+
+
+
+
+
$1 - FPATH dedicated to function
+$2 - autoload options
+$3 - function name (one that needs autoloading)
+
+
+
+
+
Author: Bart Schaefer
+
+
+
+
+
+

Has 9 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, unfunction

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-run
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-run. [[[
+Run code inside plugin's folder
+It uses the `correct' parameter from upper's scope zi().
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
.zi-run
+`-- +zi-message
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-run-task
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-run-task. [[[
+A backend, worker function of .zi-scheduler. It obtains the tasks
+index and a few of its properties (like the type: plugin, snippet,
+service plugin, service snippet) and executes it first checking for
+additional conditions (like non-numeric wait'' ice).
+
+
+
+
+
$1 - the pass number, either 1st or 2nd pass
+$2 - the time assigned to the task
+$3 - type: plugin, snippet, service plugin, service snippet
+$4 - task's index in the ZI[WAIT_ICE_...] fields
+$5 - mode: load or light
+$6 - the plugin-spec or snippet URL or alias name (from id-as'')
+
+
+
+
+
+

Has 45 line(s). Calls functions:

+
+
+
+
.zi-run-task
+`-- autoload.zsh/.zi-unload
+
+
+
+

Uses feature(s): eval, source, zle, zpty

+
+
+

Called by:

+
+
+
+
@zi-scheduler
+
+
+
+
+

@zi-scheduler

+
+
+
+
+
FUNCTION: @zi-scheduler. [[[
+Searches for timeout tasks, executes them. There's an array of tasks
+waiting for execution, this scheduler manages them, detects which ones
+should be run at current moment, decides to remove (or not) them from
+the array after execution.
+
+
+
+
+
$1 - if "following", then it is non-first (second and more)
+invocation of the scheduler; this results in chain of `sched'
+invocations that results in repetitive @zi-scheduler activity.
+
+
+
+
+
if "burst", then all tasks are marked timeout and executed one
+by one; this is handy if e.g. a docker image starts up and
+needs to install all turbo-mode plugins without any hesitation
+(delay), i.e. "burst" allows to run package installations from
+script, not from prompt.
+
+
+
+
+
+

Has 74 line(s). Is a precmd hook. Calls functions:

+
+
+
+
@zi-scheduler
+`-- add-zsh-hook
+
+
+
+

Uses feature(s): add-zsh-hook, sched, setopt, zle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

-zi_scheduler_add_sh

+
+
+
+
+
FUNCTION: -zi_scheduler_add_sh. [[[
+Copies task into ZI_RUN array, called when a task timeouts.
+A small function ran from pattern in /-substitution as a math
+function.
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-set-m-func
+

~~~~~~

+
+
+
+
+
+
FUNCTION:.zi-set-m-func() [[[
+Sets and withdraws the temporary, atclone/atpull time function `m`.
+
+
+
+
+
+

Has 17 line(s). Calls functions:

+
+
+
+
.zi-set-m-func
+`-- +zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-setup-params
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-setup-params. [[[
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+
+
+
+
zi-submit-turbo
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-submit-turbo. [[[
+If `zi load`, `zi light` or `zi snippet`  will be
+preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
+ice-mods then the plugin or snipped is to be loaded in turbo-mode,
+and this function adds it to internal data structures, so that
+@zi-scheduler can run (load, unload) this as a task.
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
+

@zi-substitute

+
+
+
+
+
FUNCTION: @zi-substitute. [[[
+
+
+
+
+
+

Has 36 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-at-eval
+install.zsh/∞zi-atclone-hook
+install.zsh/.zi-at-eval
+install.zsh/∞zi-cp-hook
+install.zsh/∞zi-extract-hook
+install.zsh/.zi-get-package
+install.zsh/∞zi-make-ee-hook
+install.zsh/∞zi-make-e-hook
+install.zsh/∞zi-make-hook
+install.zsh/∞zi-mv-hook
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

:zi-tmp-subst-alias

+
+
+
+
+
FUNCTION: :zi-tmp-subst-alias. [[[
+Function defined to hijack plugin's calls to the `alias' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 30 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-alias
+
+
+
+

Uses feature(s): alias, setopt, zparseopts

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-autoload

+
+
+
+
+
FUNCTION: :zi-tmp-subst-autoload. [[[
+Function defined to hijack plugin's calls to the `autoload' builtin.
+
+
+
+
+
The hijacking is not only to gather report data, but also to.
+run custom `autoload' function, that doesn't need FPATH.
+
+
+
+
+
+

Has 106 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-autoload
+|-- is-at-least
+`-- +zi-message
+
+
+
+

Uses feature(s): autoload, eval, is-at-least, setopt, zparseopts

+
+
+

Called by:

+
+
+
+
@autoload
+.zi-load-plugin
+
+
+
+
+

:zi-tmp-subst-bindkey

+
+
+
+
+
FUNCTION: :zi-tmp-subst-bindkey. [[[
+Function defined to hijack plugin's calls to the `bindkey' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 107 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-bindkey
+`-- is-at-least
+
+
+
+

Uses feature(s): bindkey, is-at-least, setopt, zparseopts

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-compdef

+
+
+
+
+
FUNCTION: :zi-tmp-subst-compdef. [[[
+Function defined to hijack plugin's calls to the `compdef' function.
+The hijacking is not only for reporting, but also to save compdef
+calls so that `compinit' can be called after loading plugins.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-compdef
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-tmp-subst-off
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-tmp-subst-off. [[[
+Turn off temporary substituting of functions completely for a given mode ("load", "light",
+"light-b" (i.e. the `trackbinds' mode) or "compdef").
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+
+
+
+
zi-tmp-subst-on
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-tmp-subst-on. [[[
+Turn on temporary substituting of functions of builtins and functions according to passed
+mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
+to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
+
+
+
+
+
+

Has 29 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+
+
+
+
+

:zi-tmp-subst-zle

+
+
+
+
+
FUNCTION: :zi-tmp-subst-zle. [[[.
+Function defined to hijack plugin's calls to the `zle' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 33 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-zle
+
+
+
+

Uses feature(s): setopt, zle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-zstyle

+
+
+
+
+
FUNCTION: :zi-tmp-subst-zstyle. [[[
+Function defined to hijack plugin's calls to the `zstyle' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-zstyle
+
+
+
+

Uses feature(s): setopt, zparseopts, zstyle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zi-turbo

+
+
+
+
+
FUNCTION: zi-turbo. [[[
+With zi-turbo first argument is a wait time and suffix, i.e. "0a".
+Anything that doesn't match will be passed as if it were an ice mod.
+Default ices depth'3' and lucid, allowed values [0-9][a-d].
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zi-turbo
+`-- zi
+    |-- autoload.zsh/.zi-analytics-menu
+    |-- autoload.zsh/.zi-cdisable
+    |-- autoload.zsh/.zi-cenable
+    |-- autoload.zsh/.zi-clear-completions
+    |-- autoload.zsh/.zi-compiled
+    |-- autoload.zsh/.zi-compile-uncompile-all
+    |-- autoload.zsh/.zi-control-menu
+    |-- autoload.zsh/.zi-help
+    |-- autoload.zsh/.zi-list-bindkeys
+    |-- autoload.zsh/.zi-list-compdef-replay
+    |-- autoload.zsh/.zi-ls
+    |-- autoload.zsh/.zi-module
+    |-- autoload.zsh/.zi-recently
+    |-- autoload.zsh/.zi-search-completions
+    |-- autoload.zsh/.zi-self-update
+    |-- autoload.zsh/.zi-show-all-reports
+    |-- autoload.zsh/.zi-show-completions
+    |-- autoload.zsh/.zi-show-debug-report
+    |-- autoload.zsh/.zi-show-registered-plugins
+    |-- autoload.zsh/.zi-show-report
+    |-- autoload.zsh/.zi-show-times
+    |-- autoload.zsh/.zi-show-zstatus
+    |-- autoload.zsh/.zi-uncompile-plugin
+    |-- autoload.zsh/.zi-uninstall-completions
+    |-- autoload.zsh/.zi-unload
+    |-- autoload.zsh/.zi-update-or-status
+    |-- autoload.zsh/.zi-update-or-status-all
+    |-- compinit
+    |-- install.zsh/.zi-compile-plugin
+    |-- install.zsh/.zi-compinit
+    |-- install.zsh/.zi-forget-completion
+    |-- install.zsh/.zi-install-completions
+    |-- +zi-message
+    `-- +zi-prehelp-usage-message
+        `-- +zi-message
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-util-shands-path
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-util-shands-path. [[[
+Replaces parts of path with %HOME, etc.
+
+
+
+
+
+

Has 8 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-any-to-pid
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

zpcdclear

+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcdclear
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcdreplay

+
+
+
+
+
]]]
+Compatibility functions. [[[
+zinit() { zi "$@"; }
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcdreplay
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcompdef

+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcompinit

+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcompinit
+`-- compinit
+
+
+
+

Uses feature(s): autoload, compinit

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zsh-plugin-run-on-unload

+
+
+
+
+
FUNCTION: @zsh-plugin-run-on-update. [[[
+The Plugin Standard required mechanism, see:
+https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
@zsh-plugin-run-on-unload
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zsh-plugin-run-on-update

+
+
+
+
+
FUNCTION: @zsh-plugin-run-on-update. [[[
+The Plugin Standard required mechanism
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
@zsh-plugin-run-on-update
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

add-zsh-hook

+
+
+
+
+
Add to HOOK the given FUNCTION.
+HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
+zshexit, zsh_directory_name (the _functions subscript is not required).
+
+
+
+
+
With -d, remove the function from the hook instead; delete the hook
+variable if it is empty.
+
+
+
+
+
-D behaves like -d, but pattern characters are active in the
+function name, so any matching function will be deleted from the hook.
+
+
+
+
+
+

Has 93 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, getopts

+
+
+

Called by:

+
+
+
+
Script-Body
+@zi-scheduler
+
+
+
+
+

compinit

+
+
+
+
+
Initialisation for new style completion. This mainly contains some helper
+functions and setup. Everything else is split into different files that
+will automatically be made autoloaded (see the end of this file).  The
+names of the files that will be considered for autoloading are those that
+begin with an underscores (like `_condition).
+
+
+
+
+
The first line of each of these files is read and must indicate what
+should be done with its contents:
+
+
+
+
+
`#compdef <names ...>'
+
+
+
+
+
+

Has 549 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
zi
+zicompinit
+zpcompinit
+
+
+
+
+

is-at-least

+
+
+
+
+
Test whether $ZSH_VERSION (or some value of your choice, if a second argument
+is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
+it'll accept any dot/dash-separated string of numbers as its second argument
+and compare it to the dot/dash-separated first argument. Leading non-number
+parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
+when the comparison is done; only the numbers matter. Any left-out segments
+in the first argument that are present in the version string compared are
+considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
+
+
+
+
+
+

Has 56 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+:zi-tmp-subst-autoload
+:zi-tmp-subst-bindkey
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/pdf/autoload.zsh.pdf b/code/zsdoc/pdf/autoload.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6be7197b9ccaa953e07d3ed859923a7ee2f99d4a GIT binary patch literal 410740 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
!3vS(n)E|m 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 literal 0 HcmV?d00001 diff --git a/code/zsdoc/pdf/install.zsh.pdf b/code/zsdoc/pdf/install.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c7e7953418f0429e330f3a2fc1f51a7ff5af2fbf GIT binary patch literal 210801 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 YmZkOIp5y50Sm{~VVBfzNloEpdKNI0D`2YX_ literal 0 HcmV?d00001 diff --git a/code/zsdoc/pdf/side.zsh.pdf b/code/zsdoc/pdf/side.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..06b596d5eef75214d9f502fe4cdbb07b3acde401 GIT binary patch literal 109159 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 H$dLRODCqW< literal 0 HcmV?d00001 From 27f3de409ffeb7dbca8be7a047341e96e43e493b Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 13 Dec 2021 20:14:43 +0000 Subject: [PATCH 005/470] deleted: zsdoc/Makefile --- zsdoc/Makefile | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 zsdoc/Makefile diff --git a/zsdoc/Makefile b/zsdoc/Makefile deleted file mode 100644 index cd09570..0000000 --- a/zsdoc/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -all: zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc - -%.zwc: % - zi/lib/zcompile $< - -doc: zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh - git clone --depth 1 --branch main https://github.com/z-shell/zi - rm -rvf data *.adoc - zsd -v --scomm --cignore '(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)' zi.zsh \ - lib/zsh/side.zsh \ - lib/zsh/install.zsh \ - lib/zsh/autoload.zsh - -html: doc - asciidoctor zi.zsh.adoc && asciidoctor side.zsh.adoc && \ - asciidoctor install.zsh.adoc && asciidoctor autoload.zsh.adoc && \ - asciidoctor additional.zsh.adoc - -clean: - rm -vrf zi - rm -vrf data - -.PHONY: all clean doc html From 8dc99a4e0aab792311e87dcca1f93015ee6839c9 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 00:44:57 +0000 Subject: [PATCH 006/470] Create code.yml --- .github/workflows/code.yml | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .github/workflows/code.yml diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml new file mode 100644 index 0000000..533f9c3 --- /dev/null +++ b/.github/workflows/code.yml @@ -0,0 +1,83 @@ +--- +name: ZI Code Documentation +on: + workflow_dispatch: + schedule: + - cron: "30 4 * * 4" + +jobs: + doxygen: + runs-on: ubuntu-latest + steps: + - name: Install zsdoc + run: | + sudo apt-get install -y zsh + git clone https://github.com/z-shell/zsdoc.git /tmp/zsdoc + sudo make -C /tmp/zsdoc install + - name: ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + - name: asciidoctor-pdf tilt + run: | + gem install asciidoctor-pdf tilt + - uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Clone repository + run: | + git clone https://github.com/z-shell/zi.git zi + - name: Parse scripts and generate Asciidoc documents + run: | + make -C zi/docs doc + - name: Generate PDF from Asciidoc documents + run: | + make -C code adoc + make -C code pdf + make -C code clean + - name: Tar Code documentation + run: tar cvzf code.tar.gz code + - name: Upload code.tar.gz + uses: actions/upload-artifact@v2 + with: + name: Upload Code documentation artifact + path: code.tar.gz +# - name: Check if update required for zsdoc +# run: | +# git --no-pager diff docs/code +# if git --no-pager diff --quiet docs/code +# then +# echo "The Code Doocumentation are up to date" +# else +# { +# echo "The Code Doocumentation in the repo are not up to date" +# echo 'Please regenerate them with $ make doc' +# } >&2 +# exit 1 +# fi + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "Code Documentation Update" + branch: code-docs + # See https://git-scm.com/docs/git-commit#_options + commit_options: '--no-verify --signoff' + # See the `pathspec`-documentation for git + # - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203 + # - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec + file_pattern: code + repository: . + commit_user_name: Z-Shell Bot + commit_user_email: z-shell@digitalclouds.dev + commit_author: Z-Shell ZI + #tagging_message: 'v1.0.0' + # See https://git-scm.com/docs/git-status#_options + status_options: '--untracked-files=no' + # See https://git-scm.com/docs/git-add#_options + #add_options: '-u' + push_options: '--force' + skip_dirty_check: true + skip_fetch: true + # Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html + disable_globbing: true From 3f146aeddc13397833823a85a9b9d7b1bf359060 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 00:50:57 +0000 Subject: [PATCH 007/470] Update code-docs.yml --- .github/workflows/code-docs.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/code-docs.yml b/.github/workflows/code-docs.yml index eca27ea..a47b00a 100644 --- a/.github/workflows/code-docs.yml +++ b/.github/workflows/code-docs.yml @@ -1,9 +1,9 @@ --- name: ZI Code Documentation on: - workflow_dispatch: - schedule: - - cron: "30 4 * * 4" +# workflow_dispatch: +# schedule: +# - cron: "30 4 * * 4" jobs: doxygen: From 43d3206985a614e27d11d667a784bec6542ad7e0 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 00:53:05 +0000 Subject: [PATCH 008/470] Update code.yml --- .github/workflows/code.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 533f9c3..d69f98e 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -1,5 +1,5 @@ --- -name: ZI Code Documentation +name: Code Documentation on: workflow_dispatch: schedule: From 470fd7ddfbc7523329508c3de76ada78518b6a26 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 00:59:55 +0000 Subject: [PATCH 009/470] Update Makefile --- code/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/Makefile b/code/Makefile index 0579211..13c03df 100644 --- a/code/Makefile +++ b/code/Makefile @@ -1,7 +1,7 @@ all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc clone: clean - command git clone --depth 1 --branch main https://github.com/z-shell/zi + git clone --depth 1 --branch main https://github.com/z-shell/zi %.zwc: % zi/lib/zcompile $< @@ -31,6 +31,8 @@ html: clean: rm -vrf zi + +distclean: clean rm -vrf zsdoc/data .PHONY: all clean clone man pdf html adoc From 836f7ae4c810bcfc85583f2a720f69fc1ece862e Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:01:36 +0000 Subject: [PATCH 010/470] Update code-docs.yml --- .github/workflows/code-docs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/code-docs.yml b/.github/workflows/code-docs.yml index a47b00a..a991749 100644 --- a/.github/workflows/code-docs.yml +++ b/.github/workflows/code-docs.yml @@ -1,7 +1,8 @@ --- name: ZI Code Documentation + on: -# workflow_dispatch: + workflow_dispatch: # schedule: # - cron: "30 4 * * 4" From 845f6a34872fb07f1841c1daac09e9f25b77f352 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:12:59 +0000 Subject: [PATCH 011/470] Update code.yml --- .github/workflows/code.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index d69f98e..11d7ab4 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -25,17 +25,12 @@ jobs: - uses: actions/checkout@v2 with: token: ${{ secrets.GITHUB_TOKEN }} - - name: Clone repository - run: | - git clone https://github.com/z-shell/zi.git zi - - name: Parse scripts and generate Asciidoc documents - run: | - make -C zi/docs doc - - name: Generate PDF from Asciidoc documents - run: | - make -C code adoc - make -C code pdf - make -C code clean + - name: Generate Asciidoc + run: make -C zi/docs doc + - name: Generate PDF + run: make -C code/zsdoc pdf + - name: Cleanup + run: make -C code clean - name: Tar Code documentation run: tar cvzf code.tar.gz code - name: Upload code.tar.gz @@ -60,7 +55,7 @@ jobs: uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "Code Documentation Update" - branch: code-docs + branch: main # See https://git-scm.com/docs/git-commit#_options commit_options: '--no-verify --signoff' # See the `pathspec`-documentation for git From f905c7b605a257514925282078a96b8e980a7837 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:15:20 +0000 Subject: [PATCH 012/470] Update code.yml --- .github/workflows/code.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 11d7ab4..150fa22 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -26,7 +26,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} - name: Generate Asciidoc - run: make -C zi/docs doc + run: make -C code adoc - name: Generate PDF run: make -C code/zsdoc pdf - name: Cleanup From f5810569b74f43a5f54521e3fe5b97d2d046eb79 Mon Sep 17 00:00:00 2001 From: Z-Shell ZI Date: Tue, 14 Dec 2021 01:17:59 +0000 Subject: [PATCH 013/470] Code Documentation Update Signed-off-by: Z-Shell Bot --- code/asciidoc.log | 1 + code/zsdoc/asciidoc/autoload.zsh.adoc | 50 +- code/zsdoc/asciidoc/install.zsh.adoc | 592 +++++------ code/zsdoc/asciidoc/side.zsh.adoc | 10 +- code/zsdoc/asciidoc/zi.zsh.adoc | 948 +++++++++--------- code/zsdoc/data/call_tree.zsd | 2 +- code/zsdoc/data/rev_call_tree.zsd | 6 +- .../data/trees/autoload.zsh/.zi-delete.tree | 4 +- .../trees/autoload.zsh/.zi-self-update.tree | 4 +- .../autoload.zsh/.zi-update-all-parallel.tree | 4 +- .../.zi-update-or-status-all.tree | 4 +- .../autoload.zsh/.zi-update-or-status.tree | 2 +- .../data/trees/install.zsh/.zi-extract.tree | 6 +- .../trees/install.zsh/.zi-get-package.tree | 6 +- .../install.zsh/.zi-install-completions.tree | 4 +- .../install.zsh/.zi-setup-plugin-dir.tree | 6 +- .../trees/install.zsh/.zi-update-snippet.tree | 2 +- .../.zi-exists-physically-message.tree | 4 +- .../data/trees/zi.zsh/.zi-load-plugin.tree | 4 +- .../data/trees/zi.zsh/.zi-load-snippet.tree | 4 +- code/zsdoc/data/trees/zi.zsh/.zi-load.tree | 4 +- .../trees/zi.zsh/:zi-tmp-subst-autoload.tree | 4 +- code/zsdoc/data/trees/zi.zsh/@autoload.tree | 4 +- .../zsdoc/data/trees/zi.zsh/Script_Body_.tree | 6 +- code/zsdoc/data/trees/zi.zsh/zi-turbo.tree | 10 +- code/zsdoc/data/trees/zi.zsh/zi.tree | 10 +- 26 files changed, 851 insertions(+), 850 deletions(-) create mode 100644 code/asciidoc.log diff --git a/code/asciidoc.log b/code/asciidoc.log new file mode 100644 index 0000000..9020223 --- /dev/null +++ b/code/asciidoc.log @@ -0,0 +1 @@ +Last update: [] diff --git a/code/zsdoc/asciidoc/autoload.zsh.adoc b/code/zsdoc/asciidoc/autoload.zsh.adoc index 41c5c04..834b74c 100644 --- a/code/zsdoc/asciidoc/autoload.zsh.adoc +++ b/code/zsdoc/asciidoc/autoload.zsh.adoc @@ -26,8 +26,8 @@ FUNCTIONS .zi-check-which-completions-are-installed .zi-clear-completions .zi-clear-report-for - .zi-compiled .zi-compile-uncompile-all + .zi-compiled .zi-confirm .zi-control-menu .zi-create @@ -336,8 +336,8 @@ Uses feature(s): _setopt_ Called by: - zi.zsh/zi zi.zsh/.zi-prepare-home + zi.zsh/zi .zi-clear-report-for ~~~~~~~~~~~~~~~~~~~~ @@ -359,20 +359,21 @@ Called by: .zi-unload -.zi-compiled -~~~~~~~~~~~~ +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. User-action entry point. ____ -Has 23 line(s). Calls functions: +Has 19 line(s). Calls functions: - .zi-compiled + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -382,21 +383,20 @@ Called by: zi.zsh/zi -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ +.zi-compiled +~~~~~~~~~~~~ ____ - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. User-action entry point. ____ -Has 19 line(s). Calls functions: +Has 23 line(s). Calls functions: - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin + .zi-compiled |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -486,9 +486,9 @@ Has 93 line(s). Calls functions: .zi-delete |-- side.zsh/.zi-compute-ice + |-- zi.zsh/+zi-prehelp-usage-message |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-parse-opts - `-- zi.zsh/+zi-prehelp-usage-message + `-- zi.zsh/.zi-parse-opts Uses feature(s): _setopt_ @@ -1077,8 +1077,8 @@ ____ Has 43 line(s). Calls functions: .zi-self-update - |-- zi.zsh/.zi-get-mtime-into - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into Uses feature(s): _setopt_, _source_, _zcompile_ @@ -1359,8 +1359,8 @@ Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, Called by: - zi.zsh/zi zi.zsh/.zi-run-task + zi.zsh/zi .zi-unregister-plugin ~~~~~~~~~~~~~~~~~~~~~ @@ -1393,8 +1393,8 @@ Has 63 line(s). Calls functions: .zi-update-all-parallel |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ @@ -1428,8 +1428,8 @@ Has 263 line(s). Calls functions: |-- side.zsh/.zi-exists-physically-message |-- side.zsh/.zi-store-ices |-- side.zsh/.zi-two-paths - |-- zi.zsh/.zi-any-to-user-plugin |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin `-- zi.zsh/.zi-set-m-func Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ @@ -1458,9 +1458,9 @@ Has 96 line(s). Calls functions: .zi-update-or-status-all |-- install.zsh/.zi-compinit |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-get-mtime-into - `-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into Uses feature(s): _setopt_, _source_ diff --git a/code/zsdoc/asciidoc/install.zsh.adoc b/code/zsdoc/asciidoc/install.zsh.adoc index 8dad434..4d06554 100644 --- a/code/zsdoc/asciidoc/install.zsh.adoc +++ b/code/zsdoc/asciidoc/install.zsh.adoc @@ -13,38 +13,38 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- - ∞zi-atclone-hook .zi-at-eval - ∞zi-atpull-e-hook - ∞zi-atpull-hook .zi-compile-plugin - ∞zi-compile-plugin-hook .zi-compinit - zicp - ∞zi-cp-hook .zi-download-file-stdout .zi-download-snippet .zi-extract - ziextract - ∞zi-extract-hook .zi-forget-completion .zi-get-cygwin-package .zi-get-latest-gh-r-url-part .zi-get-package .zi-get-url-mtime .zi-install-completions - ∞zi-make-ee-hook - ∞zi-make-e-hook - ∞zi-make-hook .zi-mirror-using-svn - zimv - ∞zi-mv-hook .zi-parse-json - ∞zi-ps-on-update-hook - ∞zi-reset-hook .zi-setup-plugin-dir .zi-update-snippet + zicp + ziextract + zimv zpextract + ∞zi-atclone-hook + ∞zi-atpull-e-hook + ∞zi-atpull-hook + ∞zi-compile-plugin-hook + ∞zi-cp-hook + ∞zi-extract-hook + ∞zi-make-e-hook + ∞zi-make-ee-hook + ∞zi-make-hook + ∞zi-mv-hook + ∞zi-ps-on-update-hook + ∞zi-reset-hook AUTOLOAD compinit DETAILS @@ -57,24 +57,6 @@ Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bou Uses feature(s): _source_ -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-at-eval ~~~~~~~~~~~ @@ -96,40 +78,6 @@ Called by: ∞zi-atpull-e-hook ∞zi-atpull-hook -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compile-plugin ~~~~~~~~~~~~~~~~~~ @@ -157,22 +105,6 @@ Called by: autoload.zsh/.zi-compile-uncompile-all zi.zsh/zi -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-compile-plugin-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-compile-plugin-hook - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compinit ~~~~~~~~~~~~ @@ -198,44 +130,8 @@ Called by: .zi-install-completions autoload.zsh/.zi-uninstall-completions autoload.zsh/.zi-update-or-status-all - zi.zsh/zi zi.zsh/.zi-prepare-home - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -∞zi-cp-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-cp-hook [[[ -____ - -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + zi.zsh/zi .zi-download-file-stdout ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -296,9 +192,9 @@ ____ Has 22 line(s). Calls functions: .zi-extract - |-- ziextract - |   `-- zi.zsh/+zi-message - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- ziextract + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ @@ -306,51 +202,6 @@ Called by: ∞zi-extract-hook -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 274 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-forget-completion ~~~~~~~~~~~~~~~~~~~~~ @@ -429,10 +280,10 @@ ____ Has 194 line(s). Calls functions: .zi-get-package - |-- ziextract - |   `-- zi.zsh/+zi-message |-- zi.zsh/+zi-message - `-- zi.zsh/@zi-substitute + |-- zi.zsh/@zi-substitute + `-- ziextract + `-- zi.zsh/+zi-message Uses feature(s): _eval_, _setopt_, _trap_ @@ -480,8 +331,8 @@ Has 61 line(s). Calls functions: .zi-install-completions |-- side.zsh/.zi-any-colorify-as-uspl2 |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ @@ -491,54 +342,6 @@ Called by: .zi-setup-plugin-dir zi.zsh/zi -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-ee-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-e-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-mirror-using-svn ~~~~~~~~~~~~~~~~~~~~ @@ -562,160 +365,357 @@ Called by: .zi-download-snippet -zimv -~~~~ +.zi-parse-json +~~~~~~~~~~~~~~ ____ - ]]] - FUNCTION zimv [[[ + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. ____ -Has 3 line(s). Calls functions: +Has 102 line(s). Calls functions: - zimv - `-- zicp + .zi-parse-json -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Uses feature(s): _setopt_ -∞zi-mv-hook -~~~~~~~~~~~ +Called by: + + .zi-get-package + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-mv-hook [[[ + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin ____ -Has 21 line(s). Calls functions: +Has 189 line(s). Calls functions: - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- ziextract + `-- zi.zsh/+zi-message -Uses feature(s): _setopt_ +Uses feature(s): _setopt_, _trap_ -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Called by: -.zi-parse-json -~~~~~~~~~~~~~~ + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. + ]]] + FUNCTION: .zi-update-snippet [[[ ____ -Has 102 line(s). Calls functions: +Has 72 line(s). Calls functions: - .zi-parse-json + .zi-update-snippet + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. Uses feature(s): _setopt_ Called by: - .zi-get-package + zimv -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ +_Environment variables used:_ zi.zsh -> ZPFX + +ziextract +~~~~~~~~~ ____ - FUNCTION: ∞zi-ps-on-update-hook [[[ + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file ____ -Has 14 line(s). Calls functions: +Has 274 line(s). Calls functions: - ∞zi-ps-on-update-hook + ziextract `-- zi.zsh/+zi-message -Uses feature(s): _eval_ +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -∞zi-reset-hook -~~~~~~~~~~~~~~ +zpextract +~~~~~~~~~ ____ ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ + FUNCTION: zpextract [[[ ____ -Has 79 line(s). Calls functions: +Has 1 line(s). Calls functions: - ∞zi-reset-hook - `-- zi.zsh/+zi-message + zpextract + `-- ziextract + `-- zi.zsh/+zi-message -Uses feature(s): _eval_ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ - $1 - user - $2 - plugin + FUNCTION: ∞zi-atpull-hook [[[ ____ -Has 189 line(s). Calls functions: +Has 2 line(s). Calls functions: - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- ziextract - |   `-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/+zi-message + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown -Uses feature(s): _setopt_, _trap_ +Uses feature(s): _setopt_ -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-cp-hook +~~~~~~~~~~~ ____ - ]]] - FUNCTION: .zi-update-snippet [[[ + FUNCTION: ∞zi-cp-hook [[[ ____ -Has 72 line(s). Calls functions: +Has 24 line(s). Calls functions: - .zi-update-snippet - |-- zi.zsh/.zi-get-object-path - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-pack-ice + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute -Uses feature(s): _eval_, _setopt_ +Uses feature(s): _setopt_ -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - autoload.zsh/.zi-update-or-status-snippet +∞zi-extract-hook +~~~~~~~~~~~~~~~~ -zpextract -~~~~~~~~~ +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ ____ ]]] - FUNCTION: zpextract [[[ + FUNCTION: ∞zi-reset-opt-hook [[[ ____ -Has 1 line(s). Calls functions: +Has 79 line(s). Calls functions: - zpextract - `-- ziextract - `-- zi.zsh/+zi-message + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). diff --git a/code/zsdoc/asciidoc/side.zsh.adoc b/code/zsdoc/asciidoc/side.zsh.adoc index b80bdb7..da9afa2 100644 --- a/code/zsdoc/asciidoc/side.zsh.adoc +++ b/code/zsdoc/asciidoc/side.zsh.adoc @@ -54,8 +54,8 @@ Called by: .zi-exists-physically-message autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled autoload.zsh/.zi-create autoload.zsh/.zi-exists-message autoload.zsh/.zi-get-completion-owner-uspl2col @@ -110,8 +110,8 @@ Called by: autoload.zsh/.zi-delete autoload.zsh/.zi-edit autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-snippet + autoload.zsh/.zi-update-or-status install.zsh/.zi-compile-plugin .zi-countdown @@ -137,8 +137,8 @@ Called by: install.zsh/∞zi-atclone-hook install.zsh/∞zi-atpull-e-hook install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-ee-hook install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook install.zsh/∞zi-make-hook .zi-exists-physically @@ -183,9 +183,9 @@ ____ Has 22 line(s). Calls functions: .zi-exists-physically-message + |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-pid - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ diff --git a/code/zsdoc/asciidoc/zi.zsh.adoc b/code/zsdoc/asciidoc/zi.zsh.adoc index c9bd488..6f1cba4 100644 --- a/code/zsdoc/asciidoc/zi.zsh.adoc +++ b/code/zsdoc/asciidoc/zi.zsh.adoc @@ -13,20 +13,16 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- - @autoload - pmodload - zi + +zi-deploy-message + +zi-message + +zi-prehelp-usage-message + -zi_scheduler_add_sh .zi-add-fpath .zi-add-report .zi-any-to-pid .zi-any-to-user-plugin - zicdclear - zicdreplay - zicompdef .zi-compdef-clear .zi-compdef-replay - zicompinit - +zi-deploy-message .zi-diff .zi-diff-env .zi-diff-functions @@ -47,38 +43,42 @@ FUNCTIONS .zi-load-plugin .zi-load-snippet .zi-main-message-formatter - +zi-message .zi-pack-ice .zi-parse-opts - +zi-prehelp-usage-message .zi-prepare-home - @zi-register-annex - @zi-register-hook .zi-register-plugin - :zi-reload-and-run .zi-run .zi-run-task - -zi_scheduler_add_sh .zi-set-m-func .zi-setup-params .zi-submit-turbo - @zi-substitute + .zi-tmp-subst-off + .zi-tmp-subst-on + .zi-util-shands-path + :zi-reload-and-run :zi-tmp-subst-alias :zi-tmp-subst-autoload :zi-tmp-subst-bindkey :zi-tmp-subst-compdef - .zi-tmp-subst-off - .zi-tmp-subst-on :zi-tmp-subst-zle :zi-tmp-subst-zstyle + @autoload + @zi-register-annex + @zi-register-hook + @zi-substitute + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + pmodload + zi zi-turbo - .zi-util-shands-path + zicdclear + zicdreplay + zicompdef + zicompinit zpcdclear zpcdreplay zpcompdef zpcompinit - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update AUTOLOAD add-zsh-hook AUTOLOAD compinit AUTOLOAD is-at-least @@ -93,104 +93,116 @@ Script Body Has 202 line(s). Calls functions: Script-Body + |-- +zi-message + |-- @zi-register-hook |-- add-zsh-hook |-- autoload.zsh/.zi-module - |-- is-at-least - |-- +zi-message - `-- @zi-register-hook + `-- is-at-least Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ _Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR -@autoload -~~~~~~~~~ ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ ____ - ]]] - FUNCTION: @autoload. [[[ + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked ____ -Has 3 line(s). Calls functions: +Has 13 line(s). Doesn't call other functions. - @autoload - `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message +Uses feature(s): _read_, _zle_ -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Called by: -pmodload -~~~~~~~~ + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + ++zi-message +~~~~~~~~~~~ ____ - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. + FUNCTION: +zi-message. [[[ ____ -Has 15 line(s). Calls functions: - - pmodload +Has 14 line(s). Doesn't call other functions. -Uses feature(s): _zstyle_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi-prehelp-usage-message + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + Script-Body + zi + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + install.zsh/ziextract + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message -zi -~~ ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. + FUNCTION: +zi-prehelp-usage-message. [[[ ____ -Has 547 line(s). Calls functions: +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: zi - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - |-- install.zsh/.zi-install-completions - |-- +zi-message - `-- +zi-prehelp-usage-message - `-- +zi-message + autoload.zsh/.zi-delete -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ -Called by: +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ - zi-turbo +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). .zi-add-fpath ~~~~~~~~~~~~~ @@ -281,8 +293,8 @@ Called by: :zi-tmp-subst-autoload autoload.zsh/.zi-any-to-uspl2 autoload.zsh/.zi-changes - autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled autoload.zsh/.zi-create autoload.zsh/.zi-delete autoload.zsh/.zi-find-completions-of-plugin @@ -304,52 +316,6 @@ Called by: _Environment variables used:_ ZPFX -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompdef -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. -____ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compdef-clear ~~~~~~~~~~~~~~~~~ @@ -366,8 +332,8 @@ Has 3 line(s). Calls functions: Called by: - zicdclear zi + zicdclear zpcdclear .zi-compdef-replay @@ -388,70 +354,29 @@ Uses feature(s): _compdef_ Called by: - zicdreplay zi + zicdreplay zpcdreplay -zicompinit -~~~~~~~~~~ +.zi-diff +~~~~~~~~ ____ - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types ____ -Has 1 line(s). Calls functions: +Has 4 line(s). Calls functions: - zicompinit - `-- compinit + .zi-diff -Uses feature(s): _autoload_, _compinit_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-load-plugin -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked -____ - -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall - -.zi-diff -~~~~~~~~ - -____ - - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types -____ - -Has 4 line(s). Calls functions: - - .zi-diff - -Called by: - - .zi-load-plugin - -.zi-diff-env -~~~~~~~~~~~~ +.zi-diff-env +~~~~~~~~~~~~ ____ @@ -690,9 +615,9 @@ ____ Has 76 line(s). Calls functions: .zi-load + |-- +zi-deploy-message |-- install.zsh/.zi-get-package - |-- install.zsh/.zi-setup-plugin-dir - `-- +zi-deploy-message + `-- install.zsh/.zi-setup-plugin-dir Uses feature(s): _eval_, _setopt_, _source_, _zle_ @@ -752,8 +677,8 @@ Has 107 line(s). Calls functions: .zi-load-plugin `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ @@ -775,18 +700,18 @@ ____ Has 173 line(s). Calls functions: .zi-load-snippet - |-- install.zsh/.zi-download-snippet |-- +zi-deploy-message - `-- +zi-message + |-- +zi-message + `-- install.zsh/.zi-download-snippet Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ Called by: - pmodload .zi-load-object .zi-load .zi-run-task + pmodload .zi-main-message-formatter ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -800,54 +725,6 @@ Has 18 line(s). Doesn't call other functions. Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -+zi-message -~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message. [[[ -____ - -Has 14 line(s). Doesn't call other functions. - -Called by: - - Script-Body - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - +zi-prehelp-usage-message - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - zi - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/ziextract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message - .zi-pack-ice ~~~~~~~~~~~~ @@ -881,24 +758,6 @@ ____ Has 2 line(s). Doesn't call other functions. -Called by: - - zi - autoload.zsh/.zi-delete - -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-prehelp-usage-message. [[[ -____ - -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - Called by: zi @@ -927,34 +786,6 @@ Called by: _Environment variables used:_ ZPFX -@zi-register-annex -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 4 line(s). Doesn't call other functions. - -Called by: - - Script-Body - .zi-register-plugin ~~~~~~~~~~~~~~~~~~~ @@ -975,31 +806,6 @@ Called by: .zi-load -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-run ~~~~~~~ @@ -1051,53 +857,6 @@ Called by: @zi-scheduler -@zi-scheduler -~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ - -Has 7 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-set-m-func ~~~~~~~~~~~~~~ @@ -1154,76 +913,130 @@ Called by: zi -@zi-substitute -~~~~~~~~~~~~~~ +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ ____ - FUNCTION: @zi-substitute. [[[ + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). ____ -Has 36 line(s). Doesn't call other functions. +Has 17 line(s). Doesn't call other functions. -Uses feature(s): _setopt_ +Uses feature(s): _setopt_, _unfunction_ Called by: - autoload.zsh/.zi-at-eval - install.zsh/∞zi-atclone-hook - install.zsh/.zi-at-eval - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/.zi-get-package - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX + .zi-load-plugin -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. ____ -Has 30 line(s). Calls functions: +Has 29 line(s). Doesn't call other functions. - :zi-tmp-subst-alias +Uses feature(s): _source_ -Uses feature(s): _alias_, _setopt_, _zparseopts_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-load-plugin -:zi-tmp-subst-autoload -~~~~~~~~~~~~~~~~~~~~~~ +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-autoload. [[[ - Function defined to hijack plugin's calls to the `autoload' builtin. - - The hijacking is not only to gather report data, but also to. + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-autoload +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-autoload. [[[ + Function defined to hijack plugin's calls to the `autoload' builtin. + + The hijacking is not only to gather report data, but also to. run custom `autoload' function, that doesn't need FPATH. ____ Has 106 line(s). Calls functions: :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ Called by: - @autoload .zi-load-plugin + @autoload :zi-tmp-subst-bindkey ~~~~~~~~~~~~~~~~~~~~~ @@ -1264,81 +1077,251 @@ Uses feature(s): _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-tmp-subst-off +:zi-tmp-subst-zle ~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). ____ -Has 17 line(s). Doesn't call other functions. +Has 33 line(s). Calls functions: -Uses feature(s): _setopt_, _unfunction_ + :zi-tmp-subst-zle -Called by: +Uses feature(s): _setopt_, _zle_ - .zi-load-plugin +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). ____ -Has 29 line(s). Doesn't call other functions. +Has 19 line(s). Calls functions: -Uses feature(s): _source_ + :zi-tmp-subst-zstyle -Called by: +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - .zi-load-plugin +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-zle +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook ~~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. - The hijacking is to gather report data (which is used in unload). ____ -Has 33 line(s). Calls functions: +Has 74 line(s). *Is a precmd hook*. Calls functions: - :zi-tmp-subst-zle + @zi-scheduler + `-- add-zsh-hook -Uses feature(s): _setopt_, _zle_ +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ +@zi-substitute +~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/.zi-at-eval + install.zsh/.zi-get-package + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ - The hijacking is to gather report data (which is used in unload). + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard ____ -Has 19 line(s). Calls functions: +Has 2 line(s). Calls functions: - :zi-tmp-subst-zstyle + @zsh-plugin-run-on-unload -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + zi-turbo ~~~~~~~~ @@ -1354,12 +1337,15 @@ Has 1 line(s). Calls functions: zi-turbo `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message |-- autoload.zsh/.zi-analytics-menu |-- autoload.zsh/.zi-cdisable |-- autoload.zsh/.zi-cenable |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-control-menu |-- autoload.zsh/.zi-help |-- autoload.zsh/.zi-list-bindkeys @@ -1385,31 +1371,76 @@ Has 1 line(s). Calls functions: |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - |-- install.zsh/.zi-install-completions - |-- +zi-message - `-- +zi-prehelp-usage-message - `-- +zi-message + `-- install.zsh/.zi-install-completions Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ +zicdclear +~~~~~~~~~ ____ - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. ____ -Has 8 line(s). Doesn't call other functions. +Has 1 line(s). Calls functions: -Uses feature(s): _setopt_ + zicdclear -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-any-to-pid +zicdreplay +~~~~~~~~~~ -_Environment variables used:_ ZPFX +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). zpcdclear ~~~~~~~~~ @@ -1455,37 +1486,6 @@ Uses feature(s): _autoload_, _compinit_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-unload - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - add-zsh-hook ~~~~~~~~~~~~ @@ -1509,8 +1509,8 @@ Uses feature(s): _autoload_, _getopts_ Called by: - Script-Body @zi-scheduler + Script-Body compinit ~~~~~~~~ @@ -1560,7 +1560,7 @@ Has 56 line(s). Doesn't call other functions. Called by: - Script-Body :zi-tmp-subst-autoload :zi-tmp-subst-bindkey + Script-Body diff --git a/code/zsdoc/data/call_tree.zsd b/code/zsdoc/data/call_tree.zsd index ab341f1..5189498 100644 --- a/code/zsdoc/data/call_tree.zsd +++ b/code/zsdoc/data/call_tree.zsd @@ -7,8 +7,8 @@ autoload.zsh/.zi-cenable: autoload.zsh/.zi-check-comp-consistency autoload.zsh/ autoload.zsh/.zi-changes: zi.zsh/.zi-any-to-user-plugin side.zsh/.zi-exists-physically-message autoload.zsh/.zi-clear-completions: autoload.zsh/.zi-prepare-readlink autoload.zsh/.zi-get-completion-owner side.zsh/.zi-any-colorify-as-uspl2 autoload.zsh/.zi-clear-report-for: autoload.zsh/.zi-any-to-uspl2 -autoload.zsh/.zi-compiled: zi.zsh/.zi-any-to-user-plugin side.zsh/.zi-any-colorify-as-uspl2 autoload.zsh/.zi-compile-uncompile-all: zi.zsh/.zi-any-to-user-plugin side.zsh/.zi-any-colorify-as-uspl2 install.zsh/.zi-compile-plugin autoload.zsh/.zi-uncompile-plugin +autoload.zsh/.zi-compiled: zi.zsh/.zi-any-to-user-plugin side.zsh/.zi-any-colorify-as-uspl2 autoload.zsh/.zi-create: zi.zsh/.zi-any-to-user-plugin side.zsh/.zi-any-colorify-as-uspl2 side.zsh/.zi-exists-physically autoload.zsh/.zi-delete: zi.zsh/.zi-parse-opts zi.zsh/+zi-prehelp-usage-message autoload.zsh/.zi-confirm side.zsh/.zi-compute-ice zi.zsh/.zi-any-to-user-plugin autoload.zsh/.zi-edit: side.zsh/.zi-compute-ice diff --git a/code/zsdoc/data/rev_call_tree.zsd b/code/zsdoc/data/rev_call_tree.zsd index 86d65d3..0b16144 100644 --- a/code/zsdoc/data/rev_call_tree.zsd +++ b/code/zsdoc/data/rev_call_tree.zsd @@ -46,12 +46,12 @@ side.zsh/.zi-exists-physically-message: autoload.zsh/.zi-update-or-status auto side.zsh/.zi-first: autoload.zsh/.zi-glance autoload.zsh/.zi-stress side.zsh/.zi-store-ices: autoload.zsh/.zi-update-or-status side.zsh/.zi-two-paths: autoload.zsh/.zi-update-or-status -zi.zsh/.zi-any-to-user-plugin: autoload.zsh/.zi-unregister-plugin autoload.zsh/.zi-any-to-uspl2 autoload.zsh/.zi-find-completions-of-plugin autoload.zsh/.zi-unload autoload.zsh/.zi-show-report autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-all autoload.zsh/.zi-update-all-parallel autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-uncompile-plugin autoload.zsh/.zi-delete autoload.zsh/.zi-changes autoload.zsh/.zi-create autoload.zsh/.zi-glance autoload.zsh/.zi-stress zi.zsh/+zi-deploy-message: autoload.zsh/.zi-recall +zi.zsh/+zi-message: autoload.zsh/.zi-uninstall-completions autoload.zsh/.zi-self-update autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-all autoload.zsh/.zi-update-all-parallel autoload.zsh/.zi-wait-for-update-jobs autoload.zsh/.zi-show-zstatus autoload.zsh/.zi-cd autoload.zsh/.zi-build-module +zi.zsh/+zi-prehelp-usage-message: autoload.zsh/.zi-delete +zi.zsh/.zi-any-to-user-plugin: autoload.zsh/.zi-unregister-plugin autoload.zsh/.zi-any-to-uspl2 autoload.zsh/.zi-find-completions-of-plugin autoload.zsh/.zi-unload autoload.zsh/.zi-show-report autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-all autoload.zsh/.zi-update-all-parallel autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-uncompile-plugin autoload.zsh/.zi-delete autoload.zsh/.zi-changes autoload.zsh/.zi-create autoload.zsh/.zi-glance autoload.zsh/.zi-stress zi.zsh/.zi-get-mtime-into: autoload.zsh/.zi-self-update autoload.zsh/.zi-update-or-status-all zi.zsh/.zi-get-object-path: autoload.zsh/.zi-get-path -zi.zsh/+zi-message: autoload.zsh/.zi-uninstall-completions autoload.zsh/.zi-self-update autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-all autoload.zsh/.zi-update-all-parallel autoload.zsh/.zi-wait-for-update-jobs autoload.zsh/.zi-show-zstatus autoload.zsh/.zi-cd autoload.zsh/.zi-build-module zi.zsh/.zi-parse-opts: autoload.zsh/.zi-delete -zi.zsh/+zi-prehelp-usage-message: autoload.zsh/.zi-delete zi.zsh/.zi-set-m-func: autoload.zsh/.zi-update-or-status zi.zsh/@zi-substitute: autoload.zsh/.zi-at-eval diff --git a/code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree b/code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree index 0e2f85e..996776f 100644 --- a/code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree +++ b/code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree @@ -1,7 +1,7 @@ .zi-delete |-- side.zsh/.zi-compute-ice +|-- zi.zsh/+zi-prehelp-usage-message |-- zi.zsh/.zi-any-to-user-plugin -|-- zi.zsh/.zi-parse-opts -`-- zi.zsh/+zi-prehelp-usage-message +`-- zi.zsh/.zi-parse-opts 4 directories, 0 files diff --git a/code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree b/code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree index 338c25c..58e9eaf 100644 --- a/code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree +++ b/code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree @@ -1,5 +1,5 @@ .zi-self-update -|-- zi.zsh/.zi-get-mtime-into -`-- zi.zsh/+zi-message +|-- zi.zsh/+zi-message +`-- zi.zsh/.zi-get-mtime-into 2 directories, 0 files diff --git a/code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree b/code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree index 6e252d2..00445f3 100644 --- a/code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree +++ b/code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree @@ -1,6 +1,6 @@ .zi-update-all-parallel |-- side.zsh/.zi-any-colorify-as-uspl2 -|-- zi.zsh/.zi-any-to-user-plugin -`-- zi.zsh/+zi-message +|-- zi.zsh/+zi-message +`-- zi.zsh/.zi-any-to-user-plugin 3 directories, 0 files diff --git a/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree b/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree index ed0b39f..da215bf 100644 --- a/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree +++ b/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree @@ -1,8 +1,8 @@ .zi-update-or-status-all |-- install.zsh/.zi-compinit |-- side.zsh/.zi-any-colorify-as-uspl2 +|-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin -|-- zi.zsh/.zi-get-mtime-into -`-- zi.zsh/+zi-message +`-- zi.zsh/.zi-get-mtime-into 5 directories, 0 files diff --git a/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree b/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree index b75a478..f973550 100644 --- a/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree +++ b/code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree @@ -7,8 +7,8 @@ |-- side.zsh/.zi-exists-physically-message |-- side.zsh/.zi-store-ices |-- side.zsh/.zi-two-paths -|-- zi.zsh/.zi-any-to-user-plugin |-- zi.zsh/+zi-message +|-- zi.zsh/.zi-any-to-user-plugin `-- zi.zsh/.zi-set-m-func 11 directories, 0 files diff --git a/code/zsdoc/data/trees/install.zsh/.zi-extract.tree b/code/zsdoc/data/trees/install.zsh/.zi-extract.tree index 59223d5..137c0d3 100644 --- a/code/zsdoc/data/trees/install.zsh/.zi-extract.tree +++ b/code/zsdoc/data/trees/install.zsh/.zi-extract.tree @@ -1,6 +1,6 @@ .zi-extract -|-- ziextract -|   `-- zi.zsh/+zi-message -`-- zi.zsh/+zi-message +|-- zi.zsh/+zi-message +`-- ziextract + `-- zi.zsh/+zi-message 3 directories, 0 files diff --git a/code/zsdoc/data/trees/install.zsh/.zi-get-package.tree b/code/zsdoc/data/trees/install.zsh/.zi-get-package.tree index 6738392..0415871 100644 --- a/code/zsdoc/data/trees/install.zsh/.zi-get-package.tree +++ b/code/zsdoc/data/trees/install.zsh/.zi-get-package.tree @@ -1,7 +1,7 @@ .zi-get-package -|-- ziextract -|   `-- zi.zsh/+zi-message |-- zi.zsh/+zi-message -`-- zi.zsh/@zi-substitute +|-- zi.zsh/@zi-substitute +`-- ziextract + `-- zi.zsh/+zi-message 4 directories, 0 files diff --git a/code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree b/code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree index 0486905..c7faa95 100644 --- a/code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree +++ b/code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree @@ -1,7 +1,7 @@ .zi-install-completions |-- side.zsh/.zi-any-colorify-as-uspl2 |-- side.zsh/.zi-exists-physically-message -|-- zi.zsh/.zi-any-to-user-plugin -`-- zi.zsh/+zi-message +|-- zi.zsh/+zi-message +`-- zi.zsh/.zi-any-to-user-plugin 4 directories, 0 files diff --git a/code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree b/code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree index 82d9fd2..5a82383 100644 --- a/code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree +++ b/code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree @@ -1,9 +1,9 @@ .zi-setup-plugin-dir |-- side.zsh/.zi-any-colorify-as-uspl2 |-- side.zsh/.zi-store-ices -|-- ziextract -|   `-- zi.zsh/+zi-message +|-- zi.zsh/+zi-message |-- zi.zsh/.zi-get-object-path -`-- zi.zsh/+zi-message +`-- ziextract + `-- zi.zsh/+zi-message 6 directories, 0 files diff --git a/code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree b/code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree index a105d70..d62c440 100644 --- a/code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree +++ b/code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree @@ -1,6 +1,6 @@ .zi-update-snippet -|-- zi.zsh/.zi-get-object-path |-- zi.zsh/+zi-message +|-- zi.zsh/.zi-get-object-path `-- zi.zsh/.zi-pack-ice 3 directories, 0 files diff --git a/code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree b/code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree index 559a529..d860511 100644 --- a/code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree +++ b/code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree @@ -1,6 +1,6 @@ .zi-exists-physically-message +|-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-pid -|-- zi.zsh/.zi-any-to-user-plugin -`-- zi.zsh/+zi-message +`-- zi.zsh/.zi-any-to-user-plugin 3 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree b/code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree index 43be6f8..4248261 100644 --- a/code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree +++ b/code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree @@ -1,6 +1,6 @@ .zi-load-plugin `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least 3 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree b/code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree index b105cfe..3941169 100644 --- a/code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree +++ b/code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree @@ -1,6 +1,6 @@ .zi-load-snippet -|-- install.zsh/.zi-download-snippet |-- +zi-deploy-message -`-- +zi-message +|-- +zi-message +`-- install.zsh/.zi-download-snippet 3 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/.zi-load.tree b/code/zsdoc/data/trees/zi.zsh/.zi-load.tree index e6703d0..bbdd55f 100644 --- a/code/zsdoc/data/trees/zi.zsh/.zi-load.tree +++ b/code/zsdoc/data/trees/zi.zsh/.zi-load.tree @@ -1,6 +1,6 @@ .zi-load +|-- +zi-deploy-message |-- install.zsh/.zi-get-package -|-- install.zsh/.zi-setup-plugin-dir -`-- +zi-deploy-message +`-- install.zsh/.zi-setup-plugin-dir 3 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree b/code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree index 7558068..55a904e 100644 --- a/code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree +++ b/code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree @@ -1,5 +1,5 @@ :zi-tmp-subst-autoload -|-- is-at-least -`-- +zi-message +|-- +zi-message +`-- is-at-least 2 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/@autoload.tree b/code/zsdoc/data/trees/zi.zsh/@autoload.tree index 24522cd..4fcbdd7 100644 --- a/code/zsdoc/data/trees/zi.zsh/@autoload.tree +++ b/code/zsdoc/data/trees/zi.zsh/@autoload.tree @@ -1,6 +1,6 @@ @autoload `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least 3 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/Script_Body_.tree b/code/zsdoc/data/trees/zi.zsh/Script_Body_.tree index 2c4a2eb..f096e5f 100644 --- a/code/zsdoc/data/trees/zi.zsh/Script_Body_.tree +++ b/code/zsdoc/data/trees/zi.zsh/Script_Body_.tree @@ -1,8 +1,8 @@ Script_Body_ +|-- +zi-message +|-- @zi-register-hook |-- add-zsh-hook |-- autoload.zsh/.zi-module -|-- is-at-least -|-- +zi-message -`-- @zi-register-hook +`-- is-at-least 5 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/zi-turbo.tree b/code/zsdoc/data/trees/zi.zsh/zi-turbo.tree index be22505..4bf40b4 100644 --- a/code/zsdoc/data/trees/zi.zsh/zi-turbo.tree +++ b/code/zsdoc/data/trees/zi.zsh/zi-turbo.tree @@ -1,11 +1,14 @@ zi-turbo `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message |-- autoload.zsh/.zi-analytics-menu |-- autoload.zsh/.zi-cdisable |-- autoload.zsh/.zi-cenable |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-control-menu |-- autoload.zsh/.zi-help |-- autoload.zsh/.zi-list-bindkeys @@ -31,9 +34,6 @@ zi-turbo |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - |-- install.zsh/.zi-install-completions - |-- +zi-message - `-- +zi-prehelp-usage-message - `-- +zi-message + `-- install.zsh/.zi-install-completions 36 directories, 0 files diff --git a/code/zsdoc/data/trees/zi.zsh/zi.tree b/code/zsdoc/data/trees/zi.zsh/zi.tree index e055d45..edcfa94 100644 --- a/code/zsdoc/data/trees/zi.zsh/zi.tree +++ b/code/zsdoc/data/trees/zi.zsh/zi.tree @@ -1,10 +1,13 @@ zi +|-- +zi-message +|-- +zi-prehelp-usage-message +|   `-- +zi-message |-- autoload.zsh/.zi-analytics-menu |-- autoload.zsh/.zi-cdisable |-- autoload.zsh/.zi-cenable |-- autoload.zsh/.zi-clear-completions -|-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-compile-uncompile-all +|-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-control-menu |-- autoload.zsh/.zi-help |-- autoload.zsh/.zi-list-bindkeys @@ -30,9 +33,6 @@ zi |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion -|-- install.zsh/.zi-install-completions -|-- +zi-message -`-- +zi-prehelp-usage-message - `-- +zi-message +`-- install.zsh/.zi-install-completions 35 directories, 0 files From c0b4170aefbc8b656eb970c48c1f4456a51be66d Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:19:53 +0000 Subject: [PATCH 014/470] Delete asciidoc.log --- code/asciidoc.log | 1 - 1 file changed, 1 deletion(-) delete mode 100644 code/asciidoc.log diff --git a/code/asciidoc.log b/code/asciidoc.log deleted file mode 100644 index 9020223..0000000 --- a/code/asciidoc.log +++ /dev/null @@ -1 +0,0 @@ -Last update: [] From 541c7bc7abb6d75fe153d3027d59f245bf16889c Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:21:22 +0000 Subject: [PATCH 015/470] Update README.md --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index eeeec55..4512fbd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,3 @@ # Documentation -- ZI Code documentation changes reflects every `Thursday 4:30 UTC` +- Code documentation updated every `Thursday 4:30 UTC` From 6464044400a26cede443488e0e693ca4c8c753f4 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 01:26:07 +0000 Subject: [PATCH 016/470] general --- code/.editorconfig => .editorconfig | 0 code/Makefile | 2 +- docs/COMMITLOG.md | 15 - docs/code/asciidoc/autoload.zsh.adoc | 1517 ------------------------- docs/code/asciidoc/install.zsh.adoc | 746 ------------ docs/code/asciidoc/side.zsh.adoc | 300 ----- docs/code/asciidoc/zi.zsh.adoc | 1566 -------------------------- docs/code/pdf/autoload.zsh.pdf | Bin 410492 -> 0 bytes docs/code/pdf/install.zsh.pdf | Bin 210079 -> 0 bytes docs/code/pdf/side.zsh.pdf | Bin 109159 -> 0 bytes docs/code/pdf/zi.zsh.pdf | Bin 379616 -> 0 bytes 11 files changed, 1 insertion(+), 4145 deletions(-) rename code/.editorconfig => .editorconfig (100%) delete mode 100644 docs/COMMITLOG.md delete mode 100644 docs/code/asciidoc/autoload.zsh.adoc delete mode 100644 docs/code/asciidoc/install.zsh.adoc delete mode 100644 docs/code/asciidoc/side.zsh.adoc delete mode 100644 docs/code/asciidoc/zi.zsh.adoc delete mode 100644 docs/code/pdf/autoload.zsh.pdf delete mode 100644 docs/code/pdf/install.zsh.pdf delete mode 100644 docs/code/pdf/side.zsh.pdf delete mode 100644 docs/code/pdf/zi.zsh.pdf diff --git a/code/.editorconfig b/.editorconfig similarity index 100% rename from code/.editorconfig rename to .editorconfig diff --git a/code/Makefile b/code/Makefile index 13c03df..74b1820 100644 --- a/code/Makefile +++ b/code/Makefile @@ -7,6 +7,7 @@ clone: clean zi/lib/zcompile $< adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh + rm -vrf zsdoc/data rm -vrf zsdoc/asciidoc/*.adoc zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ zi/zi.zsh \ @@ -15,7 +16,6 @@ adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/auto zi/lib/zsh/autoload.zsh @mkdir -p zsdoc/asciidoc mv -v zsdoc/*.adoc zsdoc/asciidoc/ - printf "Last update: [$(date '+%m/%d/%Y %H:%M:%S')]\n" >asciidoc.log man: rm -vrf zsdoc/man diff --git a/docs/COMMITLOG.md b/docs/COMMITLOG.md deleted file mode 100644 index fe5727c..0000000 --- a/docs/COMMITLOG.md +++ /dev/null @@ -1,15 +0,0 @@ -commit a482a42128862b1f10fcdb89f843d5fba6f261f7 -Author: Salvydas Lukosius -Date: 3 minutes ago - - new file: .github/workflows/code-docs.yml - new file: docs/COMMITLOG.md - new file: docs/README.md - new file: docs/code/asciidoc/autoload.zsh.adoc - new file: docs/code/asciidoc/install.zsh.adoc - new file: docs/code/asciidoc/side.zsh.adoc - new file: docs/code/asciidoc/zi.zsh.adoc - new file: docs/code/pdf/autoload.zsh.pdf - new file: docs/code/pdf/install.zsh.pdf - new file: docs/code/pdf/side.zsh.pdf - new file: docs/code/pdf/zi.zsh.pdf diff --git a/docs/code/asciidoc/autoload.zsh.adoc b/docs/code/asciidoc/autoload.zsh.adoc deleted file mode 100644 index 834b74c..0000000 --- a/docs/code/asciidoc/autoload.zsh.adoc +++ /dev/null @@ -1,1517 +0,0 @@ -autoload.zsh(1) -=============== -:compat-mode!: - -NAME ----- -autoload.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-analytics-menu - .zi-any-to-uspl2 - .zi-at-eval - .zi-build-module - .zi-cd - .zi-cdisable - .zi-cenable - .zi-changes - .zi-check-comp-consistency - .zi-check-which-completions-are-enabled - .zi-check-which-completions-are-installed - .zi-clear-completions - .zi-clear-report-for - .zi-compile-uncompile-all - .zi-compiled - .zi-confirm - .zi-control-menu - .zi-create - .zi-delete - .zi-diff-env-compute - .zi-diff-functions-compute - .zi-diff-options-compute - .zi-diff-parameter-compute - .zi-edit - .zi-exists-message - .zi-find-completions-of-plugin - .zi-format-env - .zi-format-functions - .zi-format-options - .zi-format-parameter - .zi-get-completion-owner - .zi-get-completion-owner-uspl2col - .zi-get-path - .zi-glance - .zi-help - .zi-list-bindkeys - .zi-list-compdef-replay - .zi-ls - .zi-module - .zi-pager - .zi-prepare-readlink - .zi-recall - .zi-recently - .zi-restore-extendedglob - .zi-run-delete-hooks - .zi-save-set-extendedglob - .zi-search-completions - .zi-self-update - .zi-show-all-reports - .zi-show-completions - .zi-show-debug-report - .zi-show-registered-plugins - .zi-show-report - .zi-show-times - .zi-show-zstatus - .zi-stress - .zi-uncompile-plugin - .zi-uninstall-completions - .zi-unload - .zi-unregister-plugin - .zi-update-all-parallel - .zi-update-or-status - .zi-update-or-status-all - .zi-update-or-status-snippet - .zi-wait-for-update-jobs - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-analytics-menu -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-analytics-menu [[[ - Shows ❮ ZI ❯ analytics. - - User-action entry point. -____ - -Has 23 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-any-to-uspl2 -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-uspl2 [[[ - Converts given plugin-spec to format that's used in keys for hash tables. - So basically, creates string "user/plugin" (this format is called: uspl2). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 2 line(s). Calls functions: - - .zi-any-to-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-clear-report-for - .zi-exists-message - -.zi-at-eval -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-build-module -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-build-module [[[ - Performs ./configure && make on the module and displays information how to load the module in .zshrc. -____ - -Has 41 line(s). Calls functions: - - .zi-build-module - `-- zi.zsh/+zi-message - -Called by: - - .zi-module - -.zi-cd -~~~~~~ - -____ - - FUNCTION: .zi-cd [[[ - Jumps to plugin's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 15 line(s). Calls functions: - - .zi-cd - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-cdisable -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cdisable [[[ - Enables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 27 line(s). Calls functions: - - .zi-cdisable - -Called by: - - zi.zsh/zi - -.zi-cenable -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cenable [[[ - Disables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 26 line(s). Calls functions: - - .zi-cenable - -Called by: - - zi.zsh/zi - -.zi-changes -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-changes [[[ - Shows `git log` of given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-changes - |-- side.zsh/.zi-exists-physically-message - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-check-comp-consistency -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-comp-consistency [[[ - ❮ ZI ❯ creates symlink for each installed completion. - This function checks whether given completion (i.e. - file like "_mkdir") is indeed a symlink. Backup file - is a completion that is disabled - has the leading "_" removed. - - $1 - path to completion within plugin's directory - $2 - path to backup file within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-check-which-completions-are-enabled -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-enabled [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is disabled - returns 0 or 1 on corresponding positions in reply. - - Uninstalled completions will be reported as "0" - i.e. disabled - - $1, ... - path to completion within plugin's directory -____ - -Has 10 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-check-which-completions-are-installed -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-installed [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is installed - returns 0 or 1 on corresponding positions in reply. - - $1, ... - path to completion within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-clear-completions -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-completions [[[ - Delete stray and improper completions. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 35 line(s). Calls functions: - - .zi-clear-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-clear-report-for -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-report-for [[[ - Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 23 line(s). Calls functions: - - .zi-clear-report-for - -Called by: - - .zi-unload - -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-compiled -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. - - User-action entry point. -____ - -Has 23 line(s). Calls functions: - - .zi-compiled - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-confirm -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-confirm [[[ - Prints given question, waits for "y" key, evals given expression if "y" obtained - - $1 - question - $2 - expression -____ - -Has 22 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _read_ - -Called by: - - .zi-delete - -.zi-control-menu -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-control-menu [[[ - Shows control options. - - User-action entry point. -____ - -Has 22 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-create -~~~~~~~~~~ - -____ - - FUNCTION: .zi-create [[[ - Creates a plugin, also on Github (if not "_local/name" plugin). - - User-action entry point. - - $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 103 line(s). Calls functions: - - .zi-create - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _autoload_, _setopt_, _vared_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-delete -~~~~~~~~~~ - -____ - - FUNCTION: .zi-delete [[[ - Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 93 line(s). Calls functions: - - .zi-delete - |-- side.zsh/.zi-compute-ice - |-- zi.zsh/+zi-prehelp-usage-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-parse-opts - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-diff-env-compute -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env-compute [[[ - Computes ZI_PATH, ZI_FPATH that hold (f)path components - added by plugin. Uses data gathered earlier by .zi-diff-env(). - - $1 - user/plugin -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-functions-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions-compute [[[ - Computes FUNCTIONS that holds new functions added by plugin. - Uses data gathered earlier by .zi-diff-functions(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-options-compute -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options-compute [[[ - Computes OPTIONS that holds options changed by plugin. - Uses data gathered earlier by .zi-diff-options(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-parameter-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter-compute [[[ - Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold - parameters created or changed (their type) by plugin. Uses - data gathered earlier by .zi-diff-parameter(). - - $1 - user/plugin -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-edit -~~~~~~~~ - -____ - - FUNCTION: .zi-edit [[[ - Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-edit - `-- side.zsh/.zi-compute-ice - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-exists-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-message [[[ - Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 7 line(s). Calls functions: - - .zi-exists-message - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-show-report - .zi-unload - -.zi-find-completions-of-plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-completions-of-plugin [[[ - Searches for completions owned by given plugin. - Returns them in `reply' array. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 5 line(s). Calls functions: - - .zi-find-completions-of-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-format-env -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-env [[[ - Creates one-column text about FPATH or PATH elements added when given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) - $2 - if 1, then examine PATH, if 2, then examine FPATH -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-functions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-functions [[[ - Creates a one or two columns text with functions created by given plugin. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 34 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-options -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-options [[[ - Creates one-column text about options that changed when plugin "$1" was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 19 line(s). Calls functions: - - .zi-format-options - -Called by: - - .zi-show-report - -.zi-format-parameter -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-parameter [[[ - Creates one column text that lists global parameters that changed when the given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-get-completion-owner -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner [[[ - Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. - - Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. - - :A will read the link "twice" and give the final repository - directory, possibly without username in the uspl format; readlink will read the link "once" - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 19 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-clear-completions - .zi-get-completion-owner-uspl2col - .zi-show-completions - -.zi-get-completion-owner-uspl2col -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner-uspl2col [[[ - For shortening of code - returns colorized plugin name - that owns given completion. - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 2 line(s). Calls functions: - - .zi-get-completion-owner-uspl2col - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-get-path -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-path [[[ - Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path - ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. -____ - -Has 5 line(s). Calls functions: - - .zi-get-path - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-cd - .zi-uninstall-completions - -.zi-glance -~~~~~~~~~~ - -____ - - FUNCTION: .zi-glance [[[ - Shows colorized source code of plugin. Is able to use pygmentize, - highlight, GNU source-highlight. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 37 line(s). Calls functions: - - .zi-glance - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-help -~~~~~~~~ - -____ - - FUNCTION: .zi-help [[[ - Shows usage information. - - User-action entry point. -____ - -Has 31 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-list-bindkeys -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-bindkeys [[[ -____ - -Has 39 line(s). Calls functions: - - .zi-list-bindkeys - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - zi.zsh/zi - -.zi-list-compdef-replay -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-compdef-replay [[[ - Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping - for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. - - User-action entry point. -____ - -Has 5 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-ls -~~~~~~ - -____ - - FUNCTION: .zi-ls [[[ -____ - -Has 17 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-module -~~~~~~~~~~ - -____ - - FUNCTION: .zi-module [[[ - Function that has sub-commands passed as long-options (with two dashes, --). - It's an attempt to plugin only this one function into `zi' function - defined in zi.zsh, to not make this file longer than it's needed. -____ - -Has 24 line(s). Calls functions: - - .zi-module - -Called by: - - .zi-build-module - zi.zsh/Script-Body - zi.zsh/zi - -.zi-pager -~~~~~~~~~ - -____ - - FUNCTION: .zi-pager [[[ - BusyBox less lacks the -X and -i options, so it can use more -____ - -Has 14 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-glance - .zi-self-update - .zi-update-or-status - -.zi-prepare-readlink -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-readlink [[[ - Prepares readlink command, used for establishing completion's owner. - - $REPLY = ":" or "readlink" -____ - -Has 4 line(s). Doesn't call other functions. - -Uses feature(s): _type_ - -Called by: - - .zi-cdisable - .zi-cenable - .zi-clear-completions - .zi-show-completions - -.zi-recall -~~~~~~~~~~ - -____ - - FUNCTION: .zi-recall [[[ -____ - -Has 33 line(s). Calls functions: - - .zi-recall - |-- side.zsh/.zi-compute-ice - `-- zi.zsh/+zi-deploy-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-recently -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-recently [[[ - Shows plugins that obtained commits in specified past time. - - User-action entry point. - - $1 - time spec, e.g. "1 week" -____ - -Has 23 line(s). Calls functions: - - .zi-recently - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-restore-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-restore-extendedglob [[[ - Restores extendedglob-option from state saved earlier. -____ - -Has 1 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-run-delete-hooks -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-delete-hooks [[[ -____ - -Has 17 line(s). Calls functions: - - .zi-run-delete-hooks - `-- side.zsh/.zi-countdown - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-save-set-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-save-set-extendedglob [[[ - Enables extendedglob-option first saving if it was already - enabled, for restoration of this state later. -____ - -Has 2 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-search-completions -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-search-completions [[[ - While .zi-show-completions() shows what completions are - installed, this functions searches through all plugin dirs - showing what's available in general (for installation). - - User-action entry point. -____ - -Has 39 line(s). Calls functions: - - .zi-search-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-self-update -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-self-update [[[ - Updates ❮ ZI ❯ code (does a git pull). - - User-action entry point. -____ - -Has 43 line(s). Calls functions: - - .zi-self-update - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_, _zcompile_ - -Called by: - - .zi-update-or-status-all - zi.zsh/zi - -.zi-show-all-reports -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-all-reports [[[ - Displays reports of all loaded plugins. - - User-action entry point. -____ - -Has 5 line(s). Calls functions: - - .zi-show-all-reports - -Called by: - - zi.zsh/zi - -.zi-show-completions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-completions [[[ - Display installed (enabled and disabled), completions. Detect - stray and improper ones. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 61 line(s). Calls functions: - - .zi-show-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-debug-report -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-debug-report [[[ - Displays dtrace report (data recorded in interactive session). - - User-action entry point. -____ - -Has 1 line(s). Calls functions: - - .zi-show-debug-report - -Called by: - - zi.zsh/zi - -.zi-show-registered-plugins -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-registered-plugins [[[ - Lists loaded plugins (subcommands list, loaded). - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-show-registered-plugins - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-report -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-report [[[ - Displays report of the plugin given. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 66 line(s). Calls functions: - - .zi-show-report - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-all-reports - .zi-show-debug-report - zi.zsh/zi - -.zi-show-times -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-times [[[ - Shows loading times of all loaded plugins. - - User-action entry point. -____ - -Has 51 line(s). Calls functions: - - .zi-show-times - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-zstatus -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-zstatus [[[ - Shows ❮ ZI ❯ status, i.e. number of loaded plugins, - of available completions, etc. - - User-action entry point. -____ - -Has 47 line(s). Calls functions: - - .zi-show-zstatus - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-stress -~~~~~~~~~~ - -____ - - FUNCTION: .zi-stress [[[ - Compiles plugin with various options on and off to see how well the code is written. The options are: - - NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 31 line(s). Calls functions: - - .zi-stress - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_, _zcompile_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-uncompile-plugin -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uncompile-plugin [[[ - Uncompiles given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 20 line(s). Calls functions: - - .zi-uncompile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compile-uncompile-all - zi.zsh/zi - -.zi-uninstall-completions -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uninstall-completions [[[ - Removes all completions of given plugin from Zshell (i.e. from FPATH). - The FPATH is typically `~/.zi/completions/'. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 39 line(s). Calls functions: - - .zi-uninstall-completions - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-unload -~~~~~~~~~~ - -____ - - FUNCTION: .zi-unload [[[ - 0. Call the Zsh Plugin's Standard *_plugin_unload function - 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update - 1. Delete bindkeys (...) - 2. Delete Zstyles - 3. Restore options - 4. Remove aliases - 5. Restore Zle state - 6. Unfunction functions (created by plugin) - 7. Clean-up FPATH and PATH - 8. Delete created variables - 9. Forget the plugin - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 380 line(s). Calls functions: - - .zi-unload - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ - -Called by: - - zi.zsh/.zi-run-task - zi.zsh/zi - -.zi-unregister-plugin -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-unregister-plugin [[[ - Removes the plugin from ZI_REGISTERED_PLUGINS array and from the - zsh_loaded_plugins array (managed according to the plugin standard) -____ - -Has 5 line(s). Calls functions: - - .zi-unregister-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-unload - -.zi-update-all-parallel -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-in-parallel [[[ -____ - -Has 63 line(s). Calls functions: - - .zi-update-all-parallel - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-update-or-status-all - -.zi-update-or-status -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status [[[ - Updates (git pull) or does `git status' for given plugin. - - User-action entry point. - - $1 - "status" for status, other for update - $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $3 - plugin (only when $1 - i.e. user - given) -____ - -Has 263 line(s). Calls functions: - - .zi-update-or-status - |-- install.zsh/.zi-get-latest-gh-r-url-part - |-- install.zsh/.zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-exists-physically - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-store-ices - |-- side.zsh/.zi-two-paths - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-set-m-func - -Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - zi.zsh/zi - -.zi-update-or-status-all -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-all [[[ - Updates (git pull) or does `git status` for all existing plugins. - This includes also plugins that are not loaded into Zsh (but exist - on disk). Also updates (i.e. redownloads) snippets. - - User-action entry point. -____ - -Has 96 line(s). Calls functions: - - .zi-update-or-status-all - |-- install.zsh/.zi-compinit - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-update-or-status-snippet -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-snippet [[[ - - Implements update or status operation for snippet given by URL. - - $1 - "status" or "update" - $2 - snippet URL -____ - -Has 28 line(s). Calls functions: - - .zi-update-or-status-snippet - |-- install.zsh/.zi-update-snippet - `-- side.zsh/.zi-compute-ice - -Uses feature(s): _source_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - .zi-update-or-status - -.zi-wait-for-update-jobs -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-wait-for-update-jobs [[[ -____ - -Has 14 line(s). Calls functions: - - .zi-wait-for-update-jobs - `-- zi.zsh/+zi-message - -Uses feature(s): _wait_ - -Called by: - - .zi-update-all-parallel - diff --git a/docs/code/asciidoc/install.zsh.adoc b/docs/code/asciidoc/install.zsh.adoc deleted file mode 100644 index 4d06554..0000000 --- a/docs/code/asciidoc/install.zsh.adoc +++ /dev/null @@ -1,746 +0,0 @@ -install.zsh(1) -============== -:compat-mode!: - -NAME ----- -install.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-at-eval - .zi-compile-plugin - .zi-compinit - .zi-download-file-stdout - .zi-download-snippet - .zi-extract - .zi-forget-completion - .zi-get-cygwin-package - .zi-get-latest-gh-r-url-part - .zi-get-package - .zi-get-url-mtime - .zi-install-completions - .zi-mirror-using-svn - .zi-parse-json - .zi-setup-plugin-dir - .zi-update-snippet - zicp - ziextract - zimv - zpextract - ∞zi-atclone-hook - ∞zi-atpull-e-hook - ∞zi-atpull-hook - ∞zi-compile-plugin-hook - ∞zi-cp-hook - ∞zi-extract-hook - ∞zi-make-e-hook - ∞zi-make-ee-hook - ∞zi-make-hook - ∞zi-mv-hook - ∞zi-ps-on-update-hook - ∞zi-reset-hook -AUTOLOAD compinit - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-at-eval -~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Called by: - - ∞zi-atpull-e-hook - ∞zi-atpull-hook - -.zi-compile-plugin -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-plugin [[[ - Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 84 line(s). Calls functions: - - .zi-compile-plugin - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-first - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _zcompile_ - -Called by: - - ∞zi-compile-plugin-hook - autoload.zsh/.zi-compile-uncompile-all - zi.zsh/zi - -.zi-compinit -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compinit [[[ - User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. - After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. - - No arguments. -____ - -Has 26 line(s). Calls functions: - - .zi-compinit - |-- compinit - `-- zi.zsh/+zi-message - -Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ - -Called by: - - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-or-status-all - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-download-file-stdout -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-file-stdout [[[ - Downloads file to stdout. Supports following backend commands: - curl, wget, lftp, lynx. Used by snippet loading. -____ - -Has 46 line(s). Calls functions: - - .zi-download-file-stdout - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - .zi-get-cygwin-package - .zi-get-package - .zi-setup-plugin-dir - -.zi-download-snippet -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-snippet [[[ - Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, - with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows - to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. -____ - -Has 309 line(s). Calls functions: - - .zi-download-snippet - |-- side.zsh/.zi-store-ices - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _zcompile_ - -Called by: - - .zi-update-snippet - zi.zsh/.zi-load-snippet - -.zi-extract -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-extract() [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-extract - |-- zi.zsh/+zi-message - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - ∞zi-extract-hook - -.zi-forget-completion -~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-forget-completion [[[ - Implements alternation of Zsh state so that already initialized - completion stops being visible to Zsh. - - $1 - completion function name, e.g. "_cp"; can also be "cp" -____ - -Has 20 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-compinit - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - zi.zsh/zi - -.zi-get-cygwin-package -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-cygwin-package [[[ -____ - -Has 70 line(s). Calls functions: - - .zi-get-cygwin-package - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - -.zi-get-latest-gh-r-url-part -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-latest-gh-r-url-part [[[ - Gets version string of latest release of given Github package. - Connects to Github releases page. -____ - -Has 101 line(s). Calls functions: - - .zi-get-latest-gh-r-url-part - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - autoload.zsh/.zi-update-or-status - -.zi-get-package -~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-package [[[ -____ - -Has 194 line(s). Calls functions: - - .zi-get-package - |-- zi.zsh/+zi-message - |-- zi.zsh/@zi-substitute - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _trap_ - -Called by: - - zi.zsh/.zi-load - -_Environment variables used:_ zi.zsh -> ZPFX - -.zi-get-url-mtime -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-url-mtime [[[ - For the given URL returns the date in the Last-Modified header as a time stamp -____ - -Has 34 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - -.zi-install-completions -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-install-completions [[[ - Installs all completions of given plugin. After that they are - visible to `compinit'. Visible completions can be selectively - disabled and enabled. User can access completion data with - `clist' or `completions' subcommand. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $3 - if 1, then reinstall, otherwise only install completions that aren't there -____ - -Has 61 line(s). Calls functions: - - .zi-install-completions - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - .zi-setup-plugin-dir - zi.zsh/zi - -.zi-mirror-using-svn -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-mirror-using-svn [[[ - Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', - in normal mode invokes `svn checkout --non-interactive -q '. In test mode only - compares remote and local revision and outputs true if update is needed. - - $1 - URL - $2 - mode, "" - normal, "-u" - update, "-t" - test - $3 - subdirectory (not path) with working copy, needed for -t and -u -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - -.zi-parse-json -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. -____ - -Has 102 line(s). Calls functions: - - .zi-parse-json - -Uses feature(s): _setopt_ - -Called by: - - .zi-get-package - -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. - - $1 - user - $2 - plugin -____ - -Has 189 line(s). Calls functions: - - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_ - -Called by: - - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load - -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-update-snippet [[[ -____ - -Has 72 line(s). Calls functions: - - .zi-update-snippet - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/.zi-pack-ice - -Uses feature(s): _eval_, _setopt_ - -Called by: - - autoload.zsh/.zi-update-or-status-snippet - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 274 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -zimv -~~~~ - -____ - - ]]] - FUNCTION zimv [[[ -____ - -Has 3 line(s). Calls functions: - - zimv - `-- zicp - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zpextract [[[ -____ - -Has 1 line(s). Calls functions: - - zpextract - `-- ziextract - `-- zi.zsh/+zi-message - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-compile-plugin-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-compile-plugin-hook - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-cp-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-cp-hook [[[ -____ - -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-e-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-ee-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-mv-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-mv-hook [[[ -____ - -Has 21 line(s). Calls functions: - - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-ps-on-update-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-ps-on-update-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-reset-hook -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ -____ - -Has 79 line(s). Calls functions: - - ∞zi-reset-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - .zi-compinit - diff --git a/docs/code/asciidoc/side.zsh.adoc b/docs/code/asciidoc/side.zsh.adoc deleted file mode 100644 index da9afa2..0000000 --- a/docs/code/asciidoc/side.zsh.adoc +++ /dev/null @@ -1,300 +0,0 @@ -side.zsh(1) -=========== -:compat-mode!: - -NAME ----- -side.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-any-colorify-as-uspl2 - .zi-compute-ice - .zi-countdown - .zi-exists-physically - .zi-exists-physically-message - .zi-first - .zi-store-ices - .zi-two-paths -AUTOLOAD zmv - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -.zi-any-colorify-as-uspl2 -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-colorify-as-uspl2 [[[ - Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $REPLY = ANSI-colorified "user/plugin" string -____ - -Has 22 line(s). Calls functions: - - .zi-any-colorify-as-uspl2 - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-exists-message - autoload.zsh/.zi-get-completion-owner-uspl2col - autoload.zsh/.zi-list-bindkeys - autoload.zsh/.zi-recently - autoload.zsh/.zi-search-completions - autoload.zsh/.zi-show-completions - autoload.zsh/.zi-show-registered-plugins - autoload.zsh/.zi-show-times - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - zi.zsh/.zi-formatter-pid - -.zi-compute-ice -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compute-ice [[[ - Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, - taking priorities into account. Also returns path to snippet directory and optional name of snippet file - (only valid if ICE[svn] is not set). - - Can also pack resulting ices into ZI_SICE (see $2). - - $1 - URL (also plugin-spec) - $2 - "pack" or "nopack" or "pack-nf" - packing means ICE - wins with static ice; "pack-nf" means that disk-ices will - be ignored (no-file?) - $3 - name of output associative array, "ICE" is the default - $4 - name of output string parameter, to hold path to directory ("local_dir") - $5 - name of output string parameter, to hold filename ("filename") - $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") -____ - -Has 116 line(s). Calls functions: - - .zi-compute-ice - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-pack-ice - `-- zmv - -Uses feature(s): _autoload_, _setopt_, _zmv_ - -Called by: - - autoload.zsh/.zi-delete - autoload.zsh/.zi-edit - autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status-snippet - autoload.zsh/.zi-update-or-status - install.zsh/.zi-compile-plugin - -.zi-countdown -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-countdown [[[ - Displays a countdown 5...4... etc. and returns 0 if it - sucessfully reaches 0, or 1 if Ctrl-C will be pressed. -____ - -Has 14 line(s). Calls functions: - - .zi-countdown - `-- zi.zsh/+zi-message - -Uses feature(s): _trap_ - -Called by: - - autoload.zsh/.zi-run-delete-hooks - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-atpull-e-hook - install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - -.zi-exists-physically -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically [[[ - Checks if directory of given plugin exists in PLUGIN_DIR. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-create - autoload.zsh/.zi-update-or-status - -.zi-exists-physically-message -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically-message [[[ - Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 22 line(s). Calls functions: - - .zi-exists-physically-message - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-changes - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - -.zi-first -~~~~~~~~~ - -____ - - FUNCTION: .zi-first [[[ - Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct - ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching - is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-first - |-- zi.zsh/.zi-any-to-pid - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-find-other-matches - `-- zi.zsh/.zi-get-object-path - -Called by: - - .zi-two-paths - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - install.zsh/.zi-compile-plugin - -.zi-store-ices -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-store-ices [[[ - Saves ice mods in given hash onto disk. - - $1 - directory where to create / delete files - $2 - name of hash that holds values - $3 - additional keys of hash to store, space separated - $4 - additional keys of hash to store, empty-meaningful ices, space separated - $5 - the URL, if applicable - $6 - the mode (1 - svn, 0 - single file), if applicable -____ - -Has 28 line(s). Doesn't call other functions. - -Called by: - - autoload.zsh/.zi-update-or-status - install.zsh/.zi-download-snippet - install.zsh/.zi-setup-plugin-dir - -.zi-two-paths -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-two-paths [[[ - Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), - returns 2 possible paths for further examination -____ - -Has 22 line(s). Calls functions: - - .zi-two-paths - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-update-or-status - -zmv -~~~ - -____ - - function zmv { - zmv, zcp, zln: - - This is a multiple move based on zsh pattern matching. To get the full - power of it, you need a postgraduate degree in zsh. However, simple - tasks work OK, so if that's all you need, here are some basic examples: - zmv '(*).txt' '$1.lis' - Rename foo.txt to foo.lis, etc. The parenthesis is the thing that - gets replaced by the $1 (not the `*', as happens in mmv, and note the - `$', not `=', so that you need to quote both words). -____ - -Has 299 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _getopts_, _read_, _setopt_ - -Called by: - - .zi-compute-ice - diff --git a/docs/code/asciidoc/zi.zsh.adoc b/docs/code/asciidoc/zi.zsh.adoc deleted file mode 100644 index 6f1cba4..0000000 --- a/docs/code/asciidoc/zi.zsh.adoc +++ /dev/null @@ -1,1566 +0,0 @@ -zi.zsh(1) -========= -:compat-mode!: - -NAME ----- -zi.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - +zi-deploy-message - +zi-message - +zi-prehelp-usage-message - -zi_scheduler_add_sh - .zi-add-fpath - .zi-add-report - .zi-any-to-pid - .zi-any-to-user-plugin - .zi-compdef-clear - .zi-compdef-replay - .zi-diff - .zi-diff-env - .zi-diff-functions - .zi-diff-options - .zi-diff-parameter - .zi-find-other-matches - .zi-formatter-bar - .zi-formatter-bar-util - .zi-formatter-pid - .zi-formatter-th-bar - .zi-formatter-url - .zi-get-mtime-into - .zi-get-object-path - .zi-ice - .zi-load - .zi-load-ices - .zi-load-object - .zi-load-plugin - .zi-load-snippet - .zi-main-message-formatter - .zi-pack-ice - .zi-parse-opts - .zi-prepare-home - .zi-register-plugin - .zi-run - .zi-run-task - .zi-set-m-func - .zi-setup-params - .zi-submit-turbo - .zi-tmp-subst-off - .zi-tmp-subst-on - .zi-util-shands-path - :zi-reload-and-run - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - @autoload - @zi-register-annex - @zi-register-hook - @zi-substitute - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - pmodload - zi - zi-turbo - zicdclear - zicdreplay - zicompdef - zicompinit - zpcdclear - zpcdreplay - zpcompdef - zpcompinit -AUTOLOAD add-zsh-hook -AUTOLOAD compinit -AUTOLOAD is-at-least -PRECMD-HOOK @zi-scheduler - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 202 line(s). Calls functions: - - Script-Body - |-- +zi-message - |-- @zi-register-hook - |-- add-zsh-hook - |-- autoload.zsh/.zi-module - `-- is-at-least - -Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ - -_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR - -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked -____ - -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall - -+zi-message -~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message. [[[ -____ - -Has 14 line(s). Doesn't call other functions. - -Called by: - - +zi-prehelp-usage-message - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - Script-Body - zi - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - install.zsh/ziextract - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message - -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-prehelp-usage-message. [[[ -____ - -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - -Called by: - - zi - autoload.zsh/.zi-delete - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ - -Has 7 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-add-fpath -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-fpath. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-add-fpath - -Called by: - - zi - -.zi-add-report -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-report. [[[ - Adds a report line for given plugin. - - $1 - uspl2, i.e. user/plugin - $2, ... - the text -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - -.zi-any-to-pid -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-pid. [[[ -____ - -Has 21 line(s). Calls functions: - - .zi-any-to-pid - -Uses feature(s): _setopt_ - -Called by: - - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-exists-physically-message - side.zsh/.zi-first - -.zi-any-to-user-plugin -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-user-plugin. [[[ - Allows elastic plugin-spec across the code. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - - Returns user and plugin in $reply. - -____ - -Has 25 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-add-fpath - .zi-get-object-path - .zi-load - .zi-run - :zi-tmp-subst-autoload - autoload.zsh/.zi-any-to-uspl2 - autoload.zsh/.zi-changes - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-delete - autoload.zsh/.zi-find-completions-of-plugin - autoload.zsh/.zi-glance - autoload.zsh/.zi-show-report - autoload.zsh/.zi-stress - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-unregister-plugin - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-compute-ice - side.zsh/.zi-exists-physically-message - side.zsh/.zi-exists-physically - side.zsh/.zi-first - -_Environment variables used:_ ZPFX - -.zi-compdef-clear -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-clear. [[[ - Implements user-exposed functionality to clear gathered compdefs. -____ - -Has 3 line(s). Calls functions: - - .zi-compdef-clear - `-- +zi-message - -Called by: - - zi - zicdclear - zpcdclear - -.zi-compdef-replay -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-replay. [[[ - Runs gathered compdef calls. This allows to run `compinit' after loading plugins. -____ - -Has 16 line(s). Calls functions: - - .zi-compdef-replay - `-- +zi-message - -Uses feature(s): _compdef_ - -Called by: - - zi - zicdreplay - zpcdreplay - -.zi-diff -~~~~~~~~ - -____ - - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types -____ - -Has 4 line(s). Calls functions: - - .zi-diff - -Called by: - - .zi-load-plugin - -.zi-diff-env -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env. [[[ - Implements detection of change in PATH and FPATH. - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - .zi-load-plugin - -.zi-diff-functions -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions. [[[ - Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-options -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options. [[[ - Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-parameter -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter. [[[ - Implements detection of change in any parameter's existence and type. - Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-find-other-matches -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-other-matches. [[[ - Plugin's main source file is in general `name.plugin.zsh'. However, - there can be different conventions, if that file is not found, then - this functions examines other conventions in the most sane order. -____ - -Has 17 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - side.zsh/.zi-first - -.zi-formatter-bar -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-bar-util -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar-util. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-formatter-bar - .zi-formatter-th-bar - -.zi-formatter-pid -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-pid. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-formatter-pid - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _source_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-th-bar -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-th-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-th-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-url -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-url. [[[ -____ - -Has 19 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-get-mtime-into -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-mtime-into. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - Script-Body - autoload.zsh/.zi-self-update - autoload.zsh/.zi-update-or-status-all - -.zi-get-object-path -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-object-path. [[[ -____ - -Has 23 line(s). Calls functions: - - .zi-get-object-path - -Called by: - - .zi-load-ices - .zi-load-snippet - .zi-run - zi - autoload.zsh/.zi-get-path - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - side.zsh/.zi-first - side.zsh/.zi-two-paths - -.zi-ice -~~~~~~~ - -____ - - FUNCTION: .zi-ice. [[[ - Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for - next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. -____ - -Has 12 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load -~~~~~~~~ - -____ - - FUNCTION: .zi-load. [[[ - Implements the exposed-to-user action of loading a plugin. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin name, if the third format is used -____ - -Has 76 line(s). Calls functions: - - .zi-load - |-- +zi-deploy-message - |-- install.zsh/.zi-get-package - `-- install.zsh/.zi-setup-plugin-dir - -Uses feature(s): _eval_, _setopt_, _source_, _zle_ - -Called by: - - .zi-load-object - .zi-run-task - -.zi-load-ices -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-ices. [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-load-ices - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load-object -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-object. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-load-object - -Called by: - - zi - -.zi-load-plugin -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-plugin. [[[ - Lower-level function for loading a plugin. - - $1 - user - $2 - plugin - $3 - mode (light or load) -____ - -Has 107 line(s). Calls functions: - - .zi-load-plugin - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ - -Called by: - - .zi-load - -.zi-load-snippet -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-snippet. [[[ - Implements the exposed-to-user action of loading a snippet. - - $1 - url (can be local, absolute path). -____ - -Has 173 line(s). Calls functions: - - .zi-load-snippet - |-- +zi-deploy-message - |-- +zi-message - `-- install.zsh/.zi-download-snippet - -Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ - -Called by: - - .zi-load-object - .zi-load - .zi-run-task - pmodload - -.zi-main-message-formatter -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message-formatter [[[ -____ - -Has 18 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-pack-ice -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-pack-ice. [[[ - Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for - second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin - or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - install.zsh/.zi-update-snippet - side.zsh/.zi-compute-ice - -.zi-parse-opts -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: +zi-parse-opts. [[[ -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - zi - autoload.zsh/.zi-delete - -.zi-prepare-home -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-home. [[[ - Creates all directories needed by ZI, first checks if they already exist. -____ - -Has 38 line(s). Calls functions: - - .zi-prepare-home - |-- autoload.zsh/.zi-clear-completions - `-- install.zsh/.zi-compinit - -Uses feature(s): _source_ - -Called by: - - Script-Body - -_Environment variables used:_ ZPFX - -.zi-register-plugin -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-register-plugin. [[[ - Adds the plugin to ZI_REGISTERED_PLUGINS array and to the - zsh_loaded_plugins array (managed according to the plugin standard: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). -____ - -Has 20 line(s). Calls functions: - - .zi-register-plugin - `-- +zi-message - -Called by: - - .zi-load - -.zi-run -~~~~~~~ - -____ - - FUNCTION: .zi-run. [[[ - Run code inside plugin's folder - It uses the `correct' parameter from upper's scope zi(). -____ - -Has 24 line(s). Calls functions: - - .zi-run - `-- +zi-message - -Uses feature(s): _eval_, _setopt_ - -Called by: - - zi - -.zi-run-task -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-task. [[[ - A backend, worker function of .zi-scheduler. It obtains the tasks - index and a few of its properties (like the type: plugin, snippet, - service plugin, service snippet) and executes it first checking for - additional conditions (like non-numeric wait'' ice). - - $1 - the pass number, either 1st or 2nd pass - $2 - the time assigned to the task - $3 - type: plugin, snippet, service plugin, service snippet - $4 - task's index in the ZI[WAIT_ICE_...] fields - $5 - mode: load or light - $6 - the plugin-spec or snippet URL or alias name (from id-as'') -____ - -Has 45 line(s). Calls functions: - - .zi-run-task - `-- autoload.zsh/.zi-unload - -Uses feature(s): _eval_, _source_, _zle_, _zpty_ - -Called by: - - @zi-scheduler - -.zi-set-m-func -~~~~~~~~~~~~~~ - -____ - - FUNCTION:.zi-set-m-func() [[[ - Sets and withdraws the temporary, atclone/atpull time function `m`. -____ - -Has 17 line(s). Calls functions: - - .zi-set-m-func - `-- +zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-update-or-status - -.zi-setup-params -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-params. [[[ -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - -.zi-submit-turbo -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-submit-turbo. [[[ - If `zi load`, `zi light` or `zi snippet` will be - preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' - ice-mods then the plugin or snipped is to be loaded in turbo-mode, - and this function adds it to internal data structures, so that - @zi-scheduler can run (load, unload) this as a task. -____ - -Has 16 line(s). Doesn't call other functions. - -Called by: - - zi - -.zi-tmp-subst-off -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). -____ - -Has 17 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-load-plugin - -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _source_ - -Called by: - - .zi-load-plugin - -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. -____ - -Has 8 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-any-to-pid - -_Environment variables used:_ ZPFX - -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 30 line(s). Calls functions: - - :zi-tmp-subst-alias - -Uses feature(s): _alias_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-autoload -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-autoload. [[[ - Function defined to hijack plugin's calls to the `autoload' builtin. - - The hijacking is not only to gather report data, but also to. - run custom `autoload' function, that doesn't need FPATH. -____ - -Has 106 line(s). Calls functions: - - :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ - -Called by: - - .zi-load-plugin - @autoload - -:zi-tmp-subst-bindkey -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-bindkey. [[[ - Function defined to hijack plugin's calls to the `bindkey' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 107 line(s). Calls functions: - - :zi-tmp-subst-bindkey - `-- is-at-least - -Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-compdef -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-compdef. [[[ - Function defined to hijack plugin's calls to the `compdef' function. - The hijacking is not only for reporting, but also to save compdef - calls so that `compinit' can be called after loading plugins. -____ - -Has 5 line(s). Calls functions: - - :zi-tmp-subst-compdef - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zle -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 33 line(s). Calls functions: - - :zi-tmp-subst-zle - -Uses feature(s): _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 19 line(s). Calls functions: - - :zi-tmp-subst-zstyle - -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@autoload -~~~~~~~~~ - -____ - - ]]] - FUNCTION: @autoload. [[[ -____ - -Has 3 line(s). Calls functions: - - @autoload - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-annex -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 4 line(s). Doesn't call other functions. - -Called by: - - Script-Body - -@zi-scheduler -~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-substitute -~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-substitute. [[[ -____ - -Has 36 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - autoload.zsh/.zi-at-eval - install.zsh/.zi-at-eval - install.zsh/.zi-get-package - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX - -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-unload - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -pmodload -~~~~~~~~ - -____ - - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. -____ - -Has 15 line(s). Calls functions: - - pmodload - -Uses feature(s): _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zi -~~ - -____ - - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. -____ - -Has 547 line(s). Calls functions: - - zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ - -Called by: - - zi-turbo - -zi-turbo -~~~~~~~~ - -____ - - FUNCTION: zi-turbo. [[[ - With zi-turbo first argument is a wait time and suffix, i.e. "0a". - Anything that doesn't match will be passed as if it were an ice mod. - Default ices depth'3' and lucid, allowed values [0-9][a-d]. -____ - -Has 1 line(s). Calls functions: - - zi-turbo - `-- zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompdef -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. -____ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompinit -~~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. -____ - -Has 1 line(s). Calls functions: - - zicompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdclear -~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdreplay -~~~~~~~~~~ - -____ - - ]]] - Compatibility functions. [[[ - zinit() { zi "$@"; } -____ - -Has 1 line(s). Calls functions: - - zpcdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompdef -~~~~~~~~~ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompinit -~~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -add-zsh-hook -~~~~~~~~~~~~ - -____ - - Add to HOOK the given FUNCTION. - HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, - zshexit, zsh_directory_name (the _functions subscript is not required). - - With -d, remove the function from the hook instead; delete the hook - variable if it is empty. - - -D behaves like -d, but pattern characters are active in the - function name, so any matching function will be deleted from the hook. - -____ - -Has 93 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _getopts_ - -Called by: - - @zi-scheduler - Script-Body - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - zi - zicompinit - zpcompinit - -is-at-least -~~~~~~~~~~~ - -____ - - - Test whether $ZSH_VERSION (or some value of your choice, if a second argument - is provided) is greater than or equal to x.y.z-r (in argument one). In fact, - it'll accept any dot/dash-separated string of numbers as its second argument - and compare it to the dot/dash-separated first argument. Leading non-number - parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered - when the comparison is done; only the numbers matter. Any left-out segments - in the first argument that are present in the version string compared are - considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. - -____ - -Has 56 line(s). Doesn't call other functions. - -Called by: - - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - Script-Body - diff --git a/docs/code/pdf/autoload.zsh.pdf b/docs/code/pdf/autoload.zsh.pdf deleted file mode 100644 index 1d3ebe2867f4ae59246d11dd2c63ded7e97d7066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410492 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 -
-
-

NAME

-
-
-

autoload.zsh - a shell script

-
-
-
-
-

SYNOPSIS

-
-
-

Documentation automatically generated with `zsdoc'

-
-
-
-
-

FUNCTIONS

-
-
-
-
.zi-analytics-menu
-.zi-any-to-uspl2
-.zi-at-eval
-.zi-build-module
-.zi-cd
-.zi-cdisable
-.zi-cenable
-.zi-changes
-.zi-check-comp-consistency
-.zi-check-which-completions-are-enabled
-.zi-check-which-completions-are-installed
-.zi-clear-completions
-.zi-clear-report-for
-.zi-compiled
-.zi-compile-uncompile-all
-.zi-confirm
-.zi-control-menu
-.zi-create
-.zi-delete
-.zi-diff-env-compute
-.zi-diff-functions-compute
-.zi-diff-options-compute
-.zi-diff-parameter-compute
-.zi-edit
-.zi-exists-message
-.zi-find-completions-of-plugin
-.zi-format-env
-.zi-format-functions
-.zi-format-options
-.zi-format-parameter
-.zi-get-completion-owner
-.zi-get-completion-owner-uspl2col
-.zi-get-path
-.zi-glance
-.zi-help
-.zi-list-bindkeys
-.zi-list-compdef-replay
-.zi-ls
-.zi-module
-.zi-pager
-.zi-prepare-readlink
-.zi-recall
-.zi-recently
-.zi-restore-extendedglob
-.zi-run-delete-hooks
-.zi-save-set-extendedglob
-.zi-search-completions
-.zi-self-update
-.zi-show-all-reports
-.zi-show-completions
-.zi-show-debug-report
-.zi-show-registered-plugins
-.zi-show-report
-.zi-show-times
-.zi-show-zstatus
-.zi-stress
-.zi-uncompile-plugin
-.zi-uninstall-completions
-.zi-unload
-.zi-unregister-plugin
-.zi-update-all-parallel
-.zi-update-or-status
-.zi-update-or-status-all
-.zi-update-or-status-snippet
-.zi-wait-for-update-jobs
-
-
-
-
-
-

DETAILS

-
-
-

Script Body

-
-

Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

-
-
-

Uses feature(s): source

-
-
-
zi-analytics-menu
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-analytics-menu [[[
-Shows ❮ ZI ❯ analytics.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 23 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-any-to-uspl2
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-any-to-uspl2 [[[
-Converts given plugin-spec to format that's used in keys for hash tables.
-So basically, creates string "user/plugin" (this format is called: uspl2).
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - (optional) plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
.zi-any-to-uspl2
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Called by:

-
-
-
-
.zi-clear-report-for
-.zi-exists-message
-
-
-
-
zi-at-eval
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-at-eval [[[
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-at-eval
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): eval

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-build-module
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-build-module [[[
-Performs ./configure && make on the module and displays information how to load the module in .zshrc.
-
-
-
-
-
-

Has 41 line(s). Calls functions:

-
-
-
-
.zi-build-module
-`-- zi.zsh/+zi-message
-
-
-
-

Called by:

-
-
-
-
.zi-module
-
-
-
-
zi-cd
-

~~

-
-
-
-
-
-
FUNCTION: .zi-cd [[[
-Jumps to plugin's directory (in ❮ ZI ❯ home directory).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 15 line(s). Calls functions:

-
-
-
-
.zi-cd
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-cdisable
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-cdisable [[[
-Enables given installed completion.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - e.g. "_mkdir" or "mkdir"
-
-
-
-
-
-

Has 27 line(s). Calls functions:

-
-
-
-
.zi-cdisable
-
-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-cenable
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-cenable [[[
-Disables given installed completion.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - e.g. "_mkdir" or "mkdir"
-
-
-
-
-
-

Has 26 line(s). Calls functions:

-
-
-
-
.zi-cenable
-
-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-changes
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-changes [[[
-Shows `git log` of given plugin.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 6 line(s). Calls functions:

-
-
-
-
.zi-changes
-|-- side.zsh/.zi-exists-physically-message
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-check-comp-consistency
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-check-comp-consistency [[[
-❮ ZI ❯ creates symlink for each installed completion.
-This function checks whether given completion (i.e.
-file like "_mkdir") is indeed a symlink. Backup file
-is a completion that is disabled - has the leading "_" removed.
-
-
-
-
-
$1 - path to completion within plugin's directory
-$2 - path to backup file within plugin's directory
-
-
-
-
-
-

Has 11 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-cdisable
-.zi-cenable
-
-
-
-
zi-check-which-completions-are-enabled
-

~~~~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-check-which-completions-are-enabled [[[
-For each argument that each should be a path to completion
-within a plugin's dir, it checks whether that completion
-is disabled - returns 0 or 1 on corresponding positions in reply.
-
-
-
-
-
Uninstalled completions will be reported as "0" - i.e. disabled
-
-
-
-
-
$1, ... - path to completion within plugin's directory
-
-
-
-
-
-

Has 10 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-check-which-completions-are-installed
-

~~~~~~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-check-which-completions-are-installed [[[
-For each argument that each should be a path to completion
-within a plugin's dir, it checks whether that completion
-is installed - returns 0 or 1 on corresponding positions in reply.
-
-
-
-
-
$1, ... - path to completion within plugin's directory
-
-
-
-
-
-

Has 11 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-clear-completions
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-clear-completions [[[
-Delete stray and improper completions.
-
-
-
-
-
Completions live even when plugin isn't loaded - if they are
-installed and enabled.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 35 line(s). Calls functions:

-
-
-
-
.zi-clear-completions
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-zi.zsh/.zi-prepare-home
-
-
-
-
zi-clear-report-for
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-clear-report-for [[[
-Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - (optional) plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 23 line(s). Calls functions:

-
-
-
-
.zi-clear-report-for
-
-
-
-

Called by:

-
-
-
-
.zi-unload
-
-
-
-
zi-compiled
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-compiled [[[
-Displays list of plugins that are compiled.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 23 line(s). Calls functions:

-
-
-
-
.zi-compiled
-|-- side.zsh/.zi-any-colorify-as-uspl2
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-compile-uncompile-all
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-compile-uncompile-all [[[
-Compiles or uncompiles all existing (on disk) plugins.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
.zi-compile-uncompile-all
-|-- install.zsh/.zi-compile-plugin
-|-- side.zsh/.zi-any-colorify-as-uspl2
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-confirm
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-confirm [[[
-Prints given question, waits for "y" key, evals given expression if "y" obtained
-
-
-
-
-
$1 - question
-$2 - expression
-
-
-
-
-
-

Has 22 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): eval, read

-
-
-

Called by:

-
-
-
-
.zi-delete
-
-
-
-
zi-control-menu
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-control-menu [[[
-Shows control options.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 22 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-create
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-create [[[
-Creates a plugin, also on Github (if not "_local/name" plugin).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - (optional) plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 103 line(s). Calls functions:

-
-
-
-
.zi-create
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- side.zsh/.zi-exists-physically
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): autoload, setopt, vared

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-delete
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-delete [[[
-Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 93 line(s). Calls functions:

-
-
-
-
.zi-delete
-|-- side.zsh/.zi-compute-ice
-|-- zi.zsh/.zi-any-to-user-plugin
-|-- zi.zsh/.zi-parse-opts
-`-- zi.zsh/+zi-prehelp-usage-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-diff-env-compute
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-env-compute [[[
-Computes ZI_PATH, ZI_FPATH that hold (f)path components
-added by plugin. Uses data gathered earlier by .zi-diff-env().
-
-
-
-
-
$1 - user/plugin
-
-
-
-
-
-

Has 28 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-.zi-unload
-
-
-
-
zi-diff-functions-compute
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-functions-compute [[[
-Computes FUNCTIONS that holds new functions added by plugin.
-Uses data gathered earlier by .zi-diff-functions().
-
-
-
-
-
$1 - user/plugin
-
-
-
-
-
-

Has 16 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-.zi-unload
-
-
-
-
zi-diff-options-compute
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-options-compute [[[
-Computes OPTIONS that holds options changed by plugin.
-Uses data gathered earlier by .zi-diff-options().
-
-
-
-
-
$1 - user/plugin
-
-
-
-
-
-

Has 16 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-.zi-unload
-
-
-
-
zi-diff-parameter-compute
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-parameter-compute [[[
-Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
-parameters created or changed (their type) by plugin. Uses
-data gathered earlier by .zi-diff-parameter().
-
-
-
-
-
$1 - user/plugin
-
-
-
-
-
-

Has 27 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-.zi-unload
-
-
-
-
zi-edit
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-edit [[[
-Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
.zi-edit
-`-- side.zsh/.zi-compute-ice
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-exists-message
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-exists-message [[[
-Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - (optional) plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 7 line(s). Calls functions:

-
-
-
-
.zi-exists-message
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Called by:

-
-
-
-
.zi-show-report
-.zi-unload
-
-
-
-
zi-find-completions-of-plugin
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-find-completions-of-plugin [[[
-Searches for completions owned by given plugin.
-Returns them in `reply' array.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-find-completions-of-plugin
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-format-env
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-format-env [[[
-Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
-$2 - if 1, then examine PATH, if 2, then examine FPATH
-
-
-
-
-
-

Has 15 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-format-functions
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-format-functions [[[
-Creates a one or two columns text with functions created by given plugin.
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
-
-
-
-
-
-

Has 34 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-format-options
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-format-options [[[
-Creates one-column text about options that changed when plugin "$1" was loaded.
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
.zi-format-options
-
-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-format-parameter
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-format-parameter [[[
-Creates one column text that lists global parameters that changed when the given plugin was loaded.
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
-
-
-
-
-
-

Has 29 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-report
-
-
-
-
zi-get-completion-owner
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-completion-owner [[[
-Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
-
-
-
-
-
Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
-
-
-
-
-
:A will read the link "twice" and give the final repository
-directory, possibly without username in the uspl format; readlink will read the link "once"
-
-
-
-
-
$1 - absolute path to completion file (in COMPLETIONS_DIR)
-$2 - readlink command (":" or "readlink")
-
-
-
-
-
-

Has 19 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-clear-completions
-.zi-get-completion-owner-uspl2col
-.zi-show-completions
-
-
-
-
zi-get-completion-owner-uspl2col
-

~~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-completion-owner-uspl2col [[[
-For shortening of code - returns colorized plugin name
-that owns given completion.
-
-
-
-
-
$1 - absolute path to completion file (in COMPLETIONS_DIR)
-$2 - readlink command (":" or "readlink")
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
.zi-get-completion-owner-uspl2col
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Called by:

-
-
-
-
.zi-cdisable
-.zi-cenable
-
-
-
-
zi-get-path
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-path [[[
-Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
-("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-get-path
-`-- zi.zsh/.zi-get-object-path
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-cd
-.zi-uninstall-completions
-
-
-
-
zi-glance
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-glance [[[
-Shows colorized source code of plugin. Is able to use pygmentize,
-highlight, GNU source-highlight.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 37 line(s). Calls functions:

-
-
-
-
.zi-glance
-|-- side.zsh/.zi-exists-physically-message
-|-- side.zsh/.zi-first
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-help
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-help [[[
-Shows usage information.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 31 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-list-bindkeys
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-list-bindkeys [[[
-
-
-
-
-
-

Has 39 line(s). Calls functions:

-
-
-
-
.zi-list-bindkeys
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-list-compdef-replay
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-list-compdef-replay [[[
-Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
-for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 5 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-ls
-

~~

-
-
-
-
-
-
FUNCTION: .zi-ls [[[
-
-
-
-
-
-

Has 17 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-module
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-module [[[
-Function that has sub-commands passed as long-options (with two dashes, --).
-It's an attempt to plugin only this one function into `zi' function
-defined in zi.zsh, to not make this file longer than it's needed.
-
-
-
-
-
-

Has 24 line(s). Calls functions:

-
-
-
-
.zi-module
-
-
-
-

Called by:

-
-
-
-
.zi-build-module
-zi.zsh/Script-Body
-zi.zsh/zi
-
-
-
-
zi-pager
-

~~~

-
-
-
-
-
-
FUNCTION: .zi-pager [[[
-BusyBox less lacks the -X and -i options, so it can use more
-
-
-
-
-
-

Has 14 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-glance
-.zi-self-update
-.zi-update-or-status
-
-
-
-
zi-prepare-readlink
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-prepare-readlink [[[
-Prepares readlink command, used for establishing completion's owner.
-
-
-
-
-
$REPLY = ":" or "readlink"
-
-
-
-
-
-

Has 4 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): type

-
-
-

Called by:

-
-
-
-
.zi-cdisable
-.zi-cenable
-.zi-clear-completions
-.zi-show-completions
-
-
-
-
zi-recall
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-recall [[[
-
-
-
-
-
-

Has 33 line(s). Calls functions:

-
-
-
-
.zi-recall
-|-- side.zsh/.zi-compute-ice
-`-- zi.zsh/+zi-deploy-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-recently
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-recently [[[
-Shows plugins that obtained commits in specified past time.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - time spec, e.g. "1 week"
-
-
-
-
-
-

Has 23 line(s). Calls functions:

-
-
-
-
.zi-recently
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-restore-extendedglob
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-restore-extendedglob [[[
-Restores extendedglob-option from state saved earlier.
-
-
-
-
-
-

Has 1 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-format-options
-.zi-unload
-
-
-
-
zi-run-delete-hooks
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-run-delete-hooks [[[
-
-
-
-
-
-

Has 17 line(s). Calls functions:

-
-
-
-
.zi-run-delete-hooks
-`-- side.zsh/.zi-countdown
-
-
-
-

Uses feature(s): eval

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-save-set-extendedglob
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-save-set-extendedglob [[[
-Enables extendedglob-option first saving if it was already
-enabled, for restoration of this state later.
-
-
-
-
-
-

Has 2 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-format-options
-.zi-unload
-
-
-
-
zi-search-completions
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-search-completions [[[
-While .zi-show-completions() shows what completions are
-installed, this functions searches through all plugin dirs
-showing what's available in general (for installation).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 39 line(s). Calls functions:

-
-
-
-
.zi-search-completions
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-self-update
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-self-update [[[
-Updates ❮ ZI ❯ code (does a git pull).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 43 line(s). Calls functions:

-
-
-
-
.zi-self-update
-|-- zi.zsh/.zi-get-mtime-into
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, source, zcompile

-
-
-

Called by:

-
-
-
-
.zi-update-or-status-all
-zi.zsh/zi
-
-
-
-
zi-show-all-reports
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-all-reports [[[
-Displays reports of all loaded plugins.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-show-all-reports
-
-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-show-completions
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-completions [[[
-Display installed (enabled and disabled), completions. Detect
-stray and improper ones.
-
-
-
-
-
Completions live even when plugin isn't loaded - if they are
-installed and enabled.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 61 line(s). Calls functions:

-
-
-
-
.zi-show-completions
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-show-debug-report
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-debug-report [[[
-Displays dtrace report (data recorded in interactive session).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
.zi-show-debug-report
-
-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-show-registered-plugins
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-registered-plugins [[[
-Lists loaded plugins (subcommands list, loaded).
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
.zi-show-registered-plugins
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-show-report
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-report [[[
-Displays report of the plugin given.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 66 line(s). Calls functions:

-
-
-
-
.zi-show-report
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-show-all-reports
-.zi-show-debug-report
-zi.zsh/zi
-
-
-
-
zi-show-times
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-times [[[
-Shows loading times of all loaded plugins.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 51 line(s). Calls functions:

-
-
-
-
.zi-show-times
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-show-zstatus
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-show-zstatus [[[
-Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
-of available completions, etc.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 47 line(s). Calls functions:

-
-
-
-
.zi-show-zstatus
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-stress
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-stress [[[
-Compiles plugin with various options on and off to see how well the code is written. The options are:
-
-
-
-
-
NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 31 line(s). Calls functions:

-
-
-
-
.zi-stress
-|-- side.zsh/.zi-exists-physically-message
-|-- side.zsh/.zi-first
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt, zcompile

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-uncompile-plugin
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-uncompile-plugin [[[
-Uncompiles given plugin.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 20 line(s). Calls functions:

-
-
-
-
.zi-uncompile-plugin
-|-- side.zsh/.zi-any-colorify-as-uspl2
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-compile-uncompile-all
-zi.zsh/zi
-
-
-
-
zi-uninstall-completions
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-uninstall-completions [[[
-Removes all completions of given plugin from Zshell (i.e. from FPATH).
-The FPATH is typically `~/.zi/completions/'.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 39 line(s). Calls functions:

-
-
-
-
.zi-uninstall-completions
-|-- install.zsh/.zi-compinit
-|-- install.zsh/.zi-forget-completion
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, source

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-unload
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-unload [[[
-0. Call the Zsh Plugin's Standard *_plugin_unload function
-0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
-1. Delete bindkeys (...)
-2. Delete Zstyles
-3. Restore options
-4. Remove aliases
-5. Restore Zle state
-6. Unfunction functions (created by plugin)
-7. Clean-up FPATH and PATH
-8. Delete created variables
-9. Forget the plugin
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 380 line(s). Calls functions:

-
-
-
-
.zi-unload
-|-- side.zsh/.zi-any-colorify-as-uspl2
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Uses feature(s): alias, bindkey, eval, setopt, unalias, unfunction, zle, zstyle

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-zi.zsh/.zi-run-task
-
-
-
-
zi-unregister-plugin
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-unregister-plugin [[[
-Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
-zsh_loaded_plugins array (managed according to the plugin standard)
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-unregister-plugin
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Called by:

-
-
-
-
.zi-unload
-
-
-
-
zi-update-all-parallel
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-update-in-parallel [[[
-
-
-
-
-
-

Has 63 line(s). Calls functions:

-
-
-
-
.zi-update-all-parallel
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- zi.zsh/.zi-any-to-user-plugin
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-update-or-status-all
-
-
-
-
zi-update-or-status
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-update-or-status [[[
-Updates (git pull) or does `git status' for given plugin.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
$1 - "status" for status, other for update
-$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
-$3 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 263 line(s). Calls functions:

-
-
-
-
.zi-update-or-status
-|-- install.zsh/.zi-get-latest-gh-r-url-part
-|-- install.zsh/.zi-setup-plugin-dir
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- side.zsh/.zi-compute-ice
-|-- side.zsh/.zi-exists-physically
-|-- side.zsh/.zi-exists-physically-message
-|-- side.zsh/.zi-store-ices
-|-- side.zsh/.zi-two-paths
-|-- zi.zsh/.zi-any-to-user-plugin
-|-- zi.zsh/+zi-message
-`-- zi.zsh/.zi-set-m-func
-
-
-
-

Uses feature(s): kill, read, setopt, source, trap, wait

-
-
-

Called by:

-
-
-
-
.zi-update-all-parallel
-.zi-update-or-status-all
-zi.zsh/zi
-
-
-
-
zi-update-or-status-all
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-update-or-status-all [[[
-Updates (git pull) or does `git status` for all existing plugins.
-This includes also plugins that are not loaded into Zsh (but exist
-on disk). Also updates (i.e. redownloads) snippets.
-
-
-
-
-
User-action entry point.
-
-
-
-
-
-

Has 96 line(s). Calls functions:

-
-
-
-
.zi-update-or-status-all
-|-- install.zsh/.zi-compinit
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- zi.zsh/.zi-any-to-user-plugin
-|-- zi.zsh/.zi-get-mtime-into
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, source

-
-
-

Called by:

-
-
-
-
zi.zsh/zi
-
-
-
-
zi-update-or-status-snippet
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-update-or-status-snippet [[[
-
-
-
-
-
Implements update or status operation for snippet given by URL.
-
-
-
-
-
$1 - "status" or "update"
-$2 - snippet URL
-
-
-
-
-
-

Has 28 line(s). Calls functions:

-
-
-
-
.zi-update-or-status-snippet
-|-- install.zsh/.zi-update-snippet
-`-- side.zsh/.zi-compute-ice
-
-
-
-

Uses feature(s): source

-
-
-

Called by:

-
-
-
-
.zi-update-all-parallel
-.zi-update-or-status-all
-.zi-update-or-status
-
-
-
-
zi-wait-for-update-jobs
-

~~~~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-wait-for-update-jobs [[[
-
-
-
-
-
-

Has 14 line(s). Calls functions:

-
-
-
-
.zi-wait-for-update-jobs
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): wait

-
-
-

Called by:

-
-
-
-
.zi-update-all-parallel
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/code/zsdoc/html/install.zsh.html b/code/zsdoc/html/install.zsh.html deleted file mode 100644 index 17181c8..0000000 --- a/code/zsdoc/html/install.zsh.html +++ /dev/null @@ -1,1622 +0,0 @@ - - - - - - - -install.zsh(1) - - - - - -
-
-

NAME

-
-
-

install.zsh - a shell script

-
-
-
-
-

SYNOPSIS

-
-
-

Documentation automatically generated with `zsdoc'

-
-
-
-
-

FUNCTIONS

-
-
-
-
 ∞zi-atclone-hook
- .zi-at-eval
- ∞zi-atpull-e-hook
- ∞zi-atpull-hook
- .zi-compile-plugin
- ∞zi-compile-plugin-hook
- .zi-compinit
- zicp
- ∞zi-cp-hook
- .zi-download-file-stdout
- .zi-download-snippet
- .zi-extract
- ziextract
- ∞zi-extract-hook
- .zi-forget-completion
- .zi-get-cygwin-package
- .zi-get-latest-gh-r-url-part
- .zi-get-package
- .zi-get-url-mtime
- .zi-install-completions
- ∞zi-make-ee-hook
- ∞zi-make-e-hook
- ∞zi-make-hook
- .zi-mirror-using-svn
- zimv
- ∞zi-mv-hook
- .zi-parse-json
- ∞zi-ps-on-update-hook
- ∞zi-reset-hook
- .zi-setup-plugin-dir
- .zi-update-snippet
- zpextract
-AUTOLOAD compinit
-
-
-
-
-
-

DETAILS

-
-
-

Script Body

-
-

Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

-
-
-

Uses feature(s): source

-
-
-
-

∞zi-atclone-hook

-
-
-
-
-
FUNCTION: ∞zi-atclone-hook [[[
-
-
-
-
-
-

Has 4 line(s). Calls functions:

-
-
-
-
∞zi-atclone-hook
-|-- side.zsh/.zi-countdown
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): eval, setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-at-eval
-

~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-at-eval [[[
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
.zi-at-eval
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): eval

-
-
-

Called by:

-
-
-
-
∞zi-atpull-e-hook
-∞zi-atpull-hook
-
-
-
-
-

∞zi-atpull-e-hook

-
-
-
-
-
FUNCTION: ∞zi-atpull-e-hook [[[
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
∞zi-atpull-e-hook
-`-- side.zsh/.zi-countdown
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

∞zi-atpull-hook

-
-
-
-
-
FUNCTION: ∞zi-atpull-hook [[[
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
∞zi-atpull-hook
-`-- side.zsh/.zi-countdown
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-compile-plugin
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-compile-plugin [[[
-Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 84 line(s). Calls functions:

-
-
-
-
.zi-compile-plugin
-|-- side.zsh/.zi-compute-ice
-|-- side.zsh/.zi-first
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): eval, setopt, zcompile

-
-
-

Called by:

-
-
-
-
∞zi-compile-plugin-hook
-autoload.zsh/.zi-compile-uncompile-all
-zi.zsh/zi
-
-
-
-
-

∞zi-compile-plugin-hook

-
-
-
-
-
FUNCTION: ∞zi-compile-plugin-hook [[[
-
-
-
-
-
-

Has 14 line(s). Calls functions:

-
-
-
-
∞zi-compile-plugin-hook
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-compinit
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-compinit [[[
-User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
-After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
-
-
-
-
-
No arguments.
-
-
-
-
-
-

Has 26 line(s). Calls functions:

-
-
-
-
.zi-compinit
-|-- compinit
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): autoload, compinit, setopt, unfunction

-
-
-

Called by:

-
-
-
-
.zi-install-completions
-autoload.zsh/.zi-uninstall-completions
-autoload.zsh/.zi-update-or-status-all
-zi.zsh/zi
-zi.zsh/.zi-prepare-home
-
-
-
-
-

zicp

-
-
-
-
-
]]]
-FUNCTION zicp [[[
-
-
-
-
-
-

Has 28 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zimv
-
-
-
-

Environment variables used: zi.zsh → ZPFX

-
-
-
-

∞zi-cp-hook

-
-
-
-
-
FUNCTION: ∞zi-cp-hook [[[
-
-
-
-
-
-

Has 24 line(s). Calls functions:

-
-
-
-
∞zi-cp-hook
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-download-file-stdout
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-download-file-stdout [[[
-Downloads file to stdout. Supports following backend commands:
-curl, wget, lftp, lynx. Used by snippet loading.
-
-
-
-
-
-

Has 46 line(s). Calls functions:

-
-
-
-
.zi-download-file-stdout
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, trap, type

-
-
-

Called by:

-
-
-
-
.zi-download-snippet
-.zi-get-cygwin-package
-.zi-get-package
-.zi-setup-plugin-dir
-
-
-
-
zi-download-snippet
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-download-snippet [[[
-Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
-with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
-to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
-
-
-
-
-
-

Has 309 line(s). Calls functions:

-
-
-
-
.zi-download-snippet
-|-- side.zsh/.zi-store-ices
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, trap, zcompile

-
-
-

Called by:

-
-
-
-
.zi-update-snippet
-zi.zsh/.zi-load-snippet
-
-
-
-
zi-extract
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-extract() [[[
-
-
-
-
-
-

Has 22 line(s). Calls functions:

-
-
-
-
.zi-extract
-|-- ziextract
-|   `-- zi.zsh/+zi-message
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
∞zi-extract-hook
-
-
-
-
-

ziextract

-
-
-
-
-
]]]
-FUNCTION: ziextract [[[
-If the file is an archive, it is extracted by this function.
-Next stage is scanning of files with the common utility `file',
-to detect executables. They are given +x mode. There are also
-messages to the user on performed actions.
-
-
-
-
-
$1 - url
-$2 - file
-
-
-
-
-
-

Has 274 line(s). Calls functions:

-
-
-
-
ziextract
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, unfunction, zparseopts

-
-
-

Called by:

-
-
-
-
.zi-extract
-.zi-get-package
-.zi-setup-plugin-dir
-zpextract
-
-
-
-
-

∞zi-extract-hook

-
-
-
-
-
FUNCTION: ∞zi-extract-hook [[[
-
-
-
-
-
-

Has 4 line(s). Calls functions:

-
-
-
-
∞zi-extract-hook
-`-- zi.zsh/@zi-substitute
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-forget-completion
-

~~~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-forget-completion [[[
-Implements alternation of Zsh state so that already initialized
-completion stops being visible to Zsh.
-
-
-
-
-
$1 - completion function name, e.g. "_cp"; can also be "cp"
-
-
-
-
-
-

Has 20 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt, unfunction

-
-
-

Called by:

-
-
-
-
.zi-compinit
-.zi-install-completions
-autoload.zsh/.zi-uninstall-completions
-zi.zsh/zi
-
-
-
-
zi-get-cygwin-package
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-cygwin-package [[[
-
-
-
-
-
-

Has 70 line(s). Calls functions:

-
-
-
-
.zi-get-cygwin-package
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-setup-plugin-dir
-
-
-
-
zi-get-latest-gh-r-url-part
-

~~~~~~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-get-latest-gh-r-url-part [[[
-Gets version string of latest release of given Github package.
-Connects to Github releases page.
-
-
-
-
-
-

Has 101 line(s). Calls functions:

-
-
-
-
.zi-get-latest-gh-r-url-part
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-setup-plugin-dir
-autoload.zsh/.zi-update-or-status
-
-
-
-
zi-get-package
-

~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-get-package [[[
-
-
-
-
-
-

Has 194 line(s). Calls functions:

-
-
-
-
.zi-get-package
-|-- ziextract
-|   `-- zi.zsh/+zi-message
-|-- zi.zsh/+zi-message
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): eval, setopt, trap

-
-
-

Called by:

-
-
-
-
zi.zsh/.zi-load
-
-
-
-

Environment variables used: zi.zsh → ZPFX

-
-
-
zi-get-url-mtime
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-url-mtime [[[
-For the given URL returns the date in the Last-Modified header as a time stamp
-
-
-
-
-
-

Has 34 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): read, setopt, trap, type

-
-
-

Called by:

-
-
-
-
.zi-download-snippet
-
-
-
-
zi-install-completions
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-install-completions [[[
-Installs all completions of given plugin. After that they are
-visible to `compinit'. Visible completions can be selectively
-disabled and enabled. User can access completion data with
-`clist' or `completions' subcommand.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-$3 - if 1, then reinstall, otherwise only install completions that aren't there
-
-
-
-
-
-

Has 61 line(s). Calls functions:

-
-
-
-
.zi-install-completions
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- side.zsh/.zi-exists-physically-message
-|-- zi.zsh/.zi-any-to-user-plugin
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-download-snippet
-.zi-setup-plugin-dir
-zi.zsh/zi
-
-
-
-
-

∞zi-make-ee-hook

-
-
-
-
-
FUNCTION: ∞zi-make-ee-hook [[[
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
∞zi-make-ee-hook
-|-- side.zsh/.zi-countdown
-`-- zi.zsh/@zi-substitute
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

∞zi-make-e-hook

-
-
-
-
-
FUNCTION: ∞zi-make-e-hook [[[
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
∞zi-make-e-hook
-|-- side.zsh/.zi-countdown
-`-- zi.zsh/@zi-substitute
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

∞zi-make-hook

-
-
-
-
-
FUNCTION: ∞zi-make-hook [[[
-
-
-
-
-
-

Has 4 line(s). Calls functions:

-
-
-
-
∞zi-make-hook
-|-- side.zsh/.zi-countdown
-`-- zi.zsh/@zi-substitute
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-mirror-using-svn
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-mirror-using-svn [[[
-Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
-in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
-compares remote and local revision and outputs true if update is needed.
-
-
-
-
-
$1 - URL
-$2 - mode, "" - normal, "-u" - update, "-t" - test
-$3 - subdirectory (not path) with working copy, needed for -t and -u
-
-
-
-
-
-

Has 27 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-download-snippet
-
-
-
-
-

zimv

-
-
-
-
-
]]]
-FUNCTION zimv [[[
-
-
-
-
-
-

Has 3 line(s). Calls functions:

-
-
-
-
zimv
-`-- zicp
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

∞zi-mv-hook

-
-
-
-
-
FUNCTION: ∞zi-mv-hook [[[
-
-
-
-
-
-

Has 21 line(s). Calls functions:

-
-
-
-
∞zi-mv-hook
-`-- zi.zsh/@zi-substitute
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-parse-json
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-parse-json [[[
-Retrievies the ice-list from given profile from the JSON of the package.json.
-
-
-
-
-
-

Has 102 line(s). Calls functions:

-
-
-
-
.zi-parse-json
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-get-package
-
-
-
-
-

∞zi-ps-on-update-hook

-
-
-
-
-
FUNCTION: ∞zi-ps-on-update-hook [[[
-
-
-
-
-
-

Has 14 line(s). Calls functions:

-
-
-
-
∞zi-ps-on-update-hook
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): eval

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

∞zi-reset-hook

-
-
-
-
-
]]]
-FUNCTION: ∞zi-reset-opt-hook [[[
-
-
-
-
-
-

Has 79 line(s). Calls functions:

-
-
-
-
∞zi-reset-hook
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): eval

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-setup-plugin-dir
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-setup-plugin-dir [[[
-Clones given plugin into PLUGIN_DIR. Supports multiple
-sites (respecting `from' and `proto' ice modifiers).
-Invokes compilation of plugin's main file.
-
-
-
-
-
$1 - user
-$2 - plugin
-
-
-
-
-
-

Has 189 line(s). Calls functions:

-
-
-
-
.zi-setup-plugin-dir
-|-- side.zsh/.zi-any-colorify-as-uspl2
-|-- side.zsh/.zi-store-ices
-|-- ziextract
-|   `-- zi.zsh/+zi-message
-|-- zi.zsh/.zi-get-object-path
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt, trap

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-update-or-status
-zi.zsh/.zi-load
-
-
-
-
zi-update-snippet
-

~~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: .zi-update-snippet [[[
-
-
-
-
-
-

Has 72 line(s). Calls functions:

-
-
-
-
.zi-update-snippet
-|-- zi.zsh/.zi-get-object-path
-|-- zi.zsh/+zi-message
-`-- zi.zsh/.zi-pack-ice
-
-
-
-

Uses feature(s): eval, setopt

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-update-or-status-snippet
-
-
-
-
-

zpextract

-
-
-
-
-
]]]
-FUNCTION: zpextract [[[
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zpextract
-`-- ziextract
-    `-- zi.zsh/+zi-message
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

compinit

-
-
-
-
-
Initialisation for new style completion. This mainly contains some helper
-functions and setup. Everything else is split into different files that
-will automatically be made autoloaded (see the end of this file).  The
-names of the files that will be considered for autoloading are those that
-begin with an underscores (like `_condition).
-
-
-
-
-
The first line of each of these files is read and must indicate what
-should be done with its contents:
-
-
-
-
-
`#compdef <names ...>'
-
-
-
-
-
-

Has 549 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

-
-
-

Called by:

-
-
-
-
.zi-compinit
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/code/zsdoc/html/side.zsh.html b/code/zsdoc/html/side.zsh.html deleted file mode 100644 index d222711..0000000 --- a/code/zsdoc/html/side.zsh.html +++ /dev/null @@ -1,909 +0,0 @@ - - - - - - - -side.zsh(1) - - - - - -
-
-

NAME

-
-
-

side.zsh - a shell script

-
-
-
-
-

SYNOPSIS

-
-
-

Documentation automatically generated with `zsdoc'

-
-
-
-
-

FUNCTIONS

-
-
-
-
 .zi-any-colorify-as-uspl2
- .zi-compute-ice
- .zi-countdown
- .zi-exists-physically
- .zi-exists-physically-message
- .zi-first
- .zi-store-ices
- .zi-two-paths
-AUTOLOAD zmv
-
-
-
-
-
-

DETAILS

-
-
-

Script Body

-
-

Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

-
-
-
zi-any-colorify-as-uspl2
-

~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-any-colorify-as-uspl2 [[[
-Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-$REPLY = ANSI-colorified "user/plugin" string
-
-
-
-
-
-

Has 22 line(s). Calls functions:

-
-
-
-
.zi-any-colorify-as-uspl2
-|-- zi.zsh/.zi-any-to-pid
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Called by:

-
-
-
-
.zi-exists-physically-message
-autoload.zsh/.zi-clear-completions
-autoload.zsh/.zi-compiled
-autoload.zsh/.zi-compile-uncompile-all
-autoload.zsh/.zi-create
-autoload.zsh/.zi-exists-message
-autoload.zsh/.zi-get-completion-owner-uspl2col
-autoload.zsh/.zi-list-bindkeys
-autoload.zsh/.zi-recently
-autoload.zsh/.zi-search-completions
-autoload.zsh/.zi-show-completions
-autoload.zsh/.zi-show-registered-plugins
-autoload.zsh/.zi-show-times
-autoload.zsh/.zi-uncompile-plugin
-autoload.zsh/.zi-unload
-autoload.zsh/.zi-update-all-parallel
-autoload.zsh/.zi-update-or-status-all
-autoload.zsh/.zi-update-or-status
-install.zsh/.zi-install-completions
-install.zsh/.zi-setup-plugin-dir
-zi.zsh/.zi-formatter-pid
-
-
-
-
zi-compute-ice
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-compute-ice [[[
-Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
-taking priorities into account. Also returns path to snippet directory and optional name of snippet file
-(only valid if ICE[svn] is not set).
-
-
-
-
-
Can also pack resulting ices into ZI_SICE (see $2).
-
-
-
-
-
$1 - URL (also plugin-spec)
-$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
-wins with static ice; "pack-nf" means that disk-ices will
-be ignored (no-file?)
-$3 - name of output associative array, "ICE" is the default
-$4 - name of output string parameter, to hold path to directory ("local_dir")
-$5 - name of output string parameter, to hold filename ("filename")
-$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
-
-
-
-
-
-

Has 116 line(s). Calls functions:

-
-
-
-
.zi-compute-ice
-|-- zi.zsh/.zi-any-to-user-plugin
-|-- zi.zsh/.zi-pack-ice
-`-- zmv
-
-
-
-

Uses feature(s): autoload, setopt, zmv

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-delete
-autoload.zsh/.zi-edit
-autoload.zsh/.zi-recall
-autoload.zsh/.zi-update-or-status
-autoload.zsh/.zi-update-or-status-snippet
-install.zsh/.zi-compile-plugin
-
-
-
-
zi-countdown
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-countdown [[[
-Displays a countdown 5...4... etc. and returns 0 if it
-sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
-
-
-
-
-
-

Has 14 line(s). Calls functions:

-
-
-
-
.zi-countdown
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): trap

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-run-delete-hooks
-install.zsh/∞zi-atclone-hook
-install.zsh/∞zi-atpull-e-hook
-install.zsh/∞zi-atpull-hook
-install.zsh/∞zi-make-ee-hook
-install.zsh/∞zi-make-e-hook
-install.zsh/∞zi-make-hook
-
-
-
-
zi-exists-physically
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-exists-physically [[[
-Checks if directory of given plugin exists in PLUGIN_DIR.
-
-
-
-
-
Testable.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 6 line(s). Calls functions:

-
-
-
-
.zi-exists-physically
-`-- zi.zsh/.zi-any-to-user-plugin
-
-
-
-

Called by:

-
-
-
-
.zi-exists-physically-message
-autoload.zsh/.zi-create
-autoload.zsh/.zi-update-or-status
-
-
-
-
zi-exists-physically-message
-

~~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-exists-physically-message [[[
-Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
-
-
-
-
-
Testable.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 22 line(s). Calls functions:

-
-
-
-
.zi-exists-physically-message
-|-- zi.zsh/.zi-any-to-pid
-|-- zi.zsh/.zi-any-to-user-plugin
-`-- zi.zsh/+zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-compute-ice
-autoload.zsh/.zi-changes
-autoload.zsh/.zi-glance
-autoload.zsh/.zi-stress
-autoload.zsh/.zi-update-or-status
-install.zsh/.zi-install-completions
-
-
-
-
zi-first
-

~~~

-
-
-
-
-
-
FUNCTION: .zi-first [[[
-Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
-ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
-is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
.zi-first
-|-- zi.zsh/.zi-any-to-pid
-|-- zi.zsh/.zi-any-to-user-plugin
-|-- zi.zsh/.zi-find-other-matches
-`-- zi.zsh/.zi-get-object-path
-
-
-
-

Called by:

-
-
-
-
.zi-two-paths
-autoload.zsh/.zi-glance
-autoload.zsh/.zi-stress
-install.zsh/.zi-compile-plugin
-
-
-
-
zi-store-ices
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-store-ices [[[
-Saves ice mods in given hash onto disk.
-
-
-
-
-
$1 - directory where to create / delete files
-$2 - name of hash that holds values
-$3 - additional keys of hash to store, space separated
-$4 - additional keys of hash to store, empty-meaningful ices, space separated
-$5 - the URL, if applicable
-$6 - the mode (1 - svn, 0 - single file), if applicable
-
-
-
-
-
-

Has 28 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-update-or-status
-install.zsh/.zi-download-snippet
-install.zsh/.zi-setup-plugin-dir
-
-
-
-
zi-two-paths
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-two-paths [[[
-Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
-returns 2 possible paths for further examination
-
-
-
-
-
-

Has 22 line(s). Calls functions:

-
-
-
-
.zi-two-paths
-`-- zi.zsh/.zi-get-object-path
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-compute-ice
-autoload.zsh/.zi-update-or-status
-
-
-
-
-

zmv

-
-
-
-
-
function zmv {
-zmv, zcp, zln:
-
-
-
-
-
This is a multiple move based on zsh pattern matching.  To get the full
-power of it, you need a postgraduate degree in zsh.  However, simple
-tasks work OK, so if that's all you need, here are some basic examples:
-zmv '(*).txt' '$1.lis'
-Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
-gets replaced by the $1 (not the `*', as happens in mmv, and note the
-`$', not `=', so that you need to quote both words).
-
-
-
-
-
-

Has 299 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): eval, getopts, read, setopt

-
-
-

Called by:

-
-
-
-
.zi-compute-ice
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/code/zsdoc/html/zi.zsh.html b/code/zsdoc/html/zi.zsh.html deleted file mode 100644 index 66b7d0d..0000000 --- a/code/zsdoc/html/zi.zsh.html +++ /dev/null @@ -1,2834 +0,0 @@ - - - - - - - -zi.zsh(1) - - - - - -
-
-

NAME

-
-
-

zi.zsh - a shell script

-
-
-
-
-

SYNOPSIS

-
-
-

Documentation automatically generated with `zsdoc'

-
-
-
-
-

FUNCTIONS

-
-
-
-
 @autoload
- pmodload
- zi
- .zi-add-fpath
- .zi-add-report
- .zi-any-to-pid
- .zi-any-to-user-plugin
- zicdclear
- zicdreplay
- zicompdef
- .zi-compdef-clear
- .zi-compdef-replay
- zicompinit
- +zi-deploy-message
- .zi-diff
- .zi-diff-env
- .zi-diff-functions
- .zi-diff-options
- .zi-diff-parameter
- .zi-find-other-matches
- .zi-formatter-bar
- .zi-formatter-bar-util
- .zi-formatter-pid
- .zi-formatter-th-bar
- .zi-formatter-url
- .zi-get-mtime-into
- .zi-get-object-path
- .zi-ice
- .zi-load
- .zi-load-ices
- .zi-load-object
- .zi-load-plugin
- .zi-load-snippet
- .zi-main-message-formatter
- +zi-message
- .zi-pack-ice
- .zi-parse-opts
- +zi-prehelp-usage-message
- .zi-prepare-home
- @zi-register-annex
- @zi-register-hook
- .zi-register-plugin
- :zi-reload-and-run
- .zi-run
- .zi-run-task
- -zi_scheduler_add_sh
- .zi-set-m-func
- .zi-setup-params
- .zi-submit-turbo
- @zi-substitute
- :zi-tmp-subst-alias
- :zi-tmp-subst-autoload
- :zi-tmp-subst-bindkey
- :zi-tmp-subst-compdef
- .zi-tmp-subst-off
- .zi-tmp-subst-on
- :zi-tmp-subst-zle
- :zi-tmp-subst-zstyle
- zi-turbo
- .zi-util-shands-path
- zpcdclear
- zpcdreplay
- zpcompdef
- zpcompinit
- @zsh-plugin-run-on-unload
- @zsh-plugin-run-on-update
-AUTOLOAD add-zsh-hook
-AUTOLOAD compinit
-AUTOLOAD is-at-least
-PRECMD-HOOK @zi-scheduler
-
-
-
-
-
-

DETAILS

-
-
-

Script Body

-
-

Has 202 line(s). Calls functions:

-
-
-
-
Script-Body
-|-- add-zsh-hook
-|-- autoload.zsh/.zi-module
-|-- is-at-least
-|-- +zi-message
-`-- @zi-register-hook
-
-
-
-

Uses feature(s): add-zsh-hook, alias, autoload, export, is-at-least, setopt, source, zmodload, zstyle

-
-
-

Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

-
-
-
-

@autoload

-
-
-
-
-
]]]
-FUNCTION: @autoload. [[[
-
-
-
-
-
-

Has 3 line(s). Calls functions:

-
-
-
-
@autoload
-`-- :zi-tmp-subst-autoload
-    |-- is-at-least
-    `-- +zi-message
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

pmodload

-
-
-
-
-
FUNCTION: pmodload. [[[
-Compatibility with Prezto. Calls can be recursive.
-
-
-
-
-
-

Has 15 line(s). Calls functions:

-
-
-
-
pmodload
-
-
-
-

Uses feature(s): zstyle

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zi

-
-
-
-
-
FUNCTION: zi. [[[
-Main function directly exposed to user, obtains subcommand and its arguments, has completion.
-
-
-
-
-
-

Has 547 line(s). Calls functions:

-
-
-
-
zi
-|-- autoload.zsh/.zi-analytics-menu
-|-- autoload.zsh/.zi-cdisable
-|-- autoload.zsh/.zi-cenable
-|-- autoload.zsh/.zi-clear-completions
-|-- autoload.zsh/.zi-compiled
-|-- autoload.zsh/.zi-compile-uncompile-all
-|-- autoload.zsh/.zi-control-menu
-|-- autoload.zsh/.zi-help
-|-- autoload.zsh/.zi-list-bindkeys
-|-- autoload.zsh/.zi-list-compdef-replay
-|-- autoload.zsh/.zi-ls
-|-- autoload.zsh/.zi-module
-|-- autoload.zsh/.zi-recently
-|-- autoload.zsh/.zi-search-completions
-|-- autoload.zsh/.zi-self-update
-|-- autoload.zsh/.zi-show-all-reports
-|-- autoload.zsh/.zi-show-completions
-|-- autoload.zsh/.zi-show-debug-report
-|-- autoload.zsh/.zi-show-registered-plugins
-|-- autoload.zsh/.zi-show-report
-|-- autoload.zsh/.zi-show-times
-|-- autoload.zsh/.zi-show-zstatus
-|-- autoload.zsh/.zi-uncompile-plugin
-|-- autoload.zsh/.zi-uninstall-completions
-|-- autoload.zsh/.zi-unload
-|-- autoload.zsh/.zi-update-or-status
-|-- autoload.zsh/.zi-update-or-status-all
-|-- compinit
-|-- install.zsh/.zi-compile-plugin
-|-- install.zsh/.zi-compinit
-|-- install.zsh/.zi-forget-completion
-|-- install.zsh/.zi-install-completions
-|-- +zi-message
-`-- +zi-prehelp-usage-message
-    `-- +zi-message
-
-
-
-

Uses feature(s): autoload, compinit, eval, setopt, source

-
-
-

Called by:

-
-
-
-
zi-turbo
-
-
-
-
zi-add-fpath
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-add-fpath. [[[
-
-
-
-
-
-

Has 10 line(s). Calls functions:

-
-
-
-
.zi-add-fpath
-
-
-
-

Called by:

-
-
-
-
zi
-
-
-
-
zi-add-report
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-add-report. [[[
-Adds a report line for given plugin.
-
-
-
-
-
$1 - uspl2, i.e. user/plugin
-$2, ... - the text
-
-
-
-
-
-

Has 3 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-load-plugin
-.zi-load-snippet
-:zi-tmp-subst-alias
-:zi-tmp-subst-autoload
-:zi-tmp-subst-bindkey
-:zi-tmp-subst-compdef
-:zi-tmp-subst-zle
-:zi-tmp-subst-zstyle
-
-
-
-
zi-any-to-pid
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-any-to-pid. [[[
-
-
-
-
-
-

Has 21 line(s). Calls functions:

-
-
-
-
.zi-any-to-pid
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
side.zsh/.zi-any-colorify-as-uspl2
-side.zsh/.zi-exists-physically-message
-side.zsh/.zi-first
-
-
-
-
zi-any-to-user-plugin
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-any-to-user-plugin. [[[
-Allows elastic plugin-spec across the code.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin (only when $1 - i.e. user - given)
-
-
-
-
-
Returns user and plugin in $reply.
-
-
-
-
-
-

Has 25 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-add-fpath
-.zi-get-object-path
-.zi-load
-.zi-run
-:zi-tmp-subst-autoload
-autoload.zsh/.zi-any-to-uspl2
-autoload.zsh/.zi-changes
-autoload.zsh/.zi-compiled
-autoload.zsh/.zi-compile-uncompile-all
-autoload.zsh/.zi-create
-autoload.zsh/.zi-delete
-autoload.zsh/.zi-find-completions-of-plugin
-autoload.zsh/.zi-glance
-autoload.zsh/.zi-show-report
-autoload.zsh/.zi-stress
-autoload.zsh/.zi-uncompile-plugin
-autoload.zsh/.zi-unload
-autoload.zsh/.zi-unregister-plugin
-autoload.zsh/.zi-update-all-parallel
-autoload.zsh/.zi-update-or-status-all
-autoload.zsh/.zi-update-or-status
-install.zsh/.zi-install-completions
-side.zsh/.zi-any-colorify-as-uspl2
-side.zsh/.zi-compute-ice
-side.zsh/.zi-exists-physically-message
-side.zsh/.zi-exists-physically
-side.zsh/.zi-first
-
-
-
-

Environment variables used: ZPFX

-
-
-
-

zicdclear

-
-
-
-
-
]]]
-FUNCTION: zicdclear. [[[
-A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zicdclear
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zicdreplay

-
-
-
-
-
FUNCTION: zicdreplay. [[[
-A function that can be invoked from within `atinit', `atload', etc. ice-mod.
-It works like `zi cdreplay', which cannot be invoked from such hook ices.
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zicdreplay
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zicompdef

-
-
-
-
-
]]]
-FUNCTION: zicompdef. [[[
-Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
-
-
-
-
-
-

Has 1 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-compdef-clear
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-compdef-clear. [[[
-Implements user-exposed functionality to clear gathered compdefs.
-
-
-
-
-
-

Has 3 line(s). Calls functions:

-
-
-
-
.zi-compdef-clear
-`-- +zi-message
-
-
-
-

Called by:

-
-
-
-
zicdclear
-zi
-zpcdclear
-
-
-
-
zi-compdef-replay
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-compdef-replay. [[[
-Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
-
-
-
-
-
-

Has 16 line(s). Calls functions:

-
-
-
-
.zi-compdef-replay
-`-- +zi-message
-
-
-
-

Uses feature(s): compdef

-
-
-

Called by:

-
-
-
-
zicdreplay
-zi
-zpcdreplay
-
-
-
-
-

zicompinit

-
-
-
-
-
]]]
-FUNCTION: zicompinit. [[[
-A function that can be invoked from within `atinit', `atload', etc. ice-mod.
-It runs `autoload compinit; compinit' and respects
-ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zicompinit
-`-- compinit
-
-
-
-

Uses feature(s): autoload, compinit

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

+zi-deploy-message

-
-
-
-
-
FUNCTION: +zi-deploy-message. [[[
-Deploys a sub-prompt message to be displayed OR a `zle
-.reset-prompt' call to be invoked
-
-
-
-
-
-

Has 13 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): read, zle

-
-
-

Called by:

-
-
-
-
.zi-load-snippet
-.zi-load
-autoload.zsh/.zi-recall
-
-
-
-
zi-diff
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff. [[[
-Performs diff actions of all types
-
-
-
-
-
-

Has 4 line(s). Calls functions:

-
-
-
-
.zi-diff
-
-
-
-

Called by:

-
-
-
-
.zi-load-plugin
-
-
-
-
zi-diff-env
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-env. [[[
-Implements detection of change in PATH and FPATH.
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format)
-$2 - command, can be "begin" or "end"
-
-
-
-
-
-

Has 15 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-diff
-.zi-load-plugin
-
-
-
-
zi-diff-functions
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-functions. [[[
-Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format)
-$2 - command, can be "begin" or "end"
-
-
-
-
-
-

Has 3 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-diff
-
-
-
-
zi-diff-options
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-options. [[[
-Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format)
-$2 - command, can be "begin" or "end"
-
-
-
-
-
-

Has 2 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-diff
-
-
-
-
zi-diff-parameter
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-diff-parameter. [[[
-Implements detection of change in any parameter's existence and type.
-Performs data gathering, computation is done in *-compute().
-
-
-
-
-
$1 - user/plugin (i.e. uspl2 format)
-$2 - command, can be "begin" or "end"
-
-
-
-
-
-

Has 7 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-diff
-
-
-
-
zi-find-other-matches
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-find-other-matches. [[[
-Plugin's main source file is in general `name.plugin.zsh'. However,
-there can be different conventions, if that file is not found, then
-this functions examines other conventions in the most sane order.
-
-
-
-
-
-

Has 17 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-load-plugin
-.zi-load-snippet
-side.zsh/.zi-first
-
-
-
-
zi-formatter-bar
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-formatter-bar. [[[
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
.zi-formatter-bar
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-formatter-bar-util
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-formatter-bar-util. [[[
-
-
-
-
-
-

Has 7 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-formatter-bar
-.zi-formatter-th-bar
-
-
-
-
zi-formatter-pid
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-formatter-pid. [[[
-
-
-
-
-
-

Has 10 line(s). Calls functions:

-
-
-
-
.zi-formatter-pid
-`-- side.zsh/.zi-any-colorify-as-uspl2
-
-
-
-

Uses feature(s): source

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-formatter-th-bar
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-formatter-th-bar. [[[
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
.zi-formatter-th-bar
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-formatter-url
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-formatter-url. [[[
-
-
-
-
-
-

Has 19 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-get-mtime-into
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-mtime-into. [[[
-
-
-
-
-
-

Has 7 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
Script-Body
-autoload.zsh/.zi-self-update
-autoload.zsh/.zi-update-or-status-all
-
-
-
-
zi-get-object-path
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-get-object-path. [[[
-
-
-
-
-
-

Has 23 line(s). Calls functions:

-
-
-
-
.zi-get-object-path
-
-
-
-

Called by:

-
-
-
-
.zi-load-ices
-.zi-load-snippet
-.zi-run
-zi
-autoload.zsh/.zi-get-path
-install.zsh/.zi-setup-plugin-dir
-install.zsh/.zi-update-snippet
-side.zsh/.zi-first
-side.zsh/.zi-two-paths
-
-
-
-
zi-ice
-

~~~

-
-
-
-
-
-
FUNCTION: .zi-ice. [[[
-Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
-next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
-
-
-
-
-
-

Has 12 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
zi
-
-
-
-

Environment variables used: ZPFX

-
-
-
zi-load
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-load. [[[
-Implements the exposed-to-user action of loading a plugin.
-
-
-
-
-
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
-$2 - plugin name, if the third format is used
-
-
-
-
-
-

Has 76 line(s). Calls functions:

-
-
-
-
.zi-load
-|-- install.zsh/.zi-get-package
-|-- install.zsh/.zi-setup-plugin-dir
-`-- +zi-deploy-message
-
-
-
-

Uses feature(s): eval, setopt, source, zle

-
-
-

Called by:

-
-
-
-
.zi-load-object
-.zi-run-task
-
-
-
-
zi-load-ices
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-load-ices. [[[
-
-
-
-
-
-

Has 22 line(s). Calls functions:

-
-
-
-
.zi-load-ices
-
-
-
-

Called by:

-
-
-
-
zi
-
-
-
-

Environment variables used: ZPFX

-
-
-
zi-load-object
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-load-object. [[[
-
-
-
-
-
-

Has 10 line(s). Calls functions:

-
-
-
-
.zi-load-object
-
-
-
-

Called by:

-
-
-
-
zi
-
-
-
-
zi-load-plugin
-

~~~~~

-
-
-
-
-
-
FUNCTION: .zi-load-plugin. [[[
-Lower-level function for loading a plugin.
-
-
-
-
-
$1 - user
-$2 - plugin
-$3 - mode (light or load)
-
-
-
-
-
-

Has 107 line(s). Calls functions:

-
-
-
-
.zi-load-plugin
-`-- :zi-tmp-subst-autoload
-    |-- is-at-least
-    `-- +zi-message
-
-
-
-

Uses feature(s): eval, setopt, source, unfunction, zle

-
-
-

Called by:

-
-
-
-
.zi-load
-
-
-
-
zi-load-snippet
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-load-snippet. [[[
-Implements the exposed-to-user action of loading a snippet.
-
-
-
-
-
$1 - url (can be local, absolute path).
-
-
-
-
-
-

Has 173 line(s). Calls functions:

-
-
-
-
.zi-load-snippet
-|-- install.zsh/.zi-download-snippet
-|-- +zi-deploy-message
-`-- +zi-message
-
-
-
-

Uses feature(s): autoload, eval, setopt, source, unfunction, zparseopts, zstyle

-
-
-

Called by:

-
-
-
-
pmodload
-.zi-load-object
-.zi-load
-.zi-run-task
-
-
-
-
zi-main-message-formatter
-

~~~~~~~~~~

-
-
-
-
-
-
FUNCTION: +zi-message-formatter [[[
-
-
-
-
-
-

Has 18 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

+zi-message

-
-
-
-
-
FUNCTION: +zi-message. [[[
-
-
-
-
-
-

Has 14 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
Script-Body
-.zi-compdef-clear
-.zi-compdef-replay
-.zi-load-snippet
-+zi-prehelp-usage-message
-.zi-register-plugin
-.zi-run
-.zi-set-m-func
-:zi-tmp-subst-autoload
-zi
-autoload.zsh/.zi-build-module
-autoload.zsh/.zi-cd
-autoload.zsh/.zi-self-update
-autoload.zsh/.zi-show-zstatus
-autoload.zsh/.zi-uninstall-completions
-autoload.zsh/.zi-update-all-parallel
-autoload.zsh/.zi-update-or-status-all
-autoload.zsh/.zi-update-or-status
-autoload.zsh/.zi-wait-for-update-jobs
-install.zsh/.zi-compile-plugin
-install.zsh/.zi-compinit
-install.zsh/.zi-download-file-stdout
-install.zsh/.zi-download-snippet
-install.zsh/.zi-extract
-install.zsh/ziextract
-install.zsh/.zi-get-cygwin-package
-install.zsh/.zi-get-latest-gh-r-url-part
-install.zsh/.zi-get-package
-install.zsh/.zi-install-completions
-install.zsh/∞zi-ps-on-update-hook
-install.zsh/∞zi-reset-hook
-install.zsh/.zi-setup-plugin-dir
-install.zsh/.zi-update-snippet
-side.zsh/.zi-countdown
-side.zsh/.zi-exists-physically-message
-
-
-
-
zi-pack-ice
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-pack-ice. [[[
-Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
-second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
-or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
-
-
-
-
-
-

Has 3 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-load-snippet
-.zi-load
-@zsh-plugin-run-on-unload
-@zsh-plugin-run-on-update
-install.zsh/.zi-update-snippet
-side.zsh/.zi-compute-ice
-
-
-
-
zi-parse-opts
-

~~~~~~

-
-
-
-
-
-
]]]
-FUNCTION: +zi-parse-opts. [[[
-
-
-
-
-
-

Has 2 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi
-autoload.zsh/.zi-delete
-
-
-
-
-

+zi-prehelp-usage-message

-
-
-
-
-
FUNCTION: +zi-prehelp-usage-message. [[[
-
-
-
-
-
-

Has 34 line(s). Calls functions:

-
-
-
-
+zi-prehelp-usage-message
-`-- +zi-message
-
-
-
-

Called by:

-
-
-
-
zi
-autoload.zsh/.zi-delete
-
-
-
-
zi-prepare-home
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-prepare-home. [[[
-Creates all directories needed by ZI, first checks if they already exist.
-
-
-
-
-
-

Has 38 line(s). Calls functions:

-
-
-
-
.zi-prepare-home
-|-- autoload.zsh/.zi-clear-completions
-`-- install.zsh/.zi-compinit
-
-
-
-

Uses feature(s): source

-
-
-

Called by:

-
-
-
-
Script-Body
-
-
-
-

Environment variables used: ZPFX

-
-
-
-

@zi-register-annex

-
-
-
-
-
FUNCTION: @zi-register-annex. [[[
-Registers the z-annex inside ZI – i.e. an ZI extension
-
-
-
-
-
-

Has 8 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

@zi-register-hook

-
-
-
-
-
FUNCTION: @zi-register-hook. [[[
-Registers the z-annex inside ZI – i.e. an ZI extension
-
-
-
-
-
-

Has 4 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
Script-Body
-
-
-
-
zi-register-plugin
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-register-plugin. [[[
-Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
-zsh_loaded_plugins array (managed according to the plugin standard:
-https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
-
-
-
-
-
-

Has 20 line(s). Calls functions:

-
-
-
-
.zi-register-plugin
-`-- +zi-message
-
-
-
-

Called by:

-
-
-
-
.zi-load
-
-
-
-
-

:zi-reload-and-run

-
-
-
-
-
FUNCTION: :zi-reload-and-run. [[[
-Marks given function ($3) for autoloading, and executes it triggering the load.
-$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
-because using that on older Zsh versions causes problems with traps.
-
-
-
-
-
So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
-
-
-
-
-
$1 - FPATH dedicated to function
-$2 - autoload options
-$3 - function name (one that needs autoloading)
-
-
-
-
-
Author: Bart Schaefer
-
-
-
-
-
-

Has 9 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): autoload, unfunction

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-run
-

~~~

-
-
-
-
-
-
FUNCTION: .zi-run. [[[
-Run code inside plugin's folder
-It uses the `correct' parameter from upper's scope zi().
-
-
-
-
-
-

Has 24 line(s). Calls functions:

-
-
-
-
.zi-run
-`-- +zi-message
-
-
-
-

Uses feature(s): eval, setopt

-
-
-

Called by:

-
-
-
-
zi
-
-
-
-
zi-run-task
-

~~~~

-
-
-
-
-
-
FUNCTION: .zi-run-task. [[[
-A backend, worker function of .zi-scheduler. It obtains the tasks
-index and a few of its properties (like the type: plugin, snippet,
-service plugin, service snippet) and executes it first checking for
-additional conditions (like non-numeric wait'' ice).
-
-
-
-
-
$1 - the pass number, either 1st or 2nd pass
-$2 - the time assigned to the task
-$3 - type: plugin, snippet, service plugin, service snippet
-$4 - task's index in the ZI[WAIT_ICE_...] fields
-$5 - mode: load or light
-$6 - the plugin-spec or snippet URL or alias name (from id-as'')
-
-
-
-
-
-

Has 45 line(s). Calls functions:

-
-
-
-
.zi-run-task
-`-- autoload.zsh/.zi-unload
-
-
-
-

Uses feature(s): eval, source, zle, zpty

-
-
-

Called by:

-
-
-
-
@zi-scheduler
-
-
-
-
-

@zi-scheduler

-
-
-
-
-
FUNCTION: @zi-scheduler. [[[
-Searches for timeout tasks, executes them. There's an array of tasks
-waiting for execution, this scheduler manages them, detects which ones
-should be run at current moment, decides to remove (or not) them from
-the array after execution.
-
-
-
-
-
$1 - if "following", then it is non-first (second and more)
-invocation of the scheduler; this results in chain of `sched'
-invocations that results in repetitive @zi-scheduler activity.
-
-
-
-
-
if "burst", then all tasks are marked timeout and executed one
-by one; this is handy if e.g. a docker image starts up and
-needs to install all turbo-mode plugins without any hesitation
-(delay), i.e. "burst" allows to run package installations from
-script, not from prompt.
-
-
-
-
-
-

Has 74 line(s). Is a precmd hook. Calls functions:

-
-
-
-
@zi-scheduler
-`-- add-zsh-hook
-
-
-
-

Uses feature(s): add-zsh-hook, sched, setopt, zle

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

-zi_scheduler_add_sh

-
-
-
-
-
FUNCTION: -zi_scheduler_add_sh. [[[
-Copies task into ZI_RUN array, called when a task timeouts.
-A small function ran from pattern in /-substitution as a math
-function.
-
-
-
-
-
-

Has 7 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-set-m-func
-

~~~~~~

-
-
-
-
-
-
FUNCTION:.zi-set-m-func() [[[
-Sets and withdraws the temporary, atclone/atpull time function `m`.
-
-
-
-
-
-

Has 17 line(s). Calls functions:

-
-
-
-
.zi-set-m-func
-`-- +zi-message
-
-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-load-snippet
-.zi-load
-autoload.zsh/.zi-update-or-status
-
-
-
-
zi-setup-params
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-setup-params. [[[
-
-
-
-
-
-

Has 3 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
.zi-load-snippet
-.zi-load
-
-
-
-
zi-submit-turbo
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-submit-turbo. [[[
-If `zi load`, `zi light` or `zi snippet`  will be
-preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
-ice-mods then the plugin or snipped is to be loaded in turbo-mode,
-and this function adds it to internal data structures, so that
-@zi-scheduler can run (load, unload) this as a task.
-
-
-
-
-
-

Has 16 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
zi
-
-
-
-
-

@zi-substitute

-
-
-
-
-
FUNCTION: @zi-substitute. [[[
-
-
-
-
-
-

Has 36 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
autoload.zsh/.zi-at-eval
-install.zsh/∞zi-atclone-hook
-install.zsh/.zi-at-eval
-install.zsh/∞zi-cp-hook
-install.zsh/∞zi-extract-hook
-install.zsh/.zi-get-package
-install.zsh/∞zi-make-ee-hook
-install.zsh/∞zi-make-e-hook
-install.zsh/∞zi-make-hook
-install.zsh/∞zi-mv-hook
-
-
-
-

Environment variables used: ZPFX

-
-
-
-

:zi-tmp-subst-alias

-
-
-
-
-
FUNCTION: :zi-tmp-subst-alias. [[[
-Function defined to hijack plugin's calls to the `alias' builtin.
-
-
-
-
-
The hijacking is to gather report data (which is used in unload).
-
-
-
-
-
-

Has 30 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-alias
-
-
-
-

Uses feature(s): alias, setopt, zparseopts

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

:zi-tmp-subst-autoload

-
-
-
-
-
FUNCTION: :zi-tmp-subst-autoload. [[[
-Function defined to hijack plugin's calls to the `autoload' builtin.
-
-
-
-
-
The hijacking is not only to gather report data, but also to.
-run custom `autoload' function, that doesn't need FPATH.
-
-
-
-
-
-

Has 106 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-autoload
-|-- is-at-least
-`-- +zi-message
-
-
-
-

Uses feature(s): autoload, eval, is-at-least, setopt, zparseopts

-
-
-

Called by:

-
-
-
-
@autoload
-.zi-load-plugin
-
-
-
-
-

:zi-tmp-subst-bindkey

-
-
-
-
-
FUNCTION: :zi-tmp-subst-bindkey. [[[
-Function defined to hijack plugin's calls to the `bindkey' builtin.
-
-
-
-
-
The hijacking is to gather report data (which is used in unload).
-
-
-
-
-
-

Has 107 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-bindkey
-`-- is-at-least
-
-
-
-

Uses feature(s): bindkey, is-at-least, setopt, zparseopts

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

:zi-tmp-subst-compdef

-
-
-
-
-
FUNCTION: :zi-tmp-subst-compdef. [[[
-Function defined to hijack plugin's calls to the `compdef' function.
-The hijacking is not only for reporting, but also to save compdef
-calls so that `compinit' can be called after loading plugins.
-
-
-
-
-
-

Has 5 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-compdef
-
-
-
-

Uses feature(s): setopt

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-tmp-subst-off
-

~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-tmp-subst-off. [[[
-Turn off temporary substituting of functions completely for a given mode ("load", "light",
-"light-b" (i.e. the `trackbinds' mode) or "compdef").
-
-
-
-
-
-

Has 17 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt, unfunction

-
-
-

Called by:

-
-
-
-
.zi-load-plugin
-
-
-
-
zi-tmp-subst-on
-

~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-tmp-subst-on. [[[
-Turn on temporary substituting of functions of builtins and functions according to passed
-mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
-to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
-
-
-
-
-
-

Has 29 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): source

-
-
-

Called by:

-
-
-
-
.zi-load-plugin
-
-
-
-
-

:zi-tmp-subst-zle

-
-
-
-
-
FUNCTION: :zi-tmp-subst-zle. [[[.
-Function defined to hijack plugin's calls to the `zle' builtin.
-
-
-
-
-
The hijacking is to gather report data (which is used in unload).
-
-
-
-
-
-

Has 33 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-zle
-
-
-
-

Uses feature(s): setopt, zle

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

:zi-tmp-subst-zstyle

-
-
-
-
-
FUNCTION: :zi-tmp-subst-zstyle. [[[
-Function defined to hijack plugin's calls to the `zstyle' builtin.
-
-
-
-
-
The hijacking is to gather report data (which is used in unload).
-
-
-
-
-
-

Has 19 line(s). Calls functions:

-
-
-
-
:zi-tmp-subst-zstyle
-
-
-
-

Uses feature(s): setopt, zparseopts, zstyle

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zi-turbo

-
-
-
-
-
FUNCTION: zi-turbo. [[[
-With zi-turbo first argument is a wait time and suffix, i.e. "0a".
-Anything that doesn't match will be passed as if it were an ice mod.
-Default ices depth'3' and lucid, allowed values [0-9][a-d].
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zi-turbo
-`-- zi
-    |-- autoload.zsh/.zi-analytics-menu
-    |-- autoload.zsh/.zi-cdisable
-    |-- autoload.zsh/.zi-cenable
-    |-- autoload.zsh/.zi-clear-completions
-    |-- autoload.zsh/.zi-compiled
-    |-- autoload.zsh/.zi-compile-uncompile-all
-    |-- autoload.zsh/.zi-control-menu
-    |-- autoload.zsh/.zi-help
-    |-- autoload.zsh/.zi-list-bindkeys
-    |-- autoload.zsh/.zi-list-compdef-replay
-    |-- autoload.zsh/.zi-ls
-    |-- autoload.zsh/.zi-module
-    |-- autoload.zsh/.zi-recently
-    |-- autoload.zsh/.zi-search-completions
-    |-- autoload.zsh/.zi-self-update
-    |-- autoload.zsh/.zi-show-all-reports
-    |-- autoload.zsh/.zi-show-completions
-    |-- autoload.zsh/.zi-show-debug-report
-    |-- autoload.zsh/.zi-show-registered-plugins
-    |-- autoload.zsh/.zi-show-report
-    |-- autoload.zsh/.zi-show-times
-    |-- autoload.zsh/.zi-show-zstatus
-    |-- autoload.zsh/.zi-uncompile-plugin
-    |-- autoload.zsh/.zi-uninstall-completions
-    |-- autoload.zsh/.zi-unload
-    |-- autoload.zsh/.zi-update-or-status
-    |-- autoload.zsh/.zi-update-or-status-all
-    |-- compinit
-    |-- install.zsh/.zi-compile-plugin
-    |-- install.zsh/.zi-compinit
-    |-- install.zsh/.zi-forget-completion
-    |-- install.zsh/.zi-install-completions
-    |-- +zi-message
-    `-- +zi-prehelp-usage-message
-        `-- +zi-message
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
zi-util-shands-path
-

~~~~~~~~

-
-
-
-
-
-
FUNCTION: .zi-util-shands-path. [[[
-Replaces parts of path with %HOME, etc.
-
-
-
-
-
-

Has 8 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): setopt

-
-
-

Called by:

-
-
-
-
.zi-any-to-pid
-
-
-
-

Environment variables used: ZPFX

-
-
-
-

zpcdclear

-
-

Has 1 line(s). Calls functions:

-
-
-
-
zpcdclear
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zpcdreplay

-
-
-
-
-
]]]
-Compatibility functions. [[[
-zinit() { zi "$@"; }
-
-
-
-
-
-

Has 1 line(s). Calls functions:

-
-
-
-
zpcdreplay
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zpcompdef

-
-

Has 1 line(s). Doesn’t call other functions.

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

zpcompinit

-
-

Has 1 line(s). Calls functions:

-
-
-
-
zpcompinit
-`-- compinit
-
-
-
-

Uses feature(s): autoload, compinit

-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

@zsh-plugin-run-on-unload

-
-
-
-
-
FUNCTION: @zsh-plugin-run-on-update. [[[
-The Plugin Standard required mechanism, see:
-https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
@zsh-plugin-run-on-unload
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

@zsh-plugin-run-on-update

-
-
-
-
-
FUNCTION: @zsh-plugin-run-on-update. [[[
-The Plugin Standard required mechanism
-
-
-
-
-
-

Has 2 line(s). Calls functions:

-
-
-
-
@zsh-plugin-run-on-update
-
-
-
-

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

-
-
-
-

add-zsh-hook

-
-
-
-
-
Add to HOOK the given FUNCTION.
-HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
-zshexit, zsh_directory_name (the _functions subscript is not required).
-
-
-
-
-
With -d, remove the function from the hook instead; delete the hook
-variable if it is empty.
-
-
-
-
-
-D behaves like -d, but pattern characters are active in the
-function name, so any matching function will be deleted from the hook.
-
-
-
-
-
-

Has 93 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): autoload, getopts

-
-
-

Called by:

-
-
-
-
Script-Body
-@zi-scheduler
-
-
-
-
-

compinit

-
-
-
-
-
Initialisation for new style completion. This mainly contains some helper
-functions and setup. Everything else is split into different files that
-will automatically be made autoloaded (see the end of this file).  The
-names of the files that will be considered for autoloading are those that
-begin with an underscores (like `_condition).
-
-
-
-
-
The first line of each of these files is read and must indicate what
-should be done with its contents:
-
-
-
-
-
`#compdef <names ...>'
-
-
-
-
-
-

Has 549 line(s). Doesn’t call other functions.

-
-
-

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

-
-
-

Called by:

-
-
-
-
zi
-zicompinit
-zpcompinit
-
-
-
-
-

is-at-least

-
-
-
-
-
Test whether $ZSH_VERSION (or some value of your choice, if a second argument
-is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
-it'll accept any dot/dash-separated string of numbers as its second argument
-and compare it to the dot/dash-separated first argument. Leading non-number
-parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
-when the comparison is done; only the numbers matter. Any left-out segments
-in the first argument that are present in the version string compared are
-considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
-
-
-
-
-
-

Has 56 line(s). Doesn’t call other functions.

-
-
-

Called by:

-
-
-
-
Script-Body
-:zi-tmp-subst-autoload
-:zi-tmp-subst-bindkey
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/code/zsdoc/pdf/autoload.zsh.pdf b/code/zsdoc/pdf/autoload.zsh.pdf deleted file mode 100644 index 6be7197b9ccaa953e07d3ed859923a7ee2f99d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410740 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
!3vS(n)E|m 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 diff --git a/code/zsdoc/pdf/install.zsh.pdf b/code/zsdoc/pdf/install.zsh.pdf deleted file mode 100644 index c7e7953418f0429e330f3a2fc1f51a7ff5af2fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210801 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 YmZkOIp5y50Sm{~VVBfzNloEpdKNI0D`2YX_ diff --git a/code/zsdoc/pdf/side.zsh.pdf b/code/zsdoc/pdf/side.zsh.pdf deleted file mode 100644 index 06b596d5eef75214d9f502fe4cdbb07b3acde401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109159 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 H$dLRODCqW< From b54e55607125c586f76c9bcdcb6adf86290c971d Mon Sep 17 00:00:00 2001 From: Z-Shell ZI Date: Tue, 14 Dec 2021 02:56:44 +0000 Subject: [PATCH 021/470] Code Documentation Update Signed-off-by: Z-Shell Bot --- code/zsdoc/asciidoc/additional.zsh.adoc | 26 +- code/zsdoc/asciidoc/autoload.zsh.adoc | 50 +- code/zsdoc/asciidoc/install.zsh.adoc | 592 +-- code/zsdoc/asciidoc/side.zsh.adoc | 10 +- code/zsdoc/asciidoc/zi.zsh.adoc | 952 ++--- code/zsdoc/data/autoload/install.zsh/compinit | 549 +++ code/zsdoc/data/autoload/side.zsh/zmv | 299 ++ code/zsdoc/data/autoload/zi.zsh/add-zsh-hook | 93 + code/zsdoc/data/autoload/zi.zsh/compinit | 549 +++ code/zsdoc/data/autoload/zi.zsh/is-at-least | 56 + code/zsdoc/data/bodies/additional.zsh | 1 + .../zsdoc/data/bodies/additional.zsh.comments | 25 + code/zsdoc/data/bodies/autoload.zsh | 4 + code/zsdoc/data/bodies/autoload.zsh.comments | 362 ++ code/zsdoc/data/bodies/install.zsh | 3 + code/zsdoc/data/bodies/install.zsh.comments | 94 + code/zsdoc/data/bodies/side.zsh | 1 + code/zsdoc/data/bodies/side.zsh.comments | 60 + code/zsdoc/data/bodies/zi.zsh | 202 + code/zsdoc/data/bodies/zi.zsh.comments | 314 ++ code/zsdoc/data/call_tree.zsd | 6 + .../additional.zsh/.zi-clear-debug-report | 2 + .../additional.zsh/.zi-debug-start | 2 + .../additional.zsh/.zi-debug-stop | 2 + .../additional.zsh/.zi-debug-unload | 2 + .../descriptions/additional.zsh/.zi-service | 7 + .../additional.zsh/.zi-wrap-track-functions | 1 + .../additional.zsh/:zi-tmp-subst-source | 1 + .../autoload.zsh/.zi-analytics-menu | 4 + .../autoload.zsh/.zi-any-to-uspl2 | 6 + .../descriptions/autoload.zsh/.zi-at-eval | 1 + .../autoload.zsh/.zi-build-module | 2 + .../data/descriptions/autoload.zsh/.zi-cd | 7 + .../descriptions/autoload.zsh/.zi-cdisable | 6 + .../descriptions/autoload.zsh/.zi-cenable | 6 + .../descriptions/autoload.zsh/.zi-changes | 7 + .../autoload.zsh/.zi-check-comp-consistency | 8 + .../.zi-check-which-completions-are-enabled | 8 + .../.zi-check-which-completions-are-installed | 6 + .../autoload.zsh/.zi-clear-completions | 7 + .../autoload.zsh/.zi-clear-report-for | 5 + .../autoload.zsh/.zi-compile-uncompile-all | 4 + .../descriptions/autoload.zsh/.zi-compiled | 4 + .../descriptions/autoload.zsh/.zi-confirm | 5 + .../autoload.zsh/.zi-control-menu | 4 + .../data/descriptions/autoload.zsh/.zi-create | 7 + .../data/descriptions/autoload.zsh/.zi-delete | 7 + .../autoload.zsh/.zi-diff-env-compute | 5 + .../autoload.zsh/.zi-diff-functions-compute | 5 + .../autoload.zsh/.zi-diff-options-compute | 5 + .../autoload.zsh/.zi-diff-parameter-compute | 6 + .../data/descriptions/autoload.zsh/.zi-edit | 7 + .../autoload.zsh/.zi-exists-message | 5 + .../.zi-find-completions-of-plugin | 6 + .../descriptions/autoload.zsh/.zi-format-env | 5 + .../autoload.zsh/.zi-format-functions | 4 + .../autoload.zsh/.zi-format-options | 4 + .../autoload.zsh/.zi-format-parameter | 4 + .../autoload.zsh/.zi-get-completion-owner | 10 + .../.zi-get-completion-owner-uspl2col | 6 + .../descriptions/autoload.zsh/.zi-get-path | 3 + .../data/descriptions/autoload.zsh/.zi-glance | 8 + .../data/descriptions/autoload.zsh/.zi-help | 4 + .../autoload.zsh/.zi-list-bindkeys | 1 + .../autoload.zsh/.zi-list-compdef-replay | 5 + .../data/descriptions/autoload.zsh/.zi-ls | 1 + .../data/descriptions/autoload.zsh/.zi-module | 4 + .../data/descriptions/autoload.zsh/.zi-pager | 2 + .../autoload.zsh/.zi-prepare-readlink | 4 + .../data/descriptions/autoload.zsh/.zi-recall | 1 + .../descriptions/autoload.zsh/.zi-recently | 6 + .../autoload.zsh/.zi-restore-extendedglob | 2 + .../autoload.zsh/.zi-run-delete-hooks | 1 + .../autoload.zsh/.zi-save-set-extendedglob | 3 + .../autoload.zsh/.zi-search-completions | 6 + .../descriptions/autoload.zsh/.zi-self-update | 4 + .../autoload.zsh/.zi-show-all-reports | 4 + .../autoload.zsh/.zi-show-completions | 8 + .../autoload.zsh/.zi-show-debug-report | 4 + .../autoload.zsh/.zi-show-registered-plugins | 4 + .../descriptions/autoload.zsh/.zi-show-report | 7 + .../descriptions/autoload.zsh/.zi-show-times | 4 + .../autoload.zsh/.zi-show-zstatus | 5 + .../data/descriptions/autoload.zsh/.zi-stress | 9 + .../autoload.zsh/.zi-uncompile-plugin | 7 + .../autoload.zsh/.zi-uninstall-completions | 6 + .../data/descriptions/autoload.zsh/.zi-unload | 17 + .../autoload.zsh/.zi-unregister-plugin | 3 + .../autoload.zsh/.zi-update-all-parallel | 1 + .../autoload.zsh/.zi-update-or-status | 8 + .../autoload.zsh/.zi-update-or-status-all | 6 + .../autoload.zsh/.zi-update-or-status-snippet | 6 + .../autoload.zsh/.zi-wait-for-update-jobs | 2 + .../data/descriptions/install.zsh/.zi-at-eval | 2 + .../install.zsh/.zi-compile-plugin | 5 + .../descriptions/install.zsh/.zi-compinit | 5 + .../install.zsh/.zi-download-file-stdout | 3 + .../install.zsh/.zi-download-snippet | 4 + .../data/descriptions/install.zsh/.zi-extract | 1 + .../install.zsh/.zi-forget-completion | 6 + .../install.zsh/.zi-get-cygwin-package | 1 + .../install.zsh/.zi-get-latest-gh-r-url-part | 4 + .../descriptions/install.zsh/.zi-get-package | 2 + .../install.zsh/.zi-get-url-mtime | 2 + .../install.zsh/.zi-install-completions | 9 + .../install.zsh/.zi-mirror-using-svn | 8 + .../descriptions/install.zsh/.zi-parse-json | 2 + .../install.zsh/.zi-setup-plugin-dir | 7 + .../install.zsh/.zi-update-snippet | 2 + .../data/descriptions/install.zsh/compinit | 10 + code/zsdoc/data/descriptions/install.zsh/zicp | 2 + .../data/descriptions/install.zsh/ziextract | 9 + code/zsdoc/data/descriptions/install.zsh/zimv | 2 + .../data/descriptions/install.zsh/zpextract | 2 + .../install.zsh/\342\210\236zi-atclone-hook" | 1 + .../install.zsh/\342\210\236zi-atpull-e-hook" | 1 + .../install.zsh/\342\210\236zi-atpull-hook" | 1 + .../\342\210\236zi-compile-plugin-hook" | 1 + .../install.zsh/\342\210\236zi-cp-hook" | 1 + .../install.zsh/\342\210\236zi-extract-hook" | 1 + .../install.zsh/\342\210\236zi-make-e-hook" | 1 + .../install.zsh/\342\210\236zi-make-ee-hook" | 1 + .../install.zsh/\342\210\236zi-make-hook" | 1 + .../install.zsh/\342\210\236zi-mv-hook" | 1 + .../\342\210\236zi-ps-on-update-hook" | 1 + .../install.zsh/\342\210\236zi-reset-hook" | 2 + .../side.zsh/.zi-any-colorify-as-uspl2 | 6 + .../descriptions/side.zsh/.zi-compute-ice | 15 + .../data/descriptions/side.zsh/.zi-countdown | 3 + .../side.zsh/.zi-exists-physically | 7 + .../side.zsh/.zi-exists-physically-message | 7 + .../data/descriptions/side.zsh/.zi-first | 7 + .../data/descriptions/side.zsh/.zi-store-ices | 9 + .../data/descriptions/side.zsh/.zi-two-paths | 3 + code/zsdoc/data/descriptions/side.zsh/zmv | 10 + .../descriptions/zi.zsh/+zi-deploy-message | 3 + .../data/descriptions/zi.zsh/+zi-message | 1 + .../zi.zsh/+zi-prehelp-usage-message | 1 + .../descriptions/zi.zsh/-zi_scheduler_add_sh | 4 + .../data/descriptions/zi.zsh/.zi-add-fpath | 1 + .../data/descriptions/zi.zsh/.zi-add-report | 5 + .../data/descriptions/zi.zsh/.zi-any-to-pid | 1 + .../zi.zsh/.zi-any-to-user-plugin | 8 + .../descriptions/zi.zsh/.zi-compdef-clear | 2 + .../descriptions/zi.zsh/.zi-compdef-replay | 2 + code/zsdoc/data/descriptions/zi.zsh/.zi-diff | 2 + .../data/descriptions/zi.zsh/.zi-diff-env | 5 + .../descriptions/zi.zsh/.zi-diff-functions | 5 + .../data/descriptions/zi.zsh/.zi-diff-options | 5 + .../descriptions/zi.zsh/.zi-diff-parameter | 6 + .../zi.zsh/.zi-find-other-matches | 4 + .../descriptions/zi.zsh/.zi-formatter-bar | 1 + .../zi.zsh/.zi-formatter-bar-util | 1 + .../descriptions/zi.zsh/.zi-formatter-pid | 1 + .../descriptions/zi.zsh/.zi-formatter-th-bar | 1 + .../descriptions/zi.zsh/.zi-formatter-url | 1 + .../descriptions/zi.zsh/.zi-get-mtime-into | 1 + .../descriptions/zi.zsh/.zi-get-object-path | 1 + code/zsdoc/data/descriptions/zi.zsh/.zi-ice | 3 + code/zsdoc/data/descriptions/zi.zsh/.zi-load | 5 + .../data/descriptions/zi.zsh/.zi-load-ices | 1 + .../data/descriptions/zi.zsh/.zi-load-object | 1 + .../data/descriptions/zi.zsh/.zi-load-plugin | 6 + .../data/descriptions/zi.zsh/.zi-load-snippet | 4 + .../zi.zsh/.zi-main-message-formatter | 1 + .../data/descriptions/zi.zsh/.zi-pack-ice | 4 + .../data/descriptions/zi.zsh/.zi-parse-opts | 2 + .../data/descriptions/zi.zsh/.zi-prepare-home | 2 + .../descriptions/zi.zsh/.zi-register-plugin | 4 + code/zsdoc/data/descriptions/zi.zsh/.zi-run | 3 + .../data/descriptions/zi.zsh/.zi-run-task | 12 + .../data/descriptions/zi.zsh/.zi-set-m-func | 2 + .../data/descriptions/zi.zsh/.zi-setup-params | 1 + .../data/descriptions/zi.zsh/.zi-submit-turbo | 6 + .../descriptions/zi.zsh/.zi-tmp-subst-off | 3 + .../data/descriptions/zi.zsh/.zi-tmp-subst-on | 4 + .../descriptions/zi.zsh/.zi-util-shands-path | 2 + .../descriptions/zi.zsh/:zi-reload-and-run | 12 + .../descriptions/zi.zsh/:zi-tmp-subst-alias | 4 + .../zi.zsh/:zi-tmp-subst-autoload | 5 + .../descriptions/zi.zsh/:zi-tmp-subst-bindkey | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-compdef | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-zle | 4 + .../descriptions/zi.zsh/:zi-tmp-subst-zstyle | 4 + code/zsdoc/data/descriptions/zi.zsh/@autoload | 2 + .../descriptions/zi.zsh/@zi-register-annex | 2 + .../descriptions/zi.zsh/@zi-register-hook | 2 + .../data/descriptions/zi.zsh/@zi-scheduler | 16 + .../data/descriptions/zi.zsh/@zi-substitute | 1 + .../zi.zsh/@zsh-plugin-run-on-unload | 3 + .../zi.zsh/@zsh-plugin-run-on-update | 2 + .../data/descriptions/zi.zsh/add-zsh-hook | 10 + code/zsdoc/data/descriptions/zi.zsh/compinit | 10 + .../data/descriptions/zi.zsh/is-at-least | 10 + code/zsdoc/data/descriptions/zi.zsh/pmodload | 2 + code/zsdoc/data/descriptions/zi.zsh/zi | 2 + code/zsdoc/data/descriptions/zi.zsh/zi-turbo | 4 + code/zsdoc/data/descriptions/zi.zsh/zicdclear | 3 + .../zsdoc/data/descriptions/zi.zsh/zicdreplay | 3 + code/zsdoc/data/descriptions/zi.zsh/zicompdef | 3 + .../zsdoc/data/descriptions/zi.zsh/zicompinit | 5 + .../zsdoc/data/descriptions/zi.zsh/zpcdreplay | 3 + .../.zi-get-package/zi.zsh/Script_Body_/ZPFX | 0 .../install.zsh/zicp/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-load-ices/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-prepare-home/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../@zi-substitute/zi.zsh/Script_Body_/ZPFX | 0 .../zsd_script_body/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZSH_CACHE_DIR | 0 .../data/exports/zi.zsh/Script_Body_/PMSPEC | 1 + .../data/exports/zi.zsh/Script_Body_/ZPFX | 1 + .../exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR | 1 + code/zsdoc/data/extended/additional.zsh | 137 + code/zsdoc/data/extended/autoload.zsh | 3072 ++++++++++++++ code/zsdoc/data/extended/install.zsh | 2691 +++++++++++++ code/zsdoc/data/extended/side.zsh | 670 ++++ code/zsdoc/data/extended/zi.zsh | 3521 +++++++++++++++++ .../additional.zsh/.zi-debug-unload/source | 1 + .../features/additional.zsh/.zi-service/kill | 1 + .../features/additional.zsh/.zi-service/read | 1 + .../additional.zsh/.zi-service/setopt | 1 + .../.zi-wrap-track-functions/eval | 1 + .../additional.zsh/:zi-tmp-subst-source/eval | 1 + .../features/autoload.zsh/.zi-at-eval/eval | 1 + .../data/features/autoload.zsh/.zi-cd/setopt | 1 + .../autoload.zsh/.zi-clear-completions/setopt | 1 + .../.zi-compile-uncompile-all/setopt | 1 + .../features/autoload.zsh/.zi-compiled/setopt | 1 + .../features/autoload.zsh/.zi-confirm/eval | 1 + .../features/autoload.zsh/.zi-confirm/read | 1 + .../features/autoload.zsh/.zi-create/autoload | 1 + .../features/autoload.zsh/.zi-create/setopt | 1 + .../features/autoload.zsh/.zi-create/vared | 1 + .../features/autoload.zsh/.zi-delete/setopt | 1 + .../autoload.zsh/.zi-diff-env-compute/setopt | 1 + .../.zi-diff-functions-compute/setopt | 1 + .../.zi-diff-options-compute/setopt | 1 + .../.zi-diff-parameter-compute/setopt | 1 + .../.zi-find-completions-of-plugin/setopt | 1 + .../autoload.zsh/.zi-format-parameter/setopt | 1 + .../.zi-get-completion-owner/setopt | 1 + .../features/autoload.zsh/.zi-get-path/setopt | 1 + .../features/autoload.zsh/.zi-pager/setopt | 1 + .../autoload.zsh/.zi-prepare-readlink/type | 1 + .../features/autoload.zsh/.zi-recall/setopt | 1 + .../features/autoload.zsh/.zi-recently/setopt | 1 + .../.zi-restore-extendedglob/setopt | 1 + .../autoload.zsh/.zi-run-delete-hooks/eval | 1 + .../.zi-save-set-extendedglob/setopt | 1 + .../.zi-search-completions/setopt | 1 + .../autoload.zsh/.zi-self-update/setopt | 1 + .../autoload.zsh/.zi-self-update/source | 1 + .../autoload.zsh/.zi-self-update/zcompile | 1 + .../autoload.zsh/.zi-show-completions/setopt | 1 + .../.zi-show-registered-plugins/setopt | 1 + .../autoload.zsh/.zi-show-report/setopt | 1 + .../autoload.zsh/.zi-show-times/setopt | 1 + .../autoload.zsh/.zi-show-zstatus/setopt | 1 + .../features/autoload.zsh/.zi-stress/setopt | 1 + .../features/autoload.zsh/.zi-stress/zcompile | 1 + .../autoload.zsh/.zi-uncompile-plugin/setopt | 1 + .../.zi-uninstall-completions/setopt | 1 + .../.zi-uninstall-completions/source | 1 + .../features/autoload.zsh/.zi-unload/alias | 1 + .../features/autoload.zsh/.zi-unload/bindkey | 1 + .../features/autoload.zsh/.zi-unload/eval | 1 + .../features/autoload.zsh/.zi-unload/setopt | 1 + .../features/autoload.zsh/.zi-unload/unalias | 1 + .../autoload.zsh/.zi-unload/unfunction | 1 + .../data/features/autoload.zsh/.zi-unload/zle | 1 + .../features/autoload.zsh/.zi-unload/zstyle | 1 + .../.zi-update-all-parallel/setopt | 1 + .../.zi-update-or-status-all/setopt | 1 + .../.zi-update-or-status-all/source | 1 + .../.zi-update-or-status-snippet/source | 1 + .../autoload.zsh/.zi-update-or-status/kill | 1 + .../autoload.zsh/.zi-update-or-status/read | 1 + .../autoload.zsh/.zi-update-or-status/setopt | 1 + .../autoload.zsh/.zi-update-or-status/source | 1 + .../autoload.zsh/.zi-update-or-status/trap | 1 + .../autoload.zsh/.zi-update-or-status/wait | 1 + .../.zi-wait-for-update-jobs/wait | 1 + .../features/autoload.zsh/Script_Body_/source | 1 + .../features/install.zsh/.zi-at-eval/eval | 1 + .../install.zsh/.zi-compile-plugin/eval | 1 + .../install.zsh/.zi-compile-plugin/setopt | 1 + .../install.zsh/.zi-compile-plugin/zcompile | 1 + .../install.zsh/.zi-compinit/autoload | 1 + .../install.zsh/.zi-compinit/compinit | 1 + .../features/install.zsh/.zi-compinit/setopt | 1 + .../install.zsh/.zi-compinit/unfunction | 1 + .../.zi-download-file-stdout/setopt | 1 + .../install.zsh/.zi-download-file-stdout/trap | 1 + .../install.zsh/.zi-download-file-stdout/type | 1 + .../install.zsh/.zi-download-snippet/setopt | 1 + .../install.zsh/.zi-download-snippet/trap | 1 + .../install.zsh/.zi-download-snippet/zcompile | 1 + .../features/install.zsh/.zi-extract/setopt | 1 + .../install.zsh/.zi-forget-completion/setopt | 1 + .../.zi-forget-completion/unfunction | 1 + .../install.zsh/.zi-get-cygwin-package/setopt | 1 + .../.zi-get-latest-gh-r-url-part/setopt | 1 + .../features/install.zsh/.zi-get-package/eval | 1 + .../install.zsh/.zi-get-package/setopt | 1 + .../features/install.zsh/.zi-get-package/trap | 1 + .../install.zsh/.zi-get-url-mtime/read | 1 + .../install.zsh/.zi-get-url-mtime/setopt | 1 + .../install.zsh/.zi-get-url-mtime/trap | 1 + .../install.zsh/.zi-get-url-mtime/type | 1 + .../.zi-install-completions/setopt | 1 + .../install.zsh/.zi-mirror-using-svn/setopt | 1 + .../install.zsh/.zi-parse-json/setopt | 1 + .../install.zsh/.zi-setup-plugin-dir/setopt | 1 + .../install.zsh/.zi-setup-plugin-dir/trap | 1 + .../install.zsh/.zi-update-snippet/eval | 1 + .../install.zsh/.zi-update-snippet/setopt | 1 + .../features/install.zsh/Script_Body_/source | 1 + .../features/install.zsh/compinit/autoload | 1 + .../features/install.zsh/compinit/bindkey | 1 + .../features/install.zsh/compinit/compdef | 1 + .../features/install.zsh/compinit/compdump | 1 + .../data/features/install.zsh/compinit/eval | 1 + .../data/features/install.zsh/compinit/read | 1 + .../data/features/install.zsh/compinit/setopt | 1 + .../features/install.zsh/compinit/unfunction | 1 + .../data/features/install.zsh/compinit/zle | 1 + .../data/features/install.zsh/compinit/zstyle | 1 + .../data/features/install.zsh/zicp/setopt | 1 + .../features/install.zsh/ziextract/setopt | 1 + .../features/install.zsh/ziextract/unfunction | 1 + .../features/install.zsh/ziextract/zparseopts | 1 + .../\342\210\236zi-atclone-hook/eval" | 1 + .../\342\210\236zi-atclone-hook/setopt" | 1 + .../\342\210\236zi-atpull-e-hook/setopt" | 1 + .../\342\210\236zi-atpull-hook/setopt" | 1 + .../setopt" | 1 + .../\342\210\236zi-cp-hook/setopt" | 1 + .../\342\210\236zi-mv-hook/setopt" | 1 + .../\342\210\236zi-ps-on-update-hook/eval" | 1 + .../\342\210\236zi-reset-hook/eval" | 1 + .../side.zsh/.zi-compute-ice/autoload | 1 + .../features/side.zsh/.zi-compute-ice/setopt | 1 + .../features/side.zsh/.zi-compute-ice/zmv | 1 + .../data/features/side.zsh/.zi-countdown/trap | 1 + .../.zi-exists-physically-message/setopt | 1 + .../features/side.zsh/.zi-two-paths/setopt | 1 + code/zsdoc/data/features/side.zsh/zmv/eval | 1 + code/zsdoc/data/features/side.zsh/zmv/getopts | 1 + code/zsdoc/data/features/side.zsh/zmv/read | 1 + code/zsdoc/data/features/side.zsh/zmv/setopt | 1 + .../features/zi.zsh/+zi-deploy-message/read | 1 + .../features/zi.zsh/+zi-deploy-message/zle | 1 + .../features/zi.zsh/.zi-any-to-pid/setopt | 1 + .../zi.zsh/.zi-any-to-user-plugin/setopt | 1 + .../zi.zsh/.zi-compdef-replay/compdef | 1 + .../features/zi.zsh/.zi-formatter-pid/source | 1 + .../zsdoc/data/features/zi.zsh/.zi-ice/setopt | 1 + .../data/features/zi.zsh/.zi-load-plugin/eval | 1 + .../features/zi.zsh/.zi-load-plugin/setopt | 1 + .../features/zi.zsh/.zi-load-plugin/source | 1 + .../zi.zsh/.zi-load-plugin/unfunction | 1 + .../data/features/zi.zsh/.zi-load-plugin/zle | 1 + .../features/zi.zsh/.zi-load-snippet/autoload | 1 + .../features/zi.zsh/.zi-load-snippet/eval | 1 + .../features/zi.zsh/.zi-load-snippet/setopt | 1 + .../features/zi.zsh/.zi-load-snippet/source | 1 + .../zi.zsh/.zi-load-snippet/unfunction | 1 + .../zi.zsh/.zi-load-snippet/zparseopts | 1 + .../features/zi.zsh/.zi-load-snippet/zstyle | 1 + code/zsdoc/data/features/zi.zsh/.zi-load/eval | 1 + .../data/features/zi.zsh/.zi-load/setopt | 1 + .../data/features/zi.zsh/.zi-load/source | 1 + code/zsdoc/data/features/zi.zsh/.zi-load/zle | 1 + .../features/zi.zsh/.zi-prepare-home/source | 1 + .../data/features/zi.zsh/.zi-run-task/eval | 1 + .../data/features/zi.zsh/.zi-run-task/source | 1 + .../data/features/zi.zsh/.zi-run-task/zle | 1 + .../data/features/zi.zsh/.zi-run-task/zpty | 1 + code/zsdoc/data/features/zi.zsh/.zi-run/eval | 1 + .../zsdoc/data/features/zi.zsh/.zi-run/setopt | 1 + .../features/zi.zsh/.zi-set-m-func/setopt | 1 + .../features/zi.zsh/.zi-tmp-subst-off/setopt | 1 + .../zi.zsh/.zi-tmp-subst-off/unfunction | 1 + .../features/zi.zsh/.zi-tmp-subst-on/source | 1 + .../zi.zsh/.zi-util-shands-path/setopt | 1 + .../zi.zsh/:zi-reload-and-run/autoload | 1 + .../zi.zsh/:zi-reload-and-run/unfunction | 1 + .../features/zi.zsh/:zi-tmp-subst-alias/alias | 1 + .../zi.zsh/:zi-tmp-subst-alias/setopt | 1 + .../zi.zsh/:zi-tmp-subst-alias/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-autoload/autoload | 1 + .../zi.zsh/:zi-tmp-subst-autoload/eval | 1 + .../zi.zsh/:zi-tmp-subst-autoload/is-at-least | 1 + .../zi.zsh/:zi-tmp-subst-autoload/setopt | 1 + .../zi.zsh/:zi-tmp-subst-autoload/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/bindkey | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/is-at-least | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/setopt | 1 + .../zi.zsh/:zi-tmp-subst-bindkey/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-compdef/setopt | 1 + .../features/zi.zsh/:zi-tmp-subst-zle/setopt | 1 + .../features/zi.zsh/:zi-tmp-subst-zle/zle | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/setopt | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/zparseopts | 1 + .../zi.zsh/:zi-tmp-subst-zstyle/zstyle | 1 + .../zi.zsh/@zi-scheduler/add-zsh-hook | 1 + .../data/features/zi.zsh/@zi-scheduler/sched | 1 + .../data/features/zi.zsh/@zi-scheduler/setopt | 1 + .../data/features/zi.zsh/@zi-scheduler/zle | 1 + .../features/zi.zsh/@zi-substitute/setopt | 1 + .../features/zi.zsh/Script_Body_/add-zsh-hook | 1 + .../data/features/zi.zsh/Script_Body_/alias | 1 + .../features/zi.zsh/Script_Body_/autoload | 1 + .../data/features/zi.zsh/Script_Body_/export | 1 + .../features/zi.zsh/Script_Body_/is-at-least | 1 + .../data/features/zi.zsh/Script_Body_/setopt | 1 + .../data/features/zi.zsh/Script_Body_/source | 1 + .../features/zi.zsh/Script_Body_/zmodload | 1 + .../data/features/zi.zsh/Script_Body_/zstyle | 1 + .../features/zi.zsh/add-zsh-hook/autoload | 1 + .../data/features/zi.zsh/add-zsh-hook/getopts | 1 + .../data/features/zi.zsh/compinit/autoload | 1 + .../data/features/zi.zsh/compinit/bindkey | 1 + .../data/features/zi.zsh/compinit/compdef | 1 + .../data/features/zi.zsh/compinit/compdump | 1 + code/zsdoc/data/features/zi.zsh/compinit/eval | 1 + code/zsdoc/data/features/zi.zsh/compinit/read | 1 + .../data/features/zi.zsh/compinit/setopt | 1 + .../data/features/zi.zsh/compinit/unfunction | 1 + code/zsdoc/data/features/zi.zsh/compinit/zle | 1 + .../data/features/zi.zsh/compinit/zstyle | 1 + .../data/features/zi.zsh/pmodload/zstyle | 1 + code/zsdoc/data/features/zi.zsh/zi/autoload | 1 + code/zsdoc/data/features/zi.zsh/zi/compinit | 1 + code/zsdoc/data/features/zi.zsh/zi/eval | 1 + code/zsdoc/data/features/zi.zsh/zi/setopt | 1 + code/zsdoc/data/features/zi.zsh/zi/source | 1 + .../data/features/zi.zsh/zicompinit/autoload | 1 + .../data/features/zi.zsh/zicompinit/compinit | 1 + .../data/features/zi.zsh/zpcompinit/autoload | 1 + .../data/features/zi.zsh/zpcompinit/compinit | 1 + .../additional.zsh/.zi-clear-debug-report | 1 + .../functions/additional.zsh/.zi-debug-start | 9 + .../functions/additional.zsh/.zi-debug-stop | 3 + .../functions/additional.zsh/.zi-debug-unload | 6 + .../data/functions/additional.zsh/.zi-service | 29 + .../additional.zsh/.zi-wrap-track-functions | 19 + .../additional.zsh/:zi-tmp-subst-source | 25 + .../functions/autoload.zsh/.zi-analytics-menu | 23 + .../functions/autoload.zsh/.zi-any-to-uspl2 | 2 + .../data/functions/autoload.zsh/.zi-at-eval | 5 + .../functions/autoload.zsh/.zi-build-module | 41 + code/zsdoc/data/functions/autoload.zsh/.zi-cd | 15 + .../data/functions/autoload.zsh/.zi-cdisable | 27 + .../data/functions/autoload.zsh/.zi-cenable | 26 + .../data/functions/autoload.zsh/.zi-changes | 6 + .../autoload.zsh/.zi-check-comp-consistency | 11 + .../.zi-check-which-completions-are-enabled | 10 + .../.zi-check-which-completions-are-installed | 11 + .../autoload.zsh/.zi-clear-completions | 35 + .../autoload.zsh/.zi-clear-report-for | 23 + .../autoload.zsh/.zi-compile-uncompile-all | 19 + .../data/functions/autoload.zsh/.zi-compiled | 23 + .../data/functions/autoload.zsh/.zi-confirm | 22 + .../functions/autoload.zsh/.zi-control-menu | 22 + .../data/functions/autoload.zsh/.zi-create | 103 + .../data/functions/autoload.zsh/.zi-delete | 93 + .../autoload.zsh/.zi-diff-env-compute | 28 + .../autoload.zsh/.zi-diff-functions-compute | 16 + .../autoload.zsh/.zi-diff-options-compute | 16 + .../autoload.zsh/.zi-diff-parameter-compute | 27 + .../data/functions/autoload.zsh/.zi-edit | 19 + .../functions/autoload.zsh/.zi-exists-message | 7 + .../.zi-find-completions-of-plugin | 5 + .../functions/autoload.zsh/.zi-format-env | 15 + .../autoload.zsh/.zi-format-functions | 34 + .../functions/autoload.zsh/.zi-format-options | 19 + .../autoload.zsh/.zi-format-parameter | 29 + .../autoload.zsh/.zi-get-completion-owner | 19 + .../.zi-get-completion-owner-uspl2col | 2 + .../data/functions/autoload.zsh/.zi-get-path | 5 + .../data/functions/autoload.zsh/.zi-glance | 37 + .../data/functions/autoload.zsh/.zi-help | 31 + .../functions/autoload.zsh/.zi-list-bindkeys | 39 + .../autoload.zsh/.zi-list-compdef-replay | 5 + code/zsdoc/data/functions/autoload.zsh/.zi-ls | 17 + .../data/functions/autoload.zsh/.zi-module | 24 + .../data/functions/autoload.zsh/.zi-pager | 14 + .../autoload.zsh/.zi-prepare-readlink | 4 + .../data/functions/autoload.zsh/.zi-recall | 33 + .../data/functions/autoload.zsh/.zi-recently | 23 + .../autoload.zsh/.zi-restore-extendedglob | 1 + .../autoload.zsh/.zi-run-delete-hooks | 17 + .../autoload.zsh/.zi-save-set-extendedglob | 2 + .../autoload.zsh/.zi-search-completions | 39 + .../functions/autoload.zsh/.zi-self-update | 43 + .../autoload.zsh/.zi-show-all-reports | 5 + .../autoload.zsh/.zi-show-completions | 61 + .../autoload.zsh/.zi-show-debug-report | 1 + .../autoload.zsh/.zi-show-registered-plugins | 19 + .../functions/autoload.zsh/.zi-show-report | 66 + .../functions/autoload.zsh/.zi-show-times | 51 + .../functions/autoload.zsh/.zi-show-zstatus | 47 + .../data/functions/autoload.zsh/.zi-stress | 31 + .../autoload.zsh/.zi-uncompile-plugin | 20 + .../autoload.zsh/.zi-uninstall-completions | 39 + .../data/functions/autoload.zsh/.zi-unload | 380 ++ .../autoload.zsh/.zi-unregister-plugin | 5 + .../autoload.zsh/.zi-update-all-parallel | 63 + .../autoload.zsh/.zi-update-or-status | 263 ++ .../autoload.zsh/.zi-update-or-status-all | 96 + .../autoload.zsh/.zi-update-or-status-snippet | 28 + .../autoload.zsh/.zi-wait-for-update-jobs | 14 + .../data/functions/install.zsh/.zi-at-eval | 5 + .../functions/install.zsh/.zi-compile-plugin | 84 + .../data/functions/install.zsh/.zi-compinit | 26 + .../install.zsh/.zi-download-file-stdout | 46 + .../install.zsh/.zi-download-snippet | 309 ++ .../data/functions/install.zsh/.zi-extract | 22 + .../install.zsh/.zi-forget-completion | 20 + .../install.zsh/.zi-get-cygwin-package | 70 + .../install.zsh/.zi-get-latest-gh-r-url-part | 101 + .../functions/install.zsh/.zi-get-package | 194 + .../functions/install.zsh/.zi-get-url-mtime | 34 + .../install.zsh/.zi-install-completions | 61 + .../install.zsh/.zi-mirror-using-svn | 27 + .../data/functions/install.zsh/.zi-parse-json | 102 + .../install.zsh/.zi-setup-plugin-dir | 189 + .../functions/install.zsh/.zi-update-snippet | 72 + code/zsdoc/data/functions/install.zsh/zicp | 28 + .../data/functions/install.zsh/ziextract | 274 ++ code/zsdoc/data/functions/install.zsh/zimv | 3 + .../data/functions/install.zsh/zpextract | 1 + .../install.zsh/\342\210\236zi-atclone-hook" | 4 + .../install.zsh/\342\210\236zi-atpull-e-hook" | 2 + .../install.zsh/\342\210\236zi-atpull-hook" | 2 + .../\342\210\236zi-compile-plugin-hook" | 14 + .../install.zsh/\342\210\236zi-cp-hook" | 24 + .../install.zsh/\342\210\236zi-extract-hook" | 4 + .../install.zsh/\342\210\236zi-make-e-hook" | 5 + .../install.zsh/\342\210\236zi-make-ee-hook" | 5 + .../install.zsh/\342\210\236zi-make-hook" | 4 + .../install.zsh/\342\210\236zi-mv-hook" | 21 + .../\342\210\236zi-ps-on-update-hook" | 14 + .../install.zsh/\342\210\236zi-reset-hook" | 79 + .../side.zsh/.zi-any-colorify-as-uspl2 | 22 + .../data/functions/side.zsh/.zi-compute-ice | 116 + .../data/functions/side.zsh/.zi-countdown | 14 + .../functions/side.zsh/.zi-exists-physically | 6 + .../side.zsh/.zi-exists-physically-message | 22 + code/zsdoc/data/functions/side.zsh/.zi-first | 19 + .../data/functions/side.zsh/.zi-store-ices | 28 + .../data/functions/side.zsh/.zi-two-paths | 22 + .../data/functions/zi.zsh/+zi-deploy-message | 13 + code/zsdoc/data/functions/zi.zsh/+zi-message | 14 + .../zi.zsh/+zi-prehelp-usage-message | 34 + .../functions/zi.zsh/-zi_scheduler_add_sh | 7 + .../zsdoc/data/functions/zi.zsh/.zi-add-fpath | 10 + .../data/functions/zi.zsh/.zi-add-report | 3 + .../data/functions/zi.zsh/.zi-any-to-pid | 21 + .../functions/zi.zsh/.zi-any-to-user-plugin | 25 + .../data/functions/zi.zsh/.zi-compdef-clear | 3 + .../data/functions/zi.zsh/.zi-compdef-replay | 16 + code/zsdoc/data/functions/zi.zsh/.zi-diff | 4 + code/zsdoc/data/functions/zi.zsh/.zi-diff-env | 15 + .../data/functions/zi.zsh/.zi-diff-functions | 3 + .../data/functions/zi.zsh/.zi-diff-options | 2 + .../data/functions/zi.zsh/.zi-diff-parameter | 7 + .../functions/zi.zsh/.zi-find-other-matches | 17 + .../data/functions/zi.zsh/.zi-formatter-bar | 1 + .../functions/zi.zsh/.zi-formatter-bar-util | 7 + .../data/functions/zi.zsh/.zi-formatter-pid | 10 + .../functions/zi.zsh/.zi-formatter-th-bar | 1 + .../data/functions/zi.zsh/.zi-formatter-url | 19 + .../data/functions/zi.zsh/.zi-get-mtime-into | 7 + .../data/functions/zi.zsh/.zi-get-object-path | 23 + code/zsdoc/data/functions/zi.zsh/.zi-ice | 12 + code/zsdoc/data/functions/zi.zsh/.zi-load | 76 + .../zsdoc/data/functions/zi.zsh/.zi-load-ices | 22 + .../data/functions/zi.zsh/.zi-load-object | 10 + .../data/functions/zi.zsh/.zi-load-plugin | 107 + .../data/functions/zi.zsh/.zi-load-snippet | 173 + .../zi.zsh/.zi-main-message-formatter | 18 + code/zsdoc/data/functions/zi.zsh/.zi-pack-ice | 3 + .../data/functions/zi.zsh/.zi-parse-opts | 2 + .../data/functions/zi.zsh/.zi-prepare-home | 38 + .../data/functions/zi.zsh/.zi-register-plugin | 20 + code/zsdoc/data/functions/zi.zsh/.zi-run | 24 + code/zsdoc/data/functions/zi.zsh/.zi-run-task | 45 + .../data/functions/zi.zsh/.zi-set-m-func | 17 + .../data/functions/zi.zsh/.zi-setup-params | 3 + .../data/functions/zi.zsh/.zi-submit-turbo | 16 + .../data/functions/zi.zsh/.zi-tmp-subst-off | 17 + .../data/functions/zi.zsh/.zi-tmp-subst-on | 29 + .../functions/zi.zsh/.zi-util-shands-path | 8 + .../data/functions/zi.zsh/:zi-reload-and-run | 9 + .../data/functions/zi.zsh/:zi-tmp-subst-alias | 30 + .../functions/zi.zsh/:zi-tmp-subst-autoload | 106 + .../functions/zi.zsh/:zi-tmp-subst-bindkey | 107 + .../functions/zi.zsh/:zi-tmp-subst-compdef | 5 + .../data/functions/zi.zsh/:zi-tmp-subst-zle | 33 + .../functions/zi.zsh/:zi-tmp-subst-zstyle | 19 + code/zsdoc/data/functions/zi.zsh/@autoload | 3 + .../data/functions/zi.zsh/@zi-register-annex | 8 + .../data/functions/zi.zsh/@zi-register-hook | 4 + .../zsdoc/data/functions/zi.zsh/@zi-scheduler | 74 + .../data/functions/zi.zsh/@zi-substitute | 36 + .../zi.zsh/@zsh-plugin-run-on-unload | 2 + .../zi.zsh/@zsh-plugin-run-on-update | 2 + code/zsdoc/data/functions/zi.zsh/pmodload | 15 + code/zsdoc/data/functions/zi.zsh/zi | 547 +++ code/zsdoc/data/functions/zi.zsh/zi-turbo | 1 + code/zsdoc/data/functions/zi.zsh/zicdclear | 1 + code/zsdoc/data/functions/zi.zsh/zicdreplay | 1 + code/zsdoc/data/functions/zi.zsh/zicompdef | 1 + code/zsdoc/data/functions/zi.zsh/zicompinit | 1 + code/zsdoc/data/functions/zi.zsh/zpcdclear | 1 + code/zsdoc/data/functions/zi.zsh/zpcdreplay | 1 + code/zsdoc/data/functions/zi.zsh/zpcompdef | 1 + code/zsdoc/data/functions/zi.zsh/zpcompinit | 1 + code/zsdoc/data/hooks/zi.zsh/@zi-scheduler | 1 + code/zsdoc/data/rev_call_tree.zsd | 8 + .../.zi-clear-debug-report.tree | 4 + .../trees/additional.zsh/.zi-debug-start.tree | 6 + .../trees/additional.zsh/.zi-debug-stop.tree | 5 + .../additional.zsh/.zi-debug-unload.tree | 5 + .../trees/additional.zsh/.zi-service.tree | 5 + .../additional.zsh/:zi-tmp-subst-source.tree | 4 + .../trees/autoload.zsh/.zi-any-to-uspl2.tree | 4 + .../data/trees/autoload.zsh/.zi-at-eval.tree | 4 + .../trees/autoload.zsh/.zi-build-module.tree | 4 + .../zsdoc/data/trees/autoload.zsh/.zi-cd.tree | 4 + .../data/trees/autoload.zsh/.zi-cdisable.tree | 3 + .../data/trees/autoload.zsh/.zi-cenable.tree | 3 + .../data/trees/autoload.zsh/.zi-changes.tree | 5 + .../autoload.zsh/.zi-clear-completions.tree | 4 + .../autoload.zsh/.zi-clear-report-for.tree | 3 + .../.zi-compile-uncompile-all.tree | 6 + .../data/trees/autoload.zsh/.zi-compiled.tree | 5 + .../data/trees/autoload.zsh/.zi-create.tree | 6 + .../data/trees/autoload.zsh/.zi-delete.tree | 7 + .../data/trees/autoload.zsh/.zi-edit.tree | 4 + .../autoload.zsh/.zi-exists-message.tree | 4 + .../.zi-find-completions-of-plugin.tree | 4 + .../autoload.zsh/.zi-format-options.tree | 3 + .../.zi-get-completion-owner-uspl2col.tree | 4 + .../data/trees/autoload.zsh/.zi-get-path.tree | 4 + .../data/trees/autoload.zsh/.zi-glance.tree | 6 + .../trees/autoload.zsh/.zi-list-bindkeys.tree | 4 + .../data/trees/autoload.zsh/.zi-module.tree | 3 + .../data/trees/autoload.zsh/.zi-recall.tree | 5 + .../data/trees/autoload.zsh/.zi-recently.tree | 4 + .../autoload.zsh/.zi-run-delete-hooks.tree | 4 + .../autoload.zsh/.zi-search-completions.tree | 4 + .../trees/autoload.zsh/.zi-self-update.tree | 5 + .../autoload.zsh/.zi-show-all-reports.tree | 3 + .../autoload.zsh/.zi-show-completions.tree | 4 + .../autoload.zsh/.zi-show-debug-report.tree | 3 + .../.zi-show-registered-plugins.tree | 4 + .../trees/autoload.zsh/.zi-show-report.tree | 4 + .../trees/autoload.zsh/.zi-show-times.tree | 4 + .../trees/autoload.zsh/.zi-show-zstatus.tree | 4 + .../data/trees/autoload.zsh/.zi-stress.tree | 6 + .../autoload.zsh/.zi-uncompile-plugin.tree | 5 + .../.zi-uninstall-completions.tree | 6 + .../data/trees/autoload.zsh/.zi-unload.tree | 6 + .../autoload.zsh/.zi-unregister-plugin.tree | 4 + .../autoload.zsh/.zi-update-all-parallel.tree | 6 + .../.zi-update-or-status-all.tree | 8 + .../.zi-update-or-status-snippet.tree | 5 + .../autoload.zsh/.zi-update-or-status.tree | 14 + .../.zi-wait-for-update-jobs.tree | 4 + .../data/trees/install.zsh/.zi-at-eval.tree | 4 + .../trees/install.zsh/.zi-compile-plugin.tree | 6 + .../data/trees/install.zsh/.zi-compinit.tree | 5 + .../install.zsh/.zi-download-file-stdout.tree | 4 + .../install.zsh/.zi-download-snippet.tree | 5 + .../data/trees/install.zsh/.zi-extract.tree | 6 + .../install.zsh/.zi-get-cygwin-package.tree | 4 + .../.zi-get-latest-gh-r-url-part.tree | 4 + .../trees/install.zsh/.zi-get-package.tree | 7 + .../install.zsh/.zi-install-completions.tree | 7 + .../trees/install.zsh/.zi-parse-json.tree | 3 + .../install.zsh/.zi-setup-plugin-dir.tree | 9 + .../trees/install.zsh/.zi-update-snippet.tree | 6 + .../data/trees/install.zsh/ziextract.tree | 4 + code/zsdoc/data/trees/install.zsh/zimv.tree | 4 + .../data/trees/install.zsh/zpextract.tree | 5 + .../\342\210\236zi-atclone-hook.tree" | 5 + .../\342\210\236zi-atpull-e-hook.tree" | 4 + .../\342\210\236zi-atpull-hook.tree" | 4 + .../\342\210\236zi-compile-plugin-hook.tree" | 3 + .../install.zsh/\342\210\236zi-cp-hook.tree" | 4 + .../\342\210\236zi-extract-hook.tree" | 4 + .../\342\210\236zi-make-e-hook.tree" | 5 + .../\342\210\236zi-make-ee-hook.tree" | 5 + .../\342\210\236zi-make-hook.tree" | 5 + .../install.zsh/\342\210\236zi-mv-hook.tree" | 4 + .../\342\210\236zi-ps-on-update-hook.tree" | 4 + .../\342\210\236zi-reset-hook.tree" | 4 + .../side.zsh/.zi-any-colorify-as-uspl2.tree | 5 + .../data/trees/side.zsh/.zi-compute-ice.tree | 6 + .../data/trees/side.zsh/.zi-countdown.tree | 4 + .../.zi-exists-physically-message.tree | 6 + .../trees/side.zsh/.zi-exists-physically.tree | 4 + code/zsdoc/data/trees/side.zsh/.zi-first.tree | 7 + .../data/trees/side.zsh/.zi-two-paths.tree | 4 + .../zi.zsh/+zi-prehelp-usage-message.tree | 4 + .../data/trees/zi.zsh/.zi-add-fpath.tree | 3 + .../data/trees/zi.zsh/.zi-any-to-pid.tree | 3 + .../data/trees/zi.zsh/.zi-compdef-clear.tree | 4 + .../data/trees/zi.zsh/.zi-compdef-replay.tree | 4 + code/zsdoc/data/trees/zi.zsh/.zi-diff.tree | 3 + .../data/trees/zi.zsh/.zi-formatter-bar.tree | 3 + .../data/trees/zi.zsh/.zi-formatter-pid.tree | 4 + .../trees/zi.zsh/.zi-formatter-th-bar.tree | 3 + .../trees/zi.zsh/.zi-get-object-path.tree | 3 + .../data/trees/zi.zsh/.zi-load-ices.tree | 3 + .../data/trees/zi.zsh/.zi-load-object.tree | 3 + .../data/trees/zi.zsh/.zi-load-plugin.tree | 6 + .../data/trees/zi.zsh/.zi-load-snippet.tree | 6 + code/zsdoc/data/trees/zi.zsh/.zi-load.tree | 6 + .../data/trees/zi.zsh/.zi-prepare-home.tree | 5 + .../trees/zi.zsh/.zi-register-plugin.tree | 4 + .../zsdoc/data/trees/zi.zsh/.zi-run-task.tree | 4 + code/zsdoc/data/trees/zi.zsh/.zi-run.tree | 4 + .../data/trees/zi.zsh/.zi-set-m-func.tree | 4 + .../trees/zi.zsh/:zi-tmp-subst-alias.tree | 3 + .../trees/zi.zsh/:zi-tmp-subst-autoload.tree | 5 + .../trees/zi.zsh/:zi-tmp-subst-bindkey.tree | 4 + .../trees/zi.zsh/:zi-tmp-subst-compdef.tree | 3 + .../data/trees/zi.zsh/:zi-tmp-subst-zle.tree | 3 + .../trees/zi.zsh/:zi-tmp-subst-zstyle.tree | 3 + code/zsdoc/data/trees/zi.zsh/@autoload.tree | 6 + .../data/trees/zi.zsh/@zi-scheduler.tree | 4 + .../zi.zsh/@zsh-plugin-run-on-unload.tree | 3 + .../zi.zsh/@zsh-plugin-run-on-update.tree | 3 + .../zsdoc/data/trees/zi.zsh/Script_Body_.tree | 8 + code/zsdoc/data/trees/zi.zsh/pmodload.tree | 3 + code/zsdoc/data/trees/zi.zsh/zi-turbo.tree | 43 + code/zsdoc/data/trees/zi.zsh/zi.tree | 42 + code/zsdoc/data/trees/zi.zsh/zicdclear.tree | 3 + code/zsdoc/data/trees/zi.zsh/zicdreplay.tree | 3 + code/zsdoc/data/trees/zi.zsh/zicompinit.tree | 4 + code/zsdoc/data/trees/zi.zsh/zpcdclear.tree | 3 + code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree | 3 + code/zsdoc/data/trees/zi.zsh/zpcompinit.tree | 4 + code/zsdoc/html/additional.zsh.html | 714 ++++ code/zsdoc/html/autoload.zsh.html | 2992 ++++++++++++++ code/zsdoc/html/install.zsh.html | 1622 ++++++++ code/zsdoc/html/side.zsh.html | 909 +++++ code/zsdoc/html/zi.zsh.html | 2851 +++++++++++++ code/zsdoc/pdf/additional.zsh.pdf | Bin 0 -> 73454 bytes code/zsdoc/pdf/autoload.zsh.pdf | Bin 0 -> 411467 bytes code/zsdoc/pdf/install.zsh.pdf | Bin 0 -> 210079 bytes code/zsdoc/pdf/side.zsh.pdf | Bin 0 -> 109159 bytes code/zsdoc/pdf/zi.zsh.pdf | Bin 0 -> 383186 bytes 760 files changed, 30624 insertions(+), 815 deletions(-) create mode 100644 code/zsdoc/data/autoload/install.zsh/compinit create mode 100644 code/zsdoc/data/autoload/side.zsh/zmv create mode 100644 code/zsdoc/data/autoload/zi.zsh/add-zsh-hook create mode 100644 code/zsdoc/data/autoload/zi.zsh/compinit create mode 100644 code/zsdoc/data/autoload/zi.zsh/is-at-least create mode 100644 code/zsdoc/data/bodies/additional.zsh create mode 100644 code/zsdoc/data/bodies/additional.zsh.comments create mode 100644 code/zsdoc/data/bodies/autoload.zsh create mode 100644 code/zsdoc/data/bodies/autoload.zsh.comments create mode 100644 code/zsdoc/data/bodies/install.zsh create mode 100644 code/zsdoc/data/bodies/install.zsh.comments create mode 100644 code/zsdoc/data/bodies/side.zsh create mode 100644 code/zsdoc/data/bodies/side.zsh.comments create mode 100644 code/zsdoc/data/bodies/zi.zsh create mode 100644 code/zsdoc/data/bodies/zi.zsh.comments create mode 100644 code/zsdoc/data/call_tree.zsd create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-clear-debug-report create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-debug-start create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-debug-stop create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-debug-unload create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-service create mode 100644 code/zsdoc/data/descriptions/additional.zsh/.zi-wrap-track-functions create mode 100644 code/zsdoc/data/descriptions/additional.zsh/:zi-tmp-subst-source create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-analytics-menu create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-any-to-uspl2 create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-build-module create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cd create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cdisable create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cenable create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-changes create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-comp-consistency create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-enabled create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-installed create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-report-for create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compile-uncompile-all create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compiled create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-confirm create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-control-menu create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-create create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-delete create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-env-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-functions-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-options-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-parameter-compute create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-edit create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-exists-message create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-find-completions-of-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-env create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-functions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-options create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-parameter create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner-uspl2col create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-path create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-glance create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-help create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-bindkeys create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-compdef-replay create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-ls create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-module create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-pager create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-prepare-readlink create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recall create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recently create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-restore-extendedglob create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-run-delete-hooks create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-save-set-extendedglob create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-search-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-self-update create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-all-reports create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-debug-report create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-registered-plugins create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-report create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-times create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-zstatus create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-stress create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uncompile-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uninstall-completions create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unload create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unregister-plugin create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-all-parallel create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-all create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-snippet create mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-wait-for-update-jobs create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compile-plugin create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compinit create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-file-stdout create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-snippet create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-extract create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-forget-completion create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-cygwin-package create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-latest-gh-r-url-part create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-package create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-url-mtime create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-install-completions create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-mirror-using-svn create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-parse-json create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-setup-plugin-dir create mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-update-snippet create mode 100644 code/zsdoc/data/descriptions/install.zsh/compinit create mode 100644 code/zsdoc/data/descriptions/install.zsh/zicp create mode 100644 code/zsdoc/data/descriptions/install.zsh/ziextract create mode 100644 code/zsdoc/data/descriptions/install.zsh/zimv create mode 100644 code/zsdoc/data/descriptions/install.zsh/zpextract create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atclone-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-e-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-compile-plugin-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-cp-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-extract-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-e-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-ee-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-mv-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-ps-on-update-hook" create mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-reset-hook" create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-any-colorify-as-uspl2 create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-compute-ice create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-countdown create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically-message create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-first create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-store-ices create mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-two-paths create mode 100644 code/zsdoc/data/descriptions/side.zsh/zmv create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-deploy-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-prehelp-usage-message create mode 100644 code/zsdoc/data/descriptions/zi.zsh/-zi_scheduler_add_sh create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-fpath create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-report create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-pid create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-user-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-clear create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-replay create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-env create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-functions create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-options create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-parameter create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-find-other-matches create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar-util create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-pid create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-th-bar create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-url create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-mtime-into create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-object-path create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-ice create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-ices create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-object create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-snippet create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-main-message-formatter create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-pack-ice create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-parse-opts create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-prepare-home create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-register-plugin create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run-task create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-set-m-func create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-setup-params create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-submit-turbo create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-off create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-on create mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-util-shands-path create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-reload-and-run create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-alias create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-autoload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-bindkey create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-compdef create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zle create mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zstyle create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@autoload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-annex create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-hook create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-substitute create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-unload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-update create mode 100644 code/zsdoc/data/descriptions/zi.zsh/add-zsh-hook create mode 100644 code/zsdoc/data/descriptions/zi.zsh/compinit create mode 100644 code/zsdoc/data/descriptions/zi.zsh/is-at-least create mode 100644 code/zsdoc/data/descriptions/zi.zsh/pmodload create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi-turbo create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdclear create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdreplay create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompdef create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompinit create mode 100644 code/zsdoc/data/descriptions/zi.zsh/zpcdreplay create mode 100644 code/zsdoc/data/env-use/install.zsh/.zi-get-package/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/install.zsh/zicp/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-any-to-user-plugin/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-load-ices/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-prepare-home/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-util-shands-path/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/@zi-substitute/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZSH_CACHE_DIR create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/PMSPEC create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZPFX create mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR create mode 100644 code/zsdoc/data/extended/additional.zsh create mode 100644 code/zsdoc/data/extended/autoload.zsh create mode 100644 code/zsdoc/data/extended/install.zsh create mode 100644 code/zsdoc/data/extended/side.zsh create mode 100644 code/zsdoc/data/extended/zi.zsh create mode 100644 code/zsdoc/data/features/additional.zsh/.zi-debug-unload/source create mode 100644 code/zsdoc/data/features/additional.zsh/.zi-service/kill create mode 100644 code/zsdoc/data/features/additional.zsh/.zi-service/read create mode 100644 code/zsdoc/data/features/additional.zsh/.zi-service/setopt create mode 100644 code/zsdoc/data/features/additional.zsh/.zi-wrap-track-functions/eval create mode 100644 code/zsdoc/data/features/additional.zsh/:zi-tmp-subst-source/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-at-eval/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-cd/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-clear-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compile-uncompile-all/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compiled/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/read create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/autoload create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/vared create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-delete/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-env-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-functions-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-options-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-parameter-compute/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-find-completions-of-plugin/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-format-parameter/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-completion-owner/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-path/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-pager/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-prepare-readlink/type create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recall/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recently/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-restore-extendedglob/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-run-delete-hooks/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-save-set-extendedglob/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-search-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/zcompile create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-registered-plugins/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-report/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-times/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-zstatus/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/zcompile create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uncompile-plugin/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/alias create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/bindkey create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/eval create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unalias create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unfunction create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zle create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zstyle create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-all-parallel/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-snippet/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/kill create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/read create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/setopt create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/source create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/trap create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/wait create mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-wait-for-update-jobs/wait create mode 100644 code/zsdoc/data/features/autoload.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/install.zsh/.zi-at-eval/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/zcompile create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/autoload create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/compinit create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/type create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/zcompile create mode 100644 code/zsdoc/data/features/install.zsh/.zi-extract/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-cygwin-package/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-latest-gh-r-url-part/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/read create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/type create mode 100644 code/zsdoc/data/features/install.zsh/.zi-install-completions/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-mirror-using-svn/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-parse-json/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/setopt create mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/trap create mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/eval create mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/setopt create mode 100644 code/zsdoc/data/features/install.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/install.zsh/compinit/autoload create mode 100644 code/zsdoc/data/features/install.zsh/compinit/bindkey create mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdef create mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdump create mode 100644 code/zsdoc/data/features/install.zsh/compinit/eval create mode 100644 code/zsdoc/data/features/install.zsh/compinit/read create mode 100644 code/zsdoc/data/features/install.zsh/compinit/setopt create mode 100644 code/zsdoc/data/features/install.zsh/compinit/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/compinit/zle create mode 100644 code/zsdoc/data/features/install.zsh/compinit/zstyle create mode 100644 code/zsdoc/data/features/install.zsh/zicp/setopt create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/setopt create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/unfunction create mode 100644 code/zsdoc/data/features/install.zsh/ziextract/zparseopts create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/eval" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-e-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-compile-plugin-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-cp-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-mv-hook/setopt" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-ps-on-update-hook/eval" create mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-reset-hook/eval" create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/autoload create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/setopt create mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/zmv create mode 100644 code/zsdoc/data/features/side.zsh/.zi-countdown/trap create mode 100644 code/zsdoc/data/features/side.zsh/.zi-exists-physically-message/setopt create mode 100644 code/zsdoc/data/features/side.zsh/.zi-two-paths/setopt create mode 100644 code/zsdoc/data/features/side.zsh/zmv/eval create mode 100644 code/zsdoc/data/features/side.zsh/zmv/getopts create mode 100644 code/zsdoc/data/features/side.zsh/zmv/read create mode 100644 code/zsdoc/data/features/side.zsh/zmv/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/read create mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-pid/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-user-plugin/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-compdef-replay/compdef create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-formatter-pid/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-ice/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-prepare-home/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zle create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zpty create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/eval create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-set-m-func/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-on/source create mode 100644 code/zsdoc/data/features/zi.zsh/.zi-util-shands-path/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/alias create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/eval create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/bindkey create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-compdef/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/zle create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zparseopts create mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/add-zsh-hook create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/sched create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/zle create mode 100644 code/zsdoc/data/features/zi.zsh/@zi-substitute/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/add-zsh-hook create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/alias create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/export create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/is-at-least create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/source create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zmodload create mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/getopts create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/bindkey create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdef create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdump create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/eval create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/read create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/unfunction create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zle create mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/pmodload/zstyle create mode 100644 code/zsdoc/data/features/zi.zsh/zi/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zi/compinit create mode 100644 code/zsdoc/data/features/zi.zsh/zi/eval create mode 100644 code/zsdoc/data/features/zi.zsh/zi/setopt create mode 100644 code/zsdoc/data/features/zi.zsh/zi/source create mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/compinit create mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/autoload create mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/compinit create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-clear-debug-report create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-debug-start create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-debug-stop create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-debug-unload create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-service create mode 100644 code/zsdoc/data/functions/additional.zsh/.zi-wrap-track-functions create mode 100644 code/zsdoc/data/functions/additional.zsh/:zi-tmp-subst-source create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-analytics-menu create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-any-to-uspl2 create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-build-module create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cd create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cdisable create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cenable create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-changes create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-comp-consistency create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-enabled create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-installed create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-report-for create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compile-uncompile-all create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compiled create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-confirm create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-control-menu create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-create create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-delete create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-env-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-functions-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-options-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-parameter-compute create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-edit create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-exists-message create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-find-completions-of-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-env create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-functions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-options create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-parameter create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner-uspl2col create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-path create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-glance create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-help create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-bindkeys create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-compdef-replay create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-ls create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-module create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-pager create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-prepare-readlink create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recall create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recently create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-restore-extendedglob create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-run-delete-hooks create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-save-set-extendedglob create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-search-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-self-update create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-all-reports create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-debug-report create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-registered-plugins create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-report create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-times create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-zstatus create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-stress create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uncompile-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uninstall-completions create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unload create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unregister-plugin create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-all-parallel create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-all create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-snippet create mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-wait-for-update-jobs create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-at-eval create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compile-plugin create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compinit create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-file-stdout create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-snippet create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-extract create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-forget-completion create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-cygwin-package create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-latest-gh-r-url-part create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-package create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-url-mtime create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-install-completions create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-mirror-using-svn create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-parse-json create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-setup-plugin-dir create mode 100644 code/zsdoc/data/functions/install.zsh/.zi-update-snippet create mode 100644 code/zsdoc/data/functions/install.zsh/zicp create mode 100644 code/zsdoc/data/functions/install.zsh/ziextract create mode 100644 code/zsdoc/data/functions/install.zsh/zimv create mode 100644 code/zsdoc/data/functions/install.zsh/zpextract create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atclone-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-e-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-compile-plugin-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-cp-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-extract-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-e-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-ee-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-mv-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-ps-on-update-hook" create mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-reset-hook" create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-any-colorify-as-uspl2 create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-compute-ice create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-countdown create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically-message create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-first create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-store-ices create mode 100644 code/zsdoc/data/functions/side.zsh/.zi-two-paths create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-deploy-message create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-message create mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-prehelp-usage-message create mode 100644 code/zsdoc/data/functions/zi.zsh/-zi_scheduler_add_sh create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-fpath create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-report create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-pid create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-user-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-clear create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-replay create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-env create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-functions create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-options create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-parameter create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-find-other-matches create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar-util create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-pid create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-th-bar create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-url create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-mtime-into create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-object-path create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-ice create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-ices create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-object create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-snippet create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-main-message-formatter create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-pack-ice create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-parse-opts create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-prepare-home create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-register-plugin create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run-task create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-set-m-func create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-setup-params create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-submit-turbo create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-off create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-on create mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-util-shands-path create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-reload-and-run create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-alias create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-autoload create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-bindkey create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-compdef create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zle create mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zstyle create mode 100644 code/zsdoc/data/functions/zi.zsh/@autoload create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-annex create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-hook create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-substitute create mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-unload create mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-update create mode 100644 code/zsdoc/data/functions/zi.zsh/pmodload create mode 100644 code/zsdoc/data/functions/zi.zsh/zi create mode 100644 code/zsdoc/data/functions/zi.zsh/zi-turbo create mode 100644 code/zsdoc/data/functions/zi.zsh/zicdclear create mode 100644 code/zsdoc/data/functions/zi.zsh/zicdreplay create mode 100644 code/zsdoc/data/functions/zi.zsh/zicompdef create mode 100644 code/zsdoc/data/functions/zi.zsh/zicompinit create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdclear create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdreplay create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompdef create mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompinit create mode 100644 code/zsdoc/data/hooks/zi.zsh/@zi-scheduler create mode 100644 code/zsdoc/data/rev_call_tree.zsd create mode 100644 code/zsdoc/data/trees/additional.zsh/.zi-clear-debug-report.tree create mode 100644 code/zsdoc/data/trees/additional.zsh/.zi-debug-start.tree create mode 100644 code/zsdoc/data/trees/additional.zsh/.zi-debug-stop.tree create mode 100644 code/zsdoc/data/trees/additional.zsh/.zi-debug-unload.tree create mode 100644 code/zsdoc/data/trees/additional.zsh/.zi-service.tree create mode 100644 code/zsdoc/data/trees/additional.zsh/:zi-tmp-subst-source.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-any-to-uspl2.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-at-eval.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-build-module.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cd.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cdisable.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cenable.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-changes.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-report-for.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compile-uncompile-all.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compiled.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-create.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-edit.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-exists-message.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-find-completions-of-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-format-options.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-completion-owner-uspl2col.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-path.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-glance.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-list-bindkeys.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-module.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recall.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recently.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-run-delete-hooks.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-search-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-all-reports.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-debug-report.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-registered-plugins.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-report.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-times.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-zstatus.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-stress.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uncompile-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uninstall-completions.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unload.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unregister-plugin.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-snippet.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree create mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-wait-for-update-jobs.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-at-eval.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compile-plugin.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compinit.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-file-stdout.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-snippet.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-extract.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-cygwin-package.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-latest-gh-r-url-part.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-package.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-parse-json.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree create mode 100644 code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree create mode 100644 code/zsdoc/data/trees/install.zsh/ziextract.tree create mode 100644 code/zsdoc/data/trees/install.zsh/zimv.tree create mode 100644 code/zsdoc/data/trees/install.zsh/zpextract.tree create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atclone-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-e-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-compile-plugin-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-cp-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-extract-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-e-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-ee-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-mv-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-ps-on-update-hook.tree" create mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-reset-hook.tree" create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-any-colorify-as-uspl2.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-compute-ice.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-countdown.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-first.tree create mode 100644 code/zsdoc/data/trees/side.zsh/.zi-two-paths.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/+zi-prehelp-usage-message.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-add-fpath.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-any-to-pid.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-clear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-replay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-diff.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-bar.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-pid.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-th-bar.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-get-object-path.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-ices.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-object.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-prepare-home.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-register-plugin.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run-task.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-set-m-func.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-alias.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-bindkey.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-compdef.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zle.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zstyle.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@autoload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zi-scheduler.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-unload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-update.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/Script_Body_.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/pmodload.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zi-turbo.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zi.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicdclear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicdreplay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zicompinit.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdclear.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree create mode 100644 code/zsdoc/data/trees/zi.zsh/zpcompinit.tree create mode 100644 code/zsdoc/html/additional.zsh.html create mode 100644 code/zsdoc/html/autoload.zsh.html create mode 100644 code/zsdoc/html/install.zsh.html create mode 100644 code/zsdoc/html/side.zsh.html create mode 100644 code/zsdoc/html/zi.zsh.html create mode 100644 code/zsdoc/pdf/additional.zsh.pdf create mode 100644 code/zsdoc/pdf/autoload.zsh.pdf create mode 100644 code/zsdoc/pdf/install.zsh.pdf create mode 100644 code/zsdoc/pdf/side.zsh.pdf create mode 100644 code/zsdoc/pdf/zi.zsh.pdf diff --git a/code/zsdoc/asciidoc/additional.zsh.adoc b/code/zsdoc/asciidoc/additional.zsh.adoc index 357fcf8..50e0404 100644 --- a/code/zsdoc/asciidoc/additional.zsh.adoc +++ b/code/zsdoc/asciidoc/additional.zsh.adoc @@ -18,8 +18,8 @@ FUNCTIONS .zi-debug-stop .zi-debug-unload .zi-service - :zi-tmp-subst-source .zi-wrap-track-functions + :zi-tmp-subst-source DETAILS ------- @@ -60,8 +60,8 @@ ____ Has 9 line(s). Calls functions: .zi-debug-start - |-- zi.zsh/.zi-diff |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-diff `-- zi.zsh/.zi-tmp-subst-on Called by: @@ -132,32 +132,32 @@ Uses feature(s): _kill_, _read_, _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-source -~~~~~~~~~~~~~~~~~~~~ +.zi-wrap-track-functions +~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-source [[[ + FUNCTION: .zi-wrap-track-functions [[[ ____ -Has 25 line(s). Calls functions: - - :zi-tmp-subst-source - `-- zi.zsh/+zi-message +Has 19 line(s). Doesn't call other functions. Uses feature(s): _eval_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-wrap-track-functions -~~~~~~~~~~~~~~~~~~~~~~~~ +:zi-tmp-subst-source +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-wrap-track-functions [[[ + FUNCTION: :zi-tmp-subst-source [[[ ____ -Has 19 line(s). Doesn't call other functions. +Has 25 line(s). Calls functions: + + :zi-tmp-subst-source + `-- zi.zsh/+zi-message Uses feature(s): _eval_ diff --git a/code/zsdoc/asciidoc/autoload.zsh.adoc b/code/zsdoc/asciidoc/autoload.zsh.adoc index 7c63567..3164672 100644 --- a/code/zsdoc/asciidoc/autoload.zsh.adoc +++ b/code/zsdoc/asciidoc/autoload.zsh.adoc @@ -26,8 +26,8 @@ FUNCTIONS .zi-check-which-completions-are-installed .zi-clear-completions .zi-clear-report-for - .zi-compiled .zi-compile-uncompile-all + .zi-compiled .zi-confirm .zi-control-menu .zi-create @@ -336,8 +336,8 @@ Uses feature(s): _setopt_ Called by: - zi.zsh/zi zi.zsh/.zi-prepare-home + zi.zsh/zi .zi-clear-report-for ~~~~~~~~~~~~~~~~~~~~ @@ -360,20 +360,21 @@ Called by: .zi-unload additional.zsh/.zi-clear-debug-report -.zi-compiled -~~~~~~~~~~~~ +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. User-action entry point. ____ -Has 23 line(s). Calls functions: +Has 19 line(s). Calls functions: - .zi-compiled + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -383,21 +384,20 @@ Called by: zi.zsh/zi -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ +.zi-compiled +~~~~~~~~~~~~ ____ - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. User-action entry point. ____ -Has 19 line(s). Calls functions: +Has 23 line(s). Calls functions: - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin + .zi-compiled |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -487,9 +487,9 @@ Has 93 line(s). Calls functions: .zi-delete |-- side.zsh/.zi-compute-ice + |-- zi.zsh/+zi-prehelp-usage-message |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-parse-opts - `-- zi.zsh/+zi-prehelp-usage-message + `-- zi.zsh/.zi-parse-opts Uses feature(s): _setopt_ @@ -1078,8 +1078,8 @@ ____ Has 43 line(s). Calls functions: .zi-self-update - |-- zi.zsh/.zi-get-mtime-into - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into Uses feature(s): _setopt_, _source_, _zcompile_ @@ -1362,8 +1362,8 @@ Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, Called by: additional.zsh/.zi-debug-unload - zi.zsh/zi zi.zsh/.zi-run-task + zi.zsh/zi .zi-unregister-plugin ~~~~~~~~~~~~~~~~~~~~~ @@ -1396,8 +1396,8 @@ Has 63 line(s). Calls functions: .zi-update-all-parallel |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ @@ -1431,8 +1431,8 @@ Has 263 line(s). Calls functions: |-- side.zsh/.zi-exists-physically-message |-- side.zsh/.zi-store-ices |-- side.zsh/.zi-two-paths - |-- zi.zsh/.zi-any-to-user-plugin |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin `-- zi.zsh/.zi-set-m-func Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ @@ -1461,9 +1461,9 @@ Has 96 line(s). Calls functions: .zi-update-or-status-all |-- install.zsh/.zi-compinit |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-get-mtime-into - `-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into Uses feature(s): _setopt_, _source_ diff --git a/code/zsdoc/asciidoc/install.zsh.adoc b/code/zsdoc/asciidoc/install.zsh.adoc index 8dad434..4d06554 100644 --- a/code/zsdoc/asciidoc/install.zsh.adoc +++ b/code/zsdoc/asciidoc/install.zsh.adoc @@ -13,38 +13,38 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- - ∞zi-atclone-hook .zi-at-eval - ∞zi-atpull-e-hook - ∞zi-atpull-hook .zi-compile-plugin - ∞zi-compile-plugin-hook .zi-compinit - zicp - ∞zi-cp-hook .zi-download-file-stdout .zi-download-snippet .zi-extract - ziextract - ∞zi-extract-hook .zi-forget-completion .zi-get-cygwin-package .zi-get-latest-gh-r-url-part .zi-get-package .zi-get-url-mtime .zi-install-completions - ∞zi-make-ee-hook - ∞zi-make-e-hook - ∞zi-make-hook .zi-mirror-using-svn - zimv - ∞zi-mv-hook .zi-parse-json - ∞zi-ps-on-update-hook - ∞zi-reset-hook .zi-setup-plugin-dir .zi-update-snippet + zicp + ziextract + zimv zpextract + ∞zi-atclone-hook + ∞zi-atpull-e-hook + ∞zi-atpull-hook + ∞zi-compile-plugin-hook + ∞zi-cp-hook + ∞zi-extract-hook + ∞zi-make-e-hook + ∞zi-make-ee-hook + ∞zi-make-hook + ∞zi-mv-hook + ∞zi-ps-on-update-hook + ∞zi-reset-hook AUTOLOAD compinit DETAILS @@ -57,24 +57,6 @@ Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bou Uses feature(s): _source_ -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-at-eval ~~~~~~~~~~~ @@ -96,40 +78,6 @@ Called by: ∞zi-atpull-e-hook ∞zi-atpull-hook -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compile-plugin ~~~~~~~~~~~~~~~~~~ @@ -157,22 +105,6 @@ Called by: autoload.zsh/.zi-compile-uncompile-all zi.zsh/zi -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-compile-plugin-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-compile-plugin-hook - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compinit ~~~~~~~~~~~~ @@ -198,44 +130,8 @@ Called by: .zi-install-completions autoload.zsh/.zi-uninstall-completions autoload.zsh/.zi-update-or-status-all - zi.zsh/zi zi.zsh/.zi-prepare-home - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -∞zi-cp-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-cp-hook [[[ -____ - -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + zi.zsh/zi .zi-download-file-stdout ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -296,9 +192,9 @@ ____ Has 22 line(s). Calls functions: .zi-extract - |-- ziextract - |   `-- zi.zsh/+zi-message - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- ziextract + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ @@ -306,51 +202,6 @@ Called by: ∞zi-extract-hook -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 274 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-forget-completion ~~~~~~~~~~~~~~~~~~~~~ @@ -429,10 +280,10 @@ ____ Has 194 line(s). Calls functions: .zi-get-package - |-- ziextract - |   `-- zi.zsh/+zi-message |-- zi.zsh/+zi-message - `-- zi.zsh/@zi-substitute + |-- zi.zsh/@zi-substitute + `-- ziextract + `-- zi.zsh/+zi-message Uses feature(s): _eval_, _setopt_, _trap_ @@ -480,8 +331,8 @@ Has 61 line(s). Calls functions: .zi-install-completions |-- side.zsh/.zi-any-colorify-as-uspl2 |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ @@ -491,54 +342,6 @@ Called by: .zi-setup-plugin-dir zi.zsh/zi -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-ee-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-e-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-mirror-using-svn ~~~~~~~~~~~~~~~~~~~~ @@ -562,160 +365,357 @@ Called by: .zi-download-snippet -zimv -~~~~ +.zi-parse-json +~~~~~~~~~~~~~~ ____ - ]]] - FUNCTION zimv [[[ + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. ____ -Has 3 line(s). Calls functions: +Has 102 line(s). Calls functions: - zimv - `-- zicp + .zi-parse-json -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Uses feature(s): _setopt_ -∞zi-mv-hook -~~~~~~~~~~~ +Called by: + + .zi-get-package + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-mv-hook [[[ + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin ____ -Has 21 line(s). Calls functions: +Has 189 line(s). Calls functions: - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- ziextract + `-- zi.zsh/+zi-message -Uses feature(s): _setopt_ +Uses feature(s): _setopt_, _trap_ -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Called by: -.zi-parse-json -~~~~~~~~~~~~~~ + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. + ]]] + FUNCTION: .zi-update-snippet [[[ ____ -Has 102 line(s). Calls functions: +Has 72 line(s). Calls functions: - .zi-parse-json + .zi-update-snippet + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. Uses feature(s): _setopt_ Called by: - .zi-get-package + zimv -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ +_Environment variables used:_ zi.zsh -> ZPFX + +ziextract +~~~~~~~~~ ____ - FUNCTION: ∞zi-ps-on-update-hook [[[ + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file ____ -Has 14 line(s). Calls functions: +Has 274 line(s). Calls functions: - ∞zi-ps-on-update-hook + ziextract `-- zi.zsh/+zi-message -Uses feature(s): _eval_ +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -∞zi-reset-hook -~~~~~~~~~~~~~~ +zpextract +~~~~~~~~~ ____ ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ + FUNCTION: zpextract [[[ ____ -Has 79 line(s). Calls functions: +Has 1 line(s). Calls functions: - ∞zi-reset-hook - `-- zi.zsh/+zi-message + zpextract + `-- ziextract + `-- zi.zsh/+zi-message -Uses feature(s): _eval_ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ - $1 - user - $2 - plugin + FUNCTION: ∞zi-atpull-hook [[[ ____ -Has 189 line(s). Calls functions: +Has 2 line(s). Calls functions: - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- ziextract - |   `-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/+zi-message + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown -Uses feature(s): _setopt_, _trap_ +Uses feature(s): _setopt_ -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-cp-hook +~~~~~~~~~~~ ____ - ]]] - FUNCTION: .zi-update-snippet [[[ + FUNCTION: ∞zi-cp-hook [[[ ____ -Has 72 line(s). Calls functions: +Has 24 line(s). Calls functions: - .zi-update-snippet - |-- zi.zsh/.zi-get-object-path - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-pack-ice + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute -Uses feature(s): _eval_, _setopt_ +Uses feature(s): _setopt_ -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - autoload.zsh/.zi-update-or-status-snippet +∞zi-extract-hook +~~~~~~~~~~~~~~~~ -zpextract -~~~~~~~~~ +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ ____ ]]] - FUNCTION: zpextract [[[ + FUNCTION: ∞zi-reset-opt-hook [[[ ____ -Has 1 line(s). Calls functions: +Has 79 line(s). Calls functions: - zpextract - `-- ziextract - `-- zi.zsh/+zi-message + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). diff --git a/code/zsdoc/asciidoc/side.zsh.adoc b/code/zsdoc/asciidoc/side.zsh.adoc index b80bdb7..da9afa2 100644 --- a/code/zsdoc/asciidoc/side.zsh.adoc +++ b/code/zsdoc/asciidoc/side.zsh.adoc @@ -54,8 +54,8 @@ Called by: .zi-exists-physically-message autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled autoload.zsh/.zi-create autoload.zsh/.zi-exists-message autoload.zsh/.zi-get-completion-owner-uspl2col @@ -110,8 +110,8 @@ Called by: autoload.zsh/.zi-delete autoload.zsh/.zi-edit autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status autoload.zsh/.zi-update-or-status-snippet + autoload.zsh/.zi-update-or-status install.zsh/.zi-compile-plugin .zi-countdown @@ -137,8 +137,8 @@ Called by: install.zsh/∞zi-atclone-hook install.zsh/∞zi-atpull-e-hook install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-ee-hook install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook install.zsh/∞zi-make-hook .zi-exists-physically @@ -183,9 +183,9 @@ ____ Has 22 line(s). Calls functions: .zi-exists-physically-message + |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-pid - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin Uses feature(s): _setopt_ diff --git a/code/zsdoc/asciidoc/zi.zsh.adoc b/code/zsdoc/asciidoc/zi.zsh.adoc index f33bfb9..7d2eb35 100644 --- a/code/zsdoc/asciidoc/zi.zsh.adoc +++ b/code/zsdoc/asciidoc/zi.zsh.adoc @@ -13,20 +13,16 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- - @autoload - pmodload - zi + +zi-deploy-message + +zi-message + +zi-prehelp-usage-message + -zi_scheduler_add_sh .zi-add-fpath .zi-add-report .zi-any-to-pid .zi-any-to-user-plugin - zicdclear - zicdreplay - zicompdef .zi-compdef-clear .zi-compdef-replay - zicompinit - +zi-deploy-message .zi-diff .zi-diff-env .zi-diff-functions @@ -47,38 +43,42 @@ FUNCTIONS .zi-load-plugin .zi-load-snippet .zi-main-message-formatter - +zi-message .zi-pack-ice .zi-parse-opts - +zi-prehelp-usage-message .zi-prepare-home - @zi-register-annex - @zi-register-hook .zi-register-plugin - :zi-reload-and-run .zi-run .zi-run-task - -zi_scheduler_add_sh .zi-set-m-func .zi-setup-params .zi-submit-turbo - @zi-substitute + .zi-tmp-subst-off + .zi-tmp-subst-on + .zi-util-shands-path + :zi-reload-and-run :zi-tmp-subst-alias :zi-tmp-subst-autoload :zi-tmp-subst-bindkey :zi-tmp-subst-compdef - .zi-tmp-subst-off - .zi-tmp-subst-on :zi-tmp-subst-zle :zi-tmp-subst-zstyle + @autoload + @zi-register-annex + @zi-register-hook + @zi-substitute + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + pmodload + zi zi-turbo - .zi-util-shands-path + zicdclear + zicdreplay + zicompdef + zicompinit zpcdclear zpcdreplay zpcompdef zpcompinit - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update AUTOLOAD add-zsh-hook AUTOLOAD compinit AUTOLOAD is-at-least @@ -93,108 +93,119 @@ Script Body Has 202 line(s). Calls functions: Script-Body + |-- +zi-message + |-- @zi-register-hook |-- add-zsh-hook |-- autoload.zsh/.zi-module - |-- is-at-least - |-- +zi-message - `-- @zi-register-hook + `-- is-at-least Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ _Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR -@autoload -~~~~~~~~~ ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ ____ - ]]] - FUNCTION: @autoload. [[[ + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked ____ -Has 3 line(s). Calls functions: +Has 13 line(s). Doesn't call other functions. - @autoload - `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message +Uses feature(s): _read_, _zle_ -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Called by: -pmodload -~~~~~~~~ + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + ++zi-message +~~~~~~~~~~~ ____ - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. + FUNCTION: +zi-message. [[[ ____ -Has 15 line(s). Calls functions: - - pmodload +Has 14 line(s). Doesn't call other functions. -Uses feature(s): _zstyle_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi-prehelp-usage-message + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + Script-Body + zi + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-unload + additional.zsh/:zi-tmp-subst-source + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + install.zsh/ziextract + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message -zi -~~ ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. + FUNCTION: +zi-prehelp-usage-message. [[[ ____ -Has 547 line(s). Calls functions: +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: zi - |-- additional.zsh/.zi-clear-debug-report - |-- additional.zsh/.zi-debug-start - |-- additional.zsh/.zi-debug-stop - |-- additional.zsh/.zi-debug-unload - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - |-- install.zsh/.zi-install-completions - |-- +zi-message - `-- +zi-prehelp-usage-message - `-- +zi-message + autoload.zsh/.zi-delete -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ -Called by: +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ - zi-turbo +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). .zi-add-fpath ~~~~~~~~~~~~~ @@ -285,8 +296,8 @@ Called by: :zi-tmp-subst-autoload autoload.zsh/.zi-any-to-uspl2 autoload.zsh/.zi-changes - autoload.zsh/.zi-compiled autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled autoload.zsh/.zi-create autoload.zsh/.zi-delete autoload.zsh/.zi-find-completions-of-plugin @@ -308,52 +319,6 @@ Called by: _Environment variables used:_ ZPFX -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompdef -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. -____ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-compdef-clear ~~~~~~~~~~~~~~~~~ @@ -370,8 +335,8 @@ Has 3 line(s). Calls functions: Called by: - zicdclear zi + zicdclear zpcdclear .zi-compdef-replay @@ -392,69 +357,28 @@ Uses feature(s): _compdef_ Called by: - zicdreplay zi + zicdreplay zpcdreplay -zicompinit -~~~~~~~~~~ +.zi-diff +~~~~~~~~ ____ - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types ____ -Has 1 line(s). Calls functions: +Has 4 line(s). Calls functions: - zicompinit - `-- compinit + .zi-diff -Uses feature(s): _autoload_, _compinit_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked -____ - -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall - -.zi-diff -~~~~~~~~ - -____ - - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types -____ - -Has 4 line(s). Calls functions: - - .zi-diff - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-stop + .zi-load-plugin + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-stop .zi-diff-env ~~~~~~~~~~~~ @@ -696,9 +620,9 @@ ____ Has 76 line(s). Calls functions: .zi-load + |-- +zi-deploy-message |-- install.zsh/.zi-get-package - |-- install.zsh/.zi-setup-plugin-dir - `-- +zi-deploy-message + `-- install.zsh/.zi-setup-plugin-dir Uses feature(s): _eval_, _setopt_, _source_, _zle_ @@ -759,8 +683,8 @@ Has 107 line(s). Calls functions: .zi-load-plugin `-- :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ @@ -782,18 +706,18 @@ ____ Has 173 line(s). Calls functions: .zi-load-snippet - |-- install.zsh/.zi-download-snippet |-- +zi-deploy-message - `-- +zi-message + |-- +zi-message + `-- install.zsh/.zi-download-snippet Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ Called by: - pmodload .zi-load-object .zi-load .zi-run-task + pmodload additional.zsh/.zi-service .zi-main-message-formatter @@ -808,57 +732,6 @@ Has 18 line(s). Doesn't call other functions. Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -+zi-message -~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message. [[[ -____ - -Has 14 line(s). Doesn't call other functions. - -Called by: - - Script-Body - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - +zi-prehelp-usage-message - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - zi - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-unload - additional.zsh/:zi-tmp-subst-source - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/ziextract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message - .zi-pack-ice ~~~~~~~~~~~~ @@ -892,24 +765,6 @@ ____ Has 2 line(s). Doesn't call other functions. -Called by: - - zi - autoload.zsh/.zi-delete - -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-prehelp-usage-message. [[[ -____ - -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - Called by: zi @@ -938,34 +793,6 @@ Called by: _Environment variables used:_ ZPFX -@zi-register-annex -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 4 line(s). Doesn't call other functions. - -Called by: - - Script-Body - .zi-register-plugin ~~~~~~~~~~~~~~~~~~~ @@ -986,31 +813,6 @@ Called by: .zi-load -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-run ~~~~~~~ @@ -1062,53 +864,6 @@ Called by: @zi-scheduler -@zi-scheduler -~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ - -Has 7 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-set-m-func ~~~~~~~~~~~~~~ @@ -1165,49 +920,105 @@ Called by: zi -@zi-substitute -~~~~~~~~~~~~~~ +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ ____ - FUNCTION: @zi-substitute. [[[ + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). ____ -Has 36 line(s). Doesn't call other functions. +Has 17 line(s). Doesn't call other functions. -Uses feature(s): _setopt_ +Uses feature(s): _setopt_, _unfunction_ Called by: - autoload.zsh/.zi-at-eval - install.zsh/∞zi-atclone-hook - install.zsh/.zi-at-eval - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/.zi-get-package - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX + .zi-load-plugin + additional.zsh/.zi-debug-stop -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. ____ -Has 30 line(s). Calls functions: +Has 29 line(s). Doesn't call other functions. - :zi-tmp-subst-alias +Uses feature(s): _source_ -Uses feature(s): _alias_, _setopt_, _zparseopts_ +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). @@ -1226,15 +1037,15 @@ ____ Has 106 line(s). Calls functions: :zi-tmp-subst-autoload - |-- is-at-least - `-- +zi-message + |-- +zi-message + `-- is-at-least Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ Called by: - @autoload .zi-load-plugin + @autoload :zi-tmp-subst-bindkey ~~~~~~~~~~~~~~~~~~~~~ @@ -1275,83 +1086,255 @@ Uses feature(s): _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-tmp-subst-off +:zi-tmp-subst-zle ~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). ____ -Has 17 line(s). Doesn't call other functions. +Has 33 line(s). Calls functions: -Uses feature(s): _setopt_, _unfunction_ + :zi-tmp-subst-zle -Called by: +Uses feature(s): _setopt_, _zle_ - .zi-load-plugin - additional.zsh/.zi-debug-stop +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). ____ -Has 29 line(s). Doesn't call other functions. +Has 19 line(s). Calls functions: -Uses feature(s): _source_ + :zi-tmp-subst-zstyle -Called by: +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - .zi-load-plugin - additional.zsh/.zi-debug-start +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-zle +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook ~~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. - The hijacking is to gather report data (which is used in unload). ____ -Has 33 line(s). Calls functions: +Has 74 line(s). *Is a precmd hook*. Calls functions: - :zi-tmp-subst-zle + @zi-scheduler + `-- add-zsh-hook -Uses feature(s): _setopt_, _zle_ +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ +@zi-substitute +~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/.zi-at-eval + install.zsh/.zi-get-package + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ - The hijacking is to gather report data (which is used in unload). + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard ____ -Has 19 line(s). Calls functions: +Has 2 line(s). Calls functions: - :zi-tmp-subst-zstyle + @zsh-plugin-run-on-unload -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + zi-turbo ~~~~~~~~ @@ -1367,6 +1350,9 @@ Has 1 line(s). Calls functions: zi-turbo `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message |-- additional.zsh/.zi-clear-debug-report |-- additional.zsh/.zi-debug-start |-- additional.zsh/.zi-debug-stop @@ -1375,8 +1361,8 @@ Has 1 line(s). Calls functions: |-- autoload.zsh/.zi-cdisable |-- autoload.zsh/.zi-cenable |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled |-- autoload.zsh/.zi-control-menu |-- autoload.zsh/.zi-help |-- autoload.zsh/.zi-list-bindkeys @@ -1402,31 +1388,76 @@ Has 1 line(s). Calls functions: |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - |-- install.zsh/.zi-install-completions - |-- +zi-message - `-- +zi-prehelp-usage-message - `-- +zi-message + `-- install.zsh/.zi-install-completions Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ +zicdclear +~~~~~~~~~ ____ - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. ____ -Has 8 line(s). Doesn't call other functions. +Has 1 line(s). Calls functions: -Uses feature(s): _setopt_ + zicdclear -Called by: +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - .zi-any-to-pid +zicdreplay +~~~~~~~~~~ -_Environment variables used:_ ZPFX +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). zpcdclear ~~~~~~~~~ @@ -1472,37 +1503,6 @@ Uses feature(s): _autoload_, _compinit_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-unload - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - add-zsh-hook ~~~~~~~~~~~~ @@ -1526,8 +1526,8 @@ Uses feature(s): _autoload_, _getopts_ Called by: - Script-Body @zi-scheduler + Script-Body compinit ~~~~~~~~ @@ -1577,7 +1577,7 @@ Has 56 line(s). Doesn't call other functions. Called by: - Script-Body :zi-tmp-subst-autoload :zi-tmp-subst-bindkey + Script-Body diff --git a/code/zsdoc/data/autoload/install.zsh/compinit b/code/zsdoc/data/autoload/install.zsh/compinit new file mode 100644 index 0000000..f0f8421 --- /dev/null +++ b/code/zsdoc/data/autoload/install.zsh/compinit @@ -0,0 +1,549 @@ +# Initialisation for new style completion. This mainly contains some helper +# functions and setup. Everything else is split into different files that +# will automatically be made autoloaded (see the end of this file). The +# names of the files that will be considered for autoloading are those that +# begin with an underscores (like `_condition). +# +# The first line of each of these files is read and must indicate what +# should be done with its contents: +# +# `#compdef ' +# If the first line looks like this, the file is autoloaded as a +# function and that function will be called to generate the matches +# when completing for one of the commands whose are given. +# The names may also be interspersed with `-T ' options +# specifying for which set of functions this should be added. +# +# `#compdef -[pP] ' +# This defines a function that should be called to generate matches +# for commands whose name matches . Note that only one pattern +# may be given. +# +# `#compdef -k + + + +
+
+

NAME

+
+
+

additional.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
.zi-clear-debug-report
+.zi-debug-start
+.zi-debug-stop
+.zi-debug-unload
+.zi-service
+.zi-wrap-track-functions
+:zi-tmp-subst-source
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+
zi-clear-debug-report
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-clear-debug-report [[[
+Forgets dtrace repport gathered up to this moment.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-clear-debug-report
+`-- autoload.zsh/.zi-clear-report-for
+
+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-unload
+zi.zsh/zi
+
+
+
+
zi-debug-start
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-debug-start [[[
+Starts Dtrace, i.e. session tracking for changes in Zsh state.
+
+
+
+
+
+

Has 9 line(s). Calls functions:

+
+
+
+
.zi-debug-start
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-diff
+`-- zi.zsh/.zi-tmp-subst-on
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-debug-stop
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-debug-stop [[[
+Stops Dtrace, i.e. session tracking for changes in Zsh state.
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
.zi-debug-stop
+|-- zi.zsh/.zi-diff
+`-- zi.zsh/.zi-tmp-subst-off
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-debug-unload
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-debug-unload [[[
+Reverts changes detected by dtrace run.
+
+
+
+
+
+

Has 6 line(s). Calls functions:

+
+
+
+
.zi-debug-unload
+|-- autoload.zsh/.zi-unload
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-service
+

~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-service [[[
+Handles given service, i.e. obtains lock, runs it, or waits if no lock
+
+
+
+
+
$1 - type "p" or "s" (plugin or snippet)
+$2 - mode - for plugin (light or load)
+$3 - id - URL or plugin ID or alias name (from id-as'')
+
+
+
+
+
+

Has 29 line(s). Calls functions:

+
+
+
+
.zi-service
+|-- zi.zsh/.zi-load
+`-- zi.zsh/.zi-load-snippet
+
+
+
+

Uses feature(s): kill, read, setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-wrap-track-functions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-wrap-track-functions [[[
+
+
+
+
+
+

Has 19 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-source

+
+
+
+
+
FUNCTION: :zi-tmp-subst-source [[[
+
+
+
+
+
+

Has 25 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-source
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/autoload.zsh.html b/code/zsdoc/html/autoload.zsh.html new file mode 100644 index 0000000..07c108a --- /dev/null +++ b/code/zsdoc/html/autoload.zsh.html @@ -0,0 +1,2992 @@ + + + + + + + +autoload.zsh(1) + + + + + +
+
+

NAME

+
+
+

autoload.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
.zi-analytics-menu
+.zi-any-to-uspl2
+.zi-at-eval
+.zi-build-module
+.zi-cd
+.zi-cdisable
+.zi-cenable
+.zi-changes
+.zi-check-comp-consistency
+.zi-check-which-completions-are-enabled
+.zi-check-which-completions-are-installed
+.zi-clear-completions
+.zi-clear-report-for
+.zi-compile-uncompile-all
+.zi-compiled
+.zi-confirm
+.zi-control-menu
+.zi-create
+.zi-delete
+.zi-diff-env-compute
+.zi-diff-functions-compute
+.zi-diff-options-compute
+.zi-diff-parameter-compute
+.zi-edit
+.zi-exists-message
+.zi-find-completions-of-plugin
+.zi-format-env
+.zi-format-functions
+.zi-format-options
+.zi-format-parameter
+.zi-get-completion-owner
+.zi-get-completion-owner-uspl2col
+.zi-get-path
+.zi-glance
+.zi-help
+.zi-list-bindkeys
+.zi-list-compdef-replay
+.zi-ls
+.zi-module
+.zi-pager
+.zi-prepare-readlink
+.zi-recall
+.zi-recently
+.zi-restore-extendedglob
+.zi-run-delete-hooks
+.zi-save-set-extendedglob
+.zi-search-completions
+.zi-self-update
+.zi-show-all-reports
+.zi-show-completions
+.zi-show-debug-report
+.zi-show-registered-plugins
+.zi-show-report
+.zi-show-times
+.zi-show-zstatus
+.zi-stress
+.zi-uncompile-plugin
+.zi-uninstall-completions
+.zi-unload
+.zi-unregister-plugin
+.zi-update-all-parallel
+.zi-update-or-status
+.zi-update-or-status-all
+.zi-update-or-status-snippet
+.zi-wait-for-update-jobs
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+

Uses feature(s): source

+
+
+
zi-analytics-menu
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-analytics-menu [[[
+Shows ❮ ZI ❯ analytics.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 23 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-any-to-uspl2
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-uspl2 [[[
+Converts given plugin-spec to format that's used in keys for hash tables.
+So basically, creates string "user/plugin" (this format is called: uspl2).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
.zi-any-to-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-clear-report-for
+.zi-exists-message
+
+
+
+
zi-at-eval
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-at-eval [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-at-eval
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-build-module
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-build-module [[[
+Performs ./configure && make on the module and displays information how to load the module in .zshrc.
+
+
+
+
+
+

Has 41 line(s). Calls functions:

+
+
+
+
.zi-build-module
+`-- zi.zsh/+zi-message
+
+
+
+

Called by:

+
+
+
+
.zi-module
+
+
+
+
zi-cd
+

~~

+
+
+
+
+
+
FUNCTION: .zi-cd [[[
+Jumps to plugin's directory (in ❮ ZI ❯ home directory).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 15 line(s). Calls functions:

+
+
+
+
.zi-cd
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-cdisable
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-cdisable [[[
+Enables given installed completion.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - e.g. "_mkdir" or "mkdir"
+
+
+
+
+
+

Has 27 line(s). Calls functions:

+
+
+
+
.zi-cdisable
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-cenable
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-cenable [[[
+Disables given installed completion.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - e.g. "_mkdir" or "mkdir"
+
+
+
+
+
+

Has 26 line(s). Calls functions:

+
+
+
+
.zi-cenable
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-changes
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-changes [[[
+Shows `git log` of given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 6 line(s). Calls functions:

+
+
+
+
.zi-changes
+|-- side.zsh/.zi-exists-physically-message
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-check-comp-consistency
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-comp-consistency [[[
+❮ ZI ❯ creates symlink for each installed completion.
+This function checks whether given completion (i.e.
+file like "_mkdir") is indeed a symlink. Backup file
+is a completion that is disabled - has the leading "_" removed.
+
+
+
+
+
$1 - path to completion within plugin's directory
+$2 - path to backup file within plugin's directory
+
+
+
+
+
+

Has 11 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+
+
+
+
zi-check-which-completions-are-enabled
+

~~~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-which-completions-are-enabled [[[
+For each argument that each should be a path to completion
+within a plugin's dir, it checks whether that completion
+is disabled - returns 0 or 1 on corresponding positions in reply.
+
+
+
+
+
Uninstalled completions will be reported as "0" - i.e. disabled
+
+
+
+
+
$1, ... - path to completion within plugin's directory
+
+
+
+
+
+

Has 10 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-check-which-completions-are-installed
+

~~~~~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-check-which-completions-are-installed [[[
+For each argument that each should be a path to completion
+within a plugin's dir, it checks whether that completion
+is installed - returns 0 or 1 on corresponding positions in reply.
+
+
+
+
+
$1, ... - path to completion within plugin's directory
+
+
+
+
+
+

Has 11 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-clear-completions
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-clear-completions [[[
+Delete stray and improper completions.
+
+
+
+
+
Completions live even when plugin isn't loaded - if they are
+installed and enabled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 35 line(s). Calls functions:

+
+
+
+
.zi-clear-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/.zi-prepare-home
+zi.zsh/zi
+
+
+
+
zi-clear-report-for
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-clear-report-for [[[
+Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-clear-report-for
+
+
+
+

Called by:

+
+
+
+
.zi-unload
+additional.zsh/.zi-clear-debug-report
+
+
+
+
zi-compile-uncompile-all
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compile-uncompile-all [[[
+Compiles or uncompiles all existing (on disk) plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-compile-uncompile-all
+|-- install.zsh/.zi-compile-plugin
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-compiled
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-compiled [[[
+Displays list of plugins that are compiled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-compiled
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-confirm
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-confirm [[[
+Prints given question, waits for "y" key, evals given expression if "y" obtained
+
+
+
+
+
$1 - question
+$2 - expression
+
+
+
+
+
+

Has 22 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): eval, read

+
+
+

Called by:

+
+
+
+
.zi-delete
+
+
+
+
zi-control-menu
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-control-menu [[[
+Shows control options.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 22 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-create
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-create [[[
+Creates a plugin, also on Github (if not "_local/name" plugin).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 103 line(s). Calls functions:

+
+
+
+
.zi-create
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-exists-physically
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): autoload, setopt, vared

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-delete
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-delete [[[
+Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 93 line(s). Calls functions:

+
+
+
+
.zi-delete
+|-- side.zsh/.zi-compute-ice
+|-- zi.zsh/+zi-prehelp-usage-message
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/.zi-parse-opts
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-diff-env-compute
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-env-compute [[[
+Computes ZI_PATH, ZI_FPATH that hold (f)path components
+added by plugin. Uses data gathered earlier by .zi-diff-env().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-functions-compute
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-functions-compute [[[
+Computes FUNCTIONS that holds new functions added by plugin.
+Uses data gathered earlier by .zi-diff-functions().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-options-compute
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-options-compute [[[
+Computes OPTIONS that holds options changed by plugin.
+Uses data gathered earlier by .zi-diff-options().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-diff-parameter-compute
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-parameter-compute [[[
+Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
+parameters created or changed (their type) by plugin. Uses
+data gathered earlier by .zi-diff-parameter().
+
+
+
+
+
$1 - user/plugin
+
+
+
+
+
+

Has 27 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-edit
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-edit [[[
+Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-edit
+`-- side.zsh/.zi-compute-ice
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-exists-message
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-message [[[
+Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - (optional) plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 7 line(s). Calls functions:

+
+
+
+
.zi-exists-message
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
.zi-show-report
+.zi-unload
+
+
+
+
zi-find-completions-of-plugin
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-find-completions-of-plugin [[[
+Searches for completions owned by given plugin.
+Returns them in `reply' array.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-find-completions-of-plugin
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-env
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-env [[[
+Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+$2 - if 1, then examine PATH, if 2, then examine FPATH
+
+
+
+
+
+

Has 15 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-functions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-functions [[[
+Creates a one or two columns text with functions created by given plugin.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 34 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-options
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-options [[[
+Creates one-column text about options that changed when plugin "$1" was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-format-options
+
+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-format-parameter
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-format-parameter [[[
+Creates one column text that lists global parameters that changed when the given plugin was loaded.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format of plugin-spec)
+
+
+
+
+
+

Has 29 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-report
+
+
+
+
zi-get-completion-owner
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-completion-owner [[[
+Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
+
+
+
+
+
Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
+
+
+
+
+
:A will read the link "twice" and give the final repository
+directory, possibly without username in the uspl format; readlink will read the link "once"
+
+
+
+
+
$1 - absolute path to completion file (in COMPLETIONS_DIR)
+$2 - readlink command (":" or "readlink")
+
+
+
+
+
+

Has 19 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-clear-completions
+.zi-get-completion-owner-uspl2col
+.zi-show-completions
+
+
+
+
zi-get-completion-owner-uspl2col
+

~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-completion-owner-uspl2col [[[
+For shortening of code - returns colorized plugin name
+that owns given completion.
+
+
+
+
+
$1 - absolute path to completion file (in COMPLETIONS_DIR)
+$2 - readlink command (":" or "readlink")
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
.zi-get-completion-owner-uspl2col
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+
+
+
+
zi-get-path
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-path [[[
+Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
+("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-get-path
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-cd
+.zi-uninstall-completions
+
+
+
+
zi-glance
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-glance [[[
+Shows colorized source code of plugin. Is able to use pygmentize,
+highlight, GNU source-highlight.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 37 line(s). Calls functions:

+
+
+
+
.zi-glance
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-first
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-help
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-help [[[
+Shows usage information.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 31 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-list-bindkeys
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-list-bindkeys [[[
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-list-bindkeys
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-list-compdef-replay
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-list-compdef-replay [[[
+Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
+for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 5 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-ls
+

~~

+
+
+
+
+
+
FUNCTION: .zi-ls [[[
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-module
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-module [[[
+Function that has sub-commands passed as long-options (with two dashes, --).
+It's an attempt to plugin only this one function into `zi' function
+defined in zi.zsh, to not make this file longer than it's needed.
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
.zi-module
+
+
+
+

Called by:

+
+
+
+
.zi-build-module
+zi.zsh/Script-Body
+zi.zsh/zi
+
+
+
+
zi-pager
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-pager [[[
+BusyBox less lacks the -X and -i options, so it can use more
+
+
+
+
+
+

Has 14 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-glance
+.zi-self-update
+.zi-update-or-status
+
+
+
+
zi-prepare-readlink
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-prepare-readlink [[[
+Prepares readlink command, used for establishing completion's owner.
+
+
+
+
+
$REPLY = ":" or "readlink"
+
+
+
+
+
+

Has 4 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): type

+
+
+

Called by:

+
+
+
+
.zi-cdisable
+.zi-cenable
+.zi-clear-completions
+.zi-show-completions
+
+
+
+
zi-recall
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-recall [[[
+
+
+
+
+
+

Has 33 line(s). Calls functions:

+
+
+
+
.zi-recall
+|-- side.zsh/.zi-compute-ice
+`-- zi.zsh/+zi-deploy-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-recently
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-recently [[[
+Shows plugins that obtained commits in specified past time.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - time spec, e.g. "1 week"
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-recently
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-restore-extendedglob
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-restore-extendedglob [[[
+Restores extendedglob-option from state saved earlier.
+
+
+
+
+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-format-options
+.zi-unload
+
+
+
+
zi-run-delete-hooks
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-run-delete-hooks [[[
+
+
+
+
+
+

Has 17 line(s). Calls functions:

+
+
+
+
.zi-run-delete-hooks
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-save-set-extendedglob
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-save-set-extendedglob [[[
+Enables extendedglob-option first saving if it was already
+enabled, for restoration of this state later.
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-format-options
+.zi-unload
+
+
+
+
zi-search-completions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-search-completions [[[
+While .zi-show-completions() shows what completions are
+installed, this functions searches through all plugin dirs
+showing what's available in general (for installation).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-search-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-self-update
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-self-update [[[
+Updates ❮ ZI ❯ code (does a git pull).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 43 line(s). Calls functions:

+
+
+
+
.zi-self-update
+|-- zi.zsh/+zi-message
+`-- zi.zsh/.zi-get-mtime-into
+
+
+
+

Uses feature(s): setopt, source, zcompile

+
+
+

Called by:

+
+
+
+
.zi-update-or-status-all
+zi.zsh/zi
+
+
+
+
zi-show-all-reports
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-all-reports [[[
+Displays reports of all loaded plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-show-all-reports
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-completions
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-completions [[[
+Display installed (enabled and disabled), completions. Detect
+stray and improper ones.
+
+
+
+
+
Completions live even when plugin isn't loaded - if they are
+installed and enabled.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 61 line(s). Calls functions:

+
+
+
+
.zi-show-completions
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-debug-report
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-debug-report [[[
+Displays dtrace report (data recorded in interactive session).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-show-debug-report
+
+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-registered-plugins
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-registered-plugins [[[
+Lists loaded plugins (subcommands list, loaded).
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-show-registered-plugins
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-report
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-report [[[
+Displays report of the plugin given.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 66 line(s). Calls functions:

+
+
+
+
.zi-show-report
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-show-all-reports
+.zi-show-debug-report
+zi.zsh/zi
+
+
+
+
zi-show-times
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-times [[[
+Shows loading times of all loaded plugins.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 51 line(s). Calls functions:

+
+
+
+
.zi-show-times
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-show-zstatus
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-show-zstatus [[[
+Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
+of available completions, etc.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 47 line(s). Calls functions:

+
+
+
+
.zi-show-zstatus
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-stress
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-stress [[[
+Compiles plugin with various options on and off to see how well the code is written. The options are:
+
+
+
+
+
NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 31 line(s). Calls functions:

+
+
+
+
.zi-stress
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-first
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt, zcompile

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-uncompile-plugin
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-uncompile-plugin [[[
+Uncompiles given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 20 line(s). Calls functions:

+
+
+
+
.zi-uncompile-plugin
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compile-uncompile-all
+zi.zsh/zi
+
+
+
+
zi-uninstall-completions
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-uninstall-completions [[[
+Removes all completions of given plugin from Zshell (i.e. from FPATH).
+The FPATH is typically `~/.zi/completions/'.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 39 line(s). Calls functions:

+
+
+
+
.zi-uninstall-completions
+|-- install.zsh/.zi-compinit
+|-- install.zsh/.zi-forget-completion
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, source

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-unload
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-unload [[[
+0. Call the Zsh Plugin's Standard *_plugin_unload function
+0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
+1. Delete bindkeys (...)
+2. Delete Zstyles
+3. Restore options
+4. Remove aliases
+5. Restore Zle state
+6. Unfunction functions (created by plugin)
+7. Clean-up FPATH and PATH
+8. Delete created variables
+9. Forget the plugin
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 380 line(s). Calls functions:

+
+
+
+
.zi-unload
+|-- additional.zsh/.zi-clear-debug-report
+|-- side.zsh/.zi-any-colorify-as-uspl2
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): alias, bindkey, eval, setopt, unalias, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
additional.zsh/.zi-debug-unload
+zi.zsh/.zi-run-task
+zi.zsh/zi
+
+
+
+
zi-unregister-plugin
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-unregister-plugin [[[
+Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
+zsh_loaded_plugins array (managed according to the plugin standard)
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-unregister-plugin
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-unload
+
+
+
+
zi-update-all-parallel
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-in-parallel [[[
+
+
+
+
+
+

Has 63 line(s). Calls functions:

+
+
+
+
.zi-update-all-parallel
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- zi.zsh/+zi-message
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-update-or-status-all
+
+
+
+
zi-update-or-status
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status [[[
+Updates (git pull) or does `git status' for given plugin.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
$1 - "status" for status, other for update
+$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
+$3 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 263 line(s). Calls functions:

+
+
+
+
.zi-update-or-status
+|-- install.zsh/.zi-get-latest-gh-r-url-part
+|-- install.zsh/.zi-setup-plugin-dir
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-compute-ice
+|-- side.zsh/.zi-exists-physically
+|-- side.zsh/.zi-exists-physically-message
+|-- side.zsh/.zi-store-ices
+|-- side.zsh/.zi-two-paths
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/.zi-set-m-func
+
+
+
+

Uses feature(s): kill, read, setopt, source, trap, wait

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+.zi-update-or-status-all
+zi.zsh/zi
+
+
+
+
zi-update-or-status-all
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status-all [[[
+Updates (git pull) or does `git status` for all existing plugins.
+This includes also plugins that are not loaded into Zsh (but exist
+on disk). Also updates (i.e. redownloads) snippets.
+
+
+
+
+
User-action entry point.
+
+
+
+
+
+

Has 96 line(s). Calls functions:

+
+
+
+
.zi-update-or-status-all
+|-- install.zsh/.zi-compinit
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-any-to-user-plugin
+`-- zi.zsh/.zi-get-mtime-into
+
+
+
+

Uses feature(s): setopt, source

+
+
+

Called by:

+
+
+
+
zi.zsh/zi
+
+
+
+
zi-update-or-status-snippet
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-update-or-status-snippet [[[
+
+
+
+
+
Implements update or status operation for snippet given by URL.
+
+
+
+
+
$1 - "status" or "update"
+$2 - snippet URL
+
+
+
+
+
+

Has 28 line(s). Calls functions:

+
+
+
+
.zi-update-or-status-snippet
+|-- install.zsh/.zi-update-snippet
+`-- side.zsh/.zi-compute-ice
+
+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+.zi-update-or-status-all
+.zi-update-or-status
+
+
+
+
zi-wait-for-update-jobs
+

~~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-wait-for-update-jobs [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
.zi-wait-for-update-jobs
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): wait

+
+
+

Called by:

+
+
+
+
.zi-update-all-parallel
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/install.zsh.html b/code/zsdoc/html/install.zsh.html new file mode 100644 index 0000000..6dfad87 --- /dev/null +++ b/code/zsdoc/html/install.zsh.html @@ -0,0 +1,1622 @@ + + + + + + + +install.zsh(1) + + + + + +
+
+

NAME

+
+
+

install.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 .zi-at-eval
+ .zi-compile-plugin
+ .zi-compinit
+ .zi-download-file-stdout
+ .zi-download-snippet
+ .zi-extract
+ .zi-forget-completion
+ .zi-get-cygwin-package
+ .zi-get-latest-gh-r-url-part
+ .zi-get-package
+ .zi-get-url-mtime
+ .zi-install-completions
+ .zi-mirror-using-svn
+ .zi-parse-json
+ .zi-setup-plugin-dir
+ .zi-update-snippet
+ zicp
+ ziextract
+ zimv
+ zpextract
+ ∞zi-atclone-hook
+ ∞zi-atpull-e-hook
+ ∞zi-atpull-hook
+ ∞zi-compile-plugin-hook
+ ∞zi-cp-hook
+ ∞zi-extract-hook
+ ∞zi-make-e-hook
+ ∞zi-make-ee-hook
+ ∞zi-make-hook
+ ∞zi-mv-hook
+ ∞zi-ps-on-update-hook
+ ∞zi-reset-hook
+AUTOLOAD compinit
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+

Uses feature(s): source

+
+
+
zi-at-eval
+

~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-at-eval [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
.zi-at-eval
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval

+
+
+

Called by:

+
+
+
+
∞zi-atpull-e-hook
+∞zi-atpull-hook
+
+
+
+
zi-compile-plugin
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compile-plugin [[[
+Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 84 line(s). Calls functions:

+
+
+
+
.zi-compile-plugin
+|-- side.zsh/.zi-compute-ice
+|-- side.zsh/.zi-first
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval, setopt, zcompile

+
+
+

Called by:

+
+
+
+
∞zi-compile-plugin-hook
+autoload.zsh/.zi-compile-uncompile-all
+zi.zsh/zi
+
+
+
+
zi-compinit
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-compinit [[[
+User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
+After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
+
+
+
+
+
No arguments.
+
+
+
+
+
+

Has 26 line(s). Calls functions:

+
+
+
+
.zi-compinit
+|-- compinit
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): autoload, compinit, setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-install-completions
+autoload.zsh/.zi-uninstall-completions
+autoload.zsh/.zi-update-or-status-all
+zi.zsh/.zi-prepare-home
+zi.zsh/zi
+
+
+
+
zi-download-file-stdout
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-download-file-stdout [[[
+Downloads file to stdout. Supports following backend commands:
+curl, wget, lftp, lynx. Used by snippet loading.
+
+
+
+
+
+

Has 46 line(s). Calls functions:

+
+
+
+
.zi-download-file-stdout
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap, type

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+.zi-get-cygwin-package
+.zi-get-package
+.zi-setup-plugin-dir
+
+
+
+
zi-download-snippet
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-download-snippet [[[
+Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
+with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
+to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
+
+
+
+
+
+

Has 309 line(s). Calls functions:

+
+
+
+
.zi-download-snippet
+|-- side.zsh/.zi-store-ices
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap, zcompile

+
+
+

Called by:

+
+
+
+
.zi-update-snippet
+zi.zsh/.zi-load-snippet
+
+
+
+
zi-extract
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-extract() [[[
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-extract
+|-- zi.zsh/+zi-message
+`-- ziextract
+    `-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
∞zi-extract-hook
+
+
+
+
zi-forget-completion
+

~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-forget-completion [[[
+Implements alternation of Zsh state so that already initialized
+completion stops being visible to Zsh.
+
+
+
+
+
$1 - completion function name, e.g. "_cp"; can also be "cp"
+
+
+
+
+
+

Has 20 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-compinit
+.zi-install-completions
+autoload.zsh/.zi-uninstall-completions
+zi.zsh/zi
+
+
+
+
zi-get-cygwin-package
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-cygwin-package [[[
+
+
+
+
+
+

Has 70 line(s). Calls functions:

+
+
+
+
.zi-get-cygwin-package
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-setup-plugin-dir
+
+
+
+
zi-get-latest-gh-r-url-part
+

~~~~~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-get-latest-gh-r-url-part [[[
+Gets version string of latest release of given Github package.
+Connects to Github releases page.
+
+
+
+
+
+

Has 101 line(s). Calls functions:

+
+
+
+
.zi-get-latest-gh-r-url-part
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-setup-plugin-dir
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-get-package
+

~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-get-package [[[
+
+
+
+
+
+

Has 194 line(s). Calls functions:

+
+
+
+
.zi-get-package
+|-- zi.zsh/+zi-message
+|-- zi.zsh/@zi-substitute
+`-- ziextract
+    `-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval, setopt, trap

+
+
+

Called by:

+
+
+
+
zi.zsh/.zi-load
+
+
+
+

Environment variables used: zi.zsh → ZPFX

+
+
+
zi-get-url-mtime
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-url-mtime [[[
+For the given URL returns the date in the Last-Modified header as a time stamp
+
+
+
+
+
+

Has 34 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): read, setopt, trap, type

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+
+
+
+
zi-install-completions
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-install-completions [[[
+Installs all completions of given plugin. After that they are
+visible to `compinit'. Visible completions can be selectively
+disabled and enabled. User can access completion data with
+`clist' or `completions' subcommand.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+$3 - if 1, then reinstall, otherwise only install completions that aren't there
+
+
+
+
+
+

Has 61 line(s). Calls functions:

+
+
+
+
.zi-install-completions
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-exists-physically-message
+|-- zi.zsh/+zi-message
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+.zi-setup-plugin-dir
+zi.zsh/zi
+
+
+
+
zi-mirror-using-svn
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-mirror-using-svn [[[
+Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
+in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
+compares remote and local revision and outputs true if update is needed.
+
+
+
+
+
$1 - URL
+$2 - mode, "" - normal, "-u" - update, "-t" - test
+$3 - subdirectory (not path) with working copy, needed for -t and -u
+
+
+
+
+
+

Has 27 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-download-snippet
+
+
+
+
zi-parse-json
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-parse-json [[[
+Retrievies the ice-list from given profile from the JSON of the package.json.
+
+
+
+
+
+

Has 102 line(s). Calls functions:

+
+
+
+
.zi-parse-json
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-get-package
+
+
+
+
zi-setup-plugin-dir
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-setup-plugin-dir [[[
+Clones given plugin into PLUGIN_DIR. Supports multiple
+sites (respecting `from' and `proto' ice modifiers).
+Invokes compilation of plugin's main file.
+
+
+
+
+
$1 - user
+$2 - plugin
+
+
+
+
+
+

Has 189 line(s). Calls functions:

+
+
+
+
.zi-setup-plugin-dir
+|-- side.zsh/.zi-any-colorify-as-uspl2
+|-- side.zsh/.zi-store-ices
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-get-object-path
+`-- ziextract
+    `-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, trap

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status
+zi.zsh/.zi-load
+
+
+
+
zi-update-snippet
+

~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: .zi-update-snippet [[[
+
+
+
+
+
+

Has 72 line(s). Calls functions:

+
+
+
+
.zi-update-snippet
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-get-object-path
+`-- zi.zsh/.zi-pack-ice
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status-snippet
+
+
+
+
+

zicp

+
+
+
+
+
]]]
+FUNCTION zicp [[[
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zimv
+
+
+
+

Environment variables used: zi.zsh → ZPFX

+
+
+
+

ziextract

+
+
+
+
+
]]]
+FUNCTION: ziextract [[[
+If the file is an archive, it is extracted by this function.
+Next stage is scanning of files with the common utility `file',
+to detect executables. They are given +x mode. There are also
+messages to the user on performed actions.
+
+
+
+
+
$1 - url
+$2 - file
+
+
+
+
+
+

Has 274 line(s). Calls functions:

+
+
+
+
ziextract
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): setopt, unfunction, zparseopts

+
+
+

Called by:

+
+
+
+
.zi-extract
+.zi-get-package
+.zi-setup-plugin-dir
+zpextract
+
+
+
+
+

zimv

+
+
+
+
+
]]]
+FUNCTION zimv [[[
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
zimv
+`-- zicp
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpextract

+
+
+
+
+
]]]
+FUNCTION: zpextract [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpextract
+`-- ziextract
+    `-- zi.zsh/+zi-message
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-atclone-hook

+
+
+
+
+
FUNCTION: ∞zi-atclone-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-atclone-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-atpull-e-hook

+
+
+
+
+
FUNCTION: ∞zi-atpull-e-hook [[[
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
∞zi-atpull-e-hook
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-atpull-hook

+
+
+
+
+
FUNCTION: ∞zi-atpull-hook [[[
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
∞zi-atpull-hook
+`-- side.zsh/.zi-countdown
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-compile-plugin-hook

+
+
+
+
+
FUNCTION: ∞zi-compile-plugin-hook [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
∞zi-compile-plugin-hook
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-cp-hook

+
+
+
+
+
FUNCTION: ∞zi-cp-hook [[[
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
∞zi-cp-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-extract-hook

+
+
+
+
+
FUNCTION: ∞zi-extract-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-extract-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-make-e-hook

+
+
+
+
+
FUNCTION: ∞zi-make-e-hook [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
∞zi-make-e-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-make-ee-hook

+
+
+
+
+
FUNCTION: ∞zi-make-ee-hook [[[
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
∞zi-make-ee-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-make-hook

+
+
+
+
+
FUNCTION: ∞zi-make-hook [[[
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
∞zi-make-hook
+|-- side.zsh/.zi-countdown
+`-- zi.zsh/@zi-substitute
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-mv-hook

+
+
+
+
+
FUNCTION: ∞zi-mv-hook [[[
+
+
+
+
+
+

Has 21 line(s). Calls functions:

+
+
+
+
∞zi-mv-hook
+`-- zi.zsh/@zi-substitute
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-ps-on-update-hook

+
+
+
+
+
FUNCTION: ∞zi-ps-on-update-hook [[[
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
∞zi-ps-on-update-hook
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

∞zi-reset-hook

+
+
+
+
+
]]]
+FUNCTION: ∞zi-reset-opt-hook [[[
+
+
+
+
+
+

Has 79 line(s). Calls functions:

+
+
+
+
∞zi-reset-hook
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): eval

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

compinit

+
+
+
+
+
Initialisation for new style completion. This mainly contains some helper
+functions and setup. Everything else is split into different files that
+will automatically be made autoloaded (see the end of this file).  The
+names of the files that will be considered for autoloading are those that
+begin with an underscores (like `_condition).
+
+
+
+
+
The first line of each of these files is read and must indicate what
+should be done with its contents:
+
+
+
+
+
`#compdef <names ...>'
+
+
+
+
+
+

Has 549 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
.zi-compinit
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/side.zsh.html b/code/zsdoc/html/side.zsh.html new file mode 100644 index 0000000..873c0f2 --- /dev/null +++ b/code/zsdoc/html/side.zsh.html @@ -0,0 +1,909 @@ + + + + + + + +side.zsh(1) + + + + + +
+
+

NAME

+
+
+

side.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 .zi-any-colorify-as-uspl2
+ .zi-compute-ice
+ .zi-countdown
+ .zi-exists-physically
+ .zi-exists-physically-message
+ .zi-first
+ .zi-store-ices
+ .zi-two-paths
+AUTOLOAD zmv
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

+
+
+
zi-any-colorify-as-uspl2
+

~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-colorify-as-uspl2 [[[
+Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+$REPLY = ANSI-colorified "user/plugin" string
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-any-colorify-as-uspl2
+|-- zi.zsh/.zi-any-to-pid
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-exists-physically-message
+autoload.zsh/.zi-clear-completions
+autoload.zsh/.zi-compile-uncompile-all
+autoload.zsh/.zi-compiled
+autoload.zsh/.zi-create
+autoload.zsh/.zi-exists-message
+autoload.zsh/.zi-get-completion-owner-uspl2col
+autoload.zsh/.zi-list-bindkeys
+autoload.zsh/.zi-recently
+autoload.zsh/.zi-search-completions
+autoload.zsh/.zi-show-completions
+autoload.zsh/.zi-show-registered-plugins
+autoload.zsh/.zi-show-times
+autoload.zsh/.zi-uncompile-plugin
+autoload.zsh/.zi-unload
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+install.zsh/.zi-setup-plugin-dir
+zi.zsh/.zi-formatter-pid
+
+
+
+
zi-compute-ice
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compute-ice [[[
+Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
+taking priorities into account. Also returns path to snippet directory and optional name of snippet file
+(only valid if ICE[svn] is not set).
+
+
+
+
+
Can also pack resulting ices into ZI_SICE (see $2).
+
+
+
+
+
$1 - URL (also plugin-spec)
+$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
+wins with static ice; "pack-nf" means that disk-ices will
+be ignored (no-file?)
+$3 - name of output associative array, "ICE" is the default
+$4 - name of output string parameter, to hold path to directory ("local_dir")
+$5 - name of output string parameter, to hold filename ("filename")
+$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
+
+
+
+
+
+

Has 116 line(s). Calls functions:

+
+
+
+
.zi-compute-ice
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-pack-ice
+`-- zmv
+
+
+
+

Uses feature(s): autoload, setopt, zmv

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-delete
+autoload.zsh/.zi-edit
+autoload.zsh/.zi-recall
+autoload.zsh/.zi-update-or-status-snippet
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-compile-plugin
+
+
+
+
zi-countdown
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-countdown [[[
+Displays a countdown 5...4... etc. and returns 0 if it
+sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
+
+
+
+
+
+

Has 14 line(s). Calls functions:

+
+
+
+
.zi-countdown
+`-- zi.zsh/+zi-message
+
+
+
+

Uses feature(s): trap

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-run-delete-hooks
+install.zsh/∞zi-atclone-hook
+install.zsh/∞zi-atpull-e-hook
+install.zsh/∞zi-atpull-hook
+install.zsh/∞zi-make-e-hook
+install.zsh/∞zi-make-ee-hook
+install.zsh/∞zi-make-hook
+
+
+
+
zi-exists-physically
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-physically [[[
+Checks if directory of given plugin exists in PLUGIN_DIR.
+
+
+
+
+
Testable.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 6 line(s). Calls functions:

+
+
+
+
.zi-exists-physically
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Called by:

+
+
+
+
.zi-exists-physically-message
+autoload.zsh/.zi-create
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-exists-physically-message
+

~~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-exists-physically-message [[[
+Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
+
+
+
+
+
Testable.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-exists-physically-message
+|-- zi.zsh/+zi-message
+|-- zi.zsh/.zi-any-to-pid
+`-- zi.zsh/.zi-any-to-user-plugin
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+autoload.zsh/.zi-changes
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-stress
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+
+
+
+
zi-first
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-first [[[
+Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
+ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
+is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
.zi-first
+|-- zi.zsh/.zi-any-to-pid
+|-- zi.zsh/.zi-any-to-user-plugin
+|-- zi.zsh/.zi-find-other-matches
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Called by:

+
+
+
+
.zi-two-paths
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-stress
+install.zsh/.zi-compile-plugin
+
+
+
+
zi-store-ices
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-store-ices [[[
+Saves ice mods in given hash onto disk.
+
+
+
+
+
$1 - directory where to create / delete files
+$2 - name of hash that holds values
+$3 - additional keys of hash to store, space separated
+$4 - additional keys of hash to store, empty-meaningful ices, space separated
+$5 - the URL, if applicable
+$6 - the mode (1 - svn, 0 - single file), if applicable
+
+
+
+
+
+

Has 28 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-update-or-status
+install.zsh/.zi-download-snippet
+install.zsh/.zi-setup-plugin-dir
+
+
+
+
zi-two-paths
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-two-paths [[[
+Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
+returns 2 possible paths for further examination
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-two-paths
+`-- zi.zsh/.zi-get-object-path
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+autoload.zsh/.zi-update-or-status
+
+
+
+
+

zmv

+
+
+
+
+
function zmv {
+zmv, zcp, zln:
+
+
+
+
+
This is a multiple move based on zsh pattern matching.  To get the full
+power of it, you need a postgraduate degree in zsh.  However, simple
+tasks work OK, so if that's all you need, here are some basic examples:
+zmv '(*).txt' '$1.lis'
+Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
+gets replaced by the $1 (not the `*', as happens in mmv, and note the
+`$', not `=', so that you need to quote both words).
+
+
+
+
+
+

Has 299 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): eval, getopts, read, setopt

+
+
+

Called by:

+
+
+
+
.zi-compute-ice
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/html/zi.zsh.html b/code/zsdoc/html/zi.zsh.html new file mode 100644 index 0000000..b2ae562 --- /dev/null +++ b/code/zsdoc/html/zi.zsh.html @@ -0,0 +1,2851 @@ + + + + + + + +zi.zsh(1) + + + + + +
+
+

NAME

+
+
+

zi.zsh - a shell script

+
+
+
+
+

SYNOPSIS

+
+
+

Documentation automatically generated with `zsdoc'

+
+
+
+
+

FUNCTIONS

+
+
+
+
 +zi-deploy-message
+ +zi-message
+ +zi-prehelp-usage-message
+ -zi_scheduler_add_sh
+ .zi-add-fpath
+ .zi-add-report
+ .zi-any-to-pid
+ .zi-any-to-user-plugin
+ .zi-compdef-clear
+ .zi-compdef-replay
+ .zi-diff
+ .zi-diff-env
+ .zi-diff-functions
+ .zi-diff-options
+ .zi-diff-parameter
+ .zi-find-other-matches
+ .zi-formatter-bar
+ .zi-formatter-bar-util
+ .zi-formatter-pid
+ .zi-formatter-th-bar
+ .zi-formatter-url
+ .zi-get-mtime-into
+ .zi-get-object-path
+ .zi-ice
+ .zi-load
+ .zi-load-ices
+ .zi-load-object
+ .zi-load-plugin
+ .zi-load-snippet
+ .zi-main-message-formatter
+ .zi-pack-ice
+ .zi-parse-opts
+ .zi-prepare-home
+ .zi-register-plugin
+ .zi-run
+ .zi-run-task
+ .zi-set-m-func
+ .zi-setup-params
+ .zi-submit-turbo
+ .zi-tmp-subst-off
+ .zi-tmp-subst-on
+ .zi-util-shands-path
+ :zi-reload-and-run
+ :zi-tmp-subst-alias
+ :zi-tmp-subst-autoload
+ :zi-tmp-subst-bindkey
+ :zi-tmp-subst-compdef
+ :zi-tmp-subst-zle
+ :zi-tmp-subst-zstyle
+ @autoload
+ @zi-register-annex
+ @zi-register-hook
+ @zi-substitute
+ @zsh-plugin-run-on-unload
+ @zsh-plugin-run-on-update
+ pmodload
+ zi
+ zi-turbo
+ zicdclear
+ zicdreplay
+ zicompdef
+ zicompinit
+ zpcdclear
+ zpcdreplay
+ zpcompdef
+ zpcompinit
+AUTOLOAD add-zsh-hook
+AUTOLOAD compinit
+AUTOLOAD is-at-least
+PRECMD-HOOK @zi-scheduler
+
+
+
+
+
+

DETAILS

+
+
+

Script Body

+
+

Has 202 line(s). Calls functions:

+
+
+
+
Script-Body
+|-- +zi-message
+|-- @zi-register-hook
+|-- add-zsh-hook
+|-- autoload.zsh/.zi-module
+`-- is-at-least
+
+
+
+

Uses feature(s): add-zsh-hook, alias, autoload, export, is-at-least, setopt, source, zmodload, zstyle

+
+
+

Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

+
+
+
+

+zi-deploy-message

+
+
+
+
+
FUNCTION: +zi-deploy-message. [[[
+Deploys a sub-prompt message to be displayed OR a `zle
+.reset-prompt' call to be invoked
+
+
+
+
+
+

Has 13 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): read, zle

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+autoload.zsh/.zi-recall
+
+
+
+
+

+zi-message

+
+
+
+
+
FUNCTION: +zi-message. [[[
+
+
+
+
+
+

Has 14 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
+zi-prehelp-usage-message
+.zi-compdef-clear
+.zi-compdef-replay
+.zi-load-snippet
+.zi-register-plugin
+.zi-run
+.zi-set-m-func
+:zi-tmp-subst-autoload
+Script-Body
+zi
+additional.zsh/.zi-debug-start
+additional.zsh/.zi-debug-unload
+additional.zsh/:zi-tmp-subst-source
+autoload.zsh/.zi-build-module
+autoload.zsh/.zi-cd
+autoload.zsh/.zi-self-update
+autoload.zsh/.zi-show-zstatus
+autoload.zsh/.zi-uninstall-completions
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+autoload.zsh/.zi-wait-for-update-jobs
+install.zsh/.zi-compile-plugin
+install.zsh/.zi-compinit
+install.zsh/.zi-download-file-stdout
+install.zsh/.zi-download-snippet
+install.zsh/.zi-extract
+install.zsh/.zi-get-cygwin-package
+install.zsh/.zi-get-latest-gh-r-url-part
+install.zsh/.zi-get-package
+install.zsh/.zi-install-completions
+install.zsh/.zi-setup-plugin-dir
+install.zsh/.zi-update-snippet
+install.zsh/ziextract
+install.zsh/∞zi-ps-on-update-hook
+install.zsh/∞zi-reset-hook
+side.zsh/.zi-countdown
+side.zsh/.zi-exists-physically-message
+
+
+
+
+

+zi-prehelp-usage-message

+
+
+
+
+
FUNCTION: +zi-prehelp-usage-message. [[[
+
+
+
+
+
+

Has 34 line(s). Calls functions:

+
+
+
+
+zi-prehelp-usage-message
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
zi
+autoload.zsh/.zi-delete
+
+
+
+
+

-zi_scheduler_add_sh

+
+
+
+
+
FUNCTION: -zi_scheduler_add_sh. [[[
+Copies task into ZI_RUN array, called when a task timeouts.
+A small function ran from pattern in /-substitution as a math
+function.
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-add-fpath
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-add-fpath. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-add-fpath
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-add-report
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-add-report. [[[
+Adds a report line for given plugin.
+
+
+
+
+
$1 - uspl2, i.e. user/plugin
+$2, ... - the text
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+.zi-load-snippet
+:zi-tmp-subst-alias
+:zi-tmp-subst-autoload
+:zi-tmp-subst-bindkey
+:zi-tmp-subst-compdef
+:zi-tmp-subst-zle
+:zi-tmp-subst-zstyle
+
+
+
+
zi-any-to-pid
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-pid. [[[
+
+
+
+
+
+

Has 21 line(s). Calls functions:

+
+
+
+
.zi-any-to-pid
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
side.zsh/.zi-any-colorify-as-uspl2
+side.zsh/.zi-exists-physically-message
+side.zsh/.zi-first
+
+
+
+
zi-any-to-user-plugin
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-any-to-user-plugin. [[[
+Allows elastic plugin-spec across the code.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin (only when $1 - i.e. user - given)
+
+
+
+
+
Returns user and plugin in $reply.
+
+
+
+
+
+

Has 25 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-add-fpath
+.zi-get-object-path
+.zi-load
+.zi-run
+:zi-tmp-subst-autoload
+autoload.zsh/.zi-any-to-uspl2
+autoload.zsh/.zi-changes
+autoload.zsh/.zi-compile-uncompile-all
+autoload.zsh/.zi-compiled
+autoload.zsh/.zi-create
+autoload.zsh/.zi-delete
+autoload.zsh/.zi-find-completions-of-plugin
+autoload.zsh/.zi-glance
+autoload.zsh/.zi-show-report
+autoload.zsh/.zi-stress
+autoload.zsh/.zi-uncompile-plugin
+autoload.zsh/.zi-unload
+autoload.zsh/.zi-unregister-plugin
+autoload.zsh/.zi-update-all-parallel
+autoload.zsh/.zi-update-or-status-all
+autoload.zsh/.zi-update-or-status
+install.zsh/.zi-install-completions
+side.zsh/.zi-any-colorify-as-uspl2
+side.zsh/.zi-compute-ice
+side.zsh/.zi-exists-physically-message
+side.zsh/.zi-exists-physically
+side.zsh/.zi-first
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-compdef-clear
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compdef-clear. [[[
+Implements user-exposed functionality to clear gathered compdefs.
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
.zi-compdef-clear
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
zi
+zicdclear
+zpcdclear
+
+
+
+
zi-compdef-replay
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-compdef-replay. [[[
+Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
+
+
+
+
+
+

Has 16 line(s). Calls functions:

+
+
+
+
.zi-compdef-replay
+`-- +zi-message
+
+
+
+

Uses feature(s): compdef

+
+
+

Called by:

+
+
+
+
zi
+zicdreplay
+zpcdreplay
+
+
+
+
zi-diff
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff. [[[
+Performs diff actions of all types
+
+
+
+
+
+

Has 4 line(s). Calls functions:

+
+
+
+
.zi-diff
+
+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+additional.zsh/.zi-debug-start
+additional.zsh/.zi-debug-stop
+
+
+
+
zi-diff-env
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-env. [[[
+Implements detection of change in PATH and FPATH.
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 15 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+.zi-load-plugin
+
+
+
+
zi-diff-functions
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-functions. [[[
+Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-diff-options
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-options. [[[
+Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-diff-parameter
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-diff-parameter. [[[
+Implements detection of change in any parameter's existence and type.
+Performs data gathering, computation is done in *-compute().
+
+
+
+
+
$1 - user/plugin (i.e. uspl2 format)
+$2 - command, can be "begin" or "end"
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-diff
+
+
+
+
zi-find-other-matches
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-find-other-matches. [[[
+Plugin's main source file is in general `name.plugin.zsh'. However,
+there can be different conventions, if that file is not found, then
+this functions examines other conventions in the most sane order.
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+.zi-load-snippet
+side.zsh/.zi-first
+
+
+
+
zi-formatter-bar
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-bar. [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-formatter-bar
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-bar-util
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-bar-util. [[[
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-formatter-bar
+.zi-formatter-th-bar
+
+
+
+
zi-formatter-pid
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-pid. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-formatter-pid
+`-- side.zsh/.zi-any-colorify-as-uspl2
+
+
+
+

Uses feature(s): source

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-th-bar
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-th-bar. [[[
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
.zi-formatter-th-bar
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-formatter-url
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-formatter-url. [[[
+
+
+
+
+
+

Has 19 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-get-mtime-into
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-mtime-into. [[[
+
+
+
+
+
+

Has 7 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+autoload.zsh/.zi-self-update
+autoload.zsh/.zi-update-or-status-all
+
+
+
+
zi-get-object-path
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-get-object-path. [[[
+
+
+
+
+
+

Has 23 line(s). Calls functions:

+
+
+
+
.zi-get-object-path
+
+
+
+

Called by:

+
+
+
+
.zi-load-ices
+.zi-load-snippet
+.zi-run
+zi
+autoload.zsh/.zi-get-path
+install.zsh/.zi-setup-plugin-dir
+install.zsh/.zi-update-snippet
+side.zsh/.zi-first
+side.zsh/.zi-two-paths
+
+
+
+
zi-ice
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-ice. [[[
+Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
+next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
+
+
+
+
+
+

Has 12 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-load
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-load. [[[
+Implements the exposed-to-user action of loading a plugin.
+
+
+
+
+
$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
+$2 - plugin name, if the third format is used
+
+
+
+
+
+

Has 76 line(s). Calls functions:

+
+
+
+
.zi-load
+|-- +zi-deploy-message
+|-- install.zsh/.zi-get-package
+`-- install.zsh/.zi-setup-plugin-dir
+
+
+
+

Uses feature(s): eval, setopt, source, zle

+
+
+

Called by:

+
+
+
+
.zi-load-object
+.zi-run-task
+additional.zsh/.zi-service
+
+
+
+
zi-load-ices
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-ices. [[[
+
+
+
+
+
+

Has 22 line(s). Calls functions:

+
+
+
+
.zi-load-ices
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-load-object
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-object. [[[
+
+
+
+
+
+

Has 10 line(s). Calls functions:

+
+
+
+
.zi-load-object
+
+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-load-plugin
+

~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-plugin. [[[
+Lower-level function for loading a plugin.
+
+
+
+
+
$1 - user
+$2 - plugin
+$3 - mode (light or load)
+
+
+
+
+
+

Has 107 line(s). Calls functions:

+
+
+
+
.zi-load-plugin
+`-- :zi-tmp-subst-autoload
+    |-- +zi-message
+    `-- is-at-least
+
+
+
+

Uses feature(s): eval, setopt, source, unfunction, zle

+
+
+

Called by:

+
+
+
+
.zi-load
+
+
+
+
zi-load-snippet
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-load-snippet. [[[
+Implements the exposed-to-user action of loading a snippet.
+
+
+
+
+
$1 - url (can be local, absolute path).
+
+
+
+
+
+

Has 173 line(s). Calls functions:

+
+
+
+
.zi-load-snippet
+|-- +zi-deploy-message
+|-- +zi-message
+`-- install.zsh/.zi-download-snippet
+
+
+
+

Uses feature(s): autoload, eval, setopt, source, unfunction, zparseopts, zstyle

+
+
+

Called by:

+
+
+
+
.zi-load-object
+.zi-load
+.zi-run-task
+pmodload
+additional.zsh/.zi-service
+
+
+
+
zi-main-message-formatter
+

~~~~~~~~~~

+
+
+
+
+
+
FUNCTION: +zi-message-formatter [[[
+
+
+
+
+
+

Has 18 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
zi-pack-ice
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-pack-ice. [[[
+Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
+second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
+or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+@zsh-plugin-run-on-unload
+@zsh-plugin-run-on-update
+install.zsh/.zi-update-snippet
+side.zsh/.zi-compute-ice
+
+
+
+
zi-parse-opts
+

~~~~~~

+
+
+
+
+
+
]]]
+FUNCTION: +zi-parse-opts. [[[
+
+
+
+
+
+

Has 2 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi
+autoload.zsh/.zi-delete
+
+
+
+
zi-prepare-home
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-prepare-home. [[[
+Creates all directories needed by ZI, first checks if they already exist.
+
+
+
+
+
+

Has 38 line(s). Calls functions:

+
+
+
+
.zi-prepare-home
+|-- autoload.zsh/.zi-clear-completions
+`-- install.zsh/.zi-compinit
+
+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
Script-Body
+
+
+
+

Environment variables used: ZPFX

+
+
+
zi-register-plugin
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-register-plugin. [[[
+Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
+zsh_loaded_plugins array (managed according to the plugin standard:
+https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
+
+
+
+
+
+

Has 20 line(s). Calls functions:

+
+
+
+
.zi-register-plugin
+`-- +zi-message
+
+
+
+

Called by:

+
+
+
+
.zi-load
+
+
+
+
zi-run
+

~~~

+
+
+
+
+
+
FUNCTION: .zi-run. [[[
+Run code inside plugin's folder
+It uses the `correct' parameter from upper's scope zi().
+
+
+
+
+
+

Has 24 line(s). Calls functions:

+
+
+
+
.zi-run
+`-- +zi-message
+
+
+
+

Uses feature(s): eval, setopt

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-run-task
+

~~~~

+
+
+
+
+
+
FUNCTION: .zi-run-task. [[[
+A backend, worker function of .zi-scheduler. It obtains the tasks
+index and a few of its properties (like the type: plugin, snippet,
+service plugin, service snippet) and executes it first checking for
+additional conditions (like non-numeric wait'' ice).
+
+
+
+
+
$1 - the pass number, either 1st or 2nd pass
+$2 - the time assigned to the task
+$3 - type: plugin, snippet, service plugin, service snippet
+$4 - task's index in the ZI[WAIT_ICE_...] fields
+$5 - mode: load or light
+$6 - the plugin-spec or snippet URL or alias name (from id-as'')
+
+
+
+
+
+

Has 45 line(s). Calls functions:

+
+
+
+
.zi-run-task
+`-- autoload.zsh/.zi-unload
+
+
+
+

Uses feature(s): eval, source, zle, zpty

+
+
+

Called by:

+
+
+
+
@zi-scheduler
+
+
+
+
zi-set-m-func
+

~~~~~~

+
+
+
+
+
+
FUNCTION:.zi-set-m-func() [[[
+Sets and withdraws the temporary, atclone/atpull time function `m`.
+
+
+
+
+
+

Has 17 line(s). Calls functions:

+
+
+
+
.zi-set-m-func
+`-- +zi-message
+
+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+autoload.zsh/.zi-update-or-status
+
+
+
+
zi-setup-params
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-setup-params. [[[
+
+
+
+
+
+

Has 3 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
.zi-load-snippet
+.zi-load
+
+
+
+
zi-submit-turbo
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-submit-turbo. [[[
+If `zi load`, `zi light` or `zi snippet`  will be
+preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
+ice-mods then the plugin or snipped is to be loaded in turbo-mode,
+and this function adds it to internal data structures, so that
+@zi-scheduler can run (load, unload) this as a task.
+
+
+
+
+
+

Has 16 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
zi
+
+
+
+
zi-tmp-subst-off
+

~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-tmp-subst-off. [[[
+Turn off temporary substituting of functions completely for a given mode ("load", "light",
+"light-b" (i.e. the `trackbinds' mode) or "compdef").
+
+
+
+
+
+

Has 17 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt, unfunction

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+additional.zsh/.zi-debug-stop
+
+
+
+
zi-tmp-subst-on
+

~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-tmp-subst-on. [[[
+Turn on temporary substituting of functions of builtins and functions according to passed
+mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
+to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
+
+
+
+
+
+

Has 29 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): source

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+additional.zsh/.zi-debug-start
+
+
+
+
zi-util-shands-path
+

~~~~~~~~

+
+
+
+
+
+
FUNCTION: .zi-util-shands-path. [[[
+Replaces parts of path with %HOME, etc.
+
+
+
+
+
+

Has 8 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
.zi-any-to-pid
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

:zi-reload-and-run

+
+
+
+
+
FUNCTION: :zi-reload-and-run. [[[
+Marks given function ($3) for autoloading, and executes it triggering the load.
+$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
+because using that on older Zsh versions causes problems with traps.
+
+
+
+
+
So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
+
+
+
+
+
$1 - FPATH dedicated to function
+$2 - autoload options
+$3 - function name (one that needs autoloading)
+
+
+
+
+
Author: Bart Schaefer
+
+
+
+
+
+

Has 9 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, unfunction

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-alias

+
+
+
+
+
FUNCTION: :zi-tmp-subst-alias. [[[
+Function defined to hijack plugin's calls to the `alias' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 30 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-alias
+
+
+
+

Uses feature(s): alias, setopt, zparseopts

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-autoload

+
+
+
+
+
FUNCTION: :zi-tmp-subst-autoload. [[[
+Function defined to hijack plugin's calls to the `autoload' builtin.
+
+
+
+
+
The hijacking is not only to gather report data, but also to.
+run custom `autoload' function, that doesn't need FPATH.
+
+
+
+
+
+

Has 106 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-autoload
+|-- +zi-message
+`-- is-at-least
+
+
+
+

Uses feature(s): autoload, eval, is-at-least, setopt, zparseopts

+
+
+

Called by:

+
+
+
+
.zi-load-plugin
+@autoload
+
+
+
+
+

:zi-tmp-subst-bindkey

+
+
+
+
+
FUNCTION: :zi-tmp-subst-bindkey. [[[
+Function defined to hijack plugin's calls to the `bindkey' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 107 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-bindkey
+`-- is-at-least
+
+
+
+

Uses feature(s): bindkey, is-at-least, setopt, zparseopts

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-compdef

+
+
+
+
+
FUNCTION: :zi-tmp-subst-compdef. [[[
+Function defined to hijack plugin's calls to the `compdef' function.
+The hijacking is not only for reporting, but also to save compdef
+calls so that `compinit' can be called after loading plugins.
+
+
+
+
+
+

Has 5 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-compdef
+
+
+
+

Uses feature(s): setopt

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-zle

+
+
+
+
+
FUNCTION: :zi-tmp-subst-zle. [[[.
+Function defined to hijack plugin's calls to the `zle' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 33 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-zle
+
+
+
+

Uses feature(s): setopt, zle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

:zi-tmp-subst-zstyle

+
+
+
+
+
FUNCTION: :zi-tmp-subst-zstyle. [[[
+Function defined to hijack plugin's calls to the `zstyle' builtin.
+
+
+
+
+
The hijacking is to gather report data (which is used in unload).
+
+
+
+
+
+

Has 19 line(s). Calls functions:

+
+
+
+
:zi-tmp-subst-zstyle
+
+
+
+

Uses feature(s): setopt, zparseopts, zstyle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@autoload

+
+
+
+
+
]]]
+FUNCTION: @autoload. [[[
+
+
+
+
+
+

Has 3 line(s). Calls functions:

+
+
+
+
@autoload
+`-- :zi-tmp-subst-autoload
+    |-- +zi-message
+    `-- is-at-least
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zi-register-annex

+
+
+
+
+
FUNCTION: @zi-register-annex. [[[
+Registers the z-annex inside ZI – i.e. an ZI extension
+
+
+
+
+
+

Has 8 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zi-register-hook

+
+
+
+
+
FUNCTION: @zi-register-hook. [[[
+Registers the z-annex inside ZI – i.e. an ZI extension
+
+
+
+
+
+

Has 4 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
Script-Body
+
+
+
+
+

@zi-scheduler

+
+
+
+
+
FUNCTION: @zi-scheduler. [[[
+Searches for timeout tasks, executes them. There's an array of tasks
+waiting for execution, this scheduler manages them, detects which ones
+should be run at current moment, decides to remove (or not) them from
+the array after execution.
+
+
+
+
+
$1 - if "following", then it is non-first (second and more)
+invocation of the scheduler; this results in chain of `sched'
+invocations that results in repetitive @zi-scheduler activity.
+
+
+
+
+
if "burst", then all tasks are marked timeout and executed one
+by one; this is handy if e.g. a docker image starts up and
+needs to install all turbo-mode plugins without any hesitation
+(delay), i.e. "burst" allows to run package installations from
+script, not from prompt.
+
+
+
+
+
+

Has 74 line(s). Is a precmd hook. Calls functions:

+
+
+
+
@zi-scheduler
+`-- add-zsh-hook
+
+
+
+

Uses feature(s): add-zsh-hook, sched, setopt, zle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zi-substitute

+
+
+
+
+
FUNCTION: @zi-substitute. [[[
+
+
+
+
+
+

Has 36 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): setopt

+
+
+

Called by:

+
+
+
+
autoload.zsh/.zi-at-eval
+install.zsh/.zi-at-eval
+install.zsh/.zi-get-package
+install.zsh/∞zi-atclone-hook
+install.zsh/∞zi-cp-hook
+install.zsh/∞zi-extract-hook
+install.zsh/∞zi-make-e-hook
+install.zsh/∞zi-make-ee-hook
+install.zsh/∞zi-make-hook
+install.zsh/∞zi-mv-hook
+
+
+
+

Environment variables used: ZPFX

+
+
+
+

@zsh-plugin-run-on-unload

+
+
+
+
+
FUNCTION: @zsh-plugin-run-on-update. [[[
+The Plugin Standard required mechanism, see:
+https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
@zsh-plugin-run-on-unload
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

@zsh-plugin-run-on-update

+
+
+
+
+
FUNCTION: @zsh-plugin-run-on-update. [[[
+The Plugin Standard required mechanism
+
+
+
+
+
+

Has 2 line(s). Calls functions:

+
+
+
+
@zsh-plugin-run-on-update
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

pmodload

+
+
+
+
+
FUNCTION: pmodload. [[[
+Compatibility with Prezto. Calls can be recursive.
+
+
+
+
+
+

Has 15 line(s). Calls functions:

+
+
+
+
pmodload
+
+
+
+

Uses feature(s): zstyle

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zi

+
+
+
+
+
FUNCTION: zi. [[[
+Main function directly exposed to user, obtains subcommand and its arguments, has completion.
+
+
+
+
+
+

Has 547 line(s). Calls functions:

+
+
+
+
zi
+|-- +zi-message
+|-- +zi-prehelp-usage-message
+|   `-- +zi-message
+|-- additional.zsh/.zi-clear-debug-report
+|-- additional.zsh/.zi-debug-start
+|-- additional.zsh/.zi-debug-stop
+|-- additional.zsh/.zi-debug-unload
+|-- autoload.zsh/.zi-analytics-menu
+|-- autoload.zsh/.zi-cdisable
+|-- autoload.zsh/.zi-cenable
+|-- autoload.zsh/.zi-clear-completions
+|-- autoload.zsh/.zi-compile-uncompile-all
+|-- autoload.zsh/.zi-compiled
+|-- autoload.zsh/.zi-control-menu
+|-- autoload.zsh/.zi-help
+|-- autoload.zsh/.zi-list-bindkeys
+|-- autoload.zsh/.zi-list-compdef-replay
+|-- autoload.zsh/.zi-ls
+|-- autoload.zsh/.zi-module
+|-- autoload.zsh/.zi-recently
+|-- autoload.zsh/.zi-search-completions
+|-- autoload.zsh/.zi-self-update
+|-- autoload.zsh/.zi-show-all-reports
+|-- autoload.zsh/.zi-show-completions
+|-- autoload.zsh/.zi-show-debug-report
+|-- autoload.zsh/.zi-show-registered-plugins
+|-- autoload.zsh/.zi-show-report
+|-- autoload.zsh/.zi-show-times
+|-- autoload.zsh/.zi-show-zstatus
+|-- autoload.zsh/.zi-uncompile-plugin
+|-- autoload.zsh/.zi-uninstall-completions
+|-- autoload.zsh/.zi-unload
+|-- autoload.zsh/.zi-update-or-status
+|-- autoload.zsh/.zi-update-or-status-all
+|-- compinit
+|-- install.zsh/.zi-compile-plugin
+|-- install.zsh/.zi-compinit
+|-- install.zsh/.zi-forget-completion
+`-- install.zsh/.zi-install-completions
+
+
+
+

Uses feature(s): autoload, compinit, eval, setopt, source

+
+
+

Called by:

+
+
+
+
zi-turbo
+
+
+
+
+

zi-turbo

+
+
+
+
+
FUNCTION: zi-turbo. [[[
+With zi-turbo first argument is a wait time and suffix, i.e. "0a".
+Anything that doesn't match will be passed as if it were an ice mod.
+Default ices depth'3' and lucid, allowed values [0-9][a-d].
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zi-turbo
+`-- zi
+    |-- +zi-message
+    |-- +zi-prehelp-usage-message
+    |   `-- +zi-message
+    |-- additional.zsh/.zi-clear-debug-report
+    |-- additional.zsh/.zi-debug-start
+    |-- additional.zsh/.zi-debug-stop
+    |-- additional.zsh/.zi-debug-unload
+    |-- autoload.zsh/.zi-analytics-menu
+    |-- autoload.zsh/.zi-cdisable
+    |-- autoload.zsh/.zi-cenable
+    |-- autoload.zsh/.zi-clear-completions
+    |-- autoload.zsh/.zi-compile-uncompile-all
+    |-- autoload.zsh/.zi-compiled
+    |-- autoload.zsh/.zi-control-menu
+    |-- autoload.zsh/.zi-help
+    |-- autoload.zsh/.zi-list-bindkeys
+    |-- autoload.zsh/.zi-list-compdef-replay
+    |-- autoload.zsh/.zi-ls
+    |-- autoload.zsh/.zi-module
+    |-- autoload.zsh/.zi-recently
+    |-- autoload.zsh/.zi-search-completions
+    |-- autoload.zsh/.zi-self-update
+    |-- autoload.zsh/.zi-show-all-reports
+    |-- autoload.zsh/.zi-show-completions
+    |-- autoload.zsh/.zi-show-debug-report
+    |-- autoload.zsh/.zi-show-registered-plugins
+    |-- autoload.zsh/.zi-show-report
+    |-- autoload.zsh/.zi-show-times
+    |-- autoload.zsh/.zi-show-zstatus
+    |-- autoload.zsh/.zi-uncompile-plugin
+    |-- autoload.zsh/.zi-uninstall-completions
+    |-- autoload.zsh/.zi-unload
+    |-- autoload.zsh/.zi-update-or-status
+    |-- autoload.zsh/.zi-update-or-status-all
+    |-- compinit
+    |-- install.zsh/.zi-compile-plugin
+    |-- install.zsh/.zi-compinit
+    |-- install.zsh/.zi-forget-completion
+    `-- install.zsh/.zi-install-completions
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicdclear

+
+
+
+
+
]]]
+FUNCTION: zicdclear. [[[
+A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicdclear
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicdreplay

+
+
+
+
+
FUNCTION: zicdreplay. [[[
+A function that can be invoked from within `atinit', `atload', etc. ice-mod.
+It works like `zi cdreplay', which cannot be invoked from such hook ices.
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicdreplay
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicompdef

+
+
+
+
+
]]]
+FUNCTION: zicompdef. [[[
+Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
+
+
+
+
+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zicompinit

+
+
+
+
+
]]]
+FUNCTION: zicompinit. [[[
+A function that can be invoked from within `atinit', `atload', etc. ice-mod.
+It runs `autoload compinit; compinit' and respects
+ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zicompinit
+`-- compinit
+
+
+
+

Uses feature(s): autoload, compinit

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcdclear

+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcdclear
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcdreplay

+
+
+
+
+
]]]
+Compatibility functions. [[[
+zinit() { zi "$@"; }
+
+
+
+
+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcdreplay
+
+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcompdef

+
+

Has 1 line(s). Doesn’t call other functions.

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

zpcompinit

+
+

Has 1 line(s). Calls functions:

+
+
+
+
zpcompinit
+`-- compinit
+
+
+
+

Uses feature(s): autoload, compinit

+
+
+

Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

+
+
+
+

add-zsh-hook

+
+
+
+
+
Add to HOOK the given FUNCTION.
+HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
+zshexit, zsh_directory_name (the _functions subscript is not required).
+
+
+
+
+
With -d, remove the function from the hook instead; delete the hook
+variable if it is empty.
+
+
+
+
+
-D behaves like -d, but pattern characters are active in the
+function name, so any matching function will be deleted from the hook.
+
+
+
+
+
+

Has 93 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, getopts

+
+
+

Called by:

+
+
+
+
@zi-scheduler
+Script-Body
+
+
+
+
+

compinit

+
+
+
+
+
Initialisation for new style completion. This mainly contains some helper
+functions and setup. Everything else is split into different files that
+will automatically be made autoloaded (see the end of this file).  The
+names of the files that will be considered for autoloading are those that
+begin with an underscores (like `_condition).
+
+
+
+
+
The first line of each of these files is read and must indicate what
+should be done with its contents:
+
+
+
+
+
`#compdef <names ...>'
+
+
+
+
+
+

Has 549 line(s). Doesn’t call other functions.

+
+
+

Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

+
+
+

Called by:

+
+
+
+
zi
+zicompinit
+zpcompinit
+
+
+
+
+

is-at-least

+
+
+
+
+
Test whether $ZSH_VERSION (or some value of your choice, if a second argument
+is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
+it'll accept any dot/dash-separated string of numbers as its second argument
+and compare it to the dot/dash-separated first argument. Leading non-number
+parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
+when the comparison is done; only the numbers matter. Any left-out segments
+in the first argument that are present in the version string compared are
+considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
+
+
+
+
+
+

Has 56 line(s). Doesn’t call other functions.

+
+
+

Called by:

+
+
+
+
:zi-tmp-subst-autoload
+:zi-tmp-subst-bindkey
+Script-Body
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/code/zsdoc/pdf/additional.zsh.pdf b/code/zsdoc/pdf/additional.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8f9b83e50fe3a9b9d71bcc67297fcc6734980eb3 GIT binary patch literal 73454 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 -
  • 9. Global Parameter holding the plugin manager’s capabilities +
  • 9. Global Parameter holding the plugin-manager’s capabilities @@ -756,13 +756,13 @@

    What Is A Zsh Plugin?

    This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

  • -

    Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

    +

    Has its first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

  • The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    +loaded via Zsh’s autoload mechanism (a single function per-file).

    From a more broad perspective, a plugin consists of:

    @@ -770,15 +770,15 @@

    What Is A Zsh Plugin?

    1. -

      A directory containing various files (the main script, autoload functions, +

      A directory containing various files (main script, autoload functions, completions, Makefiles, backend programs, documentation).

    2. -

      A sourceable script that obtains the path to its directory via $0 (see the +

      A sourcable script that obtains the path to its directory via $0 (see the next section for a related enhancement proposal).

    3. -

      A Github (or another site) repository identified by two components +

      A Github (or other site) repository identified by two components username/pluginname.

    4. @@ -789,8 +789,8 @@

      What Is A Zsh Plugin?

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    +plugin" and the actions of plugin managers – the proposed standardization. They +cover the information of how to write a Zsh plugin.

    @@ -802,7 +802,7 @@

    1. Standardized $0 Handling

    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
     0="${${(M)0:#/*}:-$PWD/$0}"
     
     # Then ${0:h} to get plugin’s directory
    @@ -814,7 +814,7 @@

    1. Standardized $0 Handling

    1. -

      Be backward-compatible with normal $0 setting and usage.

      +

      Be backwards-compatible with normal $0 setting and usage.

    2. Use ZERO if it’s not empty,

      @@ -825,7 +825,7 @@

      1. Standardized $0 Handling

      loading a plugin,

    3. -

      this allows e.g. eval "$(<plugin)", which can be faster +

      this allows for e.g. eval "$(<plugin)", which can be faster than source (comparison note that it’s not for a compiled script).

      @@ -844,7 +844,7 @@

      1. Standardized $0 Handling

    4. unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten +contain plugin-script path, but path to Zsh binary, if not overwritten by a 0=…​ assignment),

    5. @@ -885,12 +885,12 @@

      1. Standardized $0 Handling

      might however provide a use case.

    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script +

    The last, 5th point also allows to use the $0 handling in scripts (i.e. +runnables with the hashbang #!…) to get the directory in which the script file resides.

    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +

    The assignment uses quoting to make it resilient to combination of GLOB_SUBST and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be always working. When you’ll set e.g.: the zsh emulation in a function, you in general don’t have to quote assignments.

    @@ -914,19 +914,19 @@

    Adoption Status

    2. Functions Directory

    -

    Despite that, the current-standard plugins have their main directory added to +

    Despite that the current-standard plugins have their main directory added to $fpath, a more clean approach is being proposed: that the plugins use a subdirectory called functions to store their completions and autoload functions. This will allow a much cleaner design of plugins.

    -

    The plugin manager should add such a directory to $fpath. The lack of support of +

    The plugin manager should add such directory to $fpath. The lack of support of the current plugin managers can be easily resolved via the indicator:

    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
         fpath+=( "${0:h}/functions" )
     }
    @@ -936,17 +936,17 @@

    2. Functions Directory

    -
    if [[ $PMSPEC != *f* ]] {
    +
    if [[ $PMSPEC != *f* ]] {
         fpath+=( "${0:h}/functions" )
     }
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    +

    Above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibiliy with any new plugin managers preserved.

    -

    The existence of the functions subdirectory cancels the normal adding of the main +

    Existence of the functions subdirectory cancels the normal adding of the main plugin directory to $fpath.

    @@ -966,7 +966,7 @@

    3. Binaries Directory

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin +internal use or for the end user. It is proposed that for the latter, the plugin shall use a bin/ subdirectory inside its main dir (it is recommended, that for internal use, the runnable be called via the $0 value obtained as described above). The runnable should be put into the directory with a +x access right @@ -1001,7 +1001,7 @@

    3. Binaries Directory

    -
    if [[ $PMSPEC != *b* ]] {
    +
    if [[ $PMSPEC != *b* ]] {
         path+=( "${0:h}/bin" )
     }
    @@ -1027,7 +1027,7 @@

    4. Unload Function

    called by a plugin manager to undo the effects of loading that plugin.

    -

    A plugin manager can implement its tracking of changes made by a plugin so +

    A plugin manager can implement its own tracking of changes made by a plugin so this is in general optional. However, to properly unload e.g. a prompt, dedicated tracking (easy to do for the plugin creator) can provide better, predictable results. Any special, uncommon effects of loading a plugin are @@ -1036,14 +1036,14 @@

    4. Unload Function

    However, an interesting compromise approach is available – to withdraw only the special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that +and leave the rest to the plugin manager. The value of such approach is that maintaining of such function (if it is to withdraw all plugin side-effects) can be a daunting task requiring constant monitoring of it during the plugin -development process.

    +develoment process.

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +unfunction kalc_plugin_unload etc., for copatibility with the *_argzero options), to also delete the function itself.

    @@ -1089,13 +1089,13 @@

    5. @zsh-plugin-run-on-unload Call

    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"

    The function registers pieces of code to be run by the plugin manager on unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    +builtin in the same order as they are passed to the call.

    The code should be executed in the plugin’s directory, in the current shell.

    @@ -1125,17 +1125,17 @@

    6. @zsh-plugin-run-on-update Call

    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    +update of the plugin. The execution of the code should be done by the eval +builtin in the same order as they are passed to the call.

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    +after downloading any new commits to the repository.

    Adoption Status

    @@ -1170,10 +1170,10 @@

    7. Plugin Manager Activity Indicator

    The first item allows a plugin to e.g. issue a notice about missing dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a +dependencies from resources it provides. For example, pure prompt provides +zsh-async dependency library within its source tree, which is normally a separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: +of zsh-async, having also reliable $0 defined by previous section (note: pure doesn’t normally do this).

    @@ -1182,13 +1182,13 @@

    7. Plugin Manager Activity Indicator

    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
         fpath+=( "${0:h}" )
     }
    -

    This will allow the user to reliably source the plugin without using a plugin +

    This will allow user to reliably source the plugin without using a plugin manager. The code uses the wrapping braces around variables (i.e.: e.g.: ${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    @@ -1214,17 +1214,17 @@

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    Plugin managers may export the parameter $ZPFX which should contain a path to a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +$ZPFX/lib, $ZPFX/share, etc. Suggested name of the directory is polaris (e.g.: ZI uses this name and places this directory at ~/.zi/polaris by default).

    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +

    User can then configure hooks (feature of e.g. zplug and ZI) to invoke e.g. make PREFIX=$ZPFX install at clone & update of the plugin to install software like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a +developing role of Zsh plugin managers as package managers, where .zshrc has a similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    +state, and have the same state on different accounts / machines.

    No-narration facts-list related to $ZPFX:

    @@ -1264,13 +1264,13 @@

    Adoption Status

    -

    9. Global Parameter holding the plugin manager’s capabilities

    +

    9. Global Parameter holding the plugin-manager’s capabilities

    The above paragraphs of the standard spec each constitute a capability, a feature of the plugin manager. It would make sense that the capabilities are somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin +plugin-manager specification) is proposed. It can hold the following latin letters each informing the plugin, that the plugin manager has support for a given feature:

    @@ -1292,10 +1292,10 @@

    9. Global Parameter holding the plugin manager’s capabilit

    U - … the @zsh-plugin-run-on-unload call,

  • -

    p – … the @zsh-plugin-run-on-update call,

    +

    p – … the @zsh-plugin-run-on-update call,

  • -

    i – … the zsh_loaded_plugins activity indicator,

    +

    i – … the zsh_loaded_plugins activity indicator,

  • P – … the ZPFX global parameter,

    @@ -1311,7 +1311,7 @@

    9. Global Parameter holding the plugin manager’s capabilit

  • -
    if [[ $PMSPEC != *f* ]] {
    +
    if [[ $PMSPEC != *f* ]] {
         fpath+=( "${0:h}/functions" )
     }
    @@ -1333,7 +1333,7 @@

    Zsh Plugin-Programming Best Practices

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices +source for plugin creators. Therefore, it covers also a best practices information in this section.

    @@ -1344,7 +1344,7 @@

    Use Of add-zsh-hook To Install Hooks

    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    @@ -1358,9 +1358,9 @@

    Use Of add-zsh-hook To Install Hooks

    Use Of add-zle-hook-widget To Install Zle Hooks

    -

    The zle editor is the part of the Zsh that is responsible for receiving the text +

    Zle editor is the part of the Zsh that is responsible for receiving the text from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +than Zsh functions that are allowed to be ran in Zle context, i.e. from the Zle editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s automatically set by the Zle editor).

    @@ -1369,12 +1369,12 @@

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the +difference is that it takes a widgetname, not a function name, and that the hook is being one of: isearch-exit, isearch-update, line-pre-redraw, line-init, line-finish, history-line-set, or keymap-select. Their meaning is explained in the @@ -1382,19 +1382,19 @@

    Use Of add-zle-hook-widget To Install Zle Hooks

    documentation.

    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the +

    The use of this function is recommended because it allows to +install multiple hooks per each hook entry. Before introducing the add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has +widget with the name of one of the special widgets. Now, after the function has been introduced in Zsh 5.3 it should be used instead.

    Standard Parameter Naming

    -

    There’s a convention already present in the Zsh world – to name array variables +

    There’s a convention already present in the Zsh world – to name array variables lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +the Zshell itself (e.g.: REPLY scalar and reply array, etc.). The requirement for the scalars to be uppercase should be, in my opinion, kept only for the global parameters. I.e.: it’s fine to name local parameters inside a function lowercase even when they are scalars, not only arrays.

    @@ -1403,11 +1403,11 @@

    Standard Parameter Naming

    An extension to the convention is being proposed: to name associative arrays (i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of +example of such hash. In case of the name consisting of multiple words each of them should be capitalized, e.g.: typeset -A MyHash.

    -

    This convention will increase code readability and bring order to it.

    +

    This convention will increase code readibility and bring order to it.

    @@ -1421,7 +1421,7 @@

    Standard Plugins Hash

    -
    …
    +
    typeset -gA Plugins
     # An example value needed by the plugin
     Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    @@ -1429,7 +1429,7 @@

    Standard Plugins Hash

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also +available for easy examination and overview (via e.g.: vared Plugins) and also not polluting the namespace.

    @@ -1441,14 +1441,14 @@

    Standard Recommended Options

    -
    emulate -L zsh
    +
    emulate -L zsh
     setopt extended_glob warn_create_global typeset_silent \
             no_short_loops rc_quotes no_auto_pushd

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be +emulation mode, with use of the local_options option – so the options will be restored to their previous state when leaving the function.

    @@ -1458,17 +1458,17 @@

    Standard Recommended Options

    • extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      +built-in regex-like globing mechanism,

    • warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, +variable is defined without being explicitly defined by a typeset, local, declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      +the variables and thus prevents from writing a bad code,

    • typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to +the same variable; without it the second call causes the variable contents to be printed first; using this option allows to declare variables inside loops, near the place of their use, which sometimes helps to write a more readable code,

      @@ -1481,12 +1481,12 @@

      Standard Recommended Options

    • rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string''s example' will yield the string a string’s example,

    • no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the +builtin onto the directory stack; this is useful, because otherwise the internal directory changes done by the plugin will pollute the global directory stack.

    • @@ -1501,7 +1501,7 @@

      Standard Recommended Variables

    -
    local MATCH REPLY; integer MBEGIN MEND
    +
    local MATCH REPLY; integer MBEGIN MEND
     local -a match mbegin mend reply
    @@ -1515,14 +1515,14 @@

    Standard Recommended Variables

    The reply and REPLY parameters are being normally used to return an array or a scalar from a function, respectively – it’s the standard way of passing values from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in +main function of a plugin – they should not be used to pass data around e.g.: in between prompts, thus it’s natural to localize them in the main function.

    Standard Function Name-Space Prefixes

    -

    The recommendation is the purely subjective opinion of the author. It can evolve – +

    The recommendation is purely subjective opinion of the author. It can evolve – if you have any remarks, don’t hesitate to fill them.

    @@ -1530,7 +1530,7 @@

    Standard Function Name-Space Prefixes

    The Problems Solved By The Proposition

    -

    However, when adopted, the proposition will solve the following issues:

    +

    However when adopted, the proposition will solve the following issues:

      @@ -1546,14 +1546,14 @@

      The Problems Solved By The Prop
    1. It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing +the : prefix informs the user that it’s a hook-type function, while seeing the @ prefix informs the user that it’s an API-like function, etc.

    2. It also provides an improvement during programming, by allowing to quickly limit the number of completions offered by the editor, e.g.: for Vim’s Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). +functions is being completed (see below for the type of the functions). Note: the editor has to be configured so that it accepts such special characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all of the proposed prefixes.

      @@ -1573,17 +1573,18 @@

      The Proposed Function-Name Prefixe

    3. : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +Zsh hooks and the Zle hooks, but also for any other +custom hook-like mechanism in the plugin . Example function name: →prompt_zinc_precmd.

      • -

        the previous version of the document recommended colon (:) for the prefix, +

        previous version of the document recommended colon (:) for the prefix, however, it was problematic, because Windows doesn’t allow colons in file names, so it wasn’t possible to name an autoload function this way,

      • -

        the arrow has a rationale behind it - it denotes the execution coming back +

        the arrow has a rationale behind – it denotes the execution coming back to the function at a later time, after it has been registered as a callback or a handler,

      • @@ -1593,11 +1594,11 @@

        The Proposed Function-Name Prefixe handler functions do occur in the code rarely,

      • -

        Zsh supports any string as a function name, because absolutely +

        Zsh supports absolutely any string as a function name, because absolutely any string can be a file name – if there would be an exception in the name of the callables, then how would it be possible to run a script called "→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        +sequence of null bytes:

        ❯ $'\0'() { print hello }
        @@ -1611,15 +1612,15 @@ 

        The Proposed Function-Name Prefixe

      • +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: +output and error or to a log, etc. Example function name: +prompt_zinc_output_segment.

      • -

        /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash +

        /: for debug functions, i.e: for functions that output debug messages to +the screen or to a log or e.g.: gather some debug data. Note: the slash makes it impossible for such functions to be auto-loaded via the autoload mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters + the functions, however the limited number of available ASCII characters justifies such allocation. Example function name: /prompt_zinc_dmsg.

      • @@ -1636,7 +1637,7 @@

        The Proposed Function-Name Prefixe

        Example Code Utilizing The Prefixes

        -
        .zinc_register_hooks() {
        +
        .zinc_register_hooks() {
             add-zsh-hook precmd :zinc_precmd
             /zinc_dmsg "Installed precmd hook with result: $?"
             @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
        @@ -1657,7 +1658,7 @@ 

        Preventing Function Pollution

        -
        # Don't leak any functions
        +
        # Don't leak any functions
         typeset -g prjef
         prjef=( ${(k)functions} )
         trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
        @@ -1681,7 +1682,7 @@ 

        Preventing Function Pollution

        of array contents – the :| substitution operator – of the functions that are defined at the moment of leaving of the function (the trap-s invoke the code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

        +function – the ones stored in the variables $prjef.

      • It then unsets the resulting list of the functions – being only the newly @@ -1691,7 +1692,7 @@

        Preventing Function Pollution

      This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

      +function will be only set during the execution of the function.

    @@ -1707,7 +1708,7 @@

    Preventing Parameter Pollution

    -
    typeset -A PlgMap
    +
    typeset -A PlgMap
     typeset -A SomeMap
     typeset -a some_array
     
    @@ -1722,18 +1723,18 @@ 

    Preventing Parameter Pollution

    -
    typeset -A PlgMap
    +
    typeset -A PlgMap
     
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    +# Use +PlgMap[state]=1 +PlgMap[SomeMap__state]=1 +PlgMap[some_array__1]=state

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    +global parameters in one of projects by 21 by using an automatic conversion with +Vim substitution patterns with back references without any problems.

    Following the Standard Plugins Hash section, the plugin could @@ -1761,8 +1762,10 @@

    Appendix A: Revision History (History Of Updates To The Docume v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and +@zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ +*_plugin_unload
    v0.94, 07/20/2019: Add initial version of the best practices section
    v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    v0.93, 07/20/2019: 2/ Reformat to 80 columns
    From cc0d5ec6a6390511c7803dc5a18c10bfc8c55152 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 16 Dec 2021 10:21:19 +0000 Subject: [PATCH 042/470] ss-o published a site update --- zsh/Zsh-Native-Scripting-Handbook.html | 104 +++++++------ zsh/Zsh-Plugin-Standard.html | 203 ++++++++++++------------- 2 files changed, 151 insertions(+), 156 deletions(-) diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html index cbd9571..cbbdaf6 100644 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -710,10 +710,10 @@

    Zsh Native Scripting Handbook

    The handbook is also available as a PDF, HTML.

    -

    This document has been created after 3.5 years of creating software for Zshell +

    This document has been created after 3.5 years of creating software for Z shell and receiving help from IRC channel #zsh. Avoiding forks was the main guideline when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust and do not depend on external tools. Such code is more like +that are fast, robust, and do not depend on external tools. Such code is more like Ruby or Perl code, less like top-down shell scripts.

    @@ -727,20 +727,20 @@

    @ is about keeping array form

    How to access all array elements in a shell? The standard answer: use @ subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -whole array). Zshell is different: it is $array that refers to all -elements anyway. There is no need of @ subscript.

    +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When user quotes the array, i.e. invokes +join”. When is it activated? When the user quotes the array, i.e. invokes "$array", he induces joining of all array elements (into a single string). @ is to have elements still quoted (so empty elements are preserved), but not joined.

    -

    Two forms are available, "$array[@]" and "${(@)array}". First form has -additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to whole array instead of first element only. It should then use +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    @@ -769,8 +769,8 @@

    Reading a file

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain array instead of scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as it is explained in +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in Information section:

    @@ -809,10 +809,10 @@

    Reading from stdin

    suggested) by the Zsh documentation (and was used in the previous paragraph, in the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list, and it was clearly stated that single, +zsh-workers@zsh.org mailing list and it was clearly stated that single, outside quoting of ${(f@)…​} substitution works as if it was also separately applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t actually needed.

    +second double-quoting isn’t needed.

    @@ -850,13 +850,13 @@

    Skipping grep

    -

    To have grep -v effect, skip M-flag. To grep case insensitively, use #i glob +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob flag (…​:#(#i)*query*}).

    -

    As it can be seen, ${…​:#…​} substitution is a filtering of array, which by +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarily: returns empty string when +used with string, not an array, it behaves similarly: returns empty string when {input_string_var:#pattern} matches whole input string.

    @@ -878,8 +878,8 @@

    Multi-line matching like with grep

    -

    That are 3 forks: for svn status, for echo and for grep. This can be solved -by :# substitution and (M) flag described above in this section (just check +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check if the number of matched lines is greater than 0). However, there’s a more direct approach:

    @@ -911,7 +911,7 @@

    Multi-line matching like with grep

    -

    In general, multi-line matching falls into the following idiom (extendedglob +

    In general, multi-line matching falls into the following idiom (`extended glob version):

    @@ -921,8 +921,8 @@

    Multi-line matching like with grep

    -

    It does a single fork (calls svn status). The ${~variable} means (the ~ -in it): "the variable is holding a pattern, interpret it". All in all, instead +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead of regular expressions we were using patterns (globs) (see this section).

    @@ -937,10 +937,10 @@

    Pattern matching in AND-fashion

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *abc* but not those that don’t have *efg* which equals to: -*abc* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. Inventor of those patterns is Mikael +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael Magnusson.

    @@ -957,7 +957,7 @@

    Skipping tr

    #m flag enables the $MATCH parameter. At each // substitution, $map is queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in assignment.

    +skip [@] and parentheses in the assignment.

    @@ -971,10 +971,10 @@

    Ternary expressions with +,-,:+,:- s

    Ternary expression is known from C language but exists also in Zsh, but directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in normal context. Above is an example. :+ is +Zsh allows such expressions also in a normal context. Above is an example. :+ is "if not empty, substitute …" :- is "if empty, substitute …". You can save -great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lenghty &&/|| use.

    +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    @@ -986,8 +986,8 @@

    Ternary expressions with :# substitu

    -

    An one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes 10-line function a 20-line one.

    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    @@ -1004,8 +1004,8 @@

    Using built-in regular expressions $MATCH for whole matched text, not for any parenthesis.

    -

    Zsh patterns are basically a custom regular expressions engine. They are -slightly faster than zsh/regex module (used for =~ operator) and don’t have +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have that dependency (regex module can be not present, e.g. in default static build of Zsh). Also, they can be used in substitutions, for example in // substitution.

    @@ -1021,7 +1021,7 @@

    Skipping uniq

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to uniquify elements of any array.

    +u-flag to make unique elements of an array.

    @@ -1033,10 +1033,9 @@

    Skipping awk

    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then -comma", then single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. Result is 4th column extracted -from multiple lines of text, something awk is often used for. Other method is -use of s-flag. For single line of text:

    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    @@ -1061,7 +1060,7 @@

    Skipping awk

    index [4] in above snippet will index a string, and show its 4-th letter. Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) parameter flag forces array result even if…​), it is possible to force -array-kind of result even for single column, by adding (A) flag, i.e.:

    +array-kind of result even for a single column, by adding (A) flag, i.e.:

    @@ -1121,13 +1120,12 @@

    Serializing data

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into string separated by spaces.

    +and value quoted, and put into a string separated by spaces.

    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, -double quoting and other) is recognized. Obtained is array ( "key" "value") -which is then dequoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement array of hashes.

    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: @@ -1143,8 +1141,8 @@

    Tip: serializing with Bash

    -

    This method works also with Zsh. The drawback is use of eval, however it’s -impossible that any problem will occurr unless someone compromises variable’s +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s value, but as always, eval should be avoided if possible.

    @@ -1157,7 +1155,7 @@

    Real world examples

    Testing for Git subcommand

    -

    Following code checks if there is a git subcommand $mysub:

    +

    Following code checks, if there is a git subcommand $mysub:

    @@ -1165,7 +1163,7 @@

    Testing for Git subcommand

    -

    That are 4 forks. The code can be replaced according to this guide:

    +

    Those are 4 forks. The code can be replaced according to this guide:

    @@ -1189,7 +1187,7 @@

    Counting unquoted-only apostrophes

    line-continuation that occurs at that moment).

    -

    The required functionality is: in given string, count the number of +

    The required functionality is: in the given string, count the number of apostrophes, but only the unquoted ones. This means that only apostrophes with null or an even number of preceding backslashes should be accepted into the count:

    @@ -1208,7 +1206,7 @@

    Counting unquoted-only apostrophes

    $buf).

    -

    Below follows a variation of above snippet that doesn’t use math-code execution:

    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    @@ -1239,7 +1237,7 @@

    Parsing INI file

    intuitive.

    -

    The code should be placed in file named read-ini-file, in $fpath, and +

    The code should be placed in a file named read-ini-file, in $fpath, and autoload read-ini-file should be invoked.

    @@ -1248,11 +1246,11 @@

    Parsing INI file

    # Copyright (c) 2018 Sebastian Gniazdowski
     #
     # $1 - path to the ini file to parse
    -# $2 - name of output hash
    +# $2 - the name of output hash
     # $3 - prefix for keys in the hash
     #
    -# Writes to given hash under keys built in following way: ${3}<section>_field.
    -# Values are values from ini file. Example invocation:
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
     #
     # read-ini-file ./database1-setup.ini DB_CONF db1_
     # read-ini-file ./database2-setup.ini DB_CONF db2_
    diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html
    index 03f3cfd..df7e2a6 100644
    --- a/zsh/Zsh-Plugin-Standard.html
    +++ b/zsh/Zsh-Plugin-Standard.html
    @@ -704,7 +704,7 @@ 

    Zsh Plugin Standard

  • Adoption Status
  • -
  • 9. Global Parameter holding the plugin-manager’s capabilities +
  • 9. Global Parameter holding the plugin manager’s capabilities @@ -756,13 +756,13 @@

    What Is A Zsh Plugin?

    This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

  • -

    Has its first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

    +

    Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

  • The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per-file).

    +loaded via Zsh’s autoload mechanism (a single function per file).

    From a more broad perspective, a plugin consists of:

    @@ -770,15 +770,15 @@

    What Is A Zsh Plugin?

    1. -

      A directory containing various files (main script, autoload functions, +

      A directory containing various files (the main script, autoload functions, completions, Makefiles, backend programs, documentation).

    2. -

      A sourcable script that obtains the path to its directory via $0 (see the +

      A sourceable script that obtains the path to its directory via $0 (see the next section for a related enhancement proposal).

    3. -

      A Github (or other site) repository identified by two components +

      A Github (or another site) repository identified by two components username/pluginname.

    4. @@ -789,8 +789,8 @@

      What Is A Zsh Plugin?

    Below follow proposed enhancements and codifications of the definition of a "Zsh -plugin" and the actions of plugin managers – the proposed standardization. They -cover the information of how to write a Zsh plugin.

    +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    @@ -802,7 +802,7 @@

    1. Standardized $0 Handling

    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
     0="${${(M)0:#/*}:-$PWD/$0}"
     
     # Then ${0:h} to get plugin’s directory
    @@ -814,7 +814,7 @@

    1. Standardized $0 Handling

    1. -

      Be backwards-compatible with normal $0 setting and usage.

      +

      Be backward-compatible with normal $0 setting and usage.

    2. Use ZERO if it’s not empty,

      @@ -825,7 +825,7 @@

      1. Standardized $0 Handling

      loading a plugin,

    3. -

      this allows for e.g. eval "$(<plugin)", which can be faster +

      this allows e.g. eval "$(<plugin)", which can be faster than source (comparison note that it’s not for a compiled script).

      @@ -844,7 +844,7 @@

      1. Standardized $0 Handling

    4. unsetopt function_argzero will be detected (it causes $0 not to -contain plugin-script path, but path to Zsh binary, if not overwritten +contain a plugin-script path, but the path to Zsh binary, if not overwritten by a 0=…​ assignment),

    5. @@ -885,12 +885,12 @@

      1. Standardized $0 Handling

      might however provide a use case.

    -

    The last, 5th point also allows to use the $0 handling in scripts (i.e. -runnables with the hashbang #!…) to get the directory in which the script +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script file resides.

    -

    The assignment uses quoting to make it resilient to combination of GLOB_SUBST +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be always working. When you’ll set e.g.: the zsh emulation in a function, you in general don’t have to quote assignments.

    @@ -914,19 +914,19 @@

    Adoption Status

    2. Functions Directory

    -

    Despite that the current-standard plugins have their main directory added to +

    Despite that, the current-standard plugins have their main directory added to $fpath, a more clean approach is being proposed: that the plugins use a subdirectory called functions to store their completions and autoload functions. This will allow a much cleaner design of plugins.

    -

    The plugin manager should add such directory to $fpath. The lack of support of +

    The plugin manager should add such a directory to $fpath. The lack of support of the current plugin managers can be easily resolved via the indicator:

    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
         fpath+=( "${0:h}/functions" )
     }
    @@ -936,17 +936,17 @@

    2. Functions Directory

    -
    if [[ $PMSPEC != *f* ]] {
    +
    if [[ $PMSPEC != *f* ]] {
         fpath+=( "${0:h}/functions" )
     }
    -

    Above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibiliy with any new plugin managers preserved.

    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    -

    Existence of the functions subdirectory cancels the normal adding of the main +

    The existence of the functions subdirectory cancels the normal adding of the main plugin directory to $fpath.

    @@ -966,7 +966,7 @@

    3. Binaries Directory

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end user. It is proposed that for the latter, the plugin +internal use or for the end-user. It is proposed that for the latter, the plugin shall use a bin/ subdirectory inside its main dir (it is recommended, that for internal use, the runnable be called via the $0 value obtained as described above). The runnable should be put into the directory with a +x access right @@ -1001,7 +1001,7 @@

    3. Binaries Directory

    -
    if [[ $PMSPEC != *b* ]] {
    +
    if [[ $PMSPEC != *b* ]] {
         path+=( "${0:h}/bin" )
     }
    @@ -1027,7 +1027,7 @@

    4. Unload Function

    called by a plugin manager to undo the effects of loading that plugin.

    -

    A plugin manager can implement its own tracking of changes made by a plugin so +

    A plugin manager can implement its tracking of changes made by a plugin so this is in general optional. However, to properly unload e.g. a prompt, dedicated tracking (easy to do for the plugin creator) can provide better, predictable results. Any special, uncommon effects of loading a plugin are @@ -1036,14 +1036,14 @@

    4. Unload Function

    However, an interesting compromise approach is available – to withdraw only the special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such approach is that +and leave the rest to the plugin manager. The value of such an approach is that maintaining of such function (if it is to withdraw all plugin side-effects) can be a daunting task requiring constant monitoring of it during the plugin -develoment process.

    +development process.

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for copatibility with the *_argzero +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero options), to also delete the function itself.

    @@ -1089,13 +1089,13 @@

    5. @zsh-plugin-run-on-unload Call

    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"

    The function registers pieces of code to be run by the plugin manager on unload of the plugin. The execution of the code should be done by the eval -builtin in the same order as they are passed to the call.

    +built-in in the same order as they are passed to the call.

    The code should be executed in the plugin’s directory, in the current shell.

    @@ -1125,17 +1125,17 @@

    6. @zsh-plugin-run-on-update Call

    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"

    The function registers pieces of code to be run by the plugin manager on -update of the plugin. The execution of the code should be done by the eval -builtin in the same order as they are passed to the call.

    +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    The code should be executed in the plugin’s directory, possibly in a subshell -after downloading any new commits to the repository.

    +After downloading any new commits to the repository.

    Adoption Status

    @@ -1170,10 +1170,10 @@

    7. Plugin Manager Activity Indicator

    The first item allows a plugin to e.g. issue a notice about missing dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, pure prompt provides -zsh-async dependency library within its source tree, which is normally a +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by previous section (note: +of zsh-async, having also reliable $0 defined by the previous section (note: pure doesn’t normally do this).

    @@ -1182,13 +1182,13 @@

    7. Plugin Manager Activity Indicator

    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
         fpath+=( "${0:h}" )
     }
    -

    This will allow user to reliably source the plugin without using a plugin +

    This will allow the user to reliably source the plugin without using a plugin manager. The code uses the wrapping braces around variables (i.e.: e.g.: ${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    @@ -1214,17 +1214,17 @@

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    Plugin managers may export the parameter $ZPFX which should contain a path to a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. Suggested name of the directory is polaris +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris (e.g.: ZI uses this name and places this directory at ~/.zi/polaris by default).

    -

    User can then configure hooks (feature of e.g. zplug and ZI) to invoke e.g. +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. make PREFIX=$ZPFX install at clone & update of the plugin to install software like e.g. tj/git-extras. This is a -developing role of Zsh plugin managers as package managers, where .zshrc has a +the developing role of Zsh plugin managers as package managers, where .zshrc has a similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts / machines.

    +state, and have the same state on different accounts/machines.

    No-narration facts-list related to $ZPFX:

    @@ -1264,13 +1264,13 @@

    Adoption Status

    -

    9. Global Parameter holding the plugin-manager’s capabilities

    +

    9. Global Parameter holding the plugin manager’s capabilities

    The above paragraphs of the standard spec each constitute a capability, a feature of the plugin manager. It would make sense that the capabilities are somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following latin +plugin-manager specification) is proposed. It can hold the following Latin letters each informing the plugin, that the plugin manager has support for a given feature:

    @@ -1292,10 +1292,10 @@

    9. Global Parameter holding the plugin-manager’s capabilit

    U - … the @zsh-plugin-run-on-unload call,

  • -

    p – … the @zsh-plugin-run-on-update call,

    +

    p – … the @zsh-plugin-run-on-update call,

  • -

    i – … the zsh_loaded_plugins activity indicator,

    +

    i – … the zsh_loaded_plugins activity indicator,

  • P – … the ZPFX global parameter,

    @@ -1311,7 +1311,7 @@

    9. Global Parameter holding the plugin-manager’s capabilit

  • -
    if [[ $PMSPEC != *f* ]] {
    +
    if [[ $PMSPEC != *f* ]] {
         fpath+=( "${0:h}/functions" )
     }
    @@ -1333,7 +1333,7 @@

    Zsh Plugin-Programming Best Practices

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also a best practices +source for plugin creators. Therefore, it covers also best practices information in this section.

    @@ -1344,7 +1344,7 @@

    Use Of add-zsh-hook To Install Hooks

    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    @@ -1358,9 +1358,9 @@

    Use Of add-zsh-hook To Install Hooks

    Use Of add-zle-hook-widget To Install Zle Hooks

    -

    Zle editor is the part of the Zsh that is responsible for receiving the text +

    The zle editor is the part of the Zsh that is responsible for receiving the text from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be ran in Zle context, i.e. from the Zle +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s automatically set by the Zle editor).

    @@ -1369,12 +1369,12 @@

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname

    The call resembles the syntax of the add-zsh-hook function. The only -difference is that it takes a widgetname, not a function name, and that the +the difference is that it takes a widgetname, not a function name and that the hook is being one of: isearch-exit, isearch-update, line-pre-redraw, line-init, line-finish, history-line-set, or keymap-select. Their meaning is explained in the @@ -1382,19 +1382,19 @@

    Use Of add-zle-hook-widget To Install Zle Hooks

    documentation.

    -

    The use of this function is recommended because it allows to -install multiple hooks per each hook entry. Before introducing the +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the add-zle-hook-widget function the "normal" way to install a hook was to define -widget with the name of one of the special widgets. Now, after the function has +a widget with the name of one of the special widgets. Now, after the function has been introduced in Zsh 5.3 it should be used instead.

    Standard Parameter Naming

    -

    There’s a convention already present in the Zsh world – to name array variables +

    There’s a convention already present in the Zsh world – to name array variables lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Zshell itself (e.g.: REPLY scalar and reply array, etc.). The +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The requirement for the scalars to be uppercase should be, in my opinion, kept only for the global parameters. I.e.: it’s fine to name local parameters inside a function lowercase even when they are scalars, not only arrays.

    @@ -1403,11 +1403,11 @@

    Standard Parameter Naming

    An extension to the convention is being proposed: to name associative arrays (i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the remaining letters lowercase. See the next section for an -example of such hash. In case of the name consisting of multiple words each of +example of such hash. In the case of the name consisting of multiple words each of them should be capitalized, e.g.: typeset -A MyHash.

    -

    This convention will increase code readibility and bring order to it.

    +

    This convention will increase code readability and bring order to it.

    @@ -1421,7 +1421,7 @@

    Standard Plugins Hash

    -
    …
    +
    typeset -gA Plugins
     # An example value needed by the plugin
     Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    @@ -1429,7 +1429,7 @@

    Standard Plugins Hash

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: vared Plugins) and also +available for easy examination and overview (via e.g.: varied Plugins) and also not polluting the namespace.

    @@ -1441,14 +1441,14 @@

    Standard Recommended Options

    -
    emulate -L zsh
    +
    emulate -L zsh
     setopt extended_glob warn_create_global typeset_silent \
             no_short_loops rc_quotes no_auto_pushd

    It resets all the options to their default state according to the zsh -emulation mode, with use of the local_options option – so the options will be +emulation mode, with the use of the local_options option – so the options will be restored to their previous state when leaving the function.

    @@ -1458,17 +1458,17 @@

    Standard Recommended Options

    • extended_glob – enables one of the main Zshell features – the advanced, -built-in regex-like globing mechanism,

      +the built-in regex-like globing mechanism,

    • warn_create_global – enables warnings to be printed each time a (global) -variable is defined without being explicitly defined by a typeset, local, +the variable is defined without being explicitly defined by a typeset, local, declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevents from writing a bad code,

      +the variables and thus prevent from writing a bad code,

    • typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it the second call causes the variable contents to +the same variable; without it, the second call causes the variable contents to be printed first; using this option allows to declare variables inside loops, near the place of their use, which sometimes helps to write a more readable code,

      @@ -1481,12 +1481,12 @@

      Standard Recommended Options

    • rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string''s +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s example' will yield the string a string’s example,

    • no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful, because otherwise the +builtin onto the directory stack; this is useful because otherwise the internal directory changes done by the plugin will pollute the global directory stack.

    • @@ -1501,7 +1501,7 @@

      Standard Recommended Variables

    -
    local MATCH REPLY; integer MBEGIN MEND
    +
    local MATCH REPLY; integer MBEGIN MEND
     local -a match mbegin mend reply
    @@ -1515,14 +1515,14 @@

    Standard Recommended Variables

    The reply and REPLY parameters are being normally used to return an array or a scalar from a function, respectively – it’s the standard way of passing values from functions. Their use is naturally limited to the functions called from the -main function of a plugin – they should not be used to pass data around e.g.: in +the main function of a plugin – they should not be used to pass data around e.g.: in between prompts, thus it’s natural to localize them in the main function.

    Standard Function Name-Space Prefixes

    -

    The recommendation is purely subjective opinion of the author. It can evolve – +

    The recommendation is the purely subjective opinion of the author. It can evolve – if you have any remarks, don’t hesitate to fill them.

    @@ -1530,7 +1530,7 @@

    Standard Function Name-Space Prefixes

    The Problems Solved By The Proposition

    -

    However when adopted, the proposition will solve the following issues:

    +

    However, when adopted, the proposition will solve the following issues:

      @@ -1546,14 +1546,14 @@

      The Problems Solved By The Prop
    1. It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function, while seeing +the : prefix informs the user that it’s a hook-type function while seeing the @ prefix informs the user that it’s an API-like function, etc.

    2. It also provides an improvement during programming, by allowing to quickly limit the number of completions offered by the editor, e.g.: for Vim’s Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions is being completed (see below for the type of the functions). +functions are being completed (see below for the type of the functions). Note: the editor has to be configured so that it accepts such special characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all of the proposed prefixes.

      @@ -1573,18 +1573,17 @@

      The Proposed Function-Name Prefixe

    3. : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other -custom hook-like mechanism in the plugin . Example function name: +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: →prompt_zinc_precmd.

      • -

        previous version of the document recommended colon (:) for the prefix, +

        the previous version of the document recommended colon (:) for the prefix, however, it was problematic, because Windows doesn’t allow colons in file names, so it wasn’t possible to name an autoload function this way,

      • -

        the arrow has a rationale behind – it denotes the execution coming back +

        the arrow has a rationale behind it - it denotes the execution coming back to the function at a later time, after it has been registered as a callback or a handler,

      • @@ -1594,11 +1593,11 @@

        The Proposed Function-Name Prefixe handler functions do occur in the code rarely,

      • -

        Zsh supports absolutely any string as a function name, because absolutely +

        Zsh supports any string as a function name, because absolutely any string can be a file name – if there would be an exception in the name of the callables, then how would it be possible to run a script called "→abcd"? There are no exceptions, the function can be called even as a -sequence of null bytes:

        +the sequence of null bytes:

        ❯ $'\0'() { print hello }
        @@ -1612,15 +1611,15 @@ 

        The Proposed Function-Name Prefixe

      • +: for output functions, i.e.: for functions that print to the standard -output and error or to a log, etc. Example function name: +output and error or a log, etc. Example function name: +prompt_zinc_output_segment.

      • -

        /: for debug functions, i.e: for functions that output debug messages to -the screen or to a log or e.g.: gather some debug data. Note: the slash +

        /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash makes it impossible for such functions to be auto-loaded via the autoload mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however the limited number of available ASCII characters + the functions, however, the limited number of available ASCII characters justifies such allocation. Example function name: /prompt_zinc_dmsg.

      • @@ -1637,7 +1636,7 @@

        The Proposed Function-Name Prefixe

        Example Code Utilizing The Prefixes

        -
        .zinc_register_hooks() {
        +
        .zinc_register_hooks() {
             add-zsh-hook precmd :zinc_precmd
             /zinc_dmsg "Installed precmd hook with result: $?"
             @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
        @@ -1658,7 +1657,7 @@ 

        Preventing Function Pollution

        -
        # Don't leak any functions
        +
        # Don't leak any functions
         typeset -g prjef
         prjef=( ${(k)functions} )
         trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
        @@ -1682,7 +1681,7 @@ 

        Preventing Function Pollution

        of array contents – the :| substitution operator – of the functions that are defined at the moment of leaving of the function (the trap-s invoke the code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

        +function – the ones stored in the variables $prjef.

      • It then unsets the resulting list of the functions – being only the newly @@ -1692,7 +1691,7 @@

        Preventing Function Pollution

      This way the functions defined by the body of the main (most often an autoload) -function will be only set during the execution of the function.

      +the function will be only set during the execution of the function.

    @@ -1708,7 +1707,7 @@

    Preventing Parameter Pollution

    -
    typeset -A PlgMap
    +
    typeset -A PlgMap
     typeset -A SomeMap
     typeset -a some_array
     
    @@ -1723,18 +1722,18 @@ 

    Preventing Parameter Pollution

    -
    typeset -A PlgMap
    +
    typeset -A PlgMap
     
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    +# Use +PlgMap[state]=1 +PlgMap[SomeMap__state]=1 +PlgMap[some_array__1]=state

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of projects by 21 by using an automatic conversion with -Vim substitution patterns with back references without any problems.

    +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    Following the Standard Plugins Hash section, the plugin could @@ -1762,10 +1761,8 @@

    Appendix A: Revision History (History Of Updates To The Docume v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and -@zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ -*_plugin_unload
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    v0.94, 07/20/2019: Add initial version of the best practices section
    v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    v0.93, 07/20/2019: 2/ Reformat to 80 columns
    From cab96f51bf16b69694b75aa493347dd9137306c0 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 16 Dec 2021 10:22:23 +0000 Subject: [PATCH 043/470] ss-o published a site update --- zsh/Zsh-Plugin-Standard.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html index df7e2a6..134570c 100644 --- a/zsh/Zsh-Plugin-Standard.html +++ b/zsh/Zsh-Plugin-Standard.html @@ -733,7 +733,7 @@

    Zsh Plugin Standard

    -

    The document is also available as a PDF, HTML.

    +

    The document is also available as a PDF, HTML.

    From cb0c14e3dd8663c0d7dab9ffac08c1d338c29486 Mon Sep 17 00:00:00 2001 From: ss-o Date: Sun, 2 Jan 2022 01:57:12 +0000 Subject: [PATCH 044/470] ss-o published a site update --- additional.zsh.html | 2735 +++++++++++++ autoload.zsh.html | 5041 ++++++++++++++++++++++++ install.zsh.html | 3648 +++++++++++++++++ side.zsh.html | 2932 ++++++++++++++ zi.zsh.html | 4886 +++++++++++++++++++++++ zsh/Zsh-Native-Scripting-Handbook.html | 1307 ------ zsh/Zsh-Plugin-Standard.html | 1785 --------- 7 files changed, 19242 insertions(+), 3092 deletions(-) create mode 100644 additional.zsh.html create mode 100644 autoload.zsh.html create mode 100644 install.zsh.html create mode 100644 side.zsh.html create mode 100644 zi.zsh.html delete mode 100644 zsh/Zsh-Native-Scripting-Handbook.html delete mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/additional.zsh.html b/additional.zsh.html new file mode 100644 index 0000000..f702ec4 --- /dev/null +++ b/additional.zsh.html @@ -0,0 +1,2735 @@ + + + + + + + + + additional.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
    +.zi-debug-start
    +.zi-debug-stop
    +.zi-debug-unload
    +.zi-service
    +.zi-wrap-track-functions
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
    +|-- autoload.zsh/.zi-unload
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-service [[[
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
    +$2 - mode - for plugin (light or load)
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
    +|-- zi.zsh/.zi-load
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-track-functions
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +
    +
    + + + + diff --git a/autoload.zsh.html b/autoload.zsh.html new file mode 100644 index 0000000..361408a --- /dev/null +++ b/autoload.zsh.html @@ -0,0 +1,5041 @@ + + + + + + + + + autoload.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-analytics-menu
    +.zi-any-to-uspl2
    +.zi-at-eval
    +.zi-build-module
    +.zi-cd
    +.zi-cdisable
    +.zi-cenable
    +.zi-changes
    +.zi-check-comp-consistency
    +.zi-check-which-completions-are-enabled
    +.zi-check-which-completions-are-installed
    +.zi-clear-completions
    +.zi-clear-report-for
    +.zi-compile-uncompile-all
    +.zi-compiled
    +.zi-confirm
    +.zi-control-menu
    +.zi-create
    +.zi-delete
    +.zi-diff-env-compute
    +.zi-diff-functions-compute
    +.zi-diff-options-compute
    +.zi-diff-parameter-compute
    +.zi-edit
    +.zi-exists-message
    +.zi-find-completions-of-plugin
    +.zi-format-env
    +.zi-format-functions
    +.zi-format-options
    +.zi-format-parameter
    +.zi-get-completion-owner
    +.zi-get-completion-owner-uspl2col
    +.zi-get-path
    +.zi-glance
    +.zi-help
    +.zi-list-bindkeys
    +.zi-list-compdef-replay
    +.zi-ls
    +.zi-module
    +.zi-pager
    +.zi-prepare-readlink
    +.zi-recall
    +.zi-recently
    +.zi-restore-extendedglob
    +.zi-run-delete-hooks
    +.zi-save-set-extendedglob
    +.zi-search-completions
    +.zi-self-update
    +.zi-show-all-reports
    +.zi-show-completions
    +.zi-show-debug-report
    +.zi-show-registered-plugins
    +.zi-show-report
    +.zi-show-times
    +.zi-show-zstatus
    +.zi-stress
    +.zi-uncompile-plugin
    +.zi-uninstall-completions
    +.zi-unload
    +.zi-unregister-plugin
    +.zi-update-all-parallel
    +.zi-update-or-status
    +.zi-update-or-status-all
    +.zi-update-or-status-snippet
    +.zi-wait-for-update-jobs
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Shows ❮ ZI ❯ analytics.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
    +Converts given plugin-spec to format that's used in keys for hash tables.
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 41 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
    +|-- side.zsh/.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
    +❮ ZI ❯ creates symlink for each installed completion.
    +This function checks whether given completion (i.e.
    +file like "_mkdir") is indeed a symlink. Backup file
    +is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    + ~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    + ~~~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +|-- install.zsh/.zi-compile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-control-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-control-menu [[[
    +Shows control options.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
    +|-- side.zsh/.zi-compute-ice
    +|-- zi.zsh/+zi-prehelp-usage-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
    +Computes ZI_PATH, ZI_FPATH that hold (f)path components
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
    +Computes FUNCTIONS that holds new functions added by plugin.
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
    +Computes OPTIONS that holds options changed by plugin.
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
    +Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    +parameters created or changed (their type) by plugin. Uses
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
    +Searches for completions owned by given plugin.
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
    +.zi-get-completion-owner-uspl2col
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +For shortening of code - returns colorized plugin name
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
    +Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
    +Shows colorized source code of plugin. Is able to use pygmentize,
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
    +Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
    +Function that has sub-commands passed as long-options (with two dashes, --).
    +It's an attempt to plugin only this one function into `zi' function
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
    +zi.zsh/Script-Body
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +BusyBox less lacks the -X and -i options, so it can use more
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
    +.zi-self-update
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +.zi-clear-completions
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
    +|-- side.zsh/.zi-compute-ice
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
    +Enables extendedglob-option first saving if it was already
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
    +While .zi-show-completions() shows what completions are
    +installed, this functions searches through all plugin dirs
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
    +Display installed (enabled and disabled), completions. Detect
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    + ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
    +.zi-show-debug-report
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 51 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
    +Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 47 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
    +Removes all completions of given plugin from Zshell (i.e. from FPATH).
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
    +0. Call the Zsh Plugin's Standard *_plugin_unload function
    +0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    +1. Delete bindkeys (...)
    +2. Delete Zstyles
    +3. Restore options
    +4. Remove aliases
    +5. Restore Zle state
    +6. Unfunction functions (created by plugin)
    +7. Clean-up FPATH and PATH
    +8. Delete created variables
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, + unalias, + unfunction, zle, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
    +zi.zsh/.zi-run-task
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
    +Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
    +$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 263 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
    +|-- install.zsh/.zi-get-latest-gh-r-url-part
    +|-- install.zsh/.zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-exists-physically
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-store-ices
    +|-- side.zsh/.zi-two-paths
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt, source, + trap, + wait +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
    +Updates (git pull) or does `git status` for all existing plugins.
    +This includes also plugins that are not loaded into Zsh (but exist
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 96 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
    +|-- install.zsh/.zi-compinit
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
    +|-- install.zsh/.zi-update-snippet
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/install.zsh.html b/install.zsh.html new file mode 100644 index 0000000..65bfcd5 --- /dev/null +++ b/install.zsh.html @@ -0,0 +1,3648 @@ + + + + + + + + + install.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
    + .zi-compile-plugin
    + .zi-compinit
    + .zi-download-file-stdout
    + .zi-download-snippet
    + .zi-extract
    + .zi-forget-completion
    + .zi-get-cygwin-package
    + .zi-get-latest-gh-r-url-part
    + .zi-get-package
    + .zi-get-url-mtime
    + .zi-install-completions
    + .zi-mirror-using-svn
    + .zi-parse-json
    + .zi-setup-plugin-dir
    + .zi-update-snippet
    + zicp
    + ziextract
    + zimv
    + zpextract
    + ∞zi-atclone-hook
    + ∞zi-atpull-e-hook
    + ∞zi-atpull-hook
    + ∞zi-compile-plugin-hook
    + ∞zi-cp-hook
    + ∞zi-extract-hook
    + ∞zi-make-e-hook
    + ∞zi-make-ee-hook
    + ∞zi-make-hook
    + ∞zi-mv-hook
    + ∞zi-ps-on-update-hook
    + ∞zi-reset-hook
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 84 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +autoload.zsh/.zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
    +User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
    +|-- compinit
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-or-status-all
    +zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
    +Downloads file to stdout. Supports following backend commands:
    +curl, wget, lftp, lynx. Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-get-cygwin-package
    +.zi-get-package
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
    +Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    +with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 309 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
    +|-- side.zsh/.zi-store-ices
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
    +|-- zi.zsh/+zi-message
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-forget-completion [[[
    +Implements alternation of Zsh state so that already initialized
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +.zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-latest-gh-r-url-part [[[
    +Gets version string of latest release of given Github package.
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 101 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 194 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/@zi-substitute
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
    +Installs all completions of given plugin. After that they are
    +visible to `compinit'. Visible completions can be selectively
    +disabled and enabled. User can access completion data with
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-setup-plugin-dir
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
    +Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    +in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    +compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
    +$2 - mode, "" - normal, "-u" - update, "-t" - test
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
    +Clones given plugin into PLUGIN_DIR. Supports multiple
    +sites (respecting `from' and `proto' ice modifiers).
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 189 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-store-ices
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 72 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ziextract [[[
    +If the file is an archive, it is extracted by this function.
    +Next stage is scanning of files with the common utility `file',
    +to detect executables. They are given +x mode. There are also
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    +
    +
    +
    +

    Has 274 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
    +.zi-get-package
    +.zi-setup-plugin-dir
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 79 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/side.zsh.html b/side.zsh.html new file mode 100644 index 0000000..76e3eab --- /dev/null +++ b/side.zsh.html @@ -0,0 +1,2932 @@ + + + + + + + + + side.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
    + .zi-compute-ice
    + .zi-countdown
    + .zi-exists-physically
    + .zi-exists-physically-message
    + .zi-first
    + .zi-store-ices
    + .zi-two-paths
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-clear-completions
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-exists-message
    +autoload.zsh/.zi-get-completion-owner-uspl2col
    +autoload.zsh/.zi-list-bindkeys
    +autoload.zsh/.zi-recently
    +autoload.zsh/.zi-search-completions
    +autoload.zsh/.zi-show-completions
    +autoload.zsh/.zi-show-registered-plugins
    +autoload.zsh/.zi-show-times
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
    +Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    +taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
    +$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    +wins with static ice; "pack-nf" means that disk-ices will
    +be ignored (no-file?)
    +$3 - name of output associative array, "ICE" is the default
    +$4 - name of output string parameter, to hold path to directory ("local_dir")
    +$5 - name of output string parameter, to hold filename ("filename")
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-pack-ice
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
    +autoload.zsh/.zi-edit
    +autoload.zsh/.zi-recall
    +autoload.zsh/.zi-update-or-status-snippet
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
    +Displays a countdown 5...4... etc. and returns 0 if it
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-atpull-e-hook
    +install.zsh/∞zi-atpull-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
    +Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    +ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
    +|-- zi.zsh/.zi-any-to-pid
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-find-other-matches
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
    +$2 - name of hash that holds values
    +$3 - additional keys of hash to store, space separated
    +$4 - additional keys of hash to store, empty-meaningful ices, space separated
    +$5 - the URL, if applicable
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
    +Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
    +power of it, you need a postgraduate degree in zsh.  However, simple
    +tasks work OK, so if that's all you need, here are some basic examples:
    +zmv '(*).txt' '$1.lis'
    +Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    +gets replaced by the $1 (not the `*', as happens in mmv, and note the
    +`$', not `=', so that you need to quote both words).
    +
    +
    +
    +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zi.zsh.html b/zi.zsh.html new file mode 100644 index 0000000..ec9e442 --- /dev/null +++ b/zi.zsh.html @@ -0,0 +1,4886 @@ + + + + + + + + + zi.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
    + +zi-message
    + +zi-prehelp-usage-message
    + -zi_scheduler_add_sh
    + .zi-add-fpath
    + .zi-add-report
    + .zi-any-to-pid
    + .zi-any-to-user-plugin
    + .zi-compdef-clear
    + .zi-compdef-replay
    + .zi-diff
    + .zi-diff-env
    + .zi-diff-functions
    + .zi-diff-options
    + .zi-diff-parameter
    + .zi-find-other-matches
    + .zi-formatter-bar
    + .zi-formatter-bar-util
    + .zi-formatter-pid
    + .zi-formatter-th-bar
    + .zi-formatter-url
    + .zi-get-mtime-into
    + .zi-get-object-path
    + .zi-ice
    + .zi-load
    + .zi-load-ices
    + .zi-load-object
    + .zi-load-plugin
    + .zi-load-snippet
    + .zi-main-message-formatter
    + .zi-pack-ice
    + .zi-parse-opts
    + .zi-prepare-home
    + .zi-register-plugin
    + .zi-run
    + .zi-run-task
    + .zi-set-m-func
    + .zi-setup-params
    + .zi-submit-turbo
    + .zi-tmp-subst-off
    + .zi-tmp-subst-on
    + .zi-util-shands-path
    + :zi-reload-and-run
    + :zi-tmp-subst-alias
    + :zi-tmp-subst-autoload
    + :zi-tmp-subst-bindkey
    + :zi-tmp-subst-compdef
    + :zi-tmp-subst-zle
    + :zi-tmp-subst-zstyle
    + @autoload
    + @zi-register-annex
    + @zi-register-hook
    + @zi-substitute
    + @zsh-plugin-run-on-unload
    + @zsh-plugin-run-on-update
    + pmodload
    + zi
    + zi-turbo
    + zicdclear
    + zicdreplay
    + zicompdef
    + zicompinit
    + zpcdclear
    + zpcdreplay
    + zpcompdef
    + zpcompinit
    +AUTOLOAD add-zsh-hook
    +AUTOLOAD compinit
    +AUTOLOAD is-at-least
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 202 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
    +|-- +zi-message
    +|-- @zi-register-hook
    +|-- add-zsh-hook
    +|-- autoload.zsh/.zi-module
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, + is-at-least, setopt, source, zmodload, zstyle +

    +
    +
    +

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
    +Deploys a sub-prompt message to be displayed OR a `zle
    +.reset-prompt' call to be invoked
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +.zi-compdef-clear
    +.zi-compdef-replay
    +.zi-load-snippet
    +.zi-register-plugin
    +.zi-run
    +.zi-set-m-func
    +:zi-tmp-subst-autoload
    +Script-Body
    +zi
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-unload
    +additional.zsh/:zi-tmp-subst-source
    +autoload.zsh/.zi-build-module
    +autoload.zsh/.zi-cd
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-show-zstatus
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +autoload.zsh/.zi-wait-for-update-jobs
    +install.zsh/.zi-compile-plugin
    +install.zsh/.zi-compinit
    +install.zsh/.zi-download-file-stdout
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-extract
    +install.zsh/.zi-get-cygwin-package
    +install.zsh/.zi-get-latest-gh-r-url-part
    +install.zsh/.zi-get-package
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +install.zsh/ziextract
    +install.zsh/∞zi-ps-on-update-hook
    +install.zsh/∞zi-reset-hook
    +side.zsh/.zi-countdown
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
    +Copies task into ZI_RUN array, called when a task timeouts.
    +A small function ran from pattern in /-substitution as a math
    +function.
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +:zi-tmp-subst-alias
    +:zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +:zi-tmp-subst-compdef
    +:zi-tmp-subst-zle
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
    +.zi-get-object-path
    +.zi-load
    +.zi-run
    +:zi-tmp-subst-autoload
    +autoload.zsh/.zi-any-to-uspl2
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-delete
    +autoload.zsh/.zi-find-completions-of-plugin
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-show-report
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-unregister-plugin
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-compute-ice
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-exists-physically
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdclear
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdreplay
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
    +Implements detection of change in any parameter's existence and type.
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
    +Plugin's main source file is in general `name.plugin.zsh'. However,
    +there can be different conventions, if that file is not found, then
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
    +.zi-load-snippet
    +.zi-run
    +zi
    +autoload.zsh/.zi-get-path
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-first
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
    +Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 76 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
    +|-- +zi-deploy-message
    +|-- install.zsh/.zi-get-package
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-run-task
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, + zle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
    +|-- +zi-deploy-message
    +|-- +zi-message
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, + unfunction, zparseopts, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-load
    +.zi-run-task
    +pmodload
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
    +Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    +second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +@zsh-plugin-run-on-unload
    +@zsh-plugin-run-on-update
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
    +|-- autoload.zsh/.zi-clear-completions
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
    +Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    +zsh_loaded_plugins array (managed according to the plugin standard:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
    +Run code inside plugin's folder
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
    +A backend, worker function of .zi-scheduler. It obtains the tasks
    +index and a few of its properties (like the type: plugin, snippet,
    +service plugin, service snippet) and executes it first checking for
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
    +$2 - the time assigned to the task
    +$3 - type: plugin, snippet, service plugin, service snippet
    +$4 - task's index in the ZI[WAIT_ICE_...] fields
    +$5 - mode: load or light
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
    +If `zi load`, `zi light` or `zi snippet`  will be
    +preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    +ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    +and this function adds it to internal data structures, so that
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
    +Turn off temporary substituting of functions completely for a given mode ("load", "light",
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
    +Turn on temporary substituting of functions of builtins and functions according to passed
    +mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
    +Marks given function ($3) for autoloading, and executes it triggering the load.
    +$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
    +$2 - autoload options
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +|-- +zi-message
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, + zparseopts +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts +

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
    +Function defined to hijack plugin's calls to the `compdef' function.
    +The hijacking is not only for reporting, but also to save compdef
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
    +Searches for timeout tasks, executes them. There's an array of tasks
    +waiting for execution, this scheduler manages them, detects which ones
    +should be run at current moment, decides to remove (or not) them from
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
    +invocation of the scheduler; this results in chain of `sched'
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
    +by one; this is handy if e.g. a docker image starts up and
    +needs to install all turbo-mode plugins without any hesitation
    +(delay), i.e. "burst" allows to run package installations from
    +script, not from prompt.
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
    +install.zsh/.zi-at-eval
    +install.zsh/.zi-get-package
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-cp-hook
    +install.zsh/∞zi-extract-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism, see:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 547 line(s). Calls functions:

    +
    +
    +
    +
    zi
    +|-- +zi-message
    +|-- +zi-prehelp-usage-message
    +|   `-- +zi-message
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- additional.zsh/.zi-debug-start
    +|-- additional.zsh/.zi-debug-stop
    +|-- additional.zsh/.zi-debug-unload
    +|-- autoload.zsh/.zi-analytics-menu
    +|-- autoload.zsh/.zi-cdisable
    +|-- autoload.zsh/.zi-cenable
    +|-- autoload.zsh/.zi-clear-completions
    +|-- autoload.zsh/.zi-compile-uncompile-all
    +|-- autoload.zsh/.zi-compiled
    +|-- autoload.zsh/.zi-control-menu
    +|-- autoload.zsh/.zi-help
    +|-- autoload.zsh/.zi-list-bindkeys
    +|-- autoload.zsh/.zi-list-compdef-replay
    +|-- autoload.zsh/.zi-ls
    +|-- autoload.zsh/.zi-module
    +|-- autoload.zsh/.zi-recently
    +|-- autoload.zsh/.zi-search-completions
    +|-- autoload.zsh/.zi-self-update
    +|-- autoload.zsh/.zi-show-all-reports
    +|-- autoload.zsh/.zi-show-completions
    +|-- autoload.zsh/.zi-show-debug-report
    +|-- autoload.zsh/.zi-show-registered-plugins
    +|-- autoload.zsh/.zi-show-report
    +|-- autoload.zsh/.zi-show-times
    +|-- autoload.zsh/.zi-show-zstatus
    +|-- autoload.zsh/.zi-uncompile-plugin
    +|-- autoload.zsh/.zi-uninstall-completions
    +|-- autoload.zsh/.zi-unload
    +|-- autoload.zsh/.zi-update-or-status
    +|-- autoload.zsh/.zi-update-or-status-all
    +|-- compinit
    +|-- install.zsh/.zi-compile-plugin
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, + source +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
    +With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    +Anything that doesn't match will be passed as if it were an ice mod.
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
    +`-- zi
    +    |-- +zi-message
    +    |-- +zi-prehelp-usage-message
    +    |   `-- +zi-message
    +    |-- additional.zsh/.zi-clear-debug-report
    +    |-- additional.zsh/.zi-debug-start
    +    |-- additional.zsh/.zi-debug-stop
    +    |-- additional.zsh/.zi-debug-unload
    +    |-- autoload.zsh/.zi-analytics-menu
    +    |-- autoload.zsh/.zi-cdisable
    +    |-- autoload.zsh/.zi-cenable
    +    |-- autoload.zsh/.zi-clear-completions
    +    |-- autoload.zsh/.zi-compile-uncompile-all
    +    |-- autoload.zsh/.zi-compiled
    +    |-- autoload.zsh/.zi-control-menu
    +    |-- autoload.zsh/.zi-help
    +    |-- autoload.zsh/.zi-list-bindkeys
    +    |-- autoload.zsh/.zi-list-compdef-replay
    +    |-- autoload.zsh/.zi-ls
    +    |-- autoload.zsh/.zi-module
    +    |-- autoload.zsh/.zi-recently
    +    |-- autoload.zsh/.zi-search-completions
    +    |-- autoload.zsh/.zi-self-update
    +    |-- autoload.zsh/.zi-show-all-reports
    +    |-- autoload.zsh/.zi-show-completions
    +    |-- autoload.zsh/.zi-show-debug-report
    +    |-- autoload.zsh/.zi-show-registered-plugins
    +    |-- autoload.zsh/.zi-show-report
    +    |-- autoload.zsh/.zi-show-times
    +    |-- autoload.zsh/.zi-show-zstatus
    +    |-- autoload.zsh/.zi-uncompile-plugin
    +    |-- autoload.zsh/.zi-uninstall-completions
    +    |-- autoload.zsh/.zi-unload
    +    |-- autoload.zsh/.zi-update-or-status
    +    |-- autoload.zsh/.zi-update-or-status-all
    +    |-- compinit
    +    |-- install.zsh/.zi-compile-plugin
    +    |-- install.zsh/.zi-compinit
    +    |-- install.zsh/.zi-forget-completion
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicdclear. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompdef. [[[
    +Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompinit. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It runs `autoload compinit; compinit' and respects
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +zinit() { zi "$@"; }
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
    +HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicompinit
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    +it'll accept any dot/dash-separated string of numbers as its second argument
    +and compare it to the dot/dash-separated first argument. Leading non-number
    +parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    +when the comparison is done; only the numbers matter. Any left-out segments
    +in the first argument that are present in the version string compared are
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    +
    +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +Script-Body
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - - -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/zsh/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file From 6acf8e3bde41b12414baba61c86058e4db6f843c Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 02:57:58 +0000 Subject: [PATCH 045/470] ss-o published a site update --- additional.zsh.html | 2735 ------------- autoload.zsh.html | 5041 ------------------------ install.zsh.html | 3648 ----------------- side.zsh.html | 2932 -------------- zi.zsh.html | 4886 ----------------------- zsh/Zsh-Native-Scripting-Handbook.html | 1307 ++++++ zsh/Zsh-Plugin-Standard.html | 1785 +++++++++ 7 files changed, 3092 insertions(+), 19242 deletions(-) delete mode 100644 additional.zsh.html delete mode 100644 autoload.zsh.html delete mode 100644 install.zsh.html delete mode 100644 side.zsh.html delete mode 100644 zi.zsh.html create mode 100644 zsh/Zsh-Native-Scripting-Handbook.html create mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/additional.zsh.html b/additional.zsh.html deleted file mode 100644 index f702ec4..0000000 --- a/additional.zsh.html +++ /dev/null @@ -1,2735 +0,0 @@ - - - - - - - - - additional.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-clear-debug-report
    -.zi-debug-start
    -.zi-debug-stop
    -.zi-debug-unload
    -.zi-service
    -.zi-wrap-track-functions
    -:zi-tmp-subst-source
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-unload
    -zi.zsh/zi
    -
    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-start
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-stop
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-unload
    -|-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    -
    -
    -
    -
    -
    $1 - type "p" or "s" (plugin or snippet)
    -$2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    .zi-service
    -|-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-track-functions
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-wrap-track-functions [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -
    -
    - - - - diff --git a/autoload.zsh.html b/autoload.zsh.html deleted file mode 100644 index 361408a..0000000 --- a/autoload.zsh.html +++ /dev/null @@ -1,5041 +0,0 @@ - - - - - - - - - autoload.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    autoload.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-analytics-menu
    -.zi-any-to-uspl2
    -.zi-at-eval
    -.zi-build-module
    -.zi-cd
    -.zi-cdisable
    -.zi-cenable
    -.zi-changes
    -.zi-check-comp-consistency
    -.zi-check-which-completions-are-enabled
    -.zi-check-which-completions-are-installed
    -.zi-clear-completions
    -.zi-clear-report-for
    -.zi-compile-uncompile-all
    -.zi-compiled
    -.zi-confirm
    -.zi-control-menu
    -.zi-create
    -.zi-delete
    -.zi-diff-env-compute
    -.zi-diff-functions-compute
    -.zi-diff-options-compute
    -.zi-diff-parameter-compute
    -.zi-edit
    -.zi-exists-message
    -.zi-find-completions-of-plugin
    -.zi-format-env
    -.zi-format-functions
    -.zi-format-options
    -.zi-format-parameter
    -.zi-get-completion-owner
    -.zi-get-completion-owner-uspl2col
    -.zi-get-path
    -.zi-glance
    -.zi-help
    -.zi-list-bindkeys
    -.zi-list-compdef-replay
    -.zi-ls
    -.zi-module
    -.zi-pager
    -.zi-prepare-readlink
    -.zi-recall
    -.zi-recently
    -.zi-restore-extendedglob
    -.zi-run-delete-hooks
    -.zi-save-set-extendedglob
    -.zi-search-completions
    -.zi-self-update
    -.zi-show-all-reports
    -.zi-show-completions
    -.zi-show-debug-report
    -.zi-show-registered-plugins
    -.zi-show-report
    -.zi-show-times
    -.zi-show-zstatus
    -.zi-stress
    -.zi-uncompile-plugin
    -.zi-uninstall-completions
    -.zi-unload
    -.zi-unregister-plugin
    -.zi-update-all-parallel
    -.zi-update-or-status
    -.zi-update-or-status-all
    -.zi-update-or-status-snippet
    -.zi-wait-for-update-jobs
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-analytics-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-analytics-menu [[[
    -Shows ❮ ZI ❯ analytics.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-any-to-uspl2
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-uspl2 [[[
    -Converts given plugin-spec to format that's used in keys for hash tables.
    -So basically, creates string "user/plugin" (this format is called: uspl2).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-report-for
    -.zi-exists-message
    -
    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-build-module
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-build-module [[[
    -Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    -
    -
    -
    -
    -
    -

    Has 41 line(s). Calls functions:

    -
    -
    -
    -
    .zi-build-module
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    zi-cd
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cd [[[
    -Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cd
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-cdisable
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cdisable [[[
    -Enables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cdisable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-cenable
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cenable [[[
    -Disables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cenable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-changes
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-changes [[[
    -Shows `git log` of given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-changes
    -|-- side.zsh/.zi-exists-physically-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-check-comp-consistency
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-comp-consistency [[[
    -❮ ZI ❯ creates symlink for each installed completion.
    -This function checks whether given completion (i.e.
    -file like "_mkdir") is indeed a symlink. Backup file
    -is a completion that is disabled - has the leading "_" removed.
    -
    -
    -
    -
    -
    $1 - path to completion within plugin's directory
    -$2 - path to backup file within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-check-which-completions-are-enabled
    -

    - ~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is disabled - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    Uninstalled completions will be reported as "0" - i.e. disabled
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-check-which-completions-are-installed
    -

    - ~~~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-installed [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is installed - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-clear-completions
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-completions [[[
    -Delete stray and improper completions.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 35 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-clear-report-for
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-report-for [[[
    -Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -additional.zsh/.zi-clear-debug-report
    -
    -
    -
    -
    zi-compile-uncompile-all
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-uncompile-all [[[
    -Compiles or uncompiles all existing (on disk) plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -|-- install.zsh/.zi-compile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-compiled
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compiled [[[
    -Displays list of plugins that are compiled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compiled
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-confirm
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-confirm [[[
    -Prints given question, waits for "y" key, evals given expression if "y" obtained
    -
    -
    -
    -
    -
    $1 - question
    -$2 - expression
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, read

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-delete
    -
    -
    -
    -
    zi-control-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-control-menu [[[
    -Shows control options.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-create
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-create [[[
    -Creates a plugin, also on Github (if not "_local/name" plugin).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 103 line(s). Calls functions:

    -
    -
    -
    -
    .zi-create
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, vared

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-delete
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-delete [[[
    -Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Calls functions:

    -
    -
    -
    -
    .zi-delete
    -|-- side.zsh/.zi-compute-ice
    -|-- zi.zsh/+zi-prehelp-usage-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-parse-opts
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-diff-env-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env-compute [[[
    -Computes ZI_PATH, ZI_FPATH that hold (f)path components
    -added by plugin. Uses data gathered earlier by .zi-diff-env().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-functions-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions-compute [[[
    -Computes FUNCTIONS that holds new functions added by plugin.
    -Uses data gathered earlier by .zi-diff-functions().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-options-compute
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options-compute [[[
    -Computes OPTIONS that holds options changed by plugin.
    -Uses data gathered earlier by .zi-diff-options().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-parameter-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter-compute [[[
    -Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    -parameters created or changed (their type) by plugin. Uses
    -data gathered earlier by .zi-diff-parameter().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-edit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-edit [[[
    -Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-edit
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-exists-message
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-message [[[
    -Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-message
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-find-completions-of-plugin
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-completions-of-plugin [[[
    -Searches for completions owned by given plugin.
    -Returns them in `reply' array.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-find-completions-of-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-env
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-env [[[
    -Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -$2 - if 1, then examine PATH, if 2, then examine FPATH
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-functions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-functions [[[
    -Creates a one or two columns text with functions created by given plugin.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-options [[[
    -Creates one-column text about options that changed when plugin "$1" was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-format-options
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-parameter
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-parameter [[[
    -Creates one column text that lists global parameters that changed when the given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-get-completion-owner
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner [[[
    -Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    -
    -
    -
    -
    -
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    -
    -
    -
    -
    -
    :A will read the link "twice" and give the final repository
    -directory, possibly without username in the uspl format; readlink will read the link "once"
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-completions
    -.zi-get-completion-owner-uspl2col
    -.zi-show-completions
    -
    -
    -
    -
    zi-get-completion-owner-uspl2col
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    -For shortening of code - returns colorized plugin name
    -that owns given completion.
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-completion-owner-uspl2col
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-get-path
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-path [[[
    -Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    -("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-path
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cd
    -.zi-uninstall-completions
    -
    -
    -
    -
    zi-glance
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-glance [[[
    -Shows colorized source code of plugin. Is able to use pygmentize,
    -highlight, GNU source-highlight.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 37 line(s). Calls functions:

    -
    -
    -
    -
    .zi-glance
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-help
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-help [[[
    -Shows usage information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-bindkeys
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-bindkeys [[[
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-list-bindkeys
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-compdef-replay
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-compdef-replay [[[
    -Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    -for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-ls
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ls [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-module
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-module [[[
    -Function that has sub-commands passed as long-options (with two dashes, --).
    -It's an attempt to plugin only this one function into `zi' function
    -defined in zi.zsh, to not make this file longer than it's needed.
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-build-module
    -zi.zsh/Script-Body
    -zi.zsh/zi
    -
    -
    -
    -
    zi-pager
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pager [[[
    -BusyBox less lacks the -X and -i options, so it can use more
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-glance
    -.zi-self-update
    -.zi-update-or-status
    -
    -
    -
    -
    zi-prepare-readlink
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-readlink [[[
    -Prepares readlink command, used for establishing completion's owner.
    -
    -
    -
    -
    -
    $REPLY = ":" or "readlink"
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -.zi-clear-completions
    -.zi-show-completions
    -
    -
    -
    -
    zi-recall
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recall [[[
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recall
    -|-- side.zsh/.zi-compute-ice
    -`-- zi.zsh/+zi-deploy-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-recently
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recently [[[
    -Shows plugins that obtained commits in specified past time.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - time spec, e.g. "1 week"
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recently
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-restore-extendedglob
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-restore-extendedglob [[[
    -Restores extendedglob-option from state saved earlier.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-run-delete-hooks
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-delete-hooks [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-delete-hooks
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-save-set-extendedglob
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-save-set-extendedglob [[[
    -Enables extendedglob-option first saving if it was already
    -enabled, for restoration of this state later.
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-search-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-search-completions [[[
    -While .zi-show-completions() shows what completions are
    -installed, this functions searches through all plugin dirs
    -showing what's available in general (for installation).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-search-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-self-update
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-self-update [[[
    -Updates ❮ ZI ❯ code (does a git pull).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 43 line(s). Calls functions:

    -
    -
    -
    -
    .zi-self-update
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-all-reports
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-all-reports [[[
    -Displays reports of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-all-reports
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-completions [[[
    -Display installed (enabled and disabled), completions. Detect
    -stray and improper ones.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-debug-report
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-debug-report [[[
    -Displays dtrace report (data recorded in interactive session).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-debug-report
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-registered-plugins
    -

    - ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-registered-plugins [[[
    -Lists loaded plugins (subcommands list, loaded).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-registered-plugins
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-report
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-report [[[
    -Displays report of the plugin given.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 66 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-report
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-all-reports
    -.zi-show-debug-report
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-times
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-times [[[
    -Shows loading times of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 51 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-times
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-zstatus
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-zstatus [[[
    -Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    -of available completions, etc.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 47 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-zstatus
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-stress
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-stress [[[
    -Compiles plugin with various options on and off to see how well the code is written. The options are:
    -
    -
    -
    -
    -
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Calls functions:

    -
    -
    -
    -
    .zi-stress
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-uncompile-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uncompile-plugin [[[
    -Uncompiles given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uncompile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-uninstall-completions
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uninstall-completions [[[
    -Removes all completions of given plugin from Zshell (i.e. from FPATH).
    -The FPATH is typically `~/.zi/completions/'.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uninstall-completions
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-unload
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unload [[[
    -0. Call the Zsh Plugin's Standard *_plugin_unload function
    -0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    -1. Delete bindkeys (...)
    -2. Delete Zstyles
    -3. Restore options
    -4. Remove aliases
    -5. Restore Zle state
    -6. Unfunction functions (created by plugin)
    -7. Clean-up FPATH and PATH
    -8. Delete created variables
    -9. Forget the plugin
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 380 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unload
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): alias, bindkey, eval, setopt, - unalias, - unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    additional.zsh/.zi-debug-unload
    -zi.zsh/.zi-run-task
    -zi.zsh/zi
    -
    -
    -
    -
    zi-unregister-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unregister-plugin [[[
    -Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    -zsh_loaded_plugins array (managed according to the plugin standard)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unregister-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -
    -
    -
    -
    zi-update-all-parallel
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-in-parallel [[[
    -
    -
    -
    -
    -
    -

    Has 63 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-all-parallel
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -
    -
    -
    -
    zi-update-or-status
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status [[[
    -Updates (git pull) or does `git status' for given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - "status" for status, other for update
    -$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$3 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 263 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status
    -|-- install.zsh/.zi-get-latest-gh-r-url-part
    -|-- install.zsh/.zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-exists-physically
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-store-ices
    -|-- side.zsh/.zi-two-paths
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-set-m-func
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt, source, - trap, - wait -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-all
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-all [[[
    -Updates (git pull) or does `git status` for all existing plugins.
    -This includes also plugins that are not loaded into Zsh (but exist
    -on disk). Also updates (i.e. redownloads) snippets.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 96 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-all
    -|-- install.zsh/.zi-compinit
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-snippet
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-snippet [[[
    -
    -
    -
    -
    -
    Implements update or status operation for snippet given by URL.
    -
    -
    -
    -
    -
    $1 - "status" or "update"
    -$2 - snippet URL
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-snippet
    -|-- install.zsh/.zi-update-snippet
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -.zi-update-or-status
    -
    -
    -
    -
    zi-wait-for-update-jobs
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-wait-for-update-jobs [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-wait-for-update-jobs
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/install.zsh.html b/install.zsh.html deleted file mode 100644 index 65bfcd5..0000000 --- a/install.zsh.html +++ /dev/null @@ -1,3648 +0,0 @@ - - - - - - - - - install.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    install.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-at-eval
    - .zi-compile-plugin
    - .zi-compinit
    - .zi-download-file-stdout
    - .zi-download-snippet
    - .zi-extract
    - .zi-forget-completion
    - .zi-get-cygwin-package
    - .zi-get-latest-gh-r-url-part
    - .zi-get-package
    - .zi-get-url-mtime
    - .zi-install-completions
    - .zi-mirror-using-svn
    - .zi-parse-json
    - .zi-setup-plugin-dir
    - .zi-update-snippet
    - zicp
    - ziextract
    - zimv
    - zpextract
    - ∞zi-atclone-hook
    - ∞zi-atpull-e-hook
    - ∞zi-atpull-hook
    - ∞zi-compile-plugin-hook
    - ∞zi-cp-hook
    - ∞zi-extract-hook
    - ∞zi-make-e-hook
    - ∞zi-make-ee-hook
    - ∞zi-make-hook
    - ∞zi-mv-hook
    - ∞zi-ps-on-update-hook
    - ∞zi-reset-hook
    -AUTOLOAD compinit
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -∞zi-atpull-hook
    -
    -
    -
    -
    zi-compile-plugin
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-plugin [[[
    -Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 84 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-plugin
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -autoload.zsh/.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-compinit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compinit [[[
    -User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    -After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    -
    -
    -
    -
    -
    No arguments.
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compinit
    -|-- compinit
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, setopt, unfunction -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-or-status-all
    -zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-download-file-stdout
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-file-stdout [[[
    -Downloads file to stdout. Supports following backend commands:
    -curl, wget, lftp, lynx. Used by snippet loading.
    -
    -
    -
    -
    -
    -

    Has 46 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-file-stdout
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-get-cygwin-package
    -.zi-get-package
    -.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-download-snippet
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-snippet [[[
    -Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    -with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    -to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    -
    -
    -
    -
    -
    -

    Has 309 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-snippet
    -|-- side.zsh/.zi-store-ices
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-snippet
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    zi-extract
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-extract() [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-extract
    -|-- zi.zsh/+zi-message
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-extract-hook
    -
    -
    -
    -
    zi-forget-completion
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-forget-completion [[[
    -Implements alternation of Zsh state so that already initialized
    -completion stops being visible to Zsh.
    -
    -
    -
    -
    -
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -.zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -zi.zsh/zi
    -
    -
    -
    -
    zi-get-cygwin-package
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-cygwin-package [[[
    -
    -
    -
    -
    -
    -

    Has 70 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-cygwin-package
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -
    -
    -
    -
    zi-get-latest-gh-r-url-part
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-latest-gh-r-url-part [[[
    -Gets version string of latest release of given Github package.
    -Connects to Github releases page.
    -
    -
    -
    -
    -
    -

    Has 101 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-latest-gh-r-url-part
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-get-package
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-package [[[
    -
    -
    -
    -
    -
    -

    Has 194 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-package
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/@zi-substitute
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-load
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-get-url-mtime
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-url-mtime [[[
    -For the given URL returns the date in the Last-Modified header as a time stamp
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-install-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-install-completions [[[
    -Installs all completions of given plugin. After that they are
    -visible to `compinit'. Visible completions can be selectively
    -disabled and enabled. User can access completion data with
    -`clist' or `completions' subcommand.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$3 - if 1, then reinstall, otherwise only install completions that aren't there
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-install-completions
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-setup-plugin-dir
    -zi.zsh/zi
    -
    -
    -
    -
    zi-mirror-using-svn
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-mirror-using-svn [[[
    -Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    -in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    -compares remote and local revision and outputs true if update is needed.
    -
    -
    -
    -
    -
    $1 - URL
    -$2 - mode, "" - normal, "-u" - update, "-t" - test
    -$3 - subdirectory (not path) with working copy, needed for -t and -u
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-parse-json
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-parse-json [[[
    -Retrievies the ice-list from given profile from the JSON of the package.json.
    -
    -
    -
    -
    -
    -

    Has 102 line(s). Calls functions:

    -
    -
    -
    -
    .zi-parse-json
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-get-package
    -
    -
    -
    -
    zi-setup-plugin-dir
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-plugin-dir [[[
    -Clones given plugin into PLUGIN_DIR. Supports multiple
    -sites (respecting `from' and `proto' ice modifiers).
    -Invokes compilation of plugin's main file.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -
    -
    -
    -
    -
    -

    Has 189 line(s). Calls functions:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-store-ices
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -zi.zsh/.zi-load
    -
    -
    -
    -
    zi-update-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-update-snippet [[[
    -
    -
    -
    -
    -
    -

    Has 72 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-snippet
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- zi.zsh/.zi-pack-ice
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status-snippet
    -
    -
    -
    -
    -

    zicp

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zicp [[[
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zimv
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    -

    ziextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ziextract [[[
    -If the file is an archive, it is extracted by this function.
    -Next stage is scanning of files with the common utility `file',
    -to detect executables. They are given +x mode. There are also
    -messages to the user on performed actions.
    -
    -
    -
    -
    -
    $1 - url
    -$2 - file
    -
    -
    -
    -
    -
    -

    Has 274 line(s). Calls functions:

    -
    -
    -
    -
    ziextract
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, unfunction, zparseopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-extract
    -.zi-get-package
    -.zi-setup-plugin-dir
    -zpextract
    -
    -
    -
    -
    -

    zimv

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zimv [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    zimv
    -`-- zicp
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zpextract [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpextract
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atclone-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atclone-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atclone-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-compile-plugin-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-compile-plugin-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-cp-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-cp-hook [[[
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-cp-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-extract-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-extract-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-extract-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-e-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-ee-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-ee-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-ee-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-mv-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-mv-hook [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-mv-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-ps-on-update-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-ps-on-update-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-ps-on-update-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-reset-hook

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ∞zi-reset-opt-hook [[[
    -
    -
    -
    -
    -
    -

    Has 79 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-reset-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/side.zsh.html b/side.zsh.html deleted file mode 100644 index 76e3eab..0000000 --- a/side.zsh.html +++ /dev/null @@ -1,2932 +0,0 @@ - - - - - - - - - side.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    side.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-any-colorify-as-uspl2
    - .zi-compute-ice
    - .zi-countdown
    - .zi-exists-physically
    - .zi-exists-physically-message
    - .zi-first
    - .zi-store-ices
    - .zi-two-paths
    -AUTOLOAD zmv
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-any-colorify-as-uspl2
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    -Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$REPLY = ANSI-colorified "user/plugin" string
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-colorify-as-uspl2
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-clear-completions
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-exists-message
    -autoload.zsh/.zi-get-completion-owner-uspl2col
    -autoload.zsh/.zi-list-bindkeys
    -autoload.zsh/.zi-recently
    -autoload.zsh/.zi-search-completions
    -autoload.zsh/.zi-show-completions
    -autoload.zsh/.zi-show-registered-plugins
    -autoload.zsh/.zi-show-times
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -zi.zsh/.zi-formatter-pid
    -
    -
    -
    -
    zi-compute-ice
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compute-ice [[[
    -Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    -taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    -(only valid if ICE[svn] is not set).
    -
    -
    -
    -
    -
    Can also pack resulting ices into ZI_SICE (see $2).
    -
    -
    -
    -
    -
    $1 - URL (also plugin-spec)
    -$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    -wins with static ice; "pack-nf" means that disk-ices will
    -be ignored (no-file?)
    -$3 - name of output associative array, "ICE" is the default
    -$4 - name of output string parameter, to hold path to directory ("local_dir")
    -$5 - name of output string parameter, to hold filename ("filename")
    -$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    -
    -
    -
    -
    -
    -

    Has 116 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compute-ice
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-pack-ice
    -`-- zmv
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, zmv

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-delete
    -autoload.zsh/.zi-edit
    -autoload.zsh/.zi-recall
    -autoload.zsh/.zi-update-or-status-snippet
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-countdown
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-countdown [[[
    -Displays a countdown 5...4... etc. and returns 0 if it
    -sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-countdown
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-run-delete-hooks
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-atpull-e-hook
    -install.zsh/∞zi-atpull-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -
    -
    -
    -
    zi-exists-physically
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-exists-physically-message
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically-message [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -
    -
    -
    -
    zi-first
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-first [[[
    -Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    -ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    -is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-first
    -|-- zi.zsh/.zi-any-to-pid
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-find-other-matches
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-two-paths
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-store-ices
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-store-ices [[[
    -Saves ice mods in given hash onto disk.
    -
    -
    -
    -
    -
    $1 - directory where to create / delete files
    -$2 - name of hash that holds values
    -$3 - additional keys of hash to store, space separated
    -$4 - additional keys of hash to store, empty-meaningful ices, space separated
    -$5 - the URL, if applicable
    -$6 - the mode (1 - svn, 0 - single file), if applicable
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-two-paths
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-two-paths [[[
    -Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    -returns 2 possible paths for further examination
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-two-paths
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    -

    zmv

    -
    -
    -
    -
    -
    function zmv {
    -zmv, zcp, zln:
    -
    -
    -
    -
    -
    This is a multiple move based on zsh pattern matching.  To get the full
    -power of it, you need a postgraduate degree in zsh.  However, simple
    -tasks work OK, so if that's all you need, here are some basic examples:
    -zmv '(*).txt' '$1.lis'
    -Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    -gets replaced by the $1 (not the `*', as happens in mmv, and note the
    -`$', not `=', so that you need to quote both words).
    -
    -
    -
    -
    -
    -

    Has 299 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, getopts, read, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zi.zsh.html b/zi.zsh.html deleted file mode 100644 index ec9e442..0000000 --- a/zi.zsh.html +++ /dev/null @@ -1,4886 +0,0 @@ - - - - - - - - - zi.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    zi.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     +zi-deploy-message
    - +zi-message
    - +zi-prehelp-usage-message
    - -zi_scheduler_add_sh
    - .zi-add-fpath
    - .zi-add-report
    - .zi-any-to-pid
    - .zi-any-to-user-plugin
    - .zi-compdef-clear
    - .zi-compdef-replay
    - .zi-diff
    - .zi-diff-env
    - .zi-diff-functions
    - .zi-diff-options
    - .zi-diff-parameter
    - .zi-find-other-matches
    - .zi-formatter-bar
    - .zi-formatter-bar-util
    - .zi-formatter-pid
    - .zi-formatter-th-bar
    - .zi-formatter-url
    - .zi-get-mtime-into
    - .zi-get-object-path
    - .zi-ice
    - .zi-load
    - .zi-load-ices
    - .zi-load-object
    - .zi-load-plugin
    - .zi-load-snippet
    - .zi-main-message-formatter
    - .zi-pack-ice
    - .zi-parse-opts
    - .zi-prepare-home
    - .zi-register-plugin
    - .zi-run
    - .zi-run-task
    - .zi-set-m-func
    - .zi-setup-params
    - .zi-submit-turbo
    - .zi-tmp-subst-off
    - .zi-tmp-subst-on
    - .zi-util-shands-path
    - :zi-reload-and-run
    - :zi-tmp-subst-alias
    - :zi-tmp-subst-autoload
    - :zi-tmp-subst-bindkey
    - :zi-tmp-subst-compdef
    - :zi-tmp-subst-zle
    - :zi-tmp-subst-zstyle
    - @autoload
    - @zi-register-annex
    - @zi-register-hook
    - @zi-substitute
    - @zsh-plugin-run-on-unload
    - @zsh-plugin-run-on-update
    - pmodload
    - zi
    - zi-turbo
    - zicdclear
    - zicdreplay
    - zicompdef
    - zicompinit
    - zpcdclear
    - zpcdreplay
    - zpcompdef
    - zpcompinit
    -AUTOLOAD add-zsh-hook
    -AUTOLOAD compinit
    -AUTOLOAD is-at-least
    -PRECMD-HOOK @zi-scheduler
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 202 line(s). Calls functions:

    -
    -
    -
    -
    Script-Body
    -|-- +zi-message
    -|-- @zi-register-hook
    -|-- add-zsh-hook
    -|-- autoload.zsh/.zi-module
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, alias, autoload, export, - is-at-least, setopt, source, zmodload, zstyle -

    -
    -
    -

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    -
    -
    -
    -

    +zi-deploy-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-deploy-message. [[[
    -Deploys a sub-prompt message to be displayed OR a `zle
    -.reset-prompt' call to be invoked
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-recall
    -
    -
    -
    -
    -

    +zi-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-message. [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -.zi-compdef-clear
    -.zi-compdef-replay
    -.zi-load-snippet
    -.zi-register-plugin
    -.zi-run
    -.zi-set-m-func
    -:zi-tmp-subst-autoload
    -Script-Body
    -zi
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-unload
    -additional.zsh/:zi-tmp-subst-source
    -autoload.zsh/.zi-build-module
    -autoload.zsh/.zi-cd
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-show-zstatus
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -autoload.zsh/.zi-wait-for-update-jobs
    -install.zsh/.zi-compile-plugin
    -install.zsh/.zi-compinit
    -install.zsh/.zi-download-file-stdout
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-extract
    -install.zsh/.zi-get-cygwin-package
    -install.zsh/.zi-get-latest-gh-r-url-part
    -install.zsh/.zi-get-package
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -install.zsh/ziextract
    -install.zsh/∞zi-ps-on-update-hook
    -install.zsh/∞zi-reset-hook
    -side.zsh/.zi-countdown
    -side.zsh/.zi-exists-physically-message
    -
    -
    -
    -
    -

    +zi-prehelp-usage-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-prehelp-usage-message. [[[
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    -

    -zi_scheduler_add_sh

    -
    -
    -
    -
    -
    FUNCTION: -zi_scheduler_add_sh. [[[
    -Copies task into ZI_RUN array, called when a task timeouts.
    -A small function ran from pattern in /-substitution as a math
    -function.
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-add-fpath
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-fpath. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-add-fpath
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-add-report
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-report. [[[
    -Adds a report line for given plugin.
    -
    -
    -
    -
    -
    $1 - uspl2, i.e. user/plugin
    -$2, ... - the text
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -:zi-tmp-subst-alias
    -:zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -:zi-tmp-subst-compdef
    -:zi-tmp-subst-zle
    -:zi-tmp-subst-zstyle
    -
    -
    -
    -
    zi-any-to-pid
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-any-to-user-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-user-plugin. [[[
    -Allows elastic plugin-spec across the code.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    Returns user and plugin in $reply.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-add-fpath
    -.zi-get-object-path
    -.zi-load
    -.zi-run
    -:zi-tmp-subst-autoload
    -autoload.zsh/.zi-any-to-uspl2
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-delete
    -autoload.zsh/.zi-find-completions-of-plugin
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-show-report
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-unregister-plugin
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-compute-ice
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-exists-physically
    -side.zsh/.zi-first
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-compdef-clear
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-clear. [[[
    -Implements user-exposed functionality to clear gathered compdefs.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-clear
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdclear
    -zpcdclear
    -
    -
    -
    -
    zi-compdef-replay
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-replay. [[[
    -Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-replay
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): compdef

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdreplay
    -zpcdreplay
    -
    -
    -
    -
    zi-diff
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff. [[[
    -Performs diff actions of all types
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-diff-env
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env. [[[
    -Implements detection of change in PATH and FPATH.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -.zi-load-plugin
    -
    -
    -
    -
    zi-diff-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions. [[[
    -Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options. [[[
    -Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-parameter
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter. [[[
    -Implements detection of change in any parameter's existence and type.
    -Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-find-other-matches
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-other-matches. [[[
    -Plugin's main source file is in general `name.plugin.zsh'. However,
    -there can be different conventions, if that file is not found, then
    -this functions examines other conventions in the most sane order.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-formatter-bar
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar-util
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar-util. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-bar
    -.zi-formatter-th-bar
    -
    -
    -
    -
    zi-formatter-pid
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-pid
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-th-bar
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-th-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-th-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-url
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-url. [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-get-mtime-into
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-mtime-into. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-update-or-status-all
    -
    -
    -
    -
    zi-get-object-path
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-object-path. [[[
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-ices
    -.zi-load-snippet
    -.zi-run
    -zi
    -autoload.zsh/.zi-get-path
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-first
    -side.zsh/.zi-two-paths
    -
    -
    -
    -
    zi-ice
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ice. [[[
    -Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    -next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    -
    -
    -
    -
    -
    -

    Has 12 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load. [[[
    -Implements the exposed-to-user action of loading a plugin.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin name, if the third format is used
    -
    -
    -
    -
    -
    -

    Has 76 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load
    -|-- +zi-deploy-message
    -|-- install.zsh/.zi-get-package
    -`-- install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-run-task
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-load-ices
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-ices. [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-ices
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load-object
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-object. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-object
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-load-plugin
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-plugin. [[[
    -Lower-level function for loading a plugin.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -$3 - mode (light or load)
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-plugin
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, unfunction, - zle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-load-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-snippet. [[[
    -Implements the exposed-to-user action of loading a snippet.
    -
    -
    -
    -
    -
    $1 - url (can be local, absolute path).
    -
    -
    -
    -
    -
    -

    Has 173 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-snippet
    -|-- +zi-deploy-message
    -|-- +zi-message
    -`-- install.zsh/.zi-download-snippet
    -
    -
    -
    -

    Uses feature(s): autoload, eval, setopt, source, - unfunction, zparseopts, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-load
    -.zi-run-task
    -pmodload
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-main-message-formatter
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: +zi-message-formatter [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-pack-ice
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pack-ice. [[[
    -Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    -second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    -or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -@zsh-plugin-run-on-unload
    -@zsh-plugin-run-on-update
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-compute-ice
    -
    -
    -
    -
    zi-parse-opts
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: +zi-parse-opts. [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    zi-prepare-home
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-home. [[[
    -Creates all directories needed by ZI, first checks if they already exist.
    -
    -
    -
    -
    -
    -

    Has 38 line(s). Calls functions:

    -
    -
    -
    -
    .zi-prepare-home
    -|-- autoload.zsh/.zi-clear-completions
    -`-- install.zsh/.zi-compinit
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-register-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-register-plugin. [[[
    -Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    -zsh_loaded_plugins array (managed according to the plugin standard:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-register-plugin
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-run
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run. [[[
    -Run code inside plugin's folder
    -It uses the `correct' parameter from upper's scope zi().
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-run-task
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-task. [[[
    -A backend, worker function of .zi-scheduler. It obtains the tasks
    -index and a few of its properties (like the type: plugin, snippet,
    -service plugin, service snippet) and executes it first checking for
    -additional conditions (like non-numeric wait'' ice).
    -
    -
    -
    -
    -
    $1 - the pass number, either 1st or 2nd pass
    -$2 - the time assigned to the task
    -$3 - type: plugin, snippet, service plugin, service snippet
    -$4 - task's index in the ZI[WAIT_ICE_...] fields
    -$5 - mode: load or light
    -$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-task
    -`-- autoload.zsh/.zi-unload
    -
    -
    -
    -

    Uses feature(s): eval, source, zle, zpty

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -
    -
    -
    -
    zi-set-m-func
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION:.zi-set-m-func() [[[
    -Sets and withdraws the temporary, atclone/atpull time function `m`.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-set-m-func
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-setup-params
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-params. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -
    -
    -
    -
    zi-submit-turbo
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-submit-turbo. [[[
    -If `zi load`, `zi light` or `zi snippet`  will be
    -preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    -ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    -and this function adds it to internal data structures, so that
    -@zi-scheduler can run (load, unload) this as a task.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-tmp-subst-off
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-off. [[[
    -Turn off temporary substituting of functions completely for a given mode ("load", "light",
    -"light-b" (i.e. the `trackbinds' mode) or "compdef").
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-tmp-subst-on
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-on. [[[
    -Turn on temporary substituting of functions of builtins and functions according to passed
    -mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    -to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -
    -
    -
    -
    zi-util-shands-path
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-util-shands-path. [[[
    -Replaces parts of path with %HOME, etc.
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    :zi-reload-and-run

    -
    -
    -
    -
    -
    FUNCTION: :zi-reload-and-run. [[[
    -Marks given function ($3) for autoloading, and executes it triggering the load.
    -$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    -because using that on older Zsh versions causes problems with traps.
    -
    -
    -
    -
    -
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    -
    -
    -
    -
    -
    $1 - FPATH dedicated to function
    -$2 - autoload options
    -$3 - function name (one that needs autoloading)
    -
    -
    -
    -
    -
    Author: Bart Schaefer
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, unfunction

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-alias

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-alias. [[[
    -Function defined to hijack plugin's calls to the `alias' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-alias
    -
    -
    -
    -

    Uses feature(s): alias, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-autoload

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-autoload. [[[
    -Function defined to hijack plugin's calls to the `autoload' builtin.
    -
    -
    -
    -
    -
    The hijacking is not only to gather report data, but also to.
    -run custom `autoload' function, that doesn't need FPATH.
    -
    -
    -
    -
    -
    -

    Has 106 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -|-- +zi-message
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): autoload, eval, is-at-least, setopt, - zparseopts -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -@autoload
    -
    -
    -
    -
    -

    :zi-tmp-subst-bindkey

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    -Function defined to hijack plugin's calls to the `bindkey' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-bindkey
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts -

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-compdef

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-compdef. [[[
    -Function defined to hijack plugin's calls to the `compdef' function.
    -The hijacking is not only for reporting, but also to save compdef
    -calls so that `compinit' can be called after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-compdef
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zle. [[[.
    -Function defined to hijack plugin's calls to the `zle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zle
    -
    -
    -
    -

    Uses feature(s): setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zstyle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    -Function defined to hijack plugin's calls to the `zstyle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zstyle
    -
    -
    -
    -

    Uses feature(s): setopt, zparseopts, zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @autoload

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: @autoload. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    @autoload
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-annex

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-annex. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-hook

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-hook. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -
    -

    @zi-scheduler

    -
    -
    -
    -
    -
    FUNCTION: @zi-scheduler. [[[
    -Searches for timeout tasks, executes them. There's an array of tasks
    -waiting for execution, this scheduler manages them, detects which ones
    -should be run at current moment, decides to remove (or not) them from
    -the array after execution.
    -
    -
    -
    -
    -
    $1 - if "following", then it is non-first (second and more)
    -invocation of the scheduler; this results in chain of `sched'
    -invocations that results in repetitive @zi-scheduler activity.
    -
    -
    -
    -
    -
    if "burst", then all tasks are marked timeout and executed one
    -by one; this is handy if e.g. a docker image starts up and
    -needs to install all turbo-mode plugins without any hesitation
    -(delay), i.e. "burst" allows to run package installations from
    -script, not from prompt.
    -
    -
    -
    -
    -
    -

    Has 74 line(s). Is a precmd hook. Calls functions:

    -
    -
    -
    -
    @zi-scheduler
    -`-- add-zsh-hook
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-substitute

    -
    -
    -
    -
    -
    FUNCTION: @zi-substitute. [[[
    -
    -
    -
    -
    -
    -

    Has 36 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-at-eval
    -install.zsh/.zi-at-eval
    -install.zsh/.zi-get-package
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-cp-hook
    -install.zsh/∞zi-extract-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -install.zsh/∞zi-mv-hook
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    @zsh-plugin-run-on-unload

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism, see:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zsh-plugin-run-on-update

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-update
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    pmodload

    -
    -
    -
    -
    -
    FUNCTION: pmodload. [[[
    -Compatibility with Prezto. Calls can be recursive.
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    pmodload
    -
    -
    -
    -

    Uses feature(s): zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zi

    -
    -
    -
    -
    -
    FUNCTION: zi. [[[
    -Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    -
    -
    -
    -
    -
    -

    Has 547 line(s). Calls functions:

    -
    -
    -
    -
    zi
    -|-- +zi-message
    -|-- +zi-prehelp-usage-message
    -|   `-- +zi-message
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- additional.zsh/.zi-debug-start
    -|-- additional.zsh/.zi-debug-stop
    -|-- additional.zsh/.zi-debug-unload
    -|-- autoload.zsh/.zi-analytics-menu
    -|-- autoload.zsh/.zi-cdisable
    -|-- autoload.zsh/.zi-cenable
    -|-- autoload.zsh/.zi-clear-completions
    -|-- autoload.zsh/.zi-compile-uncompile-all
    -|-- autoload.zsh/.zi-compiled
    -|-- autoload.zsh/.zi-control-menu
    -|-- autoload.zsh/.zi-help
    -|-- autoload.zsh/.zi-list-bindkeys
    -|-- autoload.zsh/.zi-list-compdef-replay
    -|-- autoload.zsh/.zi-ls
    -|-- autoload.zsh/.zi-module
    -|-- autoload.zsh/.zi-recently
    -|-- autoload.zsh/.zi-search-completions
    -|-- autoload.zsh/.zi-self-update
    -|-- autoload.zsh/.zi-show-all-reports
    -|-- autoload.zsh/.zi-show-completions
    -|-- autoload.zsh/.zi-show-debug-report
    -|-- autoload.zsh/.zi-show-registered-plugins
    -|-- autoload.zsh/.zi-show-report
    -|-- autoload.zsh/.zi-show-times
    -|-- autoload.zsh/.zi-show-zstatus
    -|-- autoload.zsh/.zi-uncompile-plugin
    -|-- autoload.zsh/.zi-uninstall-completions
    -|-- autoload.zsh/.zi-unload
    -|-- autoload.zsh/.zi-update-or-status
    -|-- autoload.zsh/.zi-update-or-status-all
    -|-- compinit
    -|-- install.zsh/.zi-compile-plugin
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, eval, setopt, - source -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi-turbo
    -
    -
    -
    -
    -

    zi-turbo

    -
    -
    -
    -
    -
    FUNCTION: zi-turbo. [[[
    -With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    -Anything that doesn't match will be passed as if it were an ice mod.
    -Default ices depth'3' and lucid, allowed values [0-9][a-d].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zi-turbo
    -`-- zi
    -    |-- +zi-message
    -    |-- +zi-prehelp-usage-message
    -    |   `-- +zi-message
    -    |-- additional.zsh/.zi-clear-debug-report
    -    |-- additional.zsh/.zi-debug-start
    -    |-- additional.zsh/.zi-debug-stop
    -    |-- additional.zsh/.zi-debug-unload
    -    |-- autoload.zsh/.zi-analytics-menu
    -    |-- autoload.zsh/.zi-cdisable
    -    |-- autoload.zsh/.zi-cenable
    -    |-- autoload.zsh/.zi-clear-completions
    -    |-- autoload.zsh/.zi-compile-uncompile-all
    -    |-- autoload.zsh/.zi-compiled
    -    |-- autoload.zsh/.zi-control-menu
    -    |-- autoload.zsh/.zi-help
    -    |-- autoload.zsh/.zi-list-bindkeys
    -    |-- autoload.zsh/.zi-list-compdef-replay
    -    |-- autoload.zsh/.zi-ls
    -    |-- autoload.zsh/.zi-module
    -    |-- autoload.zsh/.zi-recently
    -    |-- autoload.zsh/.zi-search-completions
    -    |-- autoload.zsh/.zi-self-update
    -    |-- autoload.zsh/.zi-show-all-reports
    -    |-- autoload.zsh/.zi-show-completions
    -    |-- autoload.zsh/.zi-show-debug-report
    -    |-- autoload.zsh/.zi-show-registered-plugins
    -    |-- autoload.zsh/.zi-show-report
    -    |-- autoload.zsh/.zi-show-times
    -    |-- autoload.zsh/.zi-show-zstatus
    -    |-- autoload.zsh/.zi-uncompile-plugin
    -    |-- autoload.zsh/.zi-uninstall-completions
    -    |-- autoload.zsh/.zi-unload
    -    |-- autoload.zsh/.zi-update-or-status
    -    |-- autoload.zsh/.zi-update-or-status-all
    -    |-- compinit
    -    |-- install.zsh/.zi-compile-plugin
    -    |-- install.zsh/.zi-compinit
    -    |-- install.zsh/.zi-forget-completion
    -    `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdclear

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicdclear. [[[
    -A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdreplay

    -
    -
    -
    -
    -
    FUNCTION: zicdreplay. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It works like `zi cdreplay', which cannot be invoked from such hook ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompdef

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompdef. [[[
    -Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompinit. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It runs `autoload compinit; compinit' and respects
    -ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdclear

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdreplay

    -
    -
    -
    -
    -
    ]]]
    -Compatibility functions. [[[
    -zinit() { zi "$@"; }
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompdef

    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompinit

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    add-zsh-hook

    -
    -
    -
    -
    -
    Add to HOOK the given FUNCTION.
    -HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    -zshexit, zsh_directory_name (the _functions subscript is not required).
    -
    -
    -
    -
    -
    With -d, remove the function from the hook instead; delete the hook
    -variable if it is empty.
    -
    -
    -
    -
    -
    -D behaves like -d, but pattern characters are active in the
    -function name, so any matching function will be deleted from the hook.
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, getopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -Script-Body
    -
    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicompinit
    -zpcompinit
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    -is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    -it'll accept any dot/dash-separated string of numbers as its second argument
    -and compare it to the dot/dash-separated first argument. Leading non-number
    -parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    -when the comparison is done; only the numbers matter. Any left-out segments
    -in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -Script-Body
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + + +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/zsh/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file From 16a519f8098f9860fdc008c82b0f1a3199c341c1 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 03:15:15 +0000 Subject: [PATCH 046/470] ss-o published a site update --- additional.zsh.html | 2735 +++++++++++++ autoload.zsh.html | 5041 ++++++++++++++++++++++++ install.zsh.html | 3648 +++++++++++++++++ side.zsh.html | 2932 ++++++++++++++ zi.zsh.html | 4886 +++++++++++++++++++++++ zsh/Zsh-Native-Scripting-Handbook.html | 1307 ------ zsh/Zsh-Plugin-Standard.html | 1785 --------- 7 files changed, 19242 insertions(+), 3092 deletions(-) create mode 100644 additional.zsh.html create mode 100644 autoload.zsh.html create mode 100644 install.zsh.html create mode 100644 side.zsh.html create mode 100644 zi.zsh.html delete mode 100644 zsh/Zsh-Native-Scripting-Handbook.html delete mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/additional.zsh.html b/additional.zsh.html new file mode 100644 index 0000000..f702ec4 --- /dev/null +++ b/additional.zsh.html @@ -0,0 +1,2735 @@ + + + + + + + + + additional.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
    +.zi-debug-start
    +.zi-debug-stop
    +.zi-debug-unload
    +.zi-service
    +.zi-wrap-track-functions
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
    +|-- autoload.zsh/.zi-unload
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-service [[[
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
    +$2 - mode - for plugin (light or load)
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
    +|-- zi.zsh/.zi-load
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-track-functions
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +
    +
    + + + + diff --git a/autoload.zsh.html b/autoload.zsh.html new file mode 100644 index 0000000..361408a --- /dev/null +++ b/autoload.zsh.html @@ -0,0 +1,5041 @@ + + + + + + + + + autoload.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-analytics-menu
    +.zi-any-to-uspl2
    +.zi-at-eval
    +.zi-build-module
    +.zi-cd
    +.zi-cdisable
    +.zi-cenable
    +.zi-changes
    +.zi-check-comp-consistency
    +.zi-check-which-completions-are-enabled
    +.zi-check-which-completions-are-installed
    +.zi-clear-completions
    +.zi-clear-report-for
    +.zi-compile-uncompile-all
    +.zi-compiled
    +.zi-confirm
    +.zi-control-menu
    +.zi-create
    +.zi-delete
    +.zi-diff-env-compute
    +.zi-diff-functions-compute
    +.zi-diff-options-compute
    +.zi-diff-parameter-compute
    +.zi-edit
    +.zi-exists-message
    +.zi-find-completions-of-plugin
    +.zi-format-env
    +.zi-format-functions
    +.zi-format-options
    +.zi-format-parameter
    +.zi-get-completion-owner
    +.zi-get-completion-owner-uspl2col
    +.zi-get-path
    +.zi-glance
    +.zi-help
    +.zi-list-bindkeys
    +.zi-list-compdef-replay
    +.zi-ls
    +.zi-module
    +.zi-pager
    +.zi-prepare-readlink
    +.zi-recall
    +.zi-recently
    +.zi-restore-extendedglob
    +.zi-run-delete-hooks
    +.zi-save-set-extendedglob
    +.zi-search-completions
    +.zi-self-update
    +.zi-show-all-reports
    +.zi-show-completions
    +.zi-show-debug-report
    +.zi-show-registered-plugins
    +.zi-show-report
    +.zi-show-times
    +.zi-show-zstatus
    +.zi-stress
    +.zi-uncompile-plugin
    +.zi-uninstall-completions
    +.zi-unload
    +.zi-unregister-plugin
    +.zi-update-all-parallel
    +.zi-update-or-status
    +.zi-update-or-status-all
    +.zi-update-or-status-snippet
    +.zi-wait-for-update-jobs
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Shows ❮ ZI ❯ analytics.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
    +Converts given plugin-spec to format that's used in keys for hash tables.
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 41 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
    +|-- side.zsh/.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
    +❮ ZI ❯ creates symlink for each installed completion.
    +This function checks whether given completion (i.e.
    +file like "_mkdir") is indeed a symlink. Backup file
    +is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    + ~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    + ~~~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +|-- install.zsh/.zi-compile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-control-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-control-menu [[[
    +Shows control options.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
    +|-- side.zsh/.zi-compute-ice
    +|-- zi.zsh/+zi-prehelp-usage-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
    +Computes ZI_PATH, ZI_FPATH that hold (f)path components
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
    +Computes FUNCTIONS that holds new functions added by plugin.
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
    +Computes OPTIONS that holds options changed by plugin.
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
    +Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    +parameters created or changed (their type) by plugin. Uses
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
    +Searches for completions owned by given plugin.
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
    +.zi-get-completion-owner-uspl2col
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +For shortening of code - returns colorized plugin name
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
    +Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
    +Shows colorized source code of plugin. Is able to use pygmentize,
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
    +Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
    +Function that has sub-commands passed as long-options (with two dashes, --).
    +It's an attempt to plugin only this one function into `zi' function
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
    +zi.zsh/Script-Body
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +BusyBox less lacks the -X and -i options, so it can use more
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
    +.zi-self-update
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +.zi-clear-completions
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
    +|-- side.zsh/.zi-compute-ice
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
    +Enables extendedglob-option first saving if it was already
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
    +While .zi-show-completions() shows what completions are
    +installed, this functions searches through all plugin dirs
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
    +Display installed (enabled and disabled), completions. Detect
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    + ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
    +.zi-show-debug-report
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 51 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
    +Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 47 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
    +Removes all completions of given plugin from Zshell (i.e. from FPATH).
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
    +0. Call the Zsh Plugin's Standard *_plugin_unload function
    +0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    +1. Delete bindkeys (...)
    +2. Delete Zstyles
    +3. Restore options
    +4. Remove aliases
    +5. Restore Zle state
    +6. Unfunction functions (created by plugin)
    +7. Clean-up FPATH and PATH
    +8. Delete created variables
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, + unalias, + unfunction, zle, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
    +zi.zsh/.zi-run-task
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
    +Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
    +$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 263 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
    +|-- install.zsh/.zi-get-latest-gh-r-url-part
    +|-- install.zsh/.zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-exists-physically
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-store-ices
    +|-- side.zsh/.zi-two-paths
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt, source, + trap, + wait +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
    +Updates (git pull) or does `git status` for all existing plugins.
    +This includes also plugins that are not loaded into Zsh (but exist
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 96 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
    +|-- install.zsh/.zi-compinit
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
    +|-- install.zsh/.zi-update-snippet
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/install.zsh.html b/install.zsh.html new file mode 100644 index 0000000..65bfcd5 --- /dev/null +++ b/install.zsh.html @@ -0,0 +1,3648 @@ + + + + + + + + + install.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
    + .zi-compile-plugin
    + .zi-compinit
    + .zi-download-file-stdout
    + .zi-download-snippet
    + .zi-extract
    + .zi-forget-completion
    + .zi-get-cygwin-package
    + .zi-get-latest-gh-r-url-part
    + .zi-get-package
    + .zi-get-url-mtime
    + .zi-install-completions
    + .zi-mirror-using-svn
    + .zi-parse-json
    + .zi-setup-plugin-dir
    + .zi-update-snippet
    + zicp
    + ziextract
    + zimv
    + zpextract
    + ∞zi-atclone-hook
    + ∞zi-atpull-e-hook
    + ∞zi-atpull-hook
    + ∞zi-compile-plugin-hook
    + ∞zi-cp-hook
    + ∞zi-extract-hook
    + ∞zi-make-e-hook
    + ∞zi-make-ee-hook
    + ∞zi-make-hook
    + ∞zi-mv-hook
    + ∞zi-ps-on-update-hook
    + ∞zi-reset-hook
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 84 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +autoload.zsh/.zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
    +User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
    +|-- compinit
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-or-status-all
    +zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
    +Downloads file to stdout. Supports following backend commands:
    +curl, wget, lftp, lynx. Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-get-cygwin-package
    +.zi-get-package
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
    +Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    +with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 309 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
    +|-- side.zsh/.zi-store-ices
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
    +|-- zi.zsh/+zi-message
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-forget-completion [[[
    +Implements alternation of Zsh state so that already initialized
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +.zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-latest-gh-r-url-part [[[
    +Gets version string of latest release of given Github package.
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 101 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 194 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/@zi-substitute
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
    +Installs all completions of given plugin. After that they are
    +visible to `compinit'. Visible completions can be selectively
    +disabled and enabled. User can access completion data with
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-setup-plugin-dir
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
    +Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    +in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    +compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
    +$2 - mode, "" - normal, "-u" - update, "-t" - test
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
    +Clones given plugin into PLUGIN_DIR. Supports multiple
    +sites (respecting `from' and `proto' ice modifiers).
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 189 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-store-ices
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 72 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ziextract [[[
    +If the file is an archive, it is extracted by this function.
    +Next stage is scanning of files with the common utility `file',
    +to detect executables. They are given +x mode. There are also
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    +
    +
    +
    +

    Has 274 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
    +.zi-get-package
    +.zi-setup-plugin-dir
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 79 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/side.zsh.html b/side.zsh.html new file mode 100644 index 0000000..76e3eab --- /dev/null +++ b/side.zsh.html @@ -0,0 +1,2932 @@ + + + + + + + + + side.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
    + .zi-compute-ice
    + .zi-countdown
    + .zi-exists-physically
    + .zi-exists-physically-message
    + .zi-first
    + .zi-store-ices
    + .zi-two-paths
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-clear-completions
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-exists-message
    +autoload.zsh/.zi-get-completion-owner-uspl2col
    +autoload.zsh/.zi-list-bindkeys
    +autoload.zsh/.zi-recently
    +autoload.zsh/.zi-search-completions
    +autoload.zsh/.zi-show-completions
    +autoload.zsh/.zi-show-registered-plugins
    +autoload.zsh/.zi-show-times
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
    +Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    +taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
    +$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    +wins with static ice; "pack-nf" means that disk-ices will
    +be ignored (no-file?)
    +$3 - name of output associative array, "ICE" is the default
    +$4 - name of output string parameter, to hold path to directory ("local_dir")
    +$5 - name of output string parameter, to hold filename ("filename")
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-pack-ice
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
    +autoload.zsh/.zi-edit
    +autoload.zsh/.zi-recall
    +autoload.zsh/.zi-update-or-status-snippet
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
    +Displays a countdown 5...4... etc. and returns 0 if it
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-atpull-e-hook
    +install.zsh/∞zi-atpull-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
    +Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    +ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
    +|-- zi.zsh/.zi-any-to-pid
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-find-other-matches
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
    +$2 - name of hash that holds values
    +$3 - additional keys of hash to store, space separated
    +$4 - additional keys of hash to store, empty-meaningful ices, space separated
    +$5 - the URL, if applicable
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
    +Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
    +power of it, you need a postgraduate degree in zsh.  However, simple
    +tasks work OK, so if that's all you need, here are some basic examples:
    +zmv '(*).txt' '$1.lis'
    +Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    +gets replaced by the $1 (not the `*', as happens in mmv, and note the
    +`$', not `=', so that you need to quote both words).
    +
    +
    +
    +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zi.zsh.html b/zi.zsh.html new file mode 100644 index 0000000..ec9e442 --- /dev/null +++ b/zi.zsh.html @@ -0,0 +1,4886 @@ + + + + + + + + + zi.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
    + +zi-message
    + +zi-prehelp-usage-message
    + -zi_scheduler_add_sh
    + .zi-add-fpath
    + .zi-add-report
    + .zi-any-to-pid
    + .zi-any-to-user-plugin
    + .zi-compdef-clear
    + .zi-compdef-replay
    + .zi-diff
    + .zi-diff-env
    + .zi-diff-functions
    + .zi-diff-options
    + .zi-diff-parameter
    + .zi-find-other-matches
    + .zi-formatter-bar
    + .zi-formatter-bar-util
    + .zi-formatter-pid
    + .zi-formatter-th-bar
    + .zi-formatter-url
    + .zi-get-mtime-into
    + .zi-get-object-path
    + .zi-ice
    + .zi-load
    + .zi-load-ices
    + .zi-load-object
    + .zi-load-plugin
    + .zi-load-snippet
    + .zi-main-message-formatter
    + .zi-pack-ice
    + .zi-parse-opts
    + .zi-prepare-home
    + .zi-register-plugin
    + .zi-run
    + .zi-run-task
    + .zi-set-m-func
    + .zi-setup-params
    + .zi-submit-turbo
    + .zi-tmp-subst-off
    + .zi-tmp-subst-on
    + .zi-util-shands-path
    + :zi-reload-and-run
    + :zi-tmp-subst-alias
    + :zi-tmp-subst-autoload
    + :zi-tmp-subst-bindkey
    + :zi-tmp-subst-compdef
    + :zi-tmp-subst-zle
    + :zi-tmp-subst-zstyle
    + @autoload
    + @zi-register-annex
    + @zi-register-hook
    + @zi-substitute
    + @zsh-plugin-run-on-unload
    + @zsh-plugin-run-on-update
    + pmodload
    + zi
    + zi-turbo
    + zicdclear
    + zicdreplay
    + zicompdef
    + zicompinit
    + zpcdclear
    + zpcdreplay
    + zpcompdef
    + zpcompinit
    +AUTOLOAD add-zsh-hook
    +AUTOLOAD compinit
    +AUTOLOAD is-at-least
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 202 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
    +|-- +zi-message
    +|-- @zi-register-hook
    +|-- add-zsh-hook
    +|-- autoload.zsh/.zi-module
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, + is-at-least, setopt, source, zmodload, zstyle +

    +
    +
    +

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
    +Deploys a sub-prompt message to be displayed OR a `zle
    +.reset-prompt' call to be invoked
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +.zi-compdef-clear
    +.zi-compdef-replay
    +.zi-load-snippet
    +.zi-register-plugin
    +.zi-run
    +.zi-set-m-func
    +:zi-tmp-subst-autoload
    +Script-Body
    +zi
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-unload
    +additional.zsh/:zi-tmp-subst-source
    +autoload.zsh/.zi-build-module
    +autoload.zsh/.zi-cd
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-show-zstatus
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +autoload.zsh/.zi-wait-for-update-jobs
    +install.zsh/.zi-compile-plugin
    +install.zsh/.zi-compinit
    +install.zsh/.zi-download-file-stdout
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-extract
    +install.zsh/.zi-get-cygwin-package
    +install.zsh/.zi-get-latest-gh-r-url-part
    +install.zsh/.zi-get-package
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +install.zsh/ziextract
    +install.zsh/∞zi-ps-on-update-hook
    +install.zsh/∞zi-reset-hook
    +side.zsh/.zi-countdown
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
    +Copies task into ZI_RUN array, called when a task timeouts.
    +A small function ran from pattern in /-substitution as a math
    +function.
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +:zi-tmp-subst-alias
    +:zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +:zi-tmp-subst-compdef
    +:zi-tmp-subst-zle
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
    +.zi-get-object-path
    +.zi-load
    +.zi-run
    +:zi-tmp-subst-autoload
    +autoload.zsh/.zi-any-to-uspl2
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-delete
    +autoload.zsh/.zi-find-completions-of-plugin
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-show-report
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-unregister-plugin
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-compute-ice
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-exists-physically
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdclear
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdreplay
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
    +Implements detection of change in any parameter's existence and type.
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
    +Plugin's main source file is in general `name.plugin.zsh'. However,
    +there can be different conventions, if that file is not found, then
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
    +.zi-load-snippet
    +.zi-run
    +zi
    +autoload.zsh/.zi-get-path
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-first
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
    +Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 76 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
    +|-- +zi-deploy-message
    +|-- install.zsh/.zi-get-package
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-run-task
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, + zle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
    +|-- +zi-deploy-message
    +|-- +zi-message
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, + unfunction, zparseopts, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-load
    +.zi-run-task
    +pmodload
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
    +Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    +second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +@zsh-plugin-run-on-unload
    +@zsh-plugin-run-on-update
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
    +|-- autoload.zsh/.zi-clear-completions
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
    +Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    +zsh_loaded_plugins array (managed according to the plugin standard:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
    +Run code inside plugin's folder
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
    +A backend, worker function of .zi-scheduler. It obtains the tasks
    +index and a few of its properties (like the type: plugin, snippet,
    +service plugin, service snippet) and executes it first checking for
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
    +$2 - the time assigned to the task
    +$3 - type: plugin, snippet, service plugin, service snippet
    +$4 - task's index in the ZI[WAIT_ICE_...] fields
    +$5 - mode: load or light
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
    +If `zi load`, `zi light` or `zi snippet`  will be
    +preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    +ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    +and this function adds it to internal data structures, so that
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
    +Turn off temporary substituting of functions completely for a given mode ("load", "light",
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
    +Turn on temporary substituting of functions of builtins and functions according to passed
    +mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
    +Marks given function ($3) for autoloading, and executes it triggering the load.
    +$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
    +$2 - autoload options
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +|-- +zi-message
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, + zparseopts +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts +

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
    +Function defined to hijack plugin's calls to the `compdef' function.
    +The hijacking is not only for reporting, but also to save compdef
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
    +Searches for timeout tasks, executes them. There's an array of tasks
    +waiting for execution, this scheduler manages them, detects which ones
    +should be run at current moment, decides to remove (or not) them from
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
    +invocation of the scheduler; this results in chain of `sched'
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
    +by one; this is handy if e.g. a docker image starts up and
    +needs to install all turbo-mode plugins without any hesitation
    +(delay), i.e. "burst" allows to run package installations from
    +script, not from prompt.
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
    +install.zsh/.zi-at-eval
    +install.zsh/.zi-get-package
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-cp-hook
    +install.zsh/∞zi-extract-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism, see:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 547 line(s). Calls functions:

    +
    +
    +
    +
    zi
    +|-- +zi-message
    +|-- +zi-prehelp-usage-message
    +|   `-- +zi-message
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- additional.zsh/.zi-debug-start
    +|-- additional.zsh/.zi-debug-stop
    +|-- additional.zsh/.zi-debug-unload
    +|-- autoload.zsh/.zi-analytics-menu
    +|-- autoload.zsh/.zi-cdisable
    +|-- autoload.zsh/.zi-cenable
    +|-- autoload.zsh/.zi-clear-completions
    +|-- autoload.zsh/.zi-compile-uncompile-all
    +|-- autoload.zsh/.zi-compiled
    +|-- autoload.zsh/.zi-control-menu
    +|-- autoload.zsh/.zi-help
    +|-- autoload.zsh/.zi-list-bindkeys
    +|-- autoload.zsh/.zi-list-compdef-replay
    +|-- autoload.zsh/.zi-ls
    +|-- autoload.zsh/.zi-module
    +|-- autoload.zsh/.zi-recently
    +|-- autoload.zsh/.zi-search-completions
    +|-- autoload.zsh/.zi-self-update
    +|-- autoload.zsh/.zi-show-all-reports
    +|-- autoload.zsh/.zi-show-completions
    +|-- autoload.zsh/.zi-show-debug-report
    +|-- autoload.zsh/.zi-show-registered-plugins
    +|-- autoload.zsh/.zi-show-report
    +|-- autoload.zsh/.zi-show-times
    +|-- autoload.zsh/.zi-show-zstatus
    +|-- autoload.zsh/.zi-uncompile-plugin
    +|-- autoload.zsh/.zi-uninstall-completions
    +|-- autoload.zsh/.zi-unload
    +|-- autoload.zsh/.zi-update-or-status
    +|-- autoload.zsh/.zi-update-or-status-all
    +|-- compinit
    +|-- install.zsh/.zi-compile-plugin
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, + source +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
    +With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    +Anything that doesn't match will be passed as if it were an ice mod.
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
    +`-- zi
    +    |-- +zi-message
    +    |-- +zi-prehelp-usage-message
    +    |   `-- +zi-message
    +    |-- additional.zsh/.zi-clear-debug-report
    +    |-- additional.zsh/.zi-debug-start
    +    |-- additional.zsh/.zi-debug-stop
    +    |-- additional.zsh/.zi-debug-unload
    +    |-- autoload.zsh/.zi-analytics-menu
    +    |-- autoload.zsh/.zi-cdisable
    +    |-- autoload.zsh/.zi-cenable
    +    |-- autoload.zsh/.zi-clear-completions
    +    |-- autoload.zsh/.zi-compile-uncompile-all
    +    |-- autoload.zsh/.zi-compiled
    +    |-- autoload.zsh/.zi-control-menu
    +    |-- autoload.zsh/.zi-help
    +    |-- autoload.zsh/.zi-list-bindkeys
    +    |-- autoload.zsh/.zi-list-compdef-replay
    +    |-- autoload.zsh/.zi-ls
    +    |-- autoload.zsh/.zi-module
    +    |-- autoload.zsh/.zi-recently
    +    |-- autoload.zsh/.zi-search-completions
    +    |-- autoload.zsh/.zi-self-update
    +    |-- autoload.zsh/.zi-show-all-reports
    +    |-- autoload.zsh/.zi-show-completions
    +    |-- autoload.zsh/.zi-show-debug-report
    +    |-- autoload.zsh/.zi-show-registered-plugins
    +    |-- autoload.zsh/.zi-show-report
    +    |-- autoload.zsh/.zi-show-times
    +    |-- autoload.zsh/.zi-show-zstatus
    +    |-- autoload.zsh/.zi-uncompile-plugin
    +    |-- autoload.zsh/.zi-uninstall-completions
    +    |-- autoload.zsh/.zi-unload
    +    |-- autoload.zsh/.zi-update-or-status
    +    |-- autoload.zsh/.zi-update-or-status-all
    +    |-- compinit
    +    |-- install.zsh/.zi-compile-plugin
    +    |-- install.zsh/.zi-compinit
    +    |-- install.zsh/.zi-forget-completion
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicdclear. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompdef. [[[
    +Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompinit. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It runs `autoload compinit; compinit' and respects
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +zinit() { zi "$@"; }
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
    +HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicompinit
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    +it'll accept any dot/dash-separated string of numbers as its second argument
    +and compare it to the dot/dash-separated first argument. Leading non-number
    +parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    +when the comparison is done; only the numbers matter. Any left-out segments
    +in the first argument that are present in the version string compared are
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    +
    +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +Script-Body
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - - -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/zsh/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file From 3df447e052cfee33af959154ffafb4eb6b849ac6 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 04:21:16 +0000 Subject: [PATCH 047/470] ss-o published a site update --- Zsh-Native-Scripting-Handbook.html | 1307 ++++++++ Zsh-Plugin-Standard.html | 1785 ++++++++++ additional.zsh.html | 2735 --------------- autoload.zsh.html | 5041 ---------------------------- install.zsh.html | 3648 -------------------- side.zsh.html | 2932 ---------------- zi.zsh.html | 4886 --------------------------- 7 files changed, 3092 insertions(+), 19242 deletions(-) create mode 100644 Zsh-Native-Scripting-Handbook.html create mode 100644 Zsh-Plugin-Standard.html delete mode 100644 additional.zsh.html delete mode 100644 autoload.zsh.html delete mode 100644 install.zsh.html delete mode 100644 side.zsh.html delete mode 100644 zi.zsh.html diff --git a/Zsh-Native-Scripting-Handbook.html b/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + + +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/Zsh-Plugin-Standard.html b/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/additional.zsh.html b/additional.zsh.html deleted file mode 100644 index f702ec4..0000000 --- a/additional.zsh.html +++ /dev/null @@ -1,2735 +0,0 @@ - - - - - - - - - additional.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-clear-debug-report
    -.zi-debug-start
    -.zi-debug-stop
    -.zi-debug-unload
    -.zi-service
    -.zi-wrap-track-functions
    -:zi-tmp-subst-source
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-unload
    -zi.zsh/zi
    -
    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-start
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-stop
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-unload
    -|-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    -
    -
    -
    -
    -
    $1 - type "p" or "s" (plugin or snippet)
    -$2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    .zi-service
    -|-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-track-functions
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-wrap-track-functions [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -
    -
    - - - - diff --git a/autoload.zsh.html b/autoload.zsh.html deleted file mode 100644 index 361408a..0000000 --- a/autoload.zsh.html +++ /dev/null @@ -1,5041 +0,0 @@ - - - - - - - - - autoload.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    autoload.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-analytics-menu
    -.zi-any-to-uspl2
    -.zi-at-eval
    -.zi-build-module
    -.zi-cd
    -.zi-cdisable
    -.zi-cenable
    -.zi-changes
    -.zi-check-comp-consistency
    -.zi-check-which-completions-are-enabled
    -.zi-check-which-completions-are-installed
    -.zi-clear-completions
    -.zi-clear-report-for
    -.zi-compile-uncompile-all
    -.zi-compiled
    -.zi-confirm
    -.zi-control-menu
    -.zi-create
    -.zi-delete
    -.zi-diff-env-compute
    -.zi-diff-functions-compute
    -.zi-diff-options-compute
    -.zi-diff-parameter-compute
    -.zi-edit
    -.zi-exists-message
    -.zi-find-completions-of-plugin
    -.zi-format-env
    -.zi-format-functions
    -.zi-format-options
    -.zi-format-parameter
    -.zi-get-completion-owner
    -.zi-get-completion-owner-uspl2col
    -.zi-get-path
    -.zi-glance
    -.zi-help
    -.zi-list-bindkeys
    -.zi-list-compdef-replay
    -.zi-ls
    -.zi-module
    -.zi-pager
    -.zi-prepare-readlink
    -.zi-recall
    -.zi-recently
    -.zi-restore-extendedglob
    -.zi-run-delete-hooks
    -.zi-save-set-extendedglob
    -.zi-search-completions
    -.zi-self-update
    -.zi-show-all-reports
    -.zi-show-completions
    -.zi-show-debug-report
    -.zi-show-registered-plugins
    -.zi-show-report
    -.zi-show-times
    -.zi-show-zstatus
    -.zi-stress
    -.zi-uncompile-plugin
    -.zi-uninstall-completions
    -.zi-unload
    -.zi-unregister-plugin
    -.zi-update-all-parallel
    -.zi-update-or-status
    -.zi-update-or-status-all
    -.zi-update-or-status-snippet
    -.zi-wait-for-update-jobs
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-analytics-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-analytics-menu [[[
    -Shows ❮ ZI ❯ analytics.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-any-to-uspl2
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-uspl2 [[[
    -Converts given plugin-spec to format that's used in keys for hash tables.
    -So basically, creates string "user/plugin" (this format is called: uspl2).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-report-for
    -.zi-exists-message
    -
    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-build-module
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-build-module [[[
    -Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    -
    -
    -
    -
    -
    -

    Has 41 line(s). Calls functions:

    -
    -
    -
    -
    .zi-build-module
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    zi-cd
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cd [[[
    -Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cd
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-cdisable
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cdisable [[[
    -Enables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cdisable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-cenable
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cenable [[[
    -Disables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cenable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-changes
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-changes [[[
    -Shows `git log` of given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-changes
    -|-- side.zsh/.zi-exists-physically-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-check-comp-consistency
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-comp-consistency [[[
    -❮ ZI ❯ creates symlink for each installed completion.
    -This function checks whether given completion (i.e.
    -file like "_mkdir") is indeed a symlink. Backup file
    -is a completion that is disabled - has the leading "_" removed.
    -
    -
    -
    -
    -
    $1 - path to completion within plugin's directory
    -$2 - path to backup file within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-check-which-completions-are-enabled
    -

    - ~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is disabled - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    Uninstalled completions will be reported as "0" - i.e. disabled
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-check-which-completions-are-installed
    -

    - ~~~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-installed [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is installed - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-clear-completions
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-completions [[[
    -Delete stray and improper completions.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 35 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-clear-report-for
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-report-for [[[
    -Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -additional.zsh/.zi-clear-debug-report
    -
    -
    -
    -
    zi-compile-uncompile-all
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-uncompile-all [[[
    -Compiles or uncompiles all existing (on disk) plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -|-- install.zsh/.zi-compile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-compiled
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compiled [[[
    -Displays list of plugins that are compiled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compiled
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-confirm
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-confirm [[[
    -Prints given question, waits for "y" key, evals given expression if "y" obtained
    -
    -
    -
    -
    -
    $1 - question
    -$2 - expression
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, read

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-delete
    -
    -
    -
    -
    zi-control-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-control-menu [[[
    -Shows control options.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-create
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-create [[[
    -Creates a plugin, also on Github (if not "_local/name" plugin).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 103 line(s). Calls functions:

    -
    -
    -
    -
    .zi-create
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, vared

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-delete
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-delete [[[
    -Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Calls functions:

    -
    -
    -
    -
    .zi-delete
    -|-- side.zsh/.zi-compute-ice
    -|-- zi.zsh/+zi-prehelp-usage-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-parse-opts
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-diff-env-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env-compute [[[
    -Computes ZI_PATH, ZI_FPATH that hold (f)path components
    -added by plugin. Uses data gathered earlier by .zi-diff-env().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-functions-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions-compute [[[
    -Computes FUNCTIONS that holds new functions added by plugin.
    -Uses data gathered earlier by .zi-diff-functions().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-options-compute
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options-compute [[[
    -Computes OPTIONS that holds options changed by plugin.
    -Uses data gathered earlier by .zi-diff-options().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-parameter-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter-compute [[[
    -Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    -parameters created or changed (their type) by plugin. Uses
    -data gathered earlier by .zi-diff-parameter().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-edit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-edit [[[
    -Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-edit
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-exists-message
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-message [[[
    -Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-message
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-find-completions-of-plugin
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-completions-of-plugin [[[
    -Searches for completions owned by given plugin.
    -Returns them in `reply' array.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-find-completions-of-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-env
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-env [[[
    -Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -$2 - if 1, then examine PATH, if 2, then examine FPATH
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-functions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-functions [[[
    -Creates a one or two columns text with functions created by given plugin.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-options [[[
    -Creates one-column text about options that changed when plugin "$1" was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-format-options
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-parameter
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-parameter [[[
    -Creates one column text that lists global parameters that changed when the given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-get-completion-owner
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner [[[
    -Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    -
    -
    -
    -
    -
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    -
    -
    -
    -
    -
    :A will read the link "twice" and give the final repository
    -directory, possibly without username in the uspl format; readlink will read the link "once"
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-completions
    -.zi-get-completion-owner-uspl2col
    -.zi-show-completions
    -
    -
    -
    -
    zi-get-completion-owner-uspl2col
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    -For shortening of code - returns colorized plugin name
    -that owns given completion.
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-completion-owner-uspl2col
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-get-path
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-path [[[
    -Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    -("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-path
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cd
    -.zi-uninstall-completions
    -
    -
    -
    -
    zi-glance
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-glance [[[
    -Shows colorized source code of plugin. Is able to use pygmentize,
    -highlight, GNU source-highlight.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 37 line(s). Calls functions:

    -
    -
    -
    -
    .zi-glance
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-help
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-help [[[
    -Shows usage information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-bindkeys
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-bindkeys [[[
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-list-bindkeys
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-compdef-replay
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-compdef-replay [[[
    -Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    -for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-ls
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ls [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-module
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-module [[[
    -Function that has sub-commands passed as long-options (with two dashes, --).
    -It's an attempt to plugin only this one function into `zi' function
    -defined in zi.zsh, to not make this file longer than it's needed.
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-build-module
    -zi.zsh/Script-Body
    -zi.zsh/zi
    -
    -
    -
    -
    zi-pager
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pager [[[
    -BusyBox less lacks the -X and -i options, so it can use more
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-glance
    -.zi-self-update
    -.zi-update-or-status
    -
    -
    -
    -
    zi-prepare-readlink
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-readlink [[[
    -Prepares readlink command, used for establishing completion's owner.
    -
    -
    -
    -
    -
    $REPLY = ":" or "readlink"
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -.zi-clear-completions
    -.zi-show-completions
    -
    -
    -
    -
    zi-recall
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recall [[[
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recall
    -|-- side.zsh/.zi-compute-ice
    -`-- zi.zsh/+zi-deploy-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-recently
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recently [[[
    -Shows plugins that obtained commits in specified past time.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - time spec, e.g. "1 week"
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recently
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-restore-extendedglob
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-restore-extendedglob [[[
    -Restores extendedglob-option from state saved earlier.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-run-delete-hooks
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-delete-hooks [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-delete-hooks
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-save-set-extendedglob
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-save-set-extendedglob [[[
    -Enables extendedglob-option first saving if it was already
    -enabled, for restoration of this state later.
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-search-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-search-completions [[[
    -While .zi-show-completions() shows what completions are
    -installed, this functions searches through all plugin dirs
    -showing what's available in general (for installation).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-search-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-self-update
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-self-update [[[
    -Updates ❮ ZI ❯ code (does a git pull).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 43 line(s). Calls functions:

    -
    -
    -
    -
    .zi-self-update
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-all-reports
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-all-reports [[[
    -Displays reports of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-all-reports
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-completions [[[
    -Display installed (enabled and disabled), completions. Detect
    -stray and improper ones.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-debug-report
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-debug-report [[[
    -Displays dtrace report (data recorded in interactive session).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-debug-report
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-registered-plugins
    -

    - ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-registered-plugins [[[
    -Lists loaded plugins (subcommands list, loaded).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-registered-plugins
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-report
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-report [[[
    -Displays report of the plugin given.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 66 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-report
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-all-reports
    -.zi-show-debug-report
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-times
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-times [[[
    -Shows loading times of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 51 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-times
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-zstatus
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-zstatus [[[
    -Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    -of available completions, etc.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 47 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-zstatus
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-stress
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-stress [[[
    -Compiles plugin with various options on and off to see how well the code is written. The options are:
    -
    -
    -
    -
    -
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Calls functions:

    -
    -
    -
    -
    .zi-stress
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-uncompile-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uncompile-plugin [[[
    -Uncompiles given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uncompile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-uninstall-completions
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uninstall-completions [[[
    -Removes all completions of given plugin from Zshell (i.e. from FPATH).
    -The FPATH is typically `~/.zi/completions/'.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uninstall-completions
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-unload
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unload [[[
    -0. Call the Zsh Plugin's Standard *_plugin_unload function
    -0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    -1. Delete bindkeys (...)
    -2. Delete Zstyles
    -3. Restore options
    -4. Remove aliases
    -5. Restore Zle state
    -6. Unfunction functions (created by plugin)
    -7. Clean-up FPATH and PATH
    -8. Delete created variables
    -9. Forget the plugin
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 380 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unload
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): alias, bindkey, eval, setopt, - unalias, - unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    additional.zsh/.zi-debug-unload
    -zi.zsh/.zi-run-task
    -zi.zsh/zi
    -
    -
    -
    -
    zi-unregister-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unregister-plugin [[[
    -Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    -zsh_loaded_plugins array (managed according to the plugin standard)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unregister-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -
    -
    -
    -
    zi-update-all-parallel
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-in-parallel [[[
    -
    -
    -
    -
    -
    -

    Has 63 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-all-parallel
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -
    -
    -
    -
    zi-update-or-status
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status [[[
    -Updates (git pull) or does `git status' for given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - "status" for status, other for update
    -$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$3 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 263 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status
    -|-- install.zsh/.zi-get-latest-gh-r-url-part
    -|-- install.zsh/.zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-exists-physically
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-store-ices
    -|-- side.zsh/.zi-two-paths
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-set-m-func
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt, source, - trap, - wait -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-all
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-all [[[
    -Updates (git pull) or does `git status` for all existing plugins.
    -This includes also plugins that are not loaded into Zsh (but exist
    -on disk). Also updates (i.e. redownloads) snippets.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 96 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-all
    -|-- install.zsh/.zi-compinit
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-snippet
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-snippet [[[
    -
    -
    -
    -
    -
    Implements update or status operation for snippet given by URL.
    -
    -
    -
    -
    -
    $1 - "status" or "update"
    -$2 - snippet URL
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-snippet
    -|-- install.zsh/.zi-update-snippet
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -.zi-update-or-status
    -
    -
    -
    -
    zi-wait-for-update-jobs
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-wait-for-update-jobs [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-wait-for-update-jobs
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/install.zsh.html b/install.zsh.html deleted file mode 100644 index 65bfcd5..0000000 --- a/install.zsh.html +++ /dev/null @@ -1,3648 +0,0 @@ - - - - - - - - - install.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    install.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-at-eval
    - .zi-compile-plugin
    - .zi-compinit
    - .zi-download-file-stdout
    - .zi-download-snippet
    - .zi-extract
    - .zi-forget-completion
    - .zi-get-cygwin-package
    - .zi-get-latest-gh-r-url-part
    - .zi-get-package
    - .zi-get-url-mtime
    - .zi-install-completions
    - .zi-mirror-using-svn
    - .zi-parse-json
    - .zi-setup-plugin-dir
    - .zi-update-snippet
    - zicp
    - ziextract
    - zimv
    - zpextract
    - ∞zi-atclone-hook
    - ∞zi-atpull-e-hook
    - ∞zi-atpull-hook
    - ∞zi-compile-plugin-hook
    - ∞zi-cp-hook
    - ∞zi-extract-hook
    - ∞zi-make-e-hook
    - ∞zi-make-ee-hook
    - ∞zi-make-hook
    - ∞zi-mv-hook
    - ∞zi-ps-on-update-hook
    - ∞zi-reset-hook
    -AUTOLOAD compinit
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -∞zi-atpull-hook
    -
    -
    -
    -
    zi-compile-plugin
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-plugin [[[
    -Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 84 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-plugin
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -autoload.zsh/.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-compinit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compinit [[[
    -User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    -After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    -
    -
    -
    -
    -
    No arguments.
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compinit
    -|-- compinit
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, setopt, unfunction -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-or-status-all
    -zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-download-file-stdout
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-file-stdout [[[
    -Downloads file to stdout. Supports following backend commands:
    -curl, wget, lftp, lynx. Used by snippet loading.
    -
    -
    -
    -
    -
    -

    Has 46 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-file-stdout
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-get-cygwin-package
    -.zi-get-package
    -.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-download-snippet
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-snippet [[[
    -Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    -with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    -to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    -
    -
    -
    -
    -
    -

    Has 309 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-snippet
    -|-- side.zsh/.zi-store-ices
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-snippet
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    zi-extract
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-extract() [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-extract
    -|-- zi.zsh/+zi-message
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-extract-hook
    -
    -
    -
    -
    zi-forget-completion
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-forget-completion [[[
    -Implements alternation of Zsh state so that already initialized
    -completion stops being visible to Zsh.
    -
    -
    -
    -
    -
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -.zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -zi.zsh/zi
    -
    -
    -
    -
    zi-get-cygwin-package
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-cygwin-package [[[
    -
    -
    -
    -
    -
    -

    Has 70 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-cygwin-package
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -
    -
    -
    -
    zi-get-latest-gh-r-url-part
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-latest-gh-r-url-part [[[
    -Gets version string of latest release of given Github package.
    -Connects to Github releases page.
    -
    -
    -
    -
    -
    -

    Has 101 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-latest-gh-r-url-part
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-get-package
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-package [[[
    -
    -
    -
    -
    -
    -

    Has 194 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-package
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/@zi-substitute
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-load
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-get-url-mtime
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-url-mtime [[[
    -For the given URL returns the date in the Last-Modified header as a time stamp
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-install-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-install-completions [[[
    -Installs all completions of given plugin. After that they are
    -visible to `compinit'. Visible completions can be selectively
    -disabled and enabled. User can access completion data with
    -`clist' or `completions' subcommand.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$3 - if 1, then reinstall, otherwise only install completions that aren't there
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-install-completions
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-setup-plugin-dir
    -zi.zsh/zi
    -
    -
    -
    -
    zi-mirror-using-svn
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-mirror-using-svn [[[
    -Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    -in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    -compares remote and local revision and outputs true if update is needed.
    -
    -
    -
    -
    -
    $1 - URL
    -$2 - mode, "" - normal, "-u" - update, "-t" - test
    -$3 - subdirectory (not path) with working copy, needed for -t and -u
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-parse-json
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-parse-json [[[
    -Retrievies the ice-list from given profile from the JSON of the package.json.
    -
    -
    -
    -
    -
    -

    Has 102 line(s). Calls functions:

    -
    -
    -
    -
    .zi-parse-json
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-get-package
    -
    -
    -
    -
    zi-setup-plugin-dir
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-plugin-dir [[[
    -Clones given plugin into PLUGIN_DIR. Supports multiple
    -sites (respecting `from' and `proto' ice modifiers).
    -Invokes compilation of plugin's main file.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -
    -
    -
    -
    -
    -

    Has 189 line(s). Calls functions:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-store-ices
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -zi.zsh/.zi-load
    -
    -
    -
    -
    zi-update-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-update-snippet [[[
    -
    -
    -
    -
    -
    -

    Has 72 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-snippet
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- zi.zsh/.zi-pack-ice
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status-snippet
    -
    -
    -
    -
    -

    zicp

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zicp [[[
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zimv
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    -

    ziextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ziextract [[[
    -If the file is an archive, it is extracted by this function.
    -Next stage is scanning of files with the common utility `file',
    -to detect executables. They are given +x mode. There are also
    -messages to the user on performed actions.
    -
    -
    -
    -
    -
    $1 - url
    -$2 - file
    -
    -
    -
    -
    -
    -

    Has 274 line(s). Calls functions:

    -
    -
    -
    -
    ziextract
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, unfunction, zparseopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-extract
    -.zi-get-package
    -.zi-setup-plugin-dir
    -zpextract
    -
    -
    -
    -
    -

    zimv

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zimv [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    zimv
    -`-- zicp
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zpextract [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpextract
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atclone-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atclone-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atclone-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-compile-plugin-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-compile-plugin-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-cp-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-cp-hook [[[
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-cp-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-extract-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-extract-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-extract-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-e-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-ee-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-ee-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-ee-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-mv-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-mv-hook [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-mv-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-ps-on-update-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-ps-on-update-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-ps-on-update-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-reset-hook

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ∞zi-reset-opt-hook [[[
    -
    -
    -
    -
    -
    -

    Has 79 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-reset-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/side.zsh.html b/side.zsh.html deleted file mode 100644 index 76e3eab..0000000 --- a/side.zsh.html +++ /dev/null @@ -1,2932 +0,0 @@ - - - - - - - - - side.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    side.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-any-colorify-as-uspl2
    - .zi-compute-ice
    - .zi-countdown
    - .zi-exists-physically
    - .zi-exists-physically-message
    - .zi-first
    - .zi-store-ices
    - .zi-two-paths
    -AUTOLOAD zmv
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-any-colorify-as-uspl2
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    -Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$REPLY = ANSI-colorified "user/plugin" string
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-colorify-as-uspl2
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-clear-completions
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-exists-message
    -autoload.zsh/.zi-get-completion-owner-uspl2col
    -autoload.zsh/.zi-list-bindkeys
    -autoload.zsh/.zi-recently
    -autoload.zsh/.zi-search-completions
    -autoload.zsh/.zi-show-completions
    -autoload.zsh/.zi-show-registered-plugins
    -autoload.zsh/.zi-show-times
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -zi.zsh/.zi-formatter-pid
    -
    -
    -
    -
    zi-compute-ice
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compute-ice [[[
    -Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    -taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    -(only valid if ICE[svn] is not set).
    -
    -
    -
    -
    -
    Can also pack resulting ices into ZI_SICE (see $2).
    -
    -
    -
    -
    -
    $1 - URL (also plugin-spec)
    -$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    -wins with static ice; "pack-nf" means that disk-ices will
    -be ignored (no-file?)
    -$3 - name of output associative array, "ICE" is the default
    -$4 - name of output string parameter, to hold path to directory ("local_dir")
    -$5 - name of output string parameter, to hold filename ("filename")
    -$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    -
    -
    -
    -
    -
    -

    Has 116 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compute-ice
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-pack-ice
    -`-- zmv
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, zmv

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-delete
    -autoload.zsh/.zi-edit
    -autoload.zsh/.zi-recall
    -autoload.zsh/.zi-update-or-status-snippet
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-countdown
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-countdown [[[
    -Displays a countdown 5...4... etc. and returns 0 if it
    -sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-countdown
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-run-delete-hooks
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-atpull-e-hook
    -install.zsh/∞zi-atpull-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -
    -
    -
    -
    zi-exists-physically
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-exists-physically-message
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically-message [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -
    -
    -
    -
    zi-first
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-first [[[
    -Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    -ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    -is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-first
    -|-- zi.zsh/.zi-any-to-pid
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-find-other-matches
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-two-paths
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-store-ices
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-store-ices [[[
    -Saves ice mods in given hash onto disk.
    -
    -
    -
    -
    -
    $1 - directory where to create / delete files
    -$2 - name of hash that holds values
    -$3 - additional keys of hash to store, space separated
    -$4 - additional keys of hash to store, empty-meaningful ices, space separated
    -$5 - the URL, if applicable
    -$6 - the mode (1 - svn, 0 - single file), if applicable
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-two-paths
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-two-paths [[[
    -Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    -returns 2 possible paths for further examination
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-two-paths
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    -

    zmv

    -
    -
    -
    -
    -
    function zmv {
    -zmv, zcp, zln:
    -
    -
    -
    -
    -
    This is a multiple move based on zsh pattern matching.  To get the full
    -power of it, you need a postgraduate degree in zsh.  However, simple
    -tasks work OK, so if that's all you need, here are some basic examples:
    -zmv '(*).txt' '$1.lis'
    -Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    -gets replaced by the $1 (not the `*', as happens in mmv, and note the
    -`$', not `=', so that you need to quote both words).
    -
    -
    -
    -
    -
    -

    Has 299 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, getopts, read, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zi.zsh.html b/zi.zsh.html deleted file mode 100644 index ec9e442..0000000 --- a/zi.zsh.html +++ /dev/null @@ -1,4886 +0,0 @@ - - - - - - - - - zi.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    zi.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     +zi-deploy-message
    - +zi-message
    - +zi-prehelp-usage-message
    - -zi_scheduler_add_sh
    - .zi-add-fpath
    - .zi-add-report
    - .zi-any-to-pid
    - .zi-any-to-user-plugin
    - .zi-compdef-clear
    - .zi-compdef-replay
    - .zi-diff
    - .zi-diff-env
    - .zi-diff-functions
    - .zi-diff-options
    - .zi-diff-parameter
    - .zi-find-other-matches
    - .zi-formatter-bar
    - .zi-formatter-bar-util
    - .zi-formatter-pid
    - .zi-formatter-th-bar
    - .zi-formatter-url
    - .zi-get-mtime-into
    - .zi-get-object-path
    - .zi-ice
    - .zi-load
    - .zi-load-ices
    - .zi-load-object
    - .zi-load-plugin
    - .zi-load-snippet
    - .zi-main-message-formatter
    - .zi-pack-ice
    - .zi-parse-opts
    - .zi-prepare-home
    - .zi-register-plugin
    - .zi-run
    - .zi-run-task
    - .zi-set-m-func
    - .zi-setup-params
    - .zi-submit-turbo
    - .zi-tmp-subst-off
    - .zi-tmp-subst-on
    - .zi-util-shands-path
    - :zi-reload-and-run
    - :zi-tmp-subst-alias
    - :zi-tmp-subst-autoload
    - :zi-tmp-subst-bindkey
    - :zi-tmp-subst-compdef
    - :zi-tmp-subst-zle
    - :zi-tmp-subst-zstyle
    - @autoload
    - @zi-register-annex
    - @zi-register-hook
    - @zi-substitute
    - @zsh-plugin-run-on-unload
    - @zsh-plugin-run-on-update
    - pmodload
    - zi
    - zi-turbo
    - zicdclear
    - zicdreplay
    - zicompdef
    - zicompinit
    - zpcdclear
    - zpcdreplay
    - zpcompdef
    - zpcompinit
    -AUTOLOAD add-zsh-hook
    -AUTOLOAD compinit
    -AUTOLOAD is-at-least
    -PRECMD-HOOK @zi-scheduler
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 202 line(s). Calls functions:

    -
    -
    -
    -
    Script-Body
    -|-- +zi-message
    -|-- @zi-register-hook
    -|-- add-zsh-hook
    -|-- autoload.zsh/.zi-module
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, alias, autoload, export, - is-at-least, setopt, source, zmodload, zstyle -

    -
    -
    -

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    -
    -
    -
    -

    +zi-deploy-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-deploy-message. [[[
    -Deploys a sub-prompt message to be displayed OR a `zle
    -.reset-prompt' call to be invoked
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-recall
    -
    -
    -
    -
    -

    +zi-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-message. [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -.zi-compdef-clear
    -.zi-compdef-replay
    -.zi-load-snippet
    -.zi-register-plugin
    -.zi-run
    -.zi-set-m-func
    -:zi-tmp-subst-autoload
    -Script-Body
    -zi
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-unload
    -additional.zsh/:zi-tmp-subst-source
    -autoload.zsh/.zi-build-module
    -autoload.zsh/.zi-cd
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-show-zstatus
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -autoload.zsh/.zi-wait-for-update-jobs
    -install.zsh/.zi-compile-plugin
    -install.zsh/.zi-compinit
    -install.zsh/.zi-download-file-stdout
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-extract
    -install.zsh/.zi-get-cygwin-package
    -install.zsh/.zi-get-latest-gh-r-url-part
    -install.zsh/.zi-get-package
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -install.zsh/ziextract
    -install.zsh/∞zi-ps-on-update-hook
    -install.zsh/∞zi-reset-hook
    -side.zsh/.zi-countdown
    -side.zsh/.zi-exists-physically-message
    -
    -
    -
    -
    -

    +zi-prehelp-usage-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-prehelp-usage-message. [[[
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    -

    -zi_scheduler_add_sh

    -
    -
    -
    -
    -
    FUNCTION: -zi_scheduler_add_sh. [[[
    -Copies task into ZI_RUN array, called when a task timeouts.
    -A small function ran from pattern in /-substitution as a math
    -function.
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-add-fpath
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-fpath. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-add-fpath
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-add-report
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-report. [[[
    -Adds a report line for given plugin.
    -
    -
    -
    -
    -
    $1 - uspl2, i.e. user/plugin
    -$2, ... - the text
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -:zi-tmp-subst-alias
    -:zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -:zi-tmp-subst-compdef
    -:zi-tmp-subst-zle
    -:zi-tmp-subst-zstyle
    -
    -
    -
    -
    zi-any-to-pid
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-any-to-user-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-user-plugin. [[[
    -Allows elastic plugin-spec across the code.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    Returns user and plugin in $reply.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-add-fpath
    -.zi-get-object-path
    -.zi-load
    -.zi-run
    -:zi-tmp-subst-autoload
    -autoload.zsh/.zi-any-to-uspl2
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-delete
    -autoload.zsh/.zi-find-completions-of-plugin
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-show-report
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-unregister-plugin
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-compute-ice
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-exists-physically
    -side.zsh/.zi-first
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-compdef-clear
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-clear. [[[
    -Implements user-exposed functionality to clear gathered compdefs.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-clear
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdclear
    -zpcdclear
    -
    -
    -
    -
    zi-compdef-replay
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-replay. [[[
    -Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-replay
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): compdef

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdreplay
    -zpcdreplay
    -
    -
    -
    -
    zi-diff
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff. [[[
    -Performs diff actions of all types
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-diff-env
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env. [[[
    -Implements detection of change in PATH and FPATH.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -.zi-load-plugin
    -
    -
    -
    -
    zi-diff-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions. [[[
    -Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options. [[[
    -Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-parameter
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter. [[[
    -Implements detection of change in any parameter's existence and type.
    -Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-find-other-matches
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-other-matches. [[[
    -Plugin's main source file is in general `name.plugin.zsh'. However,
    -there can be different conventions, if that file is not found, then
    -this functions examines other conventions in the most sane order.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-formatter-bar
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar-util
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar-util. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-bar
    -.zi-formatter-th-bar
    -
    -
    -
    -
    zi-formatter-pid
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-pid
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-th-bar
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-th-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-th-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-url
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-url. [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-get-mtime-into
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-mtime-into. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-update-or-status-all
    -
    -
    -
    -
    zi-get-object-path
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-object-path. [[[
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-ices
    -.zi-load-snippet
    -.zi-run
    -zi
    -autoload.zsh/.zi-get-path
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-first
    -side.zsh/.zi-two-paths
    -
    -
    -
    -
    zi-ice
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ice. [[[
    -Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    -next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    -
    -
    -
    -
    -
    -

    Has 12 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load. [[[
    -Implements the exposed-to-user action of loading a plugin.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin name, if the third format is used
    -
    -
    -
    -
    -
    -

    Has 76 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load
    -|-- +zi-deploy-message
    -|-- install.zsh/.zi-get-package
    -`-- install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-run-task
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-load-ices
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-ices. [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-ices
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load-object
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-object. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-object
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-load-plugin
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-plugin. [[[
    -Lower-level function for loading a plugin.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -$3 - mode (light or load)
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-plugin
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, unfunction, - zle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-load-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-snippet. [[[
    -Implements the exposed-to-user action of loading a snippet.
    -
    -
    -
    -
    -
    $1 - url (can be local, absolute path).
    -
    -
    -
    -
    -
    -

    Has 173 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-snippet
    -|-- +zi-deploy-message
    -|-- +zi-message
    -`-- install.zsh/.zi-download-snippet
    -
    -
    -
    -

    Uses feature(s): autoload, eval, setopt, source, - unfunction, zparseopts, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-load
    -.zi-run-task
    -pmodload
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-main-message-formatter
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: +zi-message-formatter [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-pack-ice
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pack-ice. [[[
    -Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    -second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    -or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -@zsh-plugin-run-on-unload
    -@zsh-plugin-run-on-update
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-compute-ice
    -
    -
    -
    -
    zi-parse-opts
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: +zi-parse-opts. [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    zi-prepare-home
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-home. [[[
    -Creates all directories needed by ZI, first checks if they already exist.
    -
    -
    -
    -
    -
    -

    Has 38 line(s). Calls functions:

    -
    -
    -
    -
    .zi-prepare-home
    -|-- autoload.zsh/.zi-clear-completions
    -`-- install.zsh/.zi-compinit
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-register-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-register-plugin. [[[
    -Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    -zsh_loaded_plugins array (managed according to the plugin standard:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-register-plugin
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-run
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run. [[[
    -Run code inside plugin's folder
    -It uses the `correct' parameter from upper's scope zi().
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-run-task
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-task. [[[
    -A backend, worker function of .zi-scheduler. It obtains the tasks
    -index and a few of its properties (like the type: plugin, snippet,
    -service plugin, service snippet) and executes it first checking for
    -additional conditions (like non-numeric wait'' ice).
    -
    -
    -
    -
    -
    $1 - the pass number, either 1st or 2nd pass
    -$2 - the time assigned to the task
    -$3 - type: plugin, snippet, service plugin, service snippet
    -$4 - task's index in the ZI[WAIT_ICE_...] fields
    -$5 - mode: load or light
    -$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-task
    -`-- autoload.zsh/.zi-unload
    -
    -
    -
    -

    Uses feature(s): eval, source, zle, zpty

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -
    -
    -
    -
    zi-set-m-func
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION:.zi-set-m-func() [[[
    -Sets and withdraws the temporary, atclone/atpull time function `m`.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-set-m-func
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-setup-params
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-params. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -
    -
    -
    -
    zi-submit-turbo
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-submit-turbo. [[[
    -If `zi load`, `zi light` or `zi snippet`  will be
    -preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    -ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    -and this function adds it to internal data structures, so that
    -@zi-scheduler can run (load, unload) this as a task.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-tmp-subst-off
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-off. [[[
    -Turn off temporary substituting of functions completely for a given mode ("load", "light",
    -"light-b" (i.e. the `trackbinds' mode) or "compdef").
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-tmp-subst-on
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-on. [[[
    -Turn on temporary substituting of functions of builtins and functions according to passed
    -mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    -to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -
    -
    -
    -
    zi-util-shands-path
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-util-shands-path. [[[
    -Replaces parts of path with %HOME, etc.
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    :zi-reload-and-run

    -
    -
    -
    -
    -
    FUNCTION: :zi-reload-and-run. [[[
    -Marks given function ($3) for autoloading, and executes it triggering the load.
    -$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    -because using that on older Zsh versions causes problems with traps.
    -
    -
    -
    -
    -
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    -
    -
    -
    -
    -
    $1 - FPATH dedicated to function
    -$2 - autoload options
    -$3 - function name (one that needs autoloading)
    -
    -
    -
    -
    -
    Author: Bart Schaefer
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, unfunction

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-alias

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-alias. [[[
    -Function defined to hijack plugin's calls to the `alias' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-alias
    -
    -
    -
    -

    Uses feature(s): alias, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-autoload

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-autoload. [[[
    -Function defined to hijack plugin's calls to the `autoload' builtin.
    -
    -
    -
    -
    -
    The hijacking is not only to gather report data, but also to.
    -run custom `autoload' function, that doesn't need FPATH.
    -
    -
    -
    -
    -
    -

    Has 106 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -|-- +zi-message
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): autoload, eval, is-at-least, setopt, - zparseopts -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -@autoload
    -
    -
    -
    -
    -

    :zi-tmp-subst-bindkey

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    -Function defined to hijack plugin's calls to the `bindkey' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-bindkey
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts -

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-compdef

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-compdef. [[[
    -Function defined to hijack plugin's calls to the `compdef' function.
    -The hijacking is not only for reporting, but also to save compdef
    -calls so that `compinit' can be called after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-compdef
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zle. [[[.
    -Function defined to hijack plugin's calls to the `zle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zle
    -
    -
    -
    -

    Uses feature(s): setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zstyle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    -Function defined to hijack plugin's calls to the `zstyle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zstyle
    -
    -
    -
    -

    Uses feature(s): setopt, zparseopts, zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @autoload

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: @autoload. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    @autoload
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-annex

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-annex. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-hook

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-hook. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -
    -

    @zi-scheduler

    -
    -
    -
    -
    -
    FUNCTION: @zi-scheduler. [[[
    -Searches for timeout tasks, executes them. There's an array of tasks
    -waiting for execution, this scheduler manages them, detects which ones
    -should be run at current moment, decides to remove (or not) them from
    -the array after execution.
    -
    -
    -
    -
    -
    $1 - if "following", then it is non-first (second and more)
    -invocation of the scheduler; this results in chain of `sched'
    -invocations that results in repetitive @zi-scheduler activity.
    -
    -
    -
    -
    -
    if "burst", then all tasks are marked timeout and executed one
    -by one; this is handy if e.g. a docker image starts up and
    -needs to install all turbo-mode plugins without any hesitation
    -(delay), i.e. "burst" allows to run package installations from
    -script, not from prompt.
    -
    -
    -
    -
    -
    -

    Has 74 line(s). Is a precmd hook. Calls functions:

    -
    -
    -
    -
    @zi-scheduler
    -`-- add-zsh-hook
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-substitute

    -
    -
    -
    -
    -
    FUNCTION: @zi-substitute. [[[
    -
    -
    -
    -
    -
    -

    Has 36 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-at-eval
    -install.zsh/.zi-at-eval
    -install.zsh/.zi-get-package
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-cp-hook
    -install.zsh/∞zi-extract-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -install.zsh/∞zi-mv-hook
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    @zsh-plugin-run-on-unload

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism, see:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zsh-plugin-run-on-update

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-update
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    pmodload

    -
    -
    -
    -
    -
    FUNCTION: pmodload. [[[
    -Compatibility with Prezto. Calls can be recursive.
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    pmodload
    -
    -
    -
    -

    Uses feature(s): zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zi

    -
    -
    -
    -
    -
    FUNCTION: zi. [[[
    -Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    -
    -
    -
    -
    -
    -

    Has 547 line(s). Calls functions:

    -
    -
    -
    -
    zi
    -|-- +zi-message
    -|-- +zi-prehelp-usage-message
    -|   `-- +zi-message
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- additional.zsh/.zi-debug-start
    -|-- additional.zsh/.zi-debug-stop
    -|-- additional.zsh/.zi-debug-unload
    -|-- autoload.zsh/.zi-analytics-menu
    -|-- autoload.zsh/.zi-cdisable
    -|-- autoload.zsh/.zi-cenable
    -|-- autoload.zsh/.zi-clear-completions
    -|-- autoload.zsh/.zi-compile-uncompile-all
    -|-- autoload.zsh/.zi-compiled
    -|-- autoload.zsh/.zi-control-menu
    -|-- autoload.zsh/.zi-help
    -|-- autoload.zsh/.zi-list-bindkeys
    -|-- autoload.zsh/.zi-list-compdef-replay
    -|-- autoload.zsh/.zi-ls
    -|-- autoload.zsh/.zi-module
    -|-- autoload.zsh/.zi-recently
    -|-- autoload.zsh/.zi-search-completions
    -|-- autoload.zsh/.zi-self-update
    -|-- autoload.zsh/.zi-show-all-reports
    -|-- autoload.zsh/.zi-show-completions
    -|-- autoload.zsh/.zi-show-debug-report
    -|-- autoload.zsh/.zi-show-registered-plugins
    -|-- autoload.zsh/.zi-show-report
    -|-- autoload.zsh/.zi-show-times
    -|-- autoload.zsh/.zi-show-zstatus
    -|-- autoload.zsh/.zi-uncompile-plugin
    -|-- autoload.zsh/.zi-uninstall-completions
    -|-- autoload.zsh/.zi-unload
    -|-- autoload.zsh/.zi-update-or-status
    -|-- autoload.zsh/.zi-update-or-status-all
    -|-- compinit
    -|-- install.zsh/.zi-compile-plugin
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, eval, setopt, - source -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi-turbo
    -
    -
    -
    -
    -

    zi-turbo

    -
    -
    -
    -
    -
    FUNCTION: zi-turbo. [[[
    -With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    -Anything that doesn't match will be passed as if it were an ice mod.
    -Default ices depth'3' and lucid, allowed values [0-9][a-d].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zi-turbo
    -`-- zi
    -    |-- +zi-message
    -    |-- +zi-prehelp-usage-message
    -    |   `-- +zi-message
    -    |-- additional.zsh/.zi-clear-debug-report
    -    |-- additional.zsh/.zi-debug-start
    -    |-- additional.zsh/.zi-debug-stop
    -    |-- additional.zsh/.zi-debug-unload
    -    |-- autoload.zsh/.zi-analytics-menu
    -    |-- autoload.zsh/.zi-cdisable
    -    |-- autoload.zsh/.zi-cenable
    -    |-- autoload.zsh/.zi-clear-completions
    -    |-- autoload.zsh/.zi-compile-uncompile-all
    -    |-- autoload.zsh/.zi-compiled
    -    |-- autoload.zsh/.zi-control-menu
    -    |-- autoload.zsh/.zi-help
    -    |-- autoload.zsh/.zi-list-bindkeys
    -    |-- autoload.zsh/.zi-list-compdef-replay
    -    |-- autoload.zsh/.zi-ls
    -    |-- autoload.zsh/.zi-module
    -    |-- autoload.zsh/.zi-recently
    -    |-- autoload.zsh/.zi-search-completions
    -    |-- autoload.zsh/.zi-self-update
    -    |-- autoload.zsh/.zi-show-all-reports
    -    |-- autoload.zsh/.zi-show-completions
    -    |-- autoload.zsh/.zi-show-debug-report
    -    |-- autoload.zsh/.zi-show-registered-plugins
    -    |-- autoload.zsh/.zi-show-report
    -    |-- autoload.zsh/.zi-show-times
    -    |-- autoload.zsh/.zi-show-zstatus
    -    |-- autoload.zsh/.zi-uncompile-plugin
    -    |-- autoload.zsh/.zi-uninstall-completions
    -    |-- autoload.zsh/.zi-unload
    -    |-- autoload.zsh/.zi-update-or-status
    -    |-- autoload.zsh/.zi-update-or-status-all
    -    |-- compinit
    -    |-- install.zsh/.zi-compile-plugin
    -    |-- install.zsh/.zi-compinit
    -    |-- install.zsh/.zi-forget-completion
    -    `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdclear

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicdclear. [[[
    -A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdreplay

    -
    -
    -
    -
    -
    FUNCTION: zicdreplay. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It works like `zi cdreplay', which cannot be invoked from such hook ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompdef

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompdef. [[[
    -Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompinit. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It runs `autoload compinit; compinit' and respects
    -ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdclear

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdreplay

    -
    -
    -
    -
    -
    ]]]
    -Compatibility functions. [[[
    -zinit() { zi "$@"; }
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompdef

    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompinit

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    add-zsh-hook

    -
    -
    -
    -
    -
    Add to HOOK the given FUNCTION.
    -HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    -zshexit, zsh_directory_name (the _functions subscript is not required).
    -
    -
    -
    -
    -
    With -d, remove the function from the hook instead; delete the hook
    -variable if it is empty.
    -
    -
    -
    -
    -
    -D behaves like -d, but pattern characters are active in the
    -function name, so any matching function will be deleted from the hook.
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, getopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -Script-Body
    -
    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicompinit
    -zpcompinit
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    -is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    -it'll accept any dot/dash-separated string of numbers as its second argument
    -and compare it to the dot/dash-separated first argument. Leading non-number
    -parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    -when the comparison is done; only the numbers matter. Any left-out segments
    -in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -Script-Body
    -
    -
    -
    -
    -
    -
    - - - - From 39c9d699108ae361b7167dad0f8f81d0a3f91798 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 04:24:51 +0000 Subject: [PATCH 048/470] ss-o published a site update --- Zsh-Native-Scripting-Handbook.html | 1307 -------- Zsh-Plugin-Standard.html | 1785 ---------- additional.zsh.html | 2735 +++++++++++++++ autoload.zsh.html | 5041 ++++++++++++++++++++++++++++ install.zsh.html | 3648 ++++++++++++++++++++ side.zsh.html | 2932 ++++++++++++++++ zi.zsh.html | 4886 +++++++++++++++++++++++++++ 7 files changed, 19242 insertions(+), 3092 deletions(-) delete mode 100644 Zsh-Native-Scripting-Handbook.html delete mode 100644 Zsh-Plugin-Standard.html create mode 100644 additional.zsh.html create mode 100644 autoload.zsh.html create mode 100644 install.zsh.html create mode 100644 side.zsh.html create mode 100644 zi.zsh.html diff --git a/Zsh-Native-Scripting-Handbook.html b/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - - -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/Zsh-Plugin-Standard.html b/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/additional.zsh.html b/additional.zsh.html new file mode 100644 index 0000000..f702ec4 --- /dev/null +++ b/additional.zsh.html @@ -0,0 +1,2735 @@ + + + + + + + + + additional.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
    +.zi-debug-start
    +.zi-debug-stop
    +.zi-debug-unload
    +.zi-service
    +.zi-wrap-track-functions
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
    +|-- autoload.zsh/.zi-unload
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-service [[[
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
    +$2 - mode - for plugin (light or load)
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
    +|-- zi.zsh/.zi-load
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-track-functions
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +
    +
    + + + + diff --git a/autoload.zsh.html b/autoload.zsh.html new file mode 100644 index 0000000..361408a --- /dev/null +++ b/autoload.zsh.html @@ -0,0 +1,5041 @@ + + + + + + + + + autoload.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-analytics-menu
    +.zi-any-to-uspl2
    +.zi-at-eval
    +.zi-build-module
    +.zi-cd
    +.zi-cdisable
    +.zi-cenable
    +.zi-changes
    +.zi-check-comp-consistency
    +.zi-check-which-completions-are-enabled
    +.zi-check-which-completions-are-installed
    +.zi-clear-completions
    +.zi-clear-report-for
    +.zi-compile-uncompile-all
    +.zi-compiled
    +.zi-confirm
    +.zi-control-menu
    +.zi-create
    +.zi-delete
    +.zi-diff-env-compute
    +.zi-diff-functions-compute
    +.zi-diff-options-compute
    +.zi-diff-parameter-compute
    +.zi-edit
    +.zi-exists-message
    +.zi-find-completions-of-plugin
    +.zi-format-env
    +.zi-format-functions
    +.zi-format-options
    +.zi-format-parameter
    +.zi-get-completion-owner
    +.zi-get-completion-owner-uspl2col
    +.zi-get-path
    +.zi-glance
    +.zi-help
    +.zi-list-bindkeys
    +.zi-list-compdef-replay
    +.zi-ls
    +.zi-module
    +.zi-pager
    +.zi-prepare-readlink
    +.zi-recall
    +.zi-recently
    +.zi-restore-extendedglob
    +.zi-run-delete-hooks
    +.zi-save-set-extendedglob
    +.zi-search-completions
    +.zi-self-update
    +.zi-show-all-reports
    +.zi-show-completions
    +.zi-show-debug-report
    +.zi-show-registered-plugins
    +.zi-show-report
    +.zi-show-times
    +.zi-show-zstatus
    +.zi-stress
    +.zi-uncompile-plugin
    +.zi-uninstall-completions
    +.zi-unload
    +.zi-unregister-plugin
    +.zi-update-all-parallel
    +.zi-update-or-status
    +.zi-update-or-status-all
    +.zi-update-or-status-snippet
    +.zi-wait-for-update-jobs
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Shows ❮ ZI ❯ analytics.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
    +Converts given plugin-spec to format that's used in keys for hash tables.
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 41 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
    +|-- side.zsh/.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
    +❮ ZI ❯ creates symlink for each installed completion.
    +This function checks whether given completion (i.e.
    +file like "_mkdir") is indeed a symlink. Backup file
    +is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    + ~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    + ~~~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +|-- install.zsh/.zi-compile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-control-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-control-menu [[[
    +Shows control options.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
    +|-- side.zsh/.zi-compute-ice
    +|-- zi.zsh/+zi-prehelp-usage-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
    +Computes ZI_PATH, ZI_FPATH that hold (f)path components
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
    +Computes FUNCTIONS that holds new functions added by plugin.
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
    +Computes OPTIONS that holds options changed by plugin.
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
    +Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    +parameters created or changed (their type) by plugin. Uses
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
    +Searches for completions owned by given plugin.
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
    +.zi-get-completion-owner-uspl2col
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +For shortening of code - returns colorized plugin name
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
    +Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
    +Shows colorized source code of plugin. Is able to use pygmentize,
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
    +Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
    +Function that has sub-commands passed as long-options (with two dashes, --).
    +It's an attempt to plugin only this one function into `zi' function
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
    +zi.zsh/Script-Body
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +BusyBox less lacks the -X and -i options, so it can use more
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
    +.zi-self-update
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +.zi-clear-completions
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
    +|-- side.zsh/.zi-compute-ice
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
    +Enables extendedglob-option first saving if it was already
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
    +While .zi-show-completions() shows what completions are
    +installed, this functions searches through all plugin dirs
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
    +Display installed (enabled and disabled), completions. Detect
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    + ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
    +.zi-show-debug-report
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 51 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
    +Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 47 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
    +Removes all completions of given plugin from Zshell (i.e. from FPATH).
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
    +0. Call the Zsh Plugin's Standard *_plugin_unload function
    +0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    +1. Delete bindkeys (...)
    +2. Delete Zstyles
    +3. Restore options
    +4. Remove aliases
    +5. Restore Zle state
    +6. Unfunction functions (created by plugin)
    +7. Clean-up FPATH and PATH
    +8. Delete created variables
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, + unalias, + unfunction, zle, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
    +zi.zsh/.zi-run-task
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
    +Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
    +$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 263 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
    +|-- install.zsh/.zi-get-latest-gh-r-url-part
    +|-- install.zsh/.zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-exists-physically
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-store-ices
    +|-- side.zsh/.zi-two-paths
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt, source, + trap, + wait +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
    +Updates (git pull) or does `git status` for all existing plugins.
    +This includes also plugins that are not loaded into Zsh (but exist
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 96 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
    +|-- install.zsh/.zi-compinit
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
    +|-- install.zsh/.zi-update-snippet
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/install.zsh.html b/install.zsh.html new file mode 100644 index 0000000..65bfcd5 --- /dev/null +++ b/install.zsh.html @@ -0,0 +1,3648 @@ + + + + + + + + + install.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
    + .zi-compile-plugin
    + .zi-compinit
    + .zi-download-file-stdout
    + .zi-download-snippet
    + .zi-extract
    + .zi-forget-completion
    + .zi-get-cygwin-package
    + .zi-get-latest-gh-r-url-part
    + .zi-get-package
    + .zi-get-url-mtime
    + .zi-install-completions
    + .zi-mirror-using-svn
    + .zi-parse-json
    + .zi-setup-plugin-dir
    + .zi-update-snippet
    + zicp
    + ziextract
    + zimv
    + zpextract
    + ∞zi-atclone-hook
    + ∞zi-atpull-e-hook
    + ∞zi-atpull-hook
    + ∞zi-compile-plugin-hook
    + ∞zi-cp-hook
    + ∞zi-extract-hook
    + ∞zi-make-e-hook
    + ∞zi-make-ee-hook
    + ∞zi-make-hook
    + ∞zi-mv-hook
    + ∞zi-ps-on-update-hook
    + ∞zi-reset-hook
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 84 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +autoload.zsh/.zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
    +User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
    +|-- compinit
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-or-status-all
    +zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
    +Downloads file to stdout. Supports following backend commands:
    +curl, wget, lftp, lynx. Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-get-cygwin-package
    +.zi-get-package
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
    +Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    +with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 309 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
    +|-- side.zsh/.zi-store-ices
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
    +|-- zi.zsh/+zi-message
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-forget-completion [[[
    +Implements alternation of Zsh state so that already initialized
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +.zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-latest-gh-r-url-part [[[
    +Gets version string of latest release of given Github package.
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 101 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 194 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/@zi-substitute
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
    +Installs all completions of given plugin. After that they are
    +visible to `compinit'. Visible completions can be selectively
    +disabled and enabled. User can access completion data with
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-setup-plugin-dir
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
    +Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    +in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    +compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
    +$2 - mode, "" - normal, "-u" - update, "-t" - test
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
    +Clones given plugin into PLUGIN_DIR. Supports multiple
    +sites (respecting `from' and `proto' ice modifiers).
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 189 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-store-ices
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 72 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ziextract [[[
    +If the file is an archive, it is extracted by this function.
    +Next stage is scanning of files with the common utility `file',
    +to detect executables. They are given +x mode. There are also
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    +
    +
    +
    +

    Has 274 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
    +.zi-get-package
    +.zi-setup-plugin-dir
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 79 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/side.zsh.html b/side.zsh.html new file mode 100644 index 0000000..76e3eab --- /dev/null +++ b/side.zsh.html @@ -0,0 +1,2932 @@ + + + + + + + + + side.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
    + .zi-compute-ice
    + .zi-countdown
    + .zi-exists-physically
    + .zi-exists-physically-message
    + .zi-first
    + .zi-store-ices
    + .zi-two-paths
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-clear-completions
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-exists-message
    +autoload.zsh/.zi-get-completion-owner-uspl2col
    +autoload.zsh/.zi-list-bindkeys
    +autoload.zsh/.zi-recently
    +autoload.zsh/.zi-search-completions
    +autoload.zsh/.zi-show-completions
    +autoload.zsh/.zi-show-registered-plugins
    +autoload.zsh/.zi-show-times
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
    +Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    +taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
    +$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    +wins with static ice; "pack-nf" means that disk-ices will
    +be ignored (no-file?)
    +$3 - name of output associative array, "ICE" is the default
    +$4 - name of output string parameter, to hold path to directory ("local_dir")
    +$5 - name of output string parameter, to hold filename ("filename")
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-pack-ice
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
    +autoload.zsh/.zi-edit
    +autoload.zsh/.zi-recall
    +autoload.zsh/.zi-update-or-status-snippet
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
    +Displays a countdown 5...4... etc. and returns 0 if it
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-atpull-e-hook
    +install.zsh/∞zi-atpull-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
    +Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    +ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
    +|-- zi.zsh/.zi-any-to-pid
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-find-other-matches
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
    +$2 - name of hash that holds values
    +$3 - additional keys of hash to store, space separated
    +$4 - additional keys of hash to store, empty-meaningful ices, space separated
    +$5 - the URL, if applicable
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
    +Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
    +power of it, you need a postgraduate degree in zsh.  However, simple
    +tasks work OK, so if that's all you need, here are some basic examples:
    +zmv '(*).txt' '$1.lis'
    +Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    +gets replaced by the $1 (not the `*', as happens in mmv, and note the
    +`$', not `=', so that you need to quote both words).
    +
    +
    +
    +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zi.zsh.html b/zi.zsh.html new file mode 100644 index 0000000..ec9e442 --- /dev/null +++ b/zi.zsh.html @@ -0,0 +1,4886 @@ + + + + + + + + + zi.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
    + +zi-message
    + +zi-prehelp-usage-message
    + -zi_scheduler_add_sh
    + .zi-add-fpath
    + .zi-add-report
    + .zi-any-to-pid
    + .zi-any-to-user-plugin
    + .zi-compdef-clear
    + .zi-compdef-replay
    + .zi-diff
    + .zi-diff-env
    + .zi-diff-functions
    + .zi-diff-options
    + .zi-diff-parameter
    + .zi-find-other-matches
    + .zi-formatter-bar
    + .zi-formatter-bar-util
    + .zi-formatter-pid
    + .zi-formatter-th-bar
    + .zi-formatter-url
    + .zi-get-mtime-into
    + .zi-get-object-path
    + .zi-ice
    + .zi-load
    + .zi-load-ices
    + .zi-load-object
    + .zi-load-plugin
    + .zi-load-snippet
    + .zi-main-message-formatter
    + .zi-pack-ice
    + .zi-parse-opts
    + .zi-prepare-home
    + .zi-register-plugin
    + .zi-run
    + .zi-run-task
    + .zi-set-m-func
    + .zi-setup-params
    + .zi-submit-turbo
    + .zi-tmp-subst-off
    + .zi-tmp-subst-on
    + .zi-util-shands-path
    + :zi-reload-and-run
    + :zi-tmp-subst-alias
    + :zi-tmp-subst-autoload
    + :zi-tmp-subst-bindkey
    + :zi-tmp-subst-compdef
    + :zi-tmp-subst-zle
    + :zi-tmp-subst-zstyle
    + @autoload
    + @zi-register-annex
    + @zi-register-hook
    + @zi-substitute
    + @zsh-plugin-run-on-unload
    + @zsh-plugin-run-on-update
    + pmodload
    + zi
    + zi-turbo
    + zicdclear
    + zicdreplay
    + zicompdef
    + zicompinit
    + zpcdclear
    + zpcdreplay
    + zpcompdef
    + zpcompinit
    +AUTOLOAD add-zsh-hook
    +AUTOLOAD compinit
    +AUTOLOAD is-at-least
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 202 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
    +|-- +zi-message
    +|-- @zi-register-hook
    +|-- add-zsh-hook
    +|-- autoload.zsh/.zi-module
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, + is-at-least, setopt, source, zmodload, zstyle +

    +
    +
    +

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
    +Deploys a sub-prompt message to be displayed OR a `zle
    +.reset-prompt' call to be invoked
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +.zi-compdef-clear
    +.zi-compdef-replay
    +.zi-load-snippet
    +.zi-register-plugin
    +.zi-run
    +.zi-set-m-func
    +:zi-tmp-subst-autoload
    +Script-Body
    +zi
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-unload
    +additional.zsh/:zi-tmp-subst-source
    +autoload.zsh/.zi-build-module
    +autoload.zsh/.zi-cd
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-show-zstatus
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +autoload.zsh/.zi-wait-for-update-jobs
    +install.zsh/.zi-compile-plugin
    +install.zsh/.zi-compinit
    +install.zsh/.zi-download-file-stdout
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-extract
    +install.zsh/.zi-get-cygwin-package
    +install.zsh/.zi-get-latest-gh-r-url-part
    +install.zsh/.zi-get-package
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +install.zsh/ziextract
    +install.zsh/∞zi-ps-on-update-hook
    +install.zsh/∞zi-reset-hook
    +side.zsh/.zi-countdown
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
    +Copies task into ZI_RUN array, called when a task timeouts.
    +A small function ran from pattern in /-substitution as a math
    +function.
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +:zi-tmp-subst-alias
    +:zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +:zi-tmp-subst-compdef
    +:zi-tmp-subst-zle
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
    +.zi-get-object-path
    +.zi-load
    +.zi-run
    +:zi-tmp-subst-autoload
    +autoload.zsh/.zi-any-to-uspl2
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-delete
    +autoload.zsh/.zi-find-completions-of-plugin
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-show-report
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-unregister-plugin
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-compute-ice
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-exists-physically
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdclear
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdreplay
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
    +Implements detection of change in any parameter's existence and type.
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
    +Plugin's main source file is in general `name.plugin.zsh'. However,
    +there can be different conventions, if that file is not found, then
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
    +.zi-load-snippet
    +.zi-run
    +zi
    +autoload.zsh/.zi-get-path
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-first
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
    +Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 76 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
    +|-- +zi-deploy-message
    +|-- install.zsh/.zi-get-package
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-run-task
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, + zle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
    +|-- +zi-deploy-message
    +|-- +zi-message
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, + unfunction, zparseopts, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-load
    +.zi-run-task
    +pmodload
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
    +Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    +second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +@zsh-plugin-run-on-unload
    +@zsh-plugin-run-on-update
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
    +|-- autoload.zsh/.zi-clear-completions
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
    +Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    +zsh_loaded_plugins array (managed according to the plugin standard:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
    +Run code inside plugin's folder
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
    +A backend, worker function of .zi-scheduler. It obtains the tasks
    +index and a few of its properties (like the type: plugin, snippet,
    +service plugin, service snippet) and executes it first checking for
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
    +$2 - the time assigned to the task
    +$3 - type: plugin, snippet, service plugin, service snippet
    +$4 - task's index in the ZI[WAIT_ICE_...] fields
    +$5 - mode: load or light
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
    +If `zi load`, `zi light` or `zi snippet`  will be
    +preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    +ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    +and this function adds it to internal data structures, so that
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
    +Turn off temporary substituting of functions completely for a given mode ("load", "light",
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
    +Turn on temporary substituting of functions of builtins and functions according to passed
    +mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
    +Marks given function ($3) for autoloading, and executes it triggering the load.
    +$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
    +$2 - autoload options
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +|-- +zi-message
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, + zparseopts +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts +

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
    +Function defined to hijack plugin's calls to the `compdef' function.
    +The hijacking is not only for reporting, but also to save compdef
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
    +Searches for timeout tasks, executes them. There's an array of tasks
    +waiting for execution, this scheduler manages them, detects which ones
    +should be run at current moment, decides to remove (or not) them from
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
    +invocation of the scheduler; this results in chain of `sched'
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
    +by one; this is handy if e.g. a docker image starts up and
    +needs to install all turbo-mode plugins without any hesitation
    +(delay), i.e. "burst" allows to run package installations from
    +script, not from prompt.
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
    +install.zsh/.zi-at-eval
    +install.zsh/.zi-get-package
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-cp-hook
    +install.zsh/∞zi-extract-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism, see:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 547 line(s). Calls functions:

    +
    +
    +
    +
    zi
    +|-- +zi-message
    +|-- +zi-prehelp-usage-message
    +|   `-- +zi-message
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- additional.zsh/.zi-debug-start
    +|-- additional.zsh/.zi-debug-stop
    +|-- additional.zsh/.zi-debug-unload
    +|-- autoload.zsh/.zi-analytics-menu
    +|-- autoload.zsh/.zi-cdisable
    +|-- autoload.zsh/.zi-cenable
    +|-- autoload.zsh/.zi-clear-completions
    +|-- autoload.zsh/.zi-compile-uncompile-all
    +|-- autoload.zsh/.zi-compiled
    +|-- autoload.zsh/.zi-control-menu
    +|-- autoload.zsh/.zi-help
    +|-- autoload.zsh/.zi-list-bindkeys
    +|-- autoload.zsh/.zi-list-compdef-replay
    +|-- autoload.zsh/.zi-ls
    +|-- autoload.zsh/.zi-module
    +|-- autoload.zsh/.zi-recently
    +|-- autoload.zsh/.zi-search-completions
    +|-- autoload.zsh/.zi-self-update
    +|-- autoload.zsh/.zi-show-all-reports
    +|-- autoload.zsh/.zi-show-completions
    +|-- autoload.zsh/.zi-show-debug-report
    +|-- autoload.zsh/.zi-show-registered-plugins
    +|-- autoload.zsh/.zi-show-report
    +|-- autoload.zsh/.zi-show-times
    +|-- autoload.zsh/.zi-show-zstatus
    +|-- autoload.zsh/.zi-uncompile-plugin
    +|-- autoload.zsh/.zi-uninstall-completions
    +|-- autoload.zsh/.zi-unload
    +|-- autoload.zsh/.zi-update-or-status
    +|-- autoload.zsh/.zi-update-or-status-all
    +|-- compinit
    +|-- install.zsh/.zi-compile-plugin
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, + source +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
    +With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    +Anything that doesn't match will be passed as if it were an ice mod.
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
    +`-- zi
    +    |-- +zi-message
    +    |-- +zi-prehelp-usage-message
    +    |   `-- +zi-message
    +    |-- additional.zsh/.zi-clear-debug-report
    +    |-- additional.zsh/.zi-debug-start
    +    |-- additional.zsh/.zi-debug-stop
    +    |-- additional.zsh/.zi-debug-unload
    +    |-- autoload.zsh/.zi-analytics-menu
    +    |-- autoload.zsh/.zi-cdisable
    +    |-- autoload.zsh/.zi-cenable
    +    |-- autoload.zsh/.zi-clear-completions
    +    |-- autoload.zsh/.zi-compile-uncompile-all
    +    |-- autoload.zsh/.zi-compiled
    +    |-- autoload.zsh/.zi-control-menu
    +    |-- autoload.zsh/.zi-help
    +    |-- autoload.zsh/.zi-list-bindkeys
    +    |-- autoload.zsh/.zi-list-compdef-replay
    +    |-- autoload.zsh/.zi-ls
    +    |-- autoload.zsh/.zi-module
    +    |-- autoload.zsh/.zi-recently
    +    |-- autoload.zsh/.zi-search-completions
    +    |-- autoload.zsh/.zi-self-update
    +    |-- autoload.zsh/.zi-show-all-reports
    +    |-- autoload.zsh/.zi-show-completions
    +    |-- autoload.zsh/.zi-show-debug-report
    +    |-- autoload.zsh/.zi-show-registered-plugins
    +    |-- autoload.zsh/.zi-show-report
    +    |-- autoload.zsh/.zi-show-times
    +    |-- autoload.zsh/.zi-show-zstatus
    +    |-- autoload.zsh/.zi-uncompile-plugin
    +    |-- autoload.zsh/.zi-uninstall-completions
    +    |-- autoload.zsh/.zi-unload
    +    |-- autoload.zsh/.zi-update-or-status
    +    |-- autoload.zsh/.zi-update-or-status-all
    +    |-- compinit
    +    |-- install.zsh/.zi-compile-plugin
    +    |-- install.zsh/.zi-compinit
    +    |-- install.zsh/.zi-forget-completion
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicdclear. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompdef. [[[
    +Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompinit. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It runs `autoload compinit; compinit' and respects
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +zinit() { zi "$@"; }
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
    +HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicompinit
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    +it'll accept any dot/dash-separated string of numbers as its second argument
    +and compare it to the dot/dash-separated first argument. Leading non-number
    +parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    +when the comparison is done; only the numbers matter. Any left-out segments
    +in the first argument that are present in the version string compared are
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    +
    +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +Script-Body
    +
    +
    +
    +
    +
    +
    + + + + From 2b3241abd1e7f60f9fda47c5c2fa0eac3ec2b1dc Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 05:49:14 +0000 Subject: [PATCH 049/470] ss-o published a site update --- Makefile | 28 + zsdoc/Makefile | 78 + zsdoc/README.md | 50 + zsdoc/asciidoc/additional.zsh.adoc | 165 ++ zsdoc/asciidoc/autoload.zsh.adoc | 1520 ++++++++++++++ zsdoc/asciidoc/install.zsh.adoc | 746 +++++++ zsdoc/asciidoc/side.zsh.adoc | 300 +++ zsdoc/asciidoc/zi.zsh.adoc | 1583 +++++++++++++++ .../html/additional.zsh.html | 0 .../html/autoload.zsh.html | 0 .../html/install.zsh.html | 0 side.zsh.html => zsdoc/html/side.zsh.html | 0 zi.zsh.html => zsdoc/html/zi.zsh.html | 0 zsdoc/pdf/additional.zsh.pdf | Bin 0 -> 99114 bytes zsdoc/pdf/autoload.zsh.pdf | Bin 0 -> 440338 bytes zsdoc/pdf/install.zsh.pdf | Bin 0 -> 242957 bytes zsdoc/pdf/side.zsh.pdf | Bin 0 -> 135509 bytes zsdoc/pdf/zi.zsh.pdf | Bin 0 -> 412082 bytes zsh/Zsh-Native-Scripting-Handbook.html | 1307 ++++++++++++ zsh/Zsh-Plugin-Standard.html | 1785 +++++++++++++++++ 20 files changed, 7562 insertions(+) create mode 100644 Makefile create mode 100644 zsdoc/Makefile create mode 100644 zsdoc/README.md create mode 100644 zsdoc/asciidoc/additional.zsh.adoc create mode 100644 zsdoc/asciidoc/autoload.zsh.adoc create mode 100644 zsdoc/asciidoc/install.zsh.adoc create mode 100644 zsdoc/asciidoc/side.zsh.adoc create mode 100644 zsdoc/asciidoc/zi.zsh.adoc rename additional.zsh.html => zsdoc/html/additional.zsh.html (100%) rename autoload.zsh.html => zsdoc/html/autoload.zsh.html (100%) rename install.zsh.html => zsdoc/html/install.zsh.html (100%) rename side.zsh.html => zsdoc/html/side.zsh.html (100%) rename zi.zsh.html => zsdoc/html/zi.zsh.html (100%) create mode 100644 zsdoc/pdf/additional.zsh.pdf create mode 100644 zsdoc/pdf/autoload.zsh.pdf create mode 100644 zsdoc/pdf/install.zsh.pdf create mode 100644 zsdoc/pdf/side.zsh.pdf create mode 100644 zsdoc/pdf/zi.zsh.pdf create mode 100644 zsh/Zsh-Native-Scripting-Handbook.html create mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..946d81d --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc + +%.zwc: % + zi/lib/zcompile $< + +clone: clean + git clone --depth 1 --branch main https://github.com/z-shell/zi + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh + rm -vrf zsdoc/data + rm -vrf zsdoc/asciidoc/*.adoc + zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ + zi/zi.zsh \ + zi/lib/zsh/side.zsh \ + zi/lib/zsh/install.zsh \ + zi/lib/zsh/autoload.zsh \ + zi/lib/zsh/additional.zsh + @mkdir -p zsdoc/asciidoc + cp -vf zsdoc/*.adoc zsdoc/asciidoc/ + +clean: + rm -rf zi + rm -vf zsdoc/*.adoc + +distclean: clean + rm -rf zsdoc/data + +.PHONY: all clean clone man pdf html adoc diff --git a/zsdoc/Makefile b/zsdoc/Makefile new file mode 100644 index 0000000..b540f2f --- /dev/null +++ b/zsdoc/Makefile @@ -0,0 +1,78 @@ +all: man pdf html + +# MAN +# Converted with a2x from asciidoc package + +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 + +man/zi.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc + +man/side.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc + +man/install.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc + +man/autoload.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc + +man/additional.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc + +# PDF +# Uses asciidoctor not a2x (i.e. not asciidoc) + +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf + +pdf/zi.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc + +pdf/side.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc + +pdf/install.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc + +pdf/autoload.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc + +pdf/additional.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html + +html/zi.zsh.html: + @mkdir -p html + asciidoctor -D html zi.zsh.adoc + +html/side.zsh.html: + @mkdir -p html + asciidoctor -D html side.zsh.adoc + +html/install.zsh.html: + @mkdir -p html + asciidoctor -D html install.zsh.adoc + +html/autoload.zsh.html: + @mkdir -p html + asciidoctor -D html autoload.zsh.adoc + +html/additional.zsh.html: + @mkdir -p html + asciidoctor -D html additional.zsh.adoc + +clean: + rm -rvf man pdf html data + +.PHONY: man pdf html clean diff --git a/zsdoc/README.md b/zsdoc/README.md new file mode 100644 index 0000000..c9709b2 --- /dev/null +++ b/zsdoc/README.md @@ -0,0 +1,50 @@ +The files will be processed and their documentation will be generated +in subdirectory `zsdoc` (with meta-data in subdirectory `data`). + +> Supported are Bash and Zsh scripts. + +- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` +- Zsh control binary is: `zsh` +- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` + +Options: + +```shell +-h/--help # Usage information +-v/--verbose # More verbose operation-status output +-q/--quiet # No status messages +-n/--noansi # No colors in terminal output +--cignore # Specify which comment lines should be ignored +-f/--fpath # Paths separated by : pointing to directories with functions +--synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" +--blocka # String used as block-begin, default: {{{ +--blockb # String used as block-end, default: }}} +--scomm # Strip comment char "#" from function comments +--bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) +``` + +Example --cignore options: + +```shell +--cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ +--cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ +``` + +File is parsed for synopsis block, which can be e.g.: + +```shell +# synopsis {{{my synopsis, can be multi-line}}} +``` + + Other block that is parsed is commenting on environment variables. There can be multiple such blocks, + +their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines +and results in a table in the output AsciiDoc document. An example block: + +```shell +# env-vars {{{ +# PATH -> paths to executables +# MANPATH -> paths to manuals }}} +``` + + Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. diff --git a/zsdoc/asciidoc/additional.zsh.adoc b/zsdoc/asciidoc/additional.zsh.adoc new file mode 100644 index 0000000..50e0404 --- /dev/null +++ b/zsdoc/asciidoc/additional.zsh.adoc @@ -0,0 +1,165 @@ +additional.zsh(1) +================= +:compat-mode!: + +NAME +---- +additional.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-clear-debug-report + .zi-debug-start + .zi-debug-stop + .zi-debug-unload + .zi-service + .zi-wrap-track-functions + :zi-tmp-subst-source + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-clear-debug-report +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-debug-report [[[ + Forgets dtrace repport gathered up to this moment. +____ + +Has 1 line(s). Calls functions: + + .zi-clear-debug-report + `-- autoload.zsh/.zi-clear-report-for + +Called by: + + autoload.zsh/.zi-unload + zi.zsh/zi + +.zi-debug-start +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-start [[[ + Starts Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 9 line(s). Calls functions: + + .zi-debug-start + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-diff + `-- zi.zsh/.zi-tmp-subst-on + +Called by: + + zi.zsh/zi + +.zi-debug-stop +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-stop [[[ + Stops Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 3 line(s). Calls functions: + + .zi-debug-stop + |-- zi.zsh/.zi-diff + `-- zi.zsh/.zi-tmp-subst-off + +Called by: + + zi.zsh/zi + +.zi-debug-unload +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-unload [[[ + Reverts changes detected by dtrace run. +____ + +Has 6 line(s). Calls functions: + + .zi-debug-unload + |-- autoload.zsh/.zi-unload + `-- zi.zsh/+zi-message + +Uses feature(s): _source_ + +Called by: + + zi.zsh/zi + +.zi-service +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-service [[[ + Handles given service, i.e. obtains lock, runs it, or waits if no lock + + $1 - type "p" or "s" (plugin or snippet) + $2 - mode - for plugin (light or load) + $3 - id - URL or plugin ID or alias name (from id-as'') +____ + +Has 29 line(s). Calls functions: + + .zi-service + |-- zi.zsh/.zi-load + `-- zi.zsh/.zi-load-snippet + +Uses feature(s): _kill_, _read_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-wrap-track-functions +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-wrap-track-functions [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-source +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-source [[[ +____ + +Has 25 line(s). Calls functions: + + :zi-tmp-subst-source + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + diff --git a/zsdoc/asciidoc/autoload.zsh.adoc b/zsdoc/asciidoc/autoload.zsh.adoc new file mode 100644 index 0000000..58fb2ad --- /dev/null +++ b/zsdoc/asciidoc/autoload.zsh.adoc @@ -0,0 +1,1520 @@ +autoload.zsh(1) +=============== +:compat-mode!: + +NAME +---- +autoload.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-analytics-menu + .zi-any-to-uspl2 + .zi-at-eval + .zi-build-module + .zi-cd + .zi-cdisable + .zi-cenable + .zi-changes + .zi-check-comp-consistency + .zi-check-which-completions-are-enabled + .zi-check-which-completions-are-installed + .zi-clear-completions + .zi-clear-report-for + .zi-compile-uncompile-all + .zi-compiled + .zi-confirm + .zi-control-menu + .zi-create + .zi-delete + .zi-diff-env-compute + .zi-diff-functions-compute + .zi-diff-options-compute + .zi-diff-parameter-compute + .zi-edit + .zi-exists-message + .zi-find-completions-of-plugin + .zi-format-env + .zi-format-functions + .zi-format-options + .zi-format-parameter + .zi-get-completion-owner + .zi-get-completion-owner-uspl2col + .zi-get-path + .zi-glance + .zi-help + .zi-list-bindkeys + .zi-list-compdef-replay + .zi-ls + .zi-module + .zi-pager + .zi-prepare-readlink + .zi-recall + .zi-recently + .zi-restore-extendedglob + .zi-run-delete-hooks + .zi-save-set-extendedglob + .zi-search-completions + .zi-self-update + .zi-show-all-reports + .zi-show-completions + .zi-show-debug-report + .zi-show-registered-plugins + .zi-show-report + .zi-show-times + .zi-show-zstatus + .zi-stress + .zi-uncompile-plugin + .zi-uninstall-completions + .zi-unload + .zi-unregister-plugin + .zi-update-all-parallel + .zi-update-or-status + .zi-update-or-status-all + .zi-update-or-status-snippet + .zi-wait-for-update-jobs + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-analytics-menu +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-analytics-menu [[[ + Shows ❮ ZI ❯ analytics. + + User-action entry point. +____ + +Has 23 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-any-to-uspl2 +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-uspl2 [[[ + Converts given plugin-spec to format that's used in keys for hash tables. + So basically, creates string "user/plugin" (this format is called: uspl2). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 2 line(s). Calls functions: + + .zi-any-to-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-clear-report-for + .zi-exists-message + +.zi-at-eval +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-build-module +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-build-module [[[ + Performs ./configure && make on the module and displays information how to load the module in .zshrc. +____ + +Has 41 line(s). Calls functions: + + .zi-build-module + `-- zi.zsh/+zi-message + +Called by: + + .zi-module + +.zi-cd +~~~~~~ + +____ + + FUNCTION: .zi-cd [[[ + Jumps to plugin's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 15 line(s). Calls functions: + + .zi-cd + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-cdisable +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cdisable [[[ + Enables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 27 line(s). Calls functions: + + .zi-cdisable + +Called by: + + zi.zsh/zi + +.zi-cenable +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cenable [[[ + Disables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 26 line(s). Calls functions: + + .zi-cenable + +Called by: + + zi.zsh/zi + +.zi-changes +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-changes [[[ + Shows `git log` of given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-changes + |-- side.zsh/.zi-exists-physically-message + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-check-comp-consistency +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-comp-consistency [[[ + ❮ ZI ❯ creates symlink for each installed completion. + This function checks whether given completion (i.e. file like "_mkdir") is indeed a symlink. + Backup file is a completion that is disabled - has the leading "_" removed. + + $1 - path to completion within plugin's directory + $2 - path to backup file within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-check-which-completions-are-enabled +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-enabled [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is disabled - returns 0 or 1 on corresponding positions in reply. + + Uninstalled completions will be reported as "0" - i.e. disabled + + $1, ... - path to completion within plugin's directory +____ + +Has 10 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-check-which-completions-are-installed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-installed [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is installed - returns 0 or 1 on corresponding positions in reply. + + $1, ... - path to completion within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-clear-completions +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-completions [[[ + Delete stray and improper completions. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 35 line(s). Calls functions: + + .zi-clear-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-clear-report-for +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-report-for [[[ + Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 23 line(s). Calls functions: + + .zi-clear-report-for + +Called by: + + .zi-unload + additional.zsh/.zi-clear-debug-report + +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-compiled +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. + + User-action entry point. +____ + +Has 23 line(s). Calls functions: + + .zi-compiled + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-confirm +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-confirm [[[ + Prints given question, waits for "y" key, evals given expression if "y" obtained + + $1 - question + $2 - expression +____ + +Has 22 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _read_ + +Called by: + + .zi-delete + +.zi-control-menu +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-control-menu [[[ + Shows control options. + + User-action entry point. +____ + +Has 22 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-create +~~~~~~~~~~ + +____ + + FUNCTION: .zi-create [[[ + Creates a plugin, also on Github (if not "_local/name" plugin). + + User-action entry point. + + $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 103 line(s). Calls functions: + + .zi-create + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _autoload_, _setopt_, _vared_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-delete +~~~~~~~~~~ + +____ + + FUNCTION: .zi-delete [[[ + Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 93 line(s). Calls functions: + + .zi-delete + |-- side.zsh/.zi-compute-ice + |-- zi.zsh/+zi-prehelp-usage-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-parse-opts + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-diff-env-compute +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env-compute [[[ + Computes ZI_PATH, ZI_FPATH that hold (f)path components + added by plugin. Uses data gathered earlier by .zi-diff-env(). + + $1 - user/plugin +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-functions-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions-compute [[[ + Computes FUNCTIONS that holds new functions added by plugin. + Uses data gathered earlier by .zi-diff-functions(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-options-compute +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options-compute [[[ + Computes OPTIONS that holds options changed by plugin. + Uses data gathered earlier by .zi-diff-options(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-parameter-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter-compute [[[ + Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold + parameters created or changed (their type) by plugin. Uses + data gathered earlier by .zi-diff-parameter(). + + $1 - user/plugin +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-edit +~~~~~~~~ + +____ + + FUNCTION: .zi-edit [[[ + Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-edit + `-- side.zsh/.zi-compute-ice + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-exists-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-message [[[ + Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 7 line(s). Calls functions: + + .zi-exists-message + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-show-report + .zi-unload + +.zi-find-completions-of-plugin +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-completions-of-plugin [[[ + Searches for completions owned by given plugin. + Returns them in `reply' array. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 5 line(s). Calls functions: + + .zi-find-completions-of-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-format-env +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-env [[[ + Creates one-column text about FPATH or PATH elements added when given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) + $2 - if 1, then examine PATH, if 2, then examine FPATH +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-functions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-functions [[[ + Creates a one or two columns text with functions created by given plugin. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 34 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-options +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-options [[[ + Creates one-column text about options that changed when plugin "$1" was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 19 line(s). Calls functions: + + .zi-format-options + +Called by: + + .zi-show-report + +.zi-format-parameter +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-parameter [[[ + Creates one column text that lists global parameters that changed when the given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-get-completion-owner +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner [[[ + Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. + + Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. + + :A will read the link "twice" and give the final repository + directory, possibly without username in the uspl format; readlink will read the link "once" + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-clear-completions + .zi-get-completion-owner-uspl2col + .zi-show-completions + +.zi-get-completion-owner-uspl2col +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner-uspl2col [[[ + For shortening of code - returns colorized plugin name + that owns given completion. + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 2 line(s). Calls functions: + + .zi-get-completion-owner-uspl2col + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-get-path +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-path [[[ + Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path + ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. +____ + +Has 5 line(s). Calls functions: + + .zi-get-path + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-cd + .zi-uninstall-completions + +.zi-glance +~~~~~~~~~~ + +____ + + FUNCTION: .zi-glance [[[ + Shows colorized source code of plugin. Is able to use pygmentize, + highlight, GNU source-highlight. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 37 line(s). Calls functions: + + .zi-glance + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-help +~~~~~~~~ + +____ + + FUNCTION: .zi-help [[[ + Shows usage information. + + User-action entry point. +____ + +Has 31 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-list-bindkeys +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-bindkeys [[[ +____ + +Has 39 line(s). Calls functions: + + .zi-list-bindkeys + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + zi.zsh/zi + +.zi-list-compdef-replay +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-compdef-replay [[[ + Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping + for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. + + User-action entry point. +____ + +Has 5 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-ls +~~~~~~ + +____ + + FUNCTION: .zi-ls [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-module +~~~~~~~~~~ + +____ + + FUNCTION: .zi-module [[[ + Function that has sub-commands passed as long-options (with two dashes, --). + It's an attempt to plugin only this one function into `zi' function + defined in zi.zsh, to not make this file longer than it's needed. +____ + +Has 24 line(s). Calls functions: + + .zi-module + +Called by: + + .zi-build-module + zi.zsh/Script-Body + zi.zsh/zi + +.zi-pager +~~~~~~~~~ + +____ + + FUNCTION: .zi-pager [[[ + BusyBox less lacks the -X and -i options, so it can use more + TODO: .zi-pager:7: less not found +____ + +Has 14 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-glance + .zi-self-update + .zi-update-or-status + +.zi-prepare-readlink +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-readlink [[[ + Prepares readlink command, used for establishing completion's owner. + + $REPLY = ":" or "readlink" +____ + +Has 4 line(s). Doesn't call other functions. + +Uses feature(s): _type_ + +Called by: + + .zi-cdisable + .zi-cenable + .zi-clear-completions + .zi-show-completions + +.zi-recall +~~~~~~~~~~ + +____ + + FUNCTION: .zi-recall [[[ +____ + +Has 33 line(s). Calls functions: + + .zi-recall + |-- side.zsh/.zi-compute-ice + `-- zi.zsh/+zi-deploy-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-recently +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-recently [[[ + Shows plugins that obtained commits in specified past time. + + User-action entry point. + + $1 - time spec, e.g. "1 week" +____ + +Has 23 line(s). Calls functions: + + .zi-recently + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-restore-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-restore-extendedglob [[[ + Restores extendedglob-option from state saved earlier. +____ + +Has 1 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-run-delete-hooks +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-delete-hooks [[[ +____ + +Has 17 line(s). Calls functions: + + .zi-run-delete-hooks + `-- side.zsh/.zi-countdown + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-save-set-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-save-set-extendedglob [[[ + Enables extendedglob-option first saving if it was already + enabled, for restoration of this state later. +____ + +Has 2 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-search-completions +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-search-completions [[[ + While .zi-show-completions() shows what completions are + installed, this functions searches through all plugin dirs + showing what's available in general (for installation). + + User-action entry point. +____ + +Has 39 line(s). Calls functions: + + .zi-search-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-self-update +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-self-update [[[ + Updates ❮ ZI ❯ code (does a git pull). + + User-action entry point. +____ + +Has 43 line(s). Calls functions: + + .zi-self-update + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_, _zcompile_ + +Called by: + + .zi-update-or-status-all + zi.zsh/zi + +.zi-show-all-reports +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-all-reports [[[ + Displays reports of all loaded plugins. + + User-action entry point. +____ + +Has 5 line(s). Calls functions: + + .zi-show-all-reports + +Called by: + + zi.zsh/zi + +.zi-show-completions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-completions [[[ + Display installed (enabled and disabled), completions. Detect + stray and improper ones. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 61 line(s). Calls functions: + + .zi-show-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-debug-report +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-debug-report [[[ + Displays dtrace report (data recorded in interactive session). + + User-action entry point. +____ + +Has 1 line(s). Calls functions: + + .zi-show-debug-report + +Called by: + + zi.zsh/zi + +.zi-show-registered-plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-registered-plugins [[[ + Lists loaded plugins (subcommands list, loaded). + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-show-registered-plugins + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-report +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-report [[[ + Displays report of the plugin given. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 66 line(s). Calls functions: + + .zi-show-report + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-all-reports + .zi-show-debug-report + zi.zsh/zi + +.zi-show-times +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-times [[[ + Shows loading times of all loaded plugins. + + User-action entry point. +____ + +Has 54 line(s). Calls functions: + + .zi-show-times + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-zstatus +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-zstatus [[[ + Shows ❮ ZI ❯ status, i.e. number of loaded plugins, + of available completions, etc. + + User-action entry point. +____ + +Has 47 line(s). Calls functions: + + .zi-show-zstatus + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-stress +~~~~~~~~~~ + +____ + + FUNCTION: .zi-stress [[[ + Compiles plugin with various options on and off to see how well the code is written. The options are: + + NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 31 line(s). Calls functions: + + .zi-stress + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_, _zcompile_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-uncompile-plugin +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uncompile-plugin [[[ + Uncompiles given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 20 line(s). Calls functions: + + .zi-uncompile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compile-uncompile-all + zi.zsh/zi + +.zi-uninstall-completions +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uninstall-completions [[[ + Removes all completions of given plugin from Zshell (i.e. from FPATH). + The FPATH is typically `~/.zi/completions/'. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 39 line(s). Calls functions: + + .zi-uninstall-completions + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-unload +~~~~~~~~~~ + +____ + + FUNCTION: .zi-unload [[[ + 0. Call the Zsh Plugin's Standard *_plugin_unload function + 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update + 1. Delete bindkeys (...) + 2. Delete Zstyles + 3. Restore options + 4. Remove aliases + 5. Restore Zle state + 6. Unfunction functions (created by plugin) + 7. Clean-up FPATH and PATH + 8. Delete created variables + 9. Forget the plugin + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 380 line(s). Calls functions: + + .zi-unload + |-- additional.zsh/.zi-clear-debug-report + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ + +Called by: + + additional.zsh/.zi-debug-unload + zi.zsh/.zi-run-task + zi.zsh/zi + +.zi-unregister-plugin +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-unregister-plugin [[[ + Removes the plugin from ZI_REGISTERED_PLUGINS array and from the + zsh_loaded_plugins array (managed according to the plugin standard) +____ + +Has 5 line(s). Calls functions: + + .zi-unregister-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-unload + +.zi-update-all-parallel +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-in-parallel [[[ +____ + +Has 63 line(s). Calls functions: + + .zi-update-all-parallel + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-update-or-status-all + +.zi-update-or-status +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status [[[ + Updates (git pull) or does `git status' for given plugin. + + User-action entry point. + + $1 - "status" for status, other for update + $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $3 - plugin (only when $1 - i.e. user - given) +____ + +Has 263 line(s). Calls functions: + + .zi-update-or-status + |-- install.zsh/.zi-get-latest-gh-r-url-part + |-- install.zsh/.zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-exists-physically + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-store-ices + |-- side.zsh/.zi-two-paths + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-set-m-func + +Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + zi.zsh/zi + +.zi-update-or-status-all +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-all [[[ + Updates (git pull) or does `git status` for all existing plugins. + This includes also plugins that are not loaded into Zsh (but exist + on disk). Also updates (i.e. redownloads) snippets. + + User-action entry point. +____ + +Has 102 line(s). Calls functions: + + .zi-update-or-status-all + |-- install.zsh/.zi-compinit + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-update-or-status-snippet +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-snippet [[[ + + Implements update or status operation for snippet given by URL. + + $1 - "status" or "update" + $2 - snippet URL +____ + +Has 28 line(s). Calls functions: + + .zi-update-or-status-snippet + |-- install.zsh/.zi-update-snippet + `-- side.zsh/.zi-compute-ice + +Uses feature(s): _source_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + .zi-update-or-status + +.zi-wait-for-update-jobs +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-wait-for-update-jobs [[[ +____ + +Has 14 line(s). Calls functions: + + .zi-wait-for-update-jobs + `-- zi.zsh/+zi-message + +Uses feature(s): _wait_ + +Called by: + + .zi-update-all-parallel + diff --git a/zsdoc/asciidoc/install.zsh.adoc b/zsdoc/asciidoc/install.zsh.adoc new file mode 100644 index 0000000..8e5bdbc --- /dev/null +++ b/zsdoc/asciidoc/install.zsh.adoc @@ -0,0 +1,746 @@ +install.zsh(1) +============== +:compat-mode!: + +NAME +---- +install.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-at-eval + .zi-compile-plugin + .zi-compinit + .zi-download-file-stdout + .zi-download-snippet + .zi-extract + .zi-forget-completion + .zi-get-cygwin-package + .zi-get-latest-gh-r-url-part + .zi-get-package + .zi-get-url-mtime + .zi-install-completions + .zi-mirror-using-svn + .zi-parse-json + .zi-setup-plugin-dir + .zi-update-snippet + zicp + ziextract + zimv + zpextract + ∞zi-atclone-hook + ∞zi-atpull-e-hook + ∞zi-atpull-hook + ∞zi-compile-plugin-hook + ∞zi-cp-hook + ∞zi-extract-hook + ∞zi-make-e-hook + ∞zi-make-ee-hook + ∞zi-make-hook + ∞zi-mv-hook + ∞zi-ps-on-update-hook + ∞zi-reset-hook +AUTOLOAD compinit + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-at-eval +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Called by: + + ∞zi-atpull-e-hook + ∞zi-atpull-hook + +.zi-compile-plugin +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-plugin [[[ + Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 84 line(s). Calls functions: + + .zi-compile-plugin + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-first + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _zcompile_ + +Called by: + + ∞zi-compile-plugin-hook + autoload.zsh/.zi-compile-uncompile-all + zi.zsh/zi + +.zi-compinit +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compinit [[[ + User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. + After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. + + No arguments. +____ + +Has 26 line(s). Calls functions: + + .zi-compinit + |-- compinit + `-- zi.zsh/+zi-message + +Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ + +Called by: + + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-or-status-all + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-download-file-stdout +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-file-stdout [[[ + Downloads file to stdout. Supports following backend commands: + curl, wget, lftp, lynx. Used by snippet loading. +____ + +Has 46 line(s). Calls functions: + + .zi-download-file-stdout + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + .zi-get-cygwin-package + .zi-get-package + .zi-setup-plugin-dir + +.zi-download-snippet +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-snippet [[[ + Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, + with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows + to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. +____ + +Has 309 line(s). Calls functions: + + .zi-download-snippet + |-- side.zsh/.zi-store-ices + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _zcompile_ + +Called by: + + .zi-update-snippet + zi.zsh/.zi-load-snippet + +.zi-extract +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-extract() [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-extract + |-- zi.zsh/+zi-message + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + ∞zi-extract-hook + +.zi-forget-completion +~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-forget-completion [[[ + Implements alternation of Zsh state so that already initialized + completion stops being visible to Zsh. + + $1 - completion function name, e.g. "_cp"; can also be "cp" +____ + +Has 20 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-compinit + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + zi.zsh/zi + +.zi-get-cygwin-package +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-cygwin-package [[[ +____ + +Has 70 line(s). Calls functions: + + .zi-get-cygwin-package + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + +.zi-get-latest-gh-r-url-part +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-latest-gh-r-url-part [[[ + Gets version string of latest release of given Github package. + Connects to Github releases page. +____ + +Has 101 line(s). Calls functions: + + .zi-get-latest-gh-r-url-part + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + autoload.zsh/.zi-update-or-status + +.zi-get-package +~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-package [[[ +____ + +Has 194 line(s). Calls functions: + + .zi-get-package + |-- zi.zsh/+zi-message + |-- zi.zsh/@zi-substitute + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _trap_ + +Called by: + + zi.zsh/.zi-load + +_Environment variables used:_ zi.zsh -> ZPFX + +.zi-get-url-mtime +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-url-mtime [[[ + For the given URL returns the date in the Last-Modified header as a time stamp +____ + +Has 34 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + +.zi-install-completions +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-install-completions [[[ + Installs all completions of given plugin. After that they are + visible to `compinit'. Visible completions can be selectively + disabled and enabled. User can access completion data with + `clist' or `completions' subcommand. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $3 - if 1, then reinstall, otherwise only install completions that aren't there +____ + +Has 61 line(s). Calls functions: + + .zi-install-completions + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + .zi-setup-plugin-dir + zi.zsh/zi + +.zi-mirror-using-svn +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-mirror-using-svn [[[ + Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', + in normal mode invokes `svn checkout --non-interactive -q '. In test mode only + compares remote and local revision and outputs true if update is needed. + + $1 - URL + $2 - mode, "" - normal, "-u" - update, "-t" - test + $3 - subdirectory (not path) with working copy, needed for -t and -u +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + +.zi-parse-json +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. +____ + +Has 102 line(s). Calls functions: + + .zi-parse-json + +Uses feature(s): _setopt_ + +Called by: + + .zi-get-package + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin +____ + +Has 189 line(s). Calls functions: + + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_ + +Called by: + + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-update-snippet [[[ +____ + +Has 72 line(s). Calls functions: + + .zi-update-snippet + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zimv + +_Environment variables used:_ zi.zsh -> ZPFX + +ziextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file +____ + +Has 275 line(s). Calls functions: + + ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zpextract [[[ +____ + +Has 1 line(s). Calls functions: + + zpextract + `-- ziextract + `-- zi.zsh/+zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-cp-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-cp-hook [[[ +____ + +Has 24 line(s). Calls functions: + + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-extract-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: ∞zi-reset-opt-hook [[[ +____ + +Has 79 line(s). Calls functions: + + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + .zi-compinit + diff --git a/zsdoc/asciidoc/side.zsh.adoc b/zsdoc/asciidoc/side.zsh.adoc new file mode 100644 index 0000000..da9afa2 --- /dev/null +++ b/zsdoc/asciidoc/side.zsh.adoc @@ -0,0 +1,300 @@ +side.zsh(1) +=========== +:compat-mode!: + +NAME +---- +side.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-any-colorify-as-uspl2 + .zi-compute-ice + .zi-countdown + .zi-exists-physically + .zi-exists-physically-message + .zi-first + .zi-store-ices + .zi-two-paths +AUTOLOAD zmv + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-any-colorify-as-uspl2 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-colorify-as-uspl2 [[[ + Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $REPLY = ANSI-colorified "user/plugin" string +____ + +Has 22 line(s). Calls functions: + + .zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-clear-completions + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-exists-message + autoload.zsh/.zi-get-completion-owner-uspl2col + autoload.zsh/.zi-list-bindkeys + autoload.zsh/.zi-recently + autoload.zsh/.zi-search-completions + autoload.zsh/.zi-show-completions + autoload.zsh/.zi-show-registered-plugins + autoload.zsh/.zi-show-times + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + zi.zsh/.zi-formatter-pid + +.zi-compute-ice +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compute-ice [[[ + Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, + taking priorities into account. Also returns path to snippet directory and optional name of snippet file + (only valid if ICE[svn] is not set). + + Can also pack resulting ices into ZI_SICE (see $2). + + $1 - URL (also plugin-spec) + $2 - "pack" or "nopack" or "pack-nf" - packing means ICE + wins with static ice; "pack-nf" means that disk-ices will + be ignored (no-file?) + $3 - name of output associative array, "ICE" is the default + $4 - name of output string parameter, to hold path to directory ("local_dir") + $5 - name of output string parameter, to hold filename ("filename") + $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") +____ + +Has 116 line(s). Calls functions: + + .zi-compute-ice + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-pack-ice + `-- zmv + +Uses feature(s): _autoload_, _setopt_, _zmv_ + +Called by: + + autoload.zsh/.zi-delete + autoload.zsh/.zi-edit + autoload.zsh/.zi-recall + autoload.zsh/.zi-update-or-status-snippet + autoload.zsh/.zi-update-or-status + install.zsh/.zi-compile-plugin + +.zi-countdown +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-countdown [[[ + Displays a countdown 5...4... etc. and returns 0 if it + sucessfully reaches 0, or 1 if Ctrl-C will be pressed. +____ + +Has 14 line(s). Calls functions: + + .zi-countdown + `-- zi.zsh/+zi-message + +Uses feature(s): _trap_ + +Called by: + + autoload.zsh/.zi-run-delete-hooks + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-atpull-e-hook + install.zsh/∞zi-atpull-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + +.zi-exists-physically +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically [[[ + Checks if directory of given plugin exists in PLUGIN_DIR. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-create + autoload.zsh/.zi-update-or-status + +.zi-exists-physically-message +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically-message [[[ + Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 22 line(s). Calls functions: + + .zi-exists-physically-message + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-changes + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + +.zi-first +~~~~~~~~~ + +____ + + FUNCTION: .zi-first [[[ + Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct + ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching + is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-first + |-- zi.zsh/.zi-any-to-pid + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-find-other-matches + `-- zi.zsh/.zi-get-object-path + +Called by: + + .zi-two-paths + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + install.zsh/.zi-compile-plugin + +.zi-store-ices +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-store-ices [[[ + Saves ice mods in given hash onto disk. + + $1 - directory where to create / delete files + $2 - name of hash that holds values + $3 - additional keys of hash to store, space separated + $4 - additional keys of hash to store, empty-meaningful ices, space separated + $5 - the URL, if applicable + $6 - the mode (1 - svn, 0 - single file), if applicable +____ + +Has 28 line(s). Doesn't call other functions. + +Called by: + + autoload.zsh/.zi-update-or-status + install.zsh/.zi-download-snippet + install.zsh/.zi-setup-plugin-dir + +.zi-two-paths +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-two-paths [[[ + Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), + returns 2 possible paths for further examination +____ + +Has 22 line(s). Calls functions: + + .zi-two-paths + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-update-or-status + +zmv +~~~ + +____ + + function zmv { + zmv, zcp, zln: + + This is a multiple move based on zsh pattern matching. To get the full + power of it, you need a postgraduate degree in zsh. However, simple + tasks work OK, so if that's all you need, here are some basic examples: + zmv '(*).txt' '$1.lis' + Rename foo.txt to foo.lis, etc. The parenthesis is the thing that + gets replaced by the $1 (not the `*', as happens in mmv, and note the + `$', not `=', so that you need to quote both words). +____ + +Has 299 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _getopts_, _read_, _setopt_ + +Called by: + + .zi-compute-ice + diff --git a/zsdoc/asciidoc/zi.zsh.adoc b/zsdoc/asciidoc/zi.zsh.adoc new file mode 100644 index 0000000..7d2eb35 --- /dev/null +++ b/zsdoc/asciidoc/zi.zsh.adoc @@ -0,0 +1,1583 @@ +zi.zsh(1) +========= +:compat-mode!: + +NAME +---- +zi.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + +zi-deploy-message + +zi-message + +zi-prehelp-usage-message + -zi_scheduler_add_sh + .zi-add-fpath + .zi-add-report + .zi-any-to-pid + .zi-any-to-user-plugin + .zi-compdef-clear + .zi-compdef-replay + .zi-diff + .zi-diff-env + .zi-diff-functions + .zi-diff-options + .zi-diff-parameter + .zi-find-other-matches + .zi-formatter-bar + .zi-formatter-bar-util + .zi-formatter-pid + .zi-formatter-th-bar + .zi-formatter-url + .zi-get-mtime-into + .zi-get-object-path + .zi-ice + .zi-load + .zi-load-ices + .zi-load-object + .zi-load-plugin + .zi-load-snippet + .zi-main-message-formatter + .zi-pack-ice + .zi-parse-opts + .zi-prepare-home + .zi-register-plugin + .zi-run + .zi-run-task + .zi-set-m-func + .zi-setup-params + .zi-submit-turbo + .zi-tmp-subst-off + .zi-tmp-subst-on + .zi-util-shands-path + :zi-reload-and-run + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + @autoload + @zi-register-annex + @zi-register-hook + @zi-substitute + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + pmodload + zi + zi-turbo + zicdclear + zicdreplay + zicompdef + zicompinit + zpcdclear + zpcdreplay + zpcompdef + zpcompinit +AUTOLOAD add-zsh-hook +AUTOLOAD compinit +AUTOLOAD is-at-least +PRECMD-HOOK @zi-scheduler + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 202 line(s). Calls functions: + + Script-Body + |-- +zi-message + |-- @zi-register-hook + |-- add-zsh-hook + |-- autoload.zsh/.zi-module + `-- is-at-least + +Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ + +_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR + ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked +____ + +Has 13 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _zle_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + ++zi-message +~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message. [[[ +____ + +Has 14 line(s). Doesn't call other functions. + +Called by: + + +zi-prehelp-usage-message + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + Script-Body + zi + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-unload + additional.zsh/:zi-tmp-subst-source + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + install.zsh/ziextract + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message + ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-prehelp-usage-message. [[[ +____ + +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: + + zi + autoload.zsh/.zi-delete + +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ + +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-add-fpath +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-fpath. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-add-fpath + +Called by: + + zi + +.zi-add-report +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-report. [[[ + Adds a report line for given plugin. + + $1 - uspl2, i.e. user/plugin + $2, ... - the text +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + +.zi-any-to-pid +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-pid. [[[ +____ + +Has 21 line(s). Calls functions: + + .zi-any-to-pid + +Uses feature(s): _setopt_ + +Called by: + + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-exists-physically-message + side.zsh/.zi-first + +.zi-any-to-user-plugin +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-user-plugin. [[[ + Allows elastic plugin-spec across the code. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + + Returns user and plugin in $reply. + +____ + +Has 25 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-add-fpath + .zi-get-object-path + .zi-load + .zi-run + :zi-tmp-subst-autoload + autoload.zsh/.zi-any-to-uspl2 + autoload.zsh/.zi-changes + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-delete + autoload.zsh/.zi-find-completions-of-plugin + autoload.zsh/.zi-glance + autoload.zsh/.zi-show-report + autoload.zsh/.zi-stress + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-unregister-plugin + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-compute-ice + side.zsh/.zi-exists-physically-message + side.zsh/.zi-exists-physically + side.zsh/.zi-first + +_Environment variables used:_ ZPFX + +.zi-compdef-clear +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-clear. [[[ + Implements user-exposed functionality to clear gathered compdefs. +____ + +Has 3 line(s). Calls functions: + + .zi-compdef-clear + `-- +zi-message + +Called by: + + zi + zicdclear + zpcdclear + +.zi-compdef-replay +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-replay. [[[ + Runs gathered compdef calls. This allows to run `compinit' after loading plugins. +____ + +Has 16 line(s). Calls functions: + + .zi-compdef-replay + `-- +zi-message + +Uses feature(s): _compdef_ + +Called by: + + zi + zicdreplay + zpcdreplay + +.zi-diff +~~~~~~~~ + +____ + + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types +____ + +Has 4 line(s). Calls functions: + + .zi-diff + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-stop + +.zi-diff-env +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env. [[[ + Implements detection of change in PATH and FPATH. + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + .zi-load-plugin + +.zi-diff-functions +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions. [[[ + Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-options +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options. [[[ + Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-parameter +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter. [[[ + Implements detection of change in any parameter's existence and type. + Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-find-other-matches +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-other-matches. [[[ + Plugin's main source file is in general `name.plugin.zsh'. However, + there can be different conventions, if that file is not found, then + this functions examines other conventions in the most sane order. +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + side.zsh/.zi-first + +.zi-formatter-bar +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-bar-util +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar-util. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-formatter-bar + .zi-formatter-th-bar + +.zi-formatter-pid +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-pid. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-formatter-pid + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _source_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-th-bar +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-th-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-th-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-url +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-url. [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-get-mtime-into +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-mtime-into. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + Script-Body + autoload.zsh/.zi-self-update + autoload.zsh/.zi-update-or-status-all + +.zi-get-object-path +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-object-path. [[[ +____ + +Has 23 line(s). Calls functions: + + .zi-get-object-path + +Called by: + + .zi-load-ices + .zi-load-snippet + .zi-run + zi + autoload.zsh/.zi-get-path + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-first + side.zsh/.zi-two-paths + +.zi-ice +~~~~~~~ + +____ + + FUNCTION: .zi-ice. [[[ + Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for + next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. +____ + +Has 12 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load +~~~~~~~~ + +____ + + FUNCTION: .zi-load. [[[ + Implements the exposed-to-user action of loading a plugin. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin name, if the third format is used +____ + +Has 76 line(s). Calls functions: + + .zi-load + |-- +zi-deploy-message + |-- install.zsh/.zi-get-package + `-- install.zsh/.zi-setup-plugin-dir + +Uses feature(s): _eval_, _setopt_, _source_, _zle_ + +Called by: + + .zi-load-object + .zi-run-task + additional.zsh/.zi-service + +.zi-load-ices +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-ices. [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-load-ices + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load-object +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-object. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-load-object + +Called by: + + zi + +.zi-load-plugin +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-plugin. [[[ + Lower-level function for loading a plugin. + + $1 - user + $2 - plugin + $3 - mode (light or load) +____ + +Has 107 line(s). Calls functions: + + .zi-load-plugin + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ + +Called by: + + .zi-load + +.zi-load-snippet +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-snippet. [[[ + Implements the exposed-to-user action of loading a snippet. + + $1 - url (can be local, absolute path). +____ + +Has 173 line(s). Calls functions: + + .zi-load-snippet + |-- +zi-deploy-message + |-- +zi-message + `-- install.zsh/.zi-download-snippet + +Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ + +Called by: + + .zi-load-object + .zi-load + .zi-run-task + pmodload + additional.zsh/.zi-service + +.zi-main-message-formatter +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message-formatter [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-pack-ice +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-pack-ice. [[[ + Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for + second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin + or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + install.zsh/.zi-update-snippet + side.zsh/.zi-compute-ice + +.zi-parse-opts +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: +zi-parse-opts. [[[ +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + zi + autoload.zsh/.zi-delete + +.zi-prepare-home +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-home. [[[ + Creates all directories needed by ZI, first checks if they already exist. +____ + +Has 38 line(s). Calls functions: + + .zi-prepare-home + |-- autoload.zsh/.zi-clear-completions + `-- install.zsh/.zi-compinit + +Uses feature(s): _source_ + +Called by: + + Script-Body + +_Environment variables used:_ ZPFX + +.zi-register-plugin +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-register-plugin. [[[ + Adds the plugin to ZI_REGISTERED_PLUGINS array and to the + zsh_loaded_plugins array (managed according to the plugin standard: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). +____ + +Has 20 line(s). Calls functions: + + .zi-register-plugin + `-- +zi-message + +Called by: + + .zi-load + +.zi-run +~~~~~~~ + +____ + + FUNCTION: .zi-run. [[[ + Run code inside plugin's folder + It uses the `correct' parameter from upper's scope zi(). +____ + +Has 24 line(s). Calls functions: + + .zi-run + `-- +zi-message + +Uses feature(s): _eval_, _setopt_ + +Called by: + + zi + +.zi-run-task +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-task. [[[ + A backend, worker function of .zi-scheduler. It obtains the tasks + index and a few of its properties (like the type: plugin, snippet, + service plugin, service snippet) and executes it first checking for + additional conditions (like non-numeric wait'' ice). + + $1 - the pass number, either 1st or 2nd pass + $2 - the time assigned to the task + $3 - type: plugin, snippet, service plugin, service snippet + $4 - task's index in the ZI[WAIT_ICE_...] fields + $5 - mode: load or light + $6 - the plugin-spec or snippet URL or alias name (from id-as'') +____ + +Has 45 line(s). Calls functions: + + .zi-run-task + `-- autoload.zsh/.zi-unload + +Uses feature(s): _eval_, _source_, _zle_, _zpty_ + +Called by: + + @zi-scheduler + +.zi-set-m-func +~~~~~~~~~~~~~~ + +____ + + FUNCTION:.zi-set-m-func() [[[ + Sets and withdraws the temporary, atclone/atpull time function `m`. +____ + +Has 17 line(s). Calls functions: + + .zi-set-m-func + `-- +zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-update-or-status + +.zi-setup-params +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-params. [[[ +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + +.zi-submit-turbo +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-submit-turbo. [[[ + If `zi load`, `zi light` or `zi snippet` will be + preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' + ice-mods then the plugin or snipped is to be loaded in turbo-mode, + and this function adds it to internal data structures, so that + @zi-scheduler can run (load, unload) this as a task. +____ + +Has 16 line(s). Doesn't call other functions. + +Called by: + + zi + +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). +____ + +Has 17 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-stop + +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _source_ + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-autoload +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-autoload. [[[ + Function defined to hijack plugin's calls to the `autoload' builtin. + + The hijacking is not only to gather report data, but also to. + run custom `autoload' function, that doesn't need FPATH. +____ + +Has 106 line(s). Calls functions: + + :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ + +Called by: + + .zi-load-plugin + @autoload + +:zi-tmp-subst-bindkey +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-bindkey. [[[ + Function defined to hijack plugin's calls to the `bindkey' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 107 line(s). Calls functions: + + :zi-tmp-subst-bindkey + `-- is-at-least + +Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-compdef +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-compdef. [[[ + Function defined to hijack plugin's calls to the `compdef' function. + The hijacking is not only for reporting, but also to save compdef + calls so that `compinit' can be called after loading plugins. +____ + +Has 5 line(s). Calls functions: + + :zi-tmp-subst-compdef + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zle +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 33 line(s). Calls functions: + + :zi-tmp-subst-zle + +Uses feature(s): _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 19 line(s). Calls functions: + + :zi-tmp-subst-zstyle + +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. + +____ + +Has 74 line(s). *Is a precmd hook*. Calls functions: + + @zi-scheduler + `-- add-zsh-hook + +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-substitute +~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/.zi-at-eval + install.zsh/.zi-get-package + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-unload + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + +zi-turbo +~~~~~~~~ + +____ + + FUNCTION: zi-turbo. [[[ + With zi-turbo first argument is a wait time and suffix, i.e. "0a". + Anything that doesn't match will be passed as if it were an ice mod. + Default ices depth'3' and lucid, allowed values [0-9][a-d]. +____ + +Has 1 line(s). Calls functions: + + zi-turbo + `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdclear +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. +____ + +Has 1 line(s). Calls functions: + + zicdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdreplay +~~~~~~~~~~ + +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdclear +~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdreplay +~~~~~~~~~~ + +____ + + ]]] + Compatibility functions. [[[ + zinit() { zi "$@"; } +____ + +Has 1 line(s). Calls functions: + + zpcdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompdef +~~~~~~~~~ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompinit +~~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +add-zsh-hook +~~~~~~~~~~~~ + +____ + + Add to HOOK the given FUNCTION. + HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, + zshexit, zsh_directory_name (the _functions subscript is not required). + + With -d, remove the function from the hook instead; delete the hook + variable if it is empty. + + -D behaves like -d, but pattern characters are active in the + function name, so any matching function will be deleted from the hook. + +____ + +Has 93 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _getopts_ + +Called by: + + @zi-scheduler + Script-Body + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi + zicompinit + zpcompinit + +is-at-least +~~~~~~~~~~~ + +____ + + + Test whether $ZSH_VERSION (or some value of your choice, if a second argument + is provided) is greater than or equal to x.y.z-r (in argument one). In fact, + it'll accept any dot/dash-separated string of numbers as its second argument + and compare it to the dot/dash-separated first argument. Leading non-number + parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered + when the comparison is done; only the numbers matter. Any left-out segments + in the first argument that are present in the version string compared are + considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. + +____ + +Has 56 line(s). Doesn't call other functions. + +Called by: + + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + Script-Body + diff --git a/additional.zsh.html b/zsdoc/html/additional.zsh.html similarity index 100% rename from additional.zsh.html rename to zsdoc/html/additional.zsh.html diff --git a/autoload.zsh.html b/zsdoc/html/autoload.zsh.html similarity index 100% rename from autoload.zsh.html rename to zsdoc/html/autoload.zsh.html diff --git a/install.zsh.html b/zsdoc/html/install.zsh.html similarity index 100% rename from install.zsh.html rename to zsdoc/html/install.zsh.html diff --git a/side.zsh.html b/zsdoc/html/side.zsh.html similarity index 100% rename from side.zsh.html rename to zsdoc/html/side.zsh.html diff --git a/zi.zsh.html b/zsdoc/html/zi.zsh.html similarity index 100% rename from zi.zsh.html rename to zsdoc/html/zi.zsh.html diff --git a/zsdoc/pdf/additional.zsh.pdf b/zsdoc/pdf/additional.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..96e8b636b15f079643ad5b41703e38bf5c24f7d3 GIT binary patch literal 99114 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 literal 0 HcmV?d00001 diff --git a/zsdoc/pdf/autoload.zsh.pdf b/zsdoc/pdf/autoload.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..01593312bc7fffd21537282e3755843cd7f5c552 GIT binary patch literal 440338 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 GH2lAEiFech literal 0 HcmV?d00001 diff --git a/zsdoc/pdf/install.zsh.pdf b/zsdoc/pdf/install.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8ca33a5ceceb47a0dd7e6ac2c294f0e4f1dc97e GIT binary patch literal 242957 zcmeFaiIbeibtlL}2iatZr$p)?Srl)P?5^*wqQDCPAs!$I0^kWkU?0^)g8&-rZt$i! z>#<|UWBFWp)}Hk!9OGTv>lyFN`k1vHvK=wDyc)?mJd!MrwYFztC%my&Ozi#z`}^g4 zFTeb%zAk(XR#g+x=>D$E$}jWf`!Zj?eDCGUTlVhUb$2wKPTlgK|M(C6F%`Ait>w9+ zQ`@$+W)3W^9qYAjUple6Hhb*Y^qZ?kUbsDa;f_0|W_GOfX4jTiTDL#AI={5EusqKI zGQ6ubH@n(fXf2;;?OmCD?F5qUU0Gf@HQ#HJ_P+b3dM6fGdK^OW#>rl5X2&dGSbhol z&A!xIZ6!#sZ)#@G>~RF5wuGKIwRUXj1S0aTL@@2{*}2}a)mB&EVASKw3&`=Q)t

    2S~(R8PKXlmx^rQU13mAxyy#okKq#5@WihITHk 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%0D5sBk2;{Vo96BZooCD+R1 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%0D%hi?ocX{p!Qu^Ro~m3slzCd^+QG_`>tfzs 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 literal 0 HcmV?d00001 diff --git a/zsdoc/pdf/zi.zsh.pdf b/zsdoc/pdf/zi.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..17a6daf5a46ef3ff06ddf430b957f5c478219294 GIT binary patch literal 412082 zcmeFa>yjMFmEZZjo}#|UOfu~hGVYmXFq#dU)4LpvG!)s|9jVnH3P2UvwC)B64epHe zZfpBU`wIIz*NDiBjEY2O1OTB11ESs2Bm5HX$Is<|&iOaL`_0#XQ{2@z|K|VufB&ES z|C{1=cl-9$pKo5iynXS__wRprxc#^P^ZUF1`SYLt`@b#z`@j2lH!r?=_i+FI?YrB5 z`?o*8{{H(nZ(mD+cl~d-ukL?-cys&qr`zAXyZ@J;X!^T%Z{Pg&^}~|3zxvh9!%uId z<8nBF|M8cH+ZSKmzrX+C?H_sH{U0BGzO88R`HbFw#m-9q_}BM8eE*YFlrjT; zm&X5a|LWlf>RN9lb^r108{YX}etw8YZeIN3Umkw?+t=^EXXxK{^7QSCufKo)f86ft z;%!<4Pur4;o+x0zW>v0DL?=Go~`!d%|GAB*6@OF5_wlV z@=Y$Re007K3oBjTy!ej~Z@$0(_1k~F{Z_`*9Gbgw-+$Dv-o5?H*&l!X!^6Xyv%h}x z?)x9l{`j}=-k<&LtG7SBXMjK7%A6VD?;n1C``34|p*SzE|M2ks_S+YnCyw94zrMeH z@!KESw7>R$zw&>7tLxWqH2EO09=?Qa(~Vd0#cv+|@9$qf{QiIc_3i7QZ+3U=GXMMY z>z{50zkcObAw{Q8@lvfkZw2R>uhb$7d_zWwIS&5N(gyPfRRZys-6cK7X} zeCY1Gs@<3SswfY?y8Y(QH-God4e#R%_+NQn{I~ooy~jx8-{W%hU+?eA`nIchrW^Y>T&Ds9=_HB(FU?aR7uAKR*H z+BXdLp{v`1zX$3bWVO16(j&iFZPgaCZry?3I%zMvcrX)f*0ePX+p(xM8*SI_bjxWs zWw*xcntgRwpRV%Dx@{U(wrcA7P(RiWvgivp{6Dkh53SI~(Lb{Hn^N|9)3$eIbNk~> zQ&)GpEdM|mGFC%-y+u=V8s+!;u5P3{%DkqzeNB7&UEeB?Tamp{?GCi|x7q3P&aA+* z`jC}))St1kKQOAZ_OEaJw^oPnLl$F%(YH-;G~d@Zf4X^OZDe8WuaOHbpnrK@nLph8 zXRbq5<}m(0)@Hnqyd-P)ZFSe)^7lI>z;9#`4~JX(LbAK~Mp69XMmktRi<^V)QMP8y zCR4)5F1;-ZC5x}`%U60CylFWi-Hs#u$dP^{B%rGxkA)oW#b@P$0hRl^c0W6y)rU}2 zcL!Lo^J~IYP(s@Dis-mBAc4Lj8>~=$;LGhMhxbN4S@XzX?Eb2u*{_BEHjjL;x~=uM z{R*G0-a{GM$w9$Rz*KNO$N>1aWjD!HvC1&o!yU7o`gBLbkPpZ}9=r0&x4NCHx~cCD z)7!Wo$b+0Hxjgyb9T)0#*$W>CEMGajnWqOLTbUiBLwe2r;gW72*4Qy+a|b^&_o*sj zD_9veR@<_3D%s5J9oUJ5cl2_)Q^OHL(JmN{@1WNV=(=38eYon--tFeMvM^!%-wLZy z?F$60+12pQ`7FW{t}+Oi3z(a^Ptp&fWvf2Gq&j2TE$8Ew?~$rOnJ~X)`vExa6QW);cS-6Ukb7a*WEs~$xrqY{9(DyC#x#-8nbJ}rPc}CC5*;F2mt@hDWvqc#vUpTcg6hX zjsZP#!tS{|pxMf7ti=}DuT=+WzhE1C@lXHw>dz0a z?IHi1g;_b>OxqjKrCeOg#CUho4`+`~ELt8|Q-N~1vRmK{&>VNvL|Bafi+23In{^_qj z{P11a($zXXo|c-;#oG5XR!H=<<5z1%JYc5jz1ea1ItiZ8M~3FxA}sa`#v|{F*V{fm zUgoBFwSRTrFY~e$j@__eh0UUU^J2KdYLXtTa1kcy@sv<4V|zSW;xI)YH7y{t$4#fK zv{hY?Y~BAnw8W~NcGgUUMgeO;Zzl5cz)a*dZui;4&+ZPrnP|`D$n$9?Dp8y4vGJy% zsKl<+?tloSrKrTLBTd{^6veO>MY*>ZMUB}U@`X{f4#Q~V0}7*2KVCN)#dOp%@+KfTzcsVDw;d%4YV1d=XlnX2!4&MAhKm=29cBnW(yiC|x zTr~|hg;sCz#k*XS*P-8Rx!48%Ft&P)dWKsOV>f)|8e`y`V%nb>gNS4*y2DSpeshg+ zi1ik$-}$xBaiGHxOPBJvqDfqbw?(N5>S=B)>sF`~67OpEps?qOy;Q{PLVGY6qKE1dJTJ^&cGcto5q!R7eM ztud|&fop1K=a-vWDF9irtJ+u4$TiGwEs9JqmKT1%k;QV2wSxEC&+hVxwPOEcH(g;g z%>jkh*BZ}$*qBh5RQLR zXH|o^6I8~jeg=B|$e%Sho~A191YdN*Y2;|~CYAeLzt$@IwrEApo*swXSb9^X`ZsO~ z(dvl`R4vWx(ZdFLF7!_$-c(j;$>`wG45GQl+SRB*kv31)j$UPb>J@K_x-0LHS||Eu zFRwt~YSfzm^QZe`AFRoJ)}Z>@sXZ#^7EO1(E*b_f@L`IIM(;v5_~L7UUuqzDco|Hu zJTo8Qf>!wM)nN}1_o?26|A0!Z(LZ42ZhGIb=4*d@=-(ZlAX95^y|4W3!D8Q)(|b?* zU-{cthdUf@&d%O?U-8?Q^&Lp*6i*p`M+vTn*EBjOKq5l_&A=Nv0yF-{Y_gi)wgkM`Vn8q&&Xx3xT+0v zV5&4Hx-el444RWR%o2;BI*6XwFgX}cS=YMVn>Ua9fB)lOe)#Lp#g9Mz&AW#`{`H6Z zcZ-Z{o%OoNjES?9nmh+aHngEfw#Kw$y5H*yGh~)r;Vqo{$dXx#2d8YGZ;u-9&`Y5R zA2${oW$ZO~hs1Gl_bD0LS{yN86VuKHA>;H7J+g4dkQQ!c^HNyZyx1GryuwIUzATE` z*Jo{F`wZ9XincCz`YE{f=nj0d${py&HrVO-)jW$T70`*V0&w-NjP>4 zBpIX==+KHRZddImLD?~=4Y}~clNy*nDmXkkhm+OIoxbR`XZ)u_wksjp$wD$4?RGvLEf&+AUMOmy4GcfQ!pmHEoa=}!_MIu_c@+2rVA7^*Y~8X)Z`6kxZ!*&6p!G!#$Ar5yFPV8 z;>7h2#&OGugGQ-<#EiNeO&rsMn$N_q?W)^aJRK3eH=S;ck)@eE$xQc=vkVmY%67^c zpPfT_L^0Q;TQy2eh{w?ikH7ByisqYo&;5vOJK9_;Pg%U|#8Ye3=h2i`vP3&~B6#x3 zxsy@H*p-rEit?$HKmz#C!Z?Wz>_L1i#6zn*T%cZB!hi#v#!FuqgyGo6A7a<+>Nicr z|01?tnOP`z;$bKsW!S%J1W}+8f2e#cuj`do;@SdC;i$*s8Q(M8wjmJBRq0w;w}1?f zS9{gjqIba?eP*`bzJ$=;6Gdp>JffS%sUbrQQN%5kYC_>OeDU2@-?H$|z-^(iWq~YB&-0J7(EJ zz}Hb`N`-*0y$om&eY-qw?ST;;_M#KY_Z6H0DO-P5dL6^D;tw}Kwi^xZV-?`FWw7xw zFIrzbYrkTLU?@E6MIULt$|f?J_iU`5QOhrRg_efY=`h<$7$;bZ3D6A`W)x~lq|noi zf4bYn2+_QfKUbwrK3HhflruUZzcT8NTu~MjO>nM)jnQjL{uMjqNMA%$FNtTe1EbsU zzo0<5V;v{JrAB+An2DW*AZrr!>*^{BpH{^&gz6ugQPGeHa6viQqlt73$W1**lfWRv z-3%m3Cb0M${PT^(yMp{w68CZRkAUup#5E#6R^+x)>aldk8K*%gF&OA6JxH3jib_7> zsc}o7ow6PeZ{Y2RD**Ew5gI1UUgdRR#Xb!nv+TQ1N1X%4rXSFVgOgn(DxJl6M zZ(6ub$V*`p@*35N@&j zzdd@Z50Y_BezpB>c_ zZ@~Q|Lpb1Tg=_t^`Px$8lN&HPeL#$l5+Gx_&)PJ+Ok?H;DE)OB#po zUoXR&Io57T$c)aBb3?3|<{}slHv>9&as|hlwZJ6+Y>&}n8PQ?f7KNwq-s83tAszO+ zee)?H&BX4EGigc{#6rS)HIypKQr%5ms_;@s6<+M63a@Y~8!wBZ_7zga=NZi5^II>u z8Lt#o;SAC&bd9RM`&hxNyE7=XVE$qJ2mT!(_t%X1+nqt8og0km4qchKSTI=XJQ4g;bE&3ehtRIkgWv=j1+5=GL8EHOr$t}>ga1U5x z7#(`52}yp|M}B>OXM$T!hWp$M)!HIpOa=E8AmkdKL3Ng=b_Ij?q05o57h=IDkb`W^ zv1S8vhy)7Zlwf<1fOrxv@VYu=qa-ax-Ko%@A23W#72?%eF-lRyOa=#?AL!hsXT{fn z?bynqkeLi2`m|b0KfFXe(1<>)D5yG0Yxrn4fcB<>i!K->&ZR3H8!?Ga1sHvLKtf(w zC8Ga>#ah#^UG()+Ax0Msk&p?UoM{bh!4rZuUM>zV=MWmqno}`I7YtI)u^2Ly?69Js z{*%{Y7Y5;4XV|D*r$Ux48Fv5C8L(!S61y!=N;rF_A=_h(9lJyPo-iO^JY-<8N$ho7 z#57hIbiF6P+7vMVh!HrwnTCgp0iFzcjlrVBY$h111uNX~={5cr=0h9mfHpAvd#Ee% zxYign5jwjGHtgtVo!e%RsmQD^0K|V+t@g%(Y@00BXFerViFqLj$Qm z!nkBc_{@?`g7fdkOMZupt?|+ErxmR5F_`4ZkA5;_ZnKpQei)6!oPY691(8a46%N)q zPV$wwfPcuriEIHC5u?ajDQj*Q0JqmGhRg3Od~z^LxB+~?I>vA%Fp5B^SWR{+S`P*- z7l9^%unDZh`wK{bXs?%V0Ux?tuIsKX8L0p~Up~Mwh1iaLsR*J_e88a+-c?yai<_AQ zpA8|nxaIEn%NfLqn8h5mi`RC1|F2G_N<2PDMz?sF8g*!G5>*ltR*>RLY3Hj5$N-N3EBF!Cl_9W{eDm3a1Lc&>!O7QtZI7>mCP+B;g#Y+Ka@nR2W z@e0GQ9BIH=d?E%?@xlT)i?{reS7<5R!{96hyM2l=n1iz{-}-Ao zUHZ?gP?rL9m+s@GbN3@IzOIw5>BY09TSte=4xksj7y0dR>+~`QHQYM9CeD3Bd7g7_ZX8^!5_wpjSGSH9 z-taIE^@XnxExbR8{!c0Bgco}{;T1+0@?}xfzJgBpP{OUF%aOWUM@&Ss>3Ct5J2kfs zZ}}y!&{7V~ZR%Kl$$@hsaj%6m=-6me0{)Y>97P$JN$xytT915eDKZ#)X zh;%GDKX8>a`!)b|MGv6wk>8d_xqngwZDBe{Kac{JmpNtOQQ46e6hq*o&ZEVKS#Yqc4l1_7x(i4<$s<9BGK4 zJ`oc^y)b*oM=ihP6FvslSLZX@}?8Acd0{ zmc@?9)I_5zPq_QL^hN!00(QYy6npKIh2cn^zhH$Ix#>71fj*e~xsY}tfJ+aJ-3Sd> zi6YdKBY)-8U5Io2r|qP}M<@Q(v^VktJ6v=xb6&~18wb&>c|^k;2q-l}tZ=#}HY(wN z*jmTUP}I{HO*z}wk6tM3^@y_n8+Fa5XEBS`VhUxLa(rd~avUXq^>Sb7CEL|LIBp@J z_G&_jOC}fbMj^U1HRr z?I!NaEdg4$>r+hT5)WX@K8fZ?K=@7j6mVdPdrMu?Il5EbRU7k@!5V4suvb@FWejV=Sjj7rbF2uxv#SPSe=4~5J$|vUis9S~CR3U??^t;; zn8zsh++)-jznCxdqIVelV~i*m$Q*GnkTE0U3!}7vg^Z@jLq^3Hx?D@IM&n+pJ(RJj zPlU!veiEDLH0}HV4sy};AD=Sr|B6A|HeNbQBgB`BAyvBxq7uwNibZZ zb`7F^2+~2Cgkzo;LopOTGYD7bM2)R%zR(xiI}F`Wj3|^t{fPZ-IV05$MQQffKQ9+w z>twl>9thJFNx~e$>75+=@K)M{Jwl!%V8q0Ax}_qv#Guk~?LlHp6B`wSV;5C^%p`fl zq3(~JU`gZ^dF;e{^}r#MSLnf%P|zLV0#2C+?I|Tvo>r*(H;Q@e{O7^3^BO;P@xmxt zhjHv;L~-o;5yv6+S=&B}`7Jnh(e!z_JY#|g3gY)SFIIqbsEB+T24oZ;FglS1kk8e;~KV#(QtaX8|Aa>r6qO)&ii8FfHCP^6RxOe zLl-T`soa}h9-L*biL;7d$S}0Fq-5gxJj)V^ftuW_wLOQ_*S;VOU!-M9z85FTO^N39MDTFpAb;2(Yz}C?wb% zaY(Q+qwyNd@@(U#Da6K`zR=}b%D|blSOFN=UycuX5V!Lo0Tqez!W>bHWXSlKd|eeH zD~XYy8+qwG?TV1JD2fmiz~Bhll~QCWBK${1h@h`3MhFqF7)WTi;A)#dgrEq*rJ+ZN zz*EU9kg*&x0_(t8>rK^?(-xi8z*J2zByHj{PZUE;i*hfgMUAg)yfBK^VMuC~k0?a7 zDn}d$k(iM|9=tSr@EslDO;cKnwfRDqYw3Y7Mz=zfg+upwfeGmP@gZM@#HdEx#ub z>A|D7x107U{vhCEw(JvhZ*hQp7kJII`)RP)VgmBfWB)AI+nxc62@YzU%;+QD!EW_D|^oX~6vI6Z7-`%|U>fPJFoc;0FKRi6V zIs5B3@4o->?2mu@?)}-{zIyx9dj|OPt-`4`0E!9C_vBHN;INW}QG)FHz2La){~vyO zBTLI>>(}@n9)9}c`#;?tFtI-azBJ+bGvEs>&ISNE;c^F%uI&L|L&1EKCHequ+!Ef% z0Vd}GU=j|WAlV86ldK5{W=PD$syqUDiMu;a!cvdrQ=FEG%pp(F8c%;}g~7+1c9Fk1 z*sFFYSjFK#0%m&#J1LCqPdAVAU`_{)r6%3W2(t-RMdv2L$P56NFtjLt{(!lq609GE zr{Q1&L51y|+rHduFhxZ}T3m;&s_to#=NT~BNX!v9S^hc#k&S+lR>MB8n}o=xJqIx} zVA*g8JK_sSN}|^ieV~u!(PQQ&P;&YfN#^As(dE;4(*L?8X)Pel+~r;#>~gOOm?zE< zg@)#`UEg*N&5Yk`uwAMl^WRZo9rhzwsA#IwvPMJ`DTQIpi@jaVD;x(JFN>n~6;?GL zN*L9MPj4d)qnb~|=${v6)mo#LU-AlFMhCdcCIK3axLrv!7oxrB^%kdFu03EZM`u-o zfU9n7P@{jxm`P$P(GROXq7!oEFVp86mjNS<~bi zKlQgpfzI5(V7-x8AsNzy|02YRT>cuhdmguu$g(jH#`tcXg^3=O9}-h zIgG7Z2->SlvxAk=>R?5>cQb*vc0FdiEQ;D!m>hg4VR7h3>aU84sLj(0vxM196W;Pm zUZJIg%9P&?(3z>YR*6qtH%yQZf*gb8L{5wxMC5ECX%wlW5R0IU!uwr6+LsNeCXytW z?-P?i4ro2lXHD3dIh-yI%J>8=RvRv%^*(19sHt$4bFf7|fLeS-s^!AIt~tbq1?if? z<{oz~pN3m=Ppr5;O3RTRKsbhKjifGkj!YtT7YtG&aSE#=TYL>{v*606@VbkJW{I97 zhZp-!)eZ&;)x2H|9hJr!yHO(6O~BPJ9rh}FvLXg0cD57puw-z;xzY~R%?hg~;en=7 zAukx1K(p5fNo%LLB1Ys?a^wXAlN@p)37p9$rFnfM`RG8PUSnm6|5!}i2n#0Av95B$ z*)eMjjF3lD>6M=zm{3bmMzVHm1;6l*FQL9a=(vb>R0qe#USaKk*qlkiJigXW?-sd( zk7?n`I}irxOd{q*gI({2F3H4Kf6&p8RaAN?YAjKNi)_30NhX}`2c}+Toio3&2GGK32D4^7TI9`Z@n*qFu|hYJ+L2c~O&V$f?0mO$l`X`3Y&v+PXEYkbOMj(mjRi z)otU7XOg617U+@!2{9x@!i2u+K6&n?l+?0nl9m=uSefO@QtsC13y>6LeSXo9H<>>Z$uvhgW{}Q&$x+>0Y+}m?~?9H6X@V0qZ%C~J) zVBz)_ZsG3m-W_EH#MgG56%e)UC@Ub|(W3}V*t?~L7>7}r6d$G50dxbHnhz9nu zC~99};l>M6h7uO;exz>Uj)|y++Y1XU+|Mht7>Z-s=N4nloIy3!xMBgpkkB9W#k|)N z>COiOG;Yesx_J&zX8FHfytM`^)9|ztTmR^^rYSJA?j2vI9C`r8YGjY@aLI`Ydt=luzHnb>=mw!S)0Zl-Lwe13N8% z-h69KVkm9nQLVBZ==-eb@%LF}koy{8L|+<3?=>*^Ij}(C=g31k&Z!x?K8v&L@KM{u z;^))PYq#|3G^dpsw~uDG-=A2*V2sH?OGG(7eEnEIh#O9V?9S47f#zQv@@feu?V}~? zFM0BPVxl4 zCJJB>0ow9u3vh|wL=k~{K~jKr+0kn;43$h#%L{=~q7xS~q)>y)<=}V*Ny@ni-0}H)DKXQLzKQ+}H zWO0^Q8ah7PCO$rEp4V>aSux&QVmp@g1o>G)7*|j%0Q;CG-kWO{B*S4#R>abza5l<*tKMWx9)}RfqoKDO`il_%w7E73WQHH+-ue`aC-ma1S4;^L6rbXhypq?82 zgI;9Saxm-}h+H>-Z+)H+IRT)30uZ^GxO4=aI)=yey-m~yXi zai-5iYWkf%6RDNa^^L5@9ezz?tOy#sf%Vu+A;x%-?gQXqt?iuV%c7`#g#eR*>HJV< z&QyO@OhknjFW9v=2(xxR6Y2AMk+C+ey1|NlP+&S^?ayT*P4&-uoHcGgA0N6wYLro` zJTDIppV#=|6X@A6RbIzsJxrB{_Iz~sTDZRP;gd9nL!g!)AluviV}JO(!p>8^EQ;D! z96ldP=nndk#yPgBT1P&sS)Oy$GPMR@;0i5eW&B7H1!PIkjnzFwTcUqJWKX1ac*UAO zSbU6M6f4oGYcMU~H_PuE3k+NYyIuGQz0D2Wy`!WboyHIV(#e`KBOGKhCNLP=n~Jwi!v zSi@ZE&on@S$0!Mb%?(i!Sq}Y2R`mLhtTKg1zBG#7Yv@06V4?rWk%#^xr)D~hEY99V zM{QI8kxxIb-O^ji^dAy|?sAmG5sh0_4}z{^8W};%{RyWCxvvDd(Cb0a7nl}g5SxfP z&PA;tR4&!5Bq9m-G zp4-%R3igO#A_Hxwz?0<09AKgdIOaDbw+l}q}yFurAv8bJMQZ-E9ounNIN zIXQU?GE9A2kpZnJho}LGWTtHbY8B;Bw`Buf;(~fs*=ER>MltcRzFA^mA^GgXA$VpxvRxgX-MzS(SPf^g4>&ic{$c| zMWuvqUyLA!c7ZJ)Ir_+%^~$l+d^{p?jnXl$Z{LR?Y}cpD)SLF{GWC{yhKI$beY%Im zwfcNgcL1dOt|3-!kDbVxfi#hIE=^PgNyFIVAx%{H_~~0xnkdl=lme-dx3FRA+mb-{ zAe`!6nkaEO)HW_nWI3dXtmt(IS!LowzBG#7Ye*A0u#hHlnX?V<5DHE;%gE5@JuG_N!3kYoRgVB({_ZdpV(el)!UGxxqM%AJ1+9N4M6PQ3Q?j2QgUhqaLBL*rjs!#c7$=6=ZJ_A z%vZ{yFDdWUqg+A89?A|kgo}JY#wrpo^_mh8x<+5}d}htyd}dwHDI^SVF-hA>G7~A4 zO4?Q&g!>=TwgRyXt>l2V6$jz%X%o1xCByV2! ztKr6wPyCQBy^4%|7X%ubQJ?w}->mdE-np-=g)2#-7&?+DGl~Eb`2)5I zh$yY^^OAQLxQHB3=tuey``h{{sf?e+S;}krk!;IOeqJ;7&LtGrbQ3U>?sa$6l-@N%T?d#i9VEGXj?WQplfedc+spqa#g`T$$@@yf*FAHC~(c=^C#s z`wWfOrhU4`t3#+lfbBu-=^J}tT-sSzA)FxY_HD21^723&^coii33Gt)`Ov4WB}y63 zrzqILnzVJVRT^`5a`8T1oR4%`0`~@)V@Oe>ue|?{N+eP z`16UF=;wu5_G8pC#lA0ag_g<-rVatmi0|(yv$0TfHDUr*)mn92>g8c#pjQCD40#!x zgACls3Vb3eD|FR&guMIYHCEkD@O1<7WaS}wvKl8(EpDv%&?k99vnJ0cd1@uxciWRE z07)n=hvccnct#5+PhJZ0W#mb)(0jZC)Hw|N!EI5fci1Pad=d`@Qb|k=`IFQ=`4t(OClGUX=$3vcmmG;P zMDCgi1}N1|f;alK;W-UlTn#-*SH$4rw$wTi!TL^lJX4=o5egByA**m@Q=?f$g@l?W z3B)H4r>03Bg5i^=6^|n-83><*OCn-}l3uP=TDY!8Bxhp~Rq^9R9(To%SJ)@dmqk(g z3N4e3BvefOIO9z^OVb(IjAqH_uwiPJzNn>HdK^uMBoT7EDI&DK4yh6S=V3DA%(o}5 zA%G_}(F~f_T>*FZ66B%;afkUL|IBx{-~9c}-+gm4(isVm^HhgalK9>Jo&)~)E(LVd zNjR`Pd}$QD*QA0mu%v=9 z@}z<>HK%M*TtWq-?ep3h6^!+ewY!W83S|6{A$dLzU4(c}fMq?U3ZJUWP~KAPR|UdU z=%@XVF8y4_=vS5a8qK>5Nqpx|TO(0{WNO%Ty|}^#Mz{2Mv!zNx0%H;wWe}S=YoMK> zO2|4_Hb}6}!=ZN=l4zd#mQ+tD{@E$8DJV(_ZLbtK--_t3Jg}=M;B1qdRV77MFceoV zWR-1&d}$Ohc}TCJs>p$bwxS<-yf7BP^bk4ISqgmAmK|*xoqYOv?Uo*CQ))<<(ZeJ) zTVJbDmT2W72Hhkwh9tx4L@CG^&mjj&23JfD6xAaGbEe+x6-C zj7|G=ea4o3hCXA{K3$)&X`kFA9R{5(`y_5caUkDpDU5YG9FDND*FE_)ONC#v^@fUf9%^eri`2yU|~#sOW)dbS$}bcO4YHZHFe;5W1!@=8|p z@=8{jfC9|QUK&O3HRP2d1{U&4jy&X*oSMliS)9EskJ_fZl21Rc-O}6AGy(--4r>%4 z#ySq$OOl)> zlvo9W=!nCpzD6ty09`A=GOB9C zi*)aL46iVnk}r#*_7zHz&ogxK=eJ&R4;=5YF_>ZStA>K^e~p+{rXG1Rbn*HjO?)7@ zSkF2z^#iH6%8A4e1BS6_g*Y!A`otz&JBGX!d9~!up9u2`cSK-Uc!aAC$IqCEa3uRM zp8Sj&N!Srp8^N>))A@#&T?&%<=Fe9K!?fVt4urJrwae>+VK(j4l}DTQ>B^%m`wZpL zrhU5dh;wu&3Z2ALg@NMbb<^aud#u2RLl1?Cih*7rs$8YgcA&#|`yO8|U`bw)8kLq) zNq(B%0Ni4AI1oy*hrtjpR+}Wm+=`)2iJyCIO4OM4BwrXs>o9aF2&ForP^ILELzNOU zGVMr|7AR7pY3fm;;tO4_rQ()Js4ek-kbo~$ot&ZEAD}QF`Za195yejg_UeA|1v&$SGe)+ROxm3uezT!P#elPps(?C6 z8tuIteuq9w8f{*Y#zzFvJEEBP%yq*dBXZ{u9L+J5CV`IjVzAeZmwWy?YHVHeg;BH) zgTrooL}7Kr&g&y~ZartD%zTt)5C8LW@wHBtYw2+?_Elizgl#%G{Fws86HbXXZFLr{ zk%*x~4lS-%G$x_9^J9qSPqcUhaZNO}Le;=I!BGmAEkA3-S5YP&H9J1Qgh|;88+zPK zUX`M3q}<$_`W3~gFxjF$t@Sqnl#wS}<0P$t?IsmneW*T& zyC%+~j1I-|Vyd-7;b|wo#={)z&49wL&u4Gir}NpH_UU}~mVE}Fy=kA$XK&i48)>)f zGmNwx;JX8=tSNb7@zI=ND2$WFE+(enUYdxC0ec)(0Vsu6Cz4u96VQHrMM@Jj!UIbB zUYe-kRY;;dkS1z4G-(o;dM}1F5kL3RMAVr0kS~m)br{k_j3}guIz}AQM9gTs2D1#s zxM@lg@un|yxt1~%CQa1XG&95DKneAPA@-a!kvG*^az%XHkSoB-`Nm#4Z@>0H5>$j0 zJUz-OSA6;=s|pk&iO)|bab=U$tX-kPmM<<1d=Zm>qGBNbM3u`sn6N=#3b``*r;?M* zD^mWci04j}uwMSDNa#+C{ek>b5&KV?M5kU1`6qtv<)5gr@1HM>qIDSZPmCz!pMJzH z|KyC6p^wrmxia2Anm#X=eDCEzcawiAHq0RsvJS}A#`2F3M(|Qt_>_h$91MK?enqW0 zQAkh{mKTZ{m^cuI7IQGmg$t6Zjg2a2TMKM>ZaT?s6%yMF2_JFVRZ{hGmdF)G$6sx zggN9T!$}PI3M&EGA%x2*gY?CiVKxce3Y> z4z-PI2-+xziXba`9YI$43dc*M=)H!PAO{v|f_~(I_KWE{el3c#1mdV|Y6^0lp4V>a zNijhknHD$v2?8-^{aTr!Y_Yqx8B$s~^F9dBGYBxepzP!|VC`!1ZCxl5i1K0$=pSSS z#^tc3G_YltE)HzjrON{wb{PV}mR-6;z_x_p4RSO*`d8-9(dXS^9T@QEStFda2QA4u z=d~rwbXj6R%rY#Mye0Yb2FAI>>9yz28zRN;NDjj@@mAOxZR7ko7rK>$KhKJuKhG*- z$n&L9^j?EMZ}0=ufdzk_BM<&Or)E5N7H6;DqqfPP=hM$?xAgio{=BL1uQ~*n;g|5| zO3>Hh%=7yOXHGuH*yc+oY}b{*T}ksjfQF|=yXVX+Nw9osx095_qK1EXBLI7efT8X< z{MRrp#))Ij1yL@RsOEhhKna>jLiNRH$S+td0aPNv%%cD<5YWFC;b%)WrQWhn=TkQA(;1a5`wUKH(>|S5xmKS~WA}F;TM6LVs}k#|8CViuc1`f+K-uRy7o={pJIYBik1 z&`f5X>pO8zCLfwmG1Fz@kYvxKzOy6*5Kb3L#k>tVZ_cVWv&y!Dfa~<7QS@Fz-3#*UmqQ@X`e1=Y}%&_ z8e8@mg2twOx}dRXpN^9NNGh>GCU^$)u#3;hlcG(52-1RR?nRrd8L;PB=b{aVmDDzh zcu)ic!NTk7?zplrZRr-Q*EZO>9Y4nJG=|W`U4k_Zi|qXo!k|%n(&BA^?%Z?;|A!^v(K) z6c{*qxPA@f1r9H8&4IXp)0Vafbc7c}Scso{Ss`j{VdH&X^6o-Vi1CD+ki&H`A!nmf zLX>9dfe8uGG-ZUS_yU(|=}9ndm+Pc#Cr*DtAZAbcMYrKc4%EEdXW|T=ycuAfKTkZl zptY}tCl?vR!!eH_A%al$2-S#fp{V#Z!K5;RFC0DYVt3P5slU#zhPMS;rpwBzo+T|=G5B4U;} z?e1w!l?UouNBv`*1#vm7JM+J80x&&(~3UzFvML_oE`a85?k;Af0J%z}|hd-*Rs4zdolQMne4=gpJ%YEDW*_vJ8W?M`?z?8bBru%l2c5wr4b6a z@i%BM;MJmMG-l-VT1*2jSP0_%7HGCkE}K?OYTSQxt-+dC=)69F;fvsggUzA2$@Y%N zd<3~C_Pqxk3i;VsRj`~yRz46wnIOu#HVl&xCt&8Uqfq2|=1;Idscy2w%uT=0#i)WDwPwN zj=;2S~z5paM@XO#&w4#nA7>&%7Z}Io`sT zE?yW#>oBxDF``iO^dpY9`K%qb1?b1Jwqp z8J+A}l98&s3Cr-HSDYp*)vHJX85J-Rq-s?LM9C8P+vRyfmaqy1r@sRZR}BX_qKD9i z`)0?*xCY>*JO#+zV#gIPZ z=U)1Z8WT73g;tCXL;8#nh4h&t4(T&yWFlphW{LQ?X-c2*>=(LROZiaasU_+t(wuGT zfq*e9eTGtB#IaZM=c-i22PXUzfPrJNi$JofoQ0_aQSpvCD!o|_qMr$Qa;%s{{&$gEbXWMK1 zY{v_uXdTAcE__6Bwu=~Xob8y=cnubu?RfBcxh@N_Zbzs<2RQ}0E^D%bOGwBgQNCBD zz)z%BLsScL$Rye#lC?-tfQ#kNND&}vp7{0g>@TVe8dz4YYn$?Ei1mHr9k^PrldEvm1HH2XmCO>z61w30qNsg^4&?L9lm7Xwmr&S2SkMm&8tU*yMDnQ+ zaL34)tFq4C^_k4*-D|zKcjYTl(I~1xH05yf8t9oT5Dq{{KZ@x!hIKAWx(`eEZ?!g9 ze2Itdp26(P$6PT7gfe8f`1aL$14ZMx4s2WZhemye!O*`*(YdGehKtBD!S{5NC?_QI@k!mLN$5;4sn)L#CQR%od} z8n8Wbh)vw9dBKNX5eMepQ~0U}%m+fKONkbDtXqtM7)n>Qhk`q~u6omlK+cOP_7J9~ zRc1>OK8QYriW8hG6QW$`rqGG_2MU^wHb%PMm_TZx5sMV4a)|t_#%cG;uC4iov)>x#wJ?##c68=tb`^c-I(FFt7cH zoq5d}Dfb$s*<=5_TzsvQ$nWQ5h}Udh8JqTalP1PUW_kL$D`Y zdnpG=ghQzq9J{FUQw2~ML7+c&61z~I$YWO_QAr{;d4*vPaq$D#I5>8+*CvTMv|=2) z__;rJQDf()k*@2L!W<3;IaZ3Ti#Y^A27h5BP!{Ka9hS9vym{&Ng%Ya4KeXreLm^vS3*^GILh>*V%BhRgshl#E-aGw4uia8+(qu^NDj;=8NqWppE)*gM)O9UEGQVv|k|jD+ z-{MOrYs4D;578R-17aQKjh87)e*7Hb;!nLd!eH8cNw}>w!jrn_mvzpiN|J73qzIR) zTq~hP?U`h33zTlSs3~FaHbAwZ36fhZ-YTwP(#BcaBFe$rW<}53W|gmTyflj5Yp}OD zu;6d|kvo6ePfZ!zEY1=J6RNUpvbb6Eymm{^im|%|;Z-mzof3wyR1Cz-0TEciAW#$% zqjKuhZYgUPJB)^Mul8FjYKB`Y>f#s@$hqkHV~Oj7z9dg&2d=Oj9!j)bJ3{>RXOb&V zTZF04i*X|3=l(!OjUB*vpOvD!IE^u$Jd8QsIE*nX^8|M2tMzrK6@@bm4< zm$xr|_wMcMKRmp@{r1K0e)IM1i*FwO_5JOO-~M?2$A@40zhC*kzy0p!#n*3tdasWS zL(Lrpp%YQq!_!?Dgsx$aoSJPRcO9Q-5oXD#35*BoeSrk_;DUE*<~5+ zk-UZ5+{E_|W~U<4ndqORhB$Wzb;5G-o!o-fCVGx?i0|2;7vHnWW7*nY{bcV ztRKXM>XdUIQr8a<--kXi;%GQ5hmVYp69_?BPK^^vPkc0W>_VatfG$yD@C-W2>L)d{ zw6G+aEkmHtYx_(BqqdXQ@6@Onp7N-R6AJ*jDf(01N+caQ(|O9<8m7#Smp?-U8=`s- zPdV@^YvZRp%W=xHqCe$XWyd;S>c!|aPI(S2PkD?yPkBtuPi_>KobqVvQ;y;Rn7F&!*VQNp{c9(H6(8>%KT4o}5p z+6?H@NH$j?WlY$VlUV~n3^iibxfVnK(?$?Y@!0H1rsV|DYv4z!+Ss0`AyF;?gL*|s zL;eD76Fo;cR3X`bp}6`Yt8A6A-`Y!~=)HzIBnKAykbdOx!dL)PIOa@e3F1-P=e1K^ z(rE3Lo)%M1;@^aJdx{|7x~2YQ>kE)R5)5#Y#4$X!s(Tv|4&8XI1MHU2gM__+a})3O zQ39~5l1?8VV3SGG`C1r4{+xK`t?i4~sDX0g+r@}t<tD^EDw*v6e6 zPk3cNwsGg{&Nv*|#(j<_OdOqKS?{XbO!7aH2Kjb8hLz_{s2xISG)J9|C%%>oUrll% zNazG7xuv*Ex$t8CY&8#*@a z(+wS4_8EqbP5bn`r1*PcGziXpbcJ5ihprNHaz_*`$e)>3vIg=Orj@L71!~3pQ11!R zon?%S@|IM(N)qYrK#jbGnbfzEvb!O``v4hrQ>AzuNbnj+@oBP6Pvp^YX+1c>*7>%@9uUzB`8VU;%7Koi0Ijj zC;N{|B!N>IkggA(M_>~v>w0VT+` z&ugcYAlF0I?lMXs5uXp;#Q7STUx@Rq#s|^GOMq9xQmd~15u=<$QV^pi(ZHb#j}nDa z5>=pmqfSCSk`UvPbJN`Z3&vLR1>0^mwdux8?2@%F;+pprSiDrkr;mU*~+aWy5w=6qscp4npOLqc|qaV+iKL9Fg8D8|vRG~Lww zb!7w92fDpnFZ}!R#hZ3~X^MeU#%JmHqHZNu3;!;slgnr)0p-6|@(=|yE4L&jkzXbq zU(SbrZ_2?MXZUwE|H$#>V~2ki+}a=}O^3$supdS+h0T{1F1>jvq)#vQvZq%VKbbF! zqV^SX=jR#z{qtKd(aHQ$_bQY6x`pB2K~=5gxa$K!{H#h3VWTIs&=4)hlJHfp81Gtw z^+d+LiLN&Yv)Y{rL(E4mCQDzm70z4DmjJm?_i6L zGys&<3&e8ahzhkUueyFl0`Wn)tBIn&rLla|KHXTpX`gN^-?GmzmT%gp8_PHCQvxKw z(r?)(ar24;Q3yBflW1e2i3c!<>^3-_8OEi1xF!;zB}QirSCuBTsDP6S970sNX^~vS zcX<1YAyFX)t-um^MWPVMpNASpc{y)^>jM$D;ob6;a4*s%9KXC6hR4>+z1=Zt%+3hu zv=>IvIt;60j3|tbIpQ!n#*ED77^PV&!no=4a$Oc*(A}(Xk!%j9@dYR029ZYR$=mVb zG?|P1o?=skZLviju}yuMX|a*q#SpFprR6~$SQhtKW5lCtoG0#6N=4tmbRMSY5ekh5 zG)I!q&|S1NHz>y8Utwb+&{Uy=c7hY}UnE<7GkGSS$a*03WVH9JO1tHBvw>A0EM zo|{q}WW^Ru&PAB6NB+DL6|s~X#UImi$I{l4cZr_mH&NzRJS7(C?{2^O`_$<#v0SfU_EyU=AnxxQM{R7j?9&;%P5X2P z?^=C68G-?97VuJw$YeOdtQp+TS?3pWgTA*JL{OCI`udi

    YKgSIj{KMZ)ouetQ@} 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + +

    +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/zsh/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file From 69e94af3abee67afee473567103be637dad4769a Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 05:51:49 +0000 Subject: [PATCH 050/470] Delete README.md --- zsdoc/README.md | 50 ------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 zsdoc/README.md diff --git a/zsdoc/README.md b/zsdoc/README.md deleted file mode 100644 index c9709b2..0000000 --- a/zsdoc/README.md +++ /dev/null @@ -1,50 +0,0 @@ -The files will be processed and their documentation will be generated -in subdirectory `zsdoc` (with meta-data in subdirectory `data`). - -> Supported are Bash and Zsh scripts. - -- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` -- Zsh control binary is: `zsh` -- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` - -Options: - -```shell --h/--help # Usage information --v/--verbose # More verbose operation-status output --q/--quiet # No status messages --n/--noansi # No colors in terminal output ---cignore # Specify which comment lines should be ignored --f/--fpath # Paths separated by : pointing to directories with functions ---synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" ---blocka # String used as block-begin, default: {{{ ---blockb # String used as block-end, default: }}} ---scomm # Strip comment char "#" from function comments ---bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) -``` - -Example --cignore options: - -```shell ---cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ ---cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ -``` - -File is parsed for synopsis block, which can be e.g.: - -```shell -# synopsis {{{my synopsis, can be multi-line}}} -``` - - Other block that is parsed is commenting on environment variables. There can be multiple such blocks, - -their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines -and results in a table in the output AsciiDoc document. An example block: - -```shell -# env-vars {{{ -# PATH -> paths to executables -# MANPATH -> paths to manuals }}} -``` - - Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From f298d8bf38b0beae79035f7eb50a5d85bfafa02e Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 05:52:00 +0000 Subject: [PATCH 051/470] Delete Makefile --- zsdoc/Makefile | 78 -------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 zsdoc/Makefile diff --git a/zsdoc/Makefile b/zsdoc/Makefile deleted file mode 100644 index b540f2f..0000000 --- a/zsdoc/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -all: man pdf html - -# MAN -# Converted with a2x from asciidoc package - -man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 - -man/zi.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc - -man/side.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc - -man/install.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc - -man/autoload.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc - -man/additional.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc - -# PDF -# Uses asciidoctor not a2x (i.e. not asciidoc) - -pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf - -pdf/zi.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc - -pdf/side.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc - -pdf/install.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc - -pdf/autoload.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc - -pdf/additional.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc - -html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html - -html/zi.zsh.html: - @mkdir -p html - asciidoctor -D html zi.zsh.adoc - -html/side.zsh.html: - @mkdir -p html - asciidoctor -D html side.zsh.adoc - -html/install.zsh.html: - @mkdir -p html - asciidoctor -D html install.zsh.adoc - -html/autoload.zsh.html: - @mkdir -p html - asciidoctor -D html autoload.zsh.adoc - -html/additional.zsh.html: - @mkdir -p html - asciidoctor -D html additional.zsh.adoc - -clean: - rm -rvf man pdf html data - -.PHONY: man pdf html clean From 1e84b3c7af7baf6d191a1df7d44c2f5bbeedbf30 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 05:52:07 +0000 Subject: [PATCH 052/470] Delete Makefile --- Makefile | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 946d81d..0000000 --- a/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc - -%.zwc: % - zi/lib/zcompile $< - -clone: clean - git clone --depth 1 --branch main https://github.com/z-shell/zi - -adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh - rm -vrf zsdoc/data - rm -vrf zsdoc/asciidoc/*.adoc - zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ - zi/zi.zsh \ - zi/lib/zsh/side.zsh \ - zi/lib/zsh/install.zsh \ - zi/lib/zsh/autoload.zsh \ - zi/lib/zsh/additional.zsh - @mkdir -p zsdoc/asciidoc - cp -vf zsdoc/*.adoc zsdoc/asciidoc/ - -clean: - rm -rf zi - rm -vf zsdoc/*.adoc - -distclean: clean - rm -rf zsdoc/data - -.PHONY: all clean clone man pdf html adoc From 705f3b088f3ed92bad90c0205c2671465d6a0874 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 05:54:06 +0000 Subject: [PATCH 053/470] ss-o published a site update --- Makefile | 28 ++++++++++++++++++ zsdoc/Makefile | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ zsdoc/README.md | 50 +++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 Makefile create mode 100644 zsdoc/Makefile create mode 100644 zsdoc/README.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..946d81d --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc + +%.zwc: % + zi/lib/zcompile $< + +clone: clean + git clone --depth 1 --branch main https://github.com/z-shell/zi + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh + rm -vrf zsdoc/data + rm -vrf zsdoc/asciidoc/*.adoc + zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ + zi/zi.zsh \ + zi/lib/zsh/side.zsh \ + zi/lib/zsh/install.zsh \ + zi/lib/zsh/autoload.zsh \ + zi/lib/zsh/additional.zsh + @mkdir -p zsdoc/asciidoc + cp -vf zsdoc/*.adoc zsdoc/asciidoc/ + +clean: + rm -rf zi + rm -vf zsdoc/*.adoc + +distclean: clean + rm -rf zsdoc/data + +.PHONY: all clean clone man pdf html adoc diff --git a/zsdoc/Makefile b/zsdoc/Makefile new file mode 100644 index 0000000..b540f2f --- /dev/null +++ b/zsdoc/Makefile @@ -0,0 +1,78 @@ +all: man pdf html + +# MAN +# Converted with a2x from asciidoc package + +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 + +man/zi.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc + +man/side.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc + +man/install.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc + +man/autoload.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc + +man/additional.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc + +# PDF +# Uses asciidoctor not a2x (i.e. not asciidoc) + +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf + +pdf/zi.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc + +pdf/side.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc + +pdf/install.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc + +pdf/autoload.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc + +pdf/additional.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html + +html/zi.zsh.html: + @mkdir -p html + asciidoctor -D html zi.zsh.adoc + +html/side.zsh.html: + @mkdir -p html + asciidoctor -D html side.zsh.adoc + +html/install.zsh.html: + @mkdir -p html + asciidoctor -D html install.zsh.adoc + +html/autoload.zsh.html: + @mkdir -p html + asciidoctor -D html autoload.zsh.adoc + +html/additional.zsh.html: + @mkdir -p html + asciidoctor -D html additional.zsh.adoc + +clean: + rm -rvf man pdf html data + +.PHONY: man pdf html clean diff --git a/zsdoc/README.md b/zsdoc/README.md new file mode 100644 index 0000000..c9709b2 --- /dev/null +++ b/zsdoc/README.md @@ -0,0 +1,50 @@ +The files will be processed and their documentation will be generated +in subdirectory `zsdoc` (with meta-data in subdirectory `data`). + +> Supported are Bash and Zsh scripts. + +- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` +- Zsh control binary is: `zsh` +- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` + +Options: + +```shell +-h/--help # Usage information +-v/--verbose # More verbose operation-status output +-q/--quiet # No status messages +-n/--noansi # No colors in terminal output +--cignore # Specify which comment lines should be ignored +-f/--fpath # Paths separated by : pointing to directories with functions +--synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" +--blocka # String used as block-begin, default: {{{ +--blockb # String used as block-end, default: }}} +--scomm # Strip comment char "#" from function comments +--bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) +``` + +Example --cignore options: + +```shell +--cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ +--cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ +``` + +File is parsed for synopsis block, which can be e.g.: + +```shell +# synopsis {{{my synopsis, can be multi-line}}} +``` + + Other block that is parsed is commenting on environment variables. There can be multiple such blocks, + +their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines +and results in a table in the output AsciiDoc document. An example block: + +```shell +# env-vars {{{ +# PATH -> paths to executables +# MANPATH -> paths to manuals }}} +``` + + Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From 1ee08fc56907b6c5e943b58a9a54ca73ebca0435 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:13:33 +0000 Subject: [PATCH 054/470] Delete Makefile --- Makefile | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 946d81d..0000000 --- a/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc - -%.zwc: % - zi/lib/zcompile $< - -clone: clean - git clone --depth 1 --branch main https://github.com/z-shell/zi - -adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh - rm -vrf zsdoc/data - rm -vrf zsdoc/asciidoc/*.adoc - zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ - zi/zi.zsh \ - zi/lib/zsh/side.zsh \ - zi/lib/zsh/install.zsh \ - zi/lib/zsh/autoload.zsh \ - zi/lib/zsh/additional.zsh - @mkdir -p zsdoc/asciidoc - cp -vf zsdoc/*.adoc zsdoc/asciidoc/ - -clean: - rm -rf zi - rm -vf zsdoc/*.adoc - -distclean: clean - rm -rf zsdoc/data - -.PHONY: all clean clone man pdf html adoc From f0aed565624f4a7ca7af1641e806d7d5e8b4557f Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:13:43 +0000 Subject: [PATCH 055/470] Delete README.md --- zsdoc/README.md | 50 ------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 zsdoc/README.md diff --git a/zsdoc/README.md b/zsdoc/README.md deleted file mode 100644 index c9709b2..0000000 --- a/zsdoc/README.md +++ /dev/null @@ -1,50 +0,0 @@ -The files will be processed and their documentation will be generated -in subdirectory `zsdoc` (with meta-data in subdirectory `data`). - -> Supported are Bash and Zsh scripts. - -- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` -- Zsh control binary is: `zsh` -- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` - -Options: - -```shell --h/--help # Usage information --v/--verbose # More verbose operation-status output --q/--quiet # No status messages --n/--noansi # No colors in terminal output ---cignore # Specify which comment lines should be ignored --f/--fpath # Paths separated by : pointing to directories with functions ---synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" ---blocka # String used as block-begin, default: {{{ ---blockb # String used as block-end, default: }}} ---scomm # Strip comment char "#" from function comments ---bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) -``` - -Example --cignore options: - -```shell ---cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ ---cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ -``` - -File is parsed for synopsis block, which can be e.g.: - -```shell -# synopsis {{{my synopsis, can be multi-line}}} -``` - - Other block that is parsed is commenting on environment variables. There can be multiple such blocks, - -their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines -and results in a table in the output AsciiDoc document. An example block: - -```shell -# env-vars {{{ -# PATH -> paths to executables -# MANPATH -> paths to manuals }}} -``` - - Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From eb84a3321637066cdc07ef5229aa44fd8c0265f3 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:13:53 +0000 Subject: [PATCH 056/470] Delete Makefile --- zsdoc/Makefile | 78 -------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 zsdoc/Makefile diff --git a/zsdoc/Makefile b/zsdoc/Makefile deleted file mode 100644 index b540f2f..0000000 --- a/zsdoc/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -all: man pdf html - -# MAN -# Converted with a2x from asciidoc package - -man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 - -man/zi.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc - -man/side.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc - -man/install.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc - -man/autoload.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc - -man/additional.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc - -# PDF -# Uses asciidoctor not a2x (i.e. not asciidoc) - -pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf - -pdf/zi.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc - -pdf/side.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc - -pdf/install.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc - -pdf/autoload.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc - -pdf/additional.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc - -html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html - -html/zi.zsh.html: - @mkdir -p html - asciidoctor -D html zi.zsh.adoc - -html/side.zsh.html: - @mkdir -p html - asciidoctor -D html side.zsh.adoc - -html/install.zsh.html: - @mkdir -p html - asciidoctor -D html install.zsh.adoc - -html/autoload.zsh.html: - @mkdir -p html - asciidoctor -D html autoload.zsh.adoc - -html/additional.zsh.html: - @mkdir -p html - asciidoctor -D html additional.zsh.adoc - -clean: - rm -rvf man pdf html data - -.PHONY: man pdf html clean From 564f10d2da4b5d274c870b0bdea537fd24c3b12e Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:15:07 +0000 Subject: [PATCH 057/470] deploy: 23567b28219d544b8745933ef247b5c5e4262119 --- Makefile | 28 ++++++++++++++++++ zsdoc/Makefile | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ zsdoc/README.md | 50 +++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 Makefile create mode 100644 zsdoc/Makefile create mode 100644 zsdoc/README.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..946d81d --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc + +%.zwc: % + zi/lib/zcompile $< + +clone: clean + git clone --depth 1 --branch main https://github.com/z-shell/zi + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh + rm -vrf zsdoc/data + rm -vrf zsdoc/asciidoc/*.adoc + zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ + zi/zi.zsh \ + zi/lib/zsh/side.zsh \ + zi/lib/zsh/install.zsh \ + zi/lib/zsh/autoload.zsh \ + zi/lib/zsh/additional.zsh + @mkdir -p zsdoc/asciidoc + cp -vf zsdoc/*.adoc zsdoc/asciidoc/ + +clean: + rm -rf zi + rm -vf zsdoc/*.adoc + +distclean: clean + rm -rf zsdoc/data + +.PHONY: all clean clone man pdf html adoc diff --git a/zsdoc/Makefile b/zsdoc/Makefile new file mode 100644 index 0000000..b540f2f --- /dev/null +++ b/zsdoc/Makefile @@ -0,0 +1,78 @@ +all: man pdf html + +# MAN +# Converted with a2x from asciidoc package + +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 + +man/zi.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc + +man/side.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc + +man/install.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc + +man/autoload.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc + +man/additional.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc + +# PDF +# Uses asciidoctor not a2x (i.e. not asciidoc) + +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf + +pdf/zi.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc + +pdf/side.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc + +pdf/install.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc + +pdf/autoload.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc + +pdf/additional.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html + +html/zi.zsh.html: + @mkdir -p html + asciidoctor -D html zi.zsh.adoc + +html/side.zsh.html: + @mkdir -p html + asciidoctor -D html side.zsh.adoc + +html/install.zsh.html: + @mkdir -p html + asciidoctor -D html install.zsh.adoc + +html/autoload.zsh.html: + @mkdir -p html + asciidoctor -D html autoload.zsh.adoc + +html/additional.zsh.html: + @mkdir -p html + asciidoctor -D html additional.zsh.adoc + +clean: + rm -rvf man pdf html data + +.PHONY: man pdf html clean diff --git a/zsdoc/README.md b/zsdoc/README.md new file mode 100644 index 0000000..c9709b2 --- /dev/null +++ b/zsdoc/README.md @@ -0,0 +1,50 @@ +The files will be processed and their documentation will be generated +in subdirectory `zsdoc` (with meta-data in subdirectory `data`). + +> Supported are Bash and Zsh scripts. + +- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` +- Zsh control binary is: `zsh` +- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` + +Options: + +```shell +-h/--help # Usage information +-v/--verbose # More verbose operation-status output +-q/--quiet # No status messages +-n/--noansi # No colors in terminal output +--cignore # Specify which comment lines should be ignored +-f/--fpath # Paths separated by : pointing to directories with functions +--synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" +--blocka # String used as block-begin, default: {{{ +--blockb # String used as block-end, default: }}} +--scomm # Strip comment char "#" from function comments +--bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) +``` + +Example --cignore options: + +```shell +--cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ +--cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ +``` + +File is parsed for synopsis block, which can be e.g.: + +```shell +# synopsis {{{my synopsis, can be multi-line}}} +``` + + Other block that is parsed is commenting on environment variables. There can be multiple such blocks, + +their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines +and results in a table in the output AsciiDoc document. An example block: + +```shell +# env-vars {{{ +# PATH -> paths to executables +# MANPATH -> paths to manuals }}} +``` + + Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From 741ed4a948016a8c6738dcd3b0d43174022fdb54 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:20:33 +0000 Subject: [PATCH 058/470] deploy: 420e2c980a84992451fc7b29df91ef9d982b12f2 From af1d3021bc9c8aa772df13e2e3a314209b8f2d51 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:25:49 +0000 Subject: [PATCH 059/470] deploy: 2fe6015cb5480ccd47be28ce25057f00eb68f2d8 From 9ba2cd2d842aee03bac93b17bd702db07f9fe017 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:29:31 +0000 Subject: [PATCH 060/470] deploy: 38ff7b1fc52179eae0f1dfd7398faf99c995c733 From 4d4198e3b28b0185bd27cf08bb0202fd6033b339 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:32:51 +0000 Subject: [PATCH 061/470] Delete Makefile --- Makefile | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 946d81d..0000000 --- a/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc - -%.zwc: % - zi/lib/zcompile $< - -clone: clean - git clone --depth 1 --branch main https://github.com/z-shell/zi - -adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh - rm -vrf zsdoc/data - rm -vrf zsdoc/asciidoc/*.adoc - zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ - zi/zi.zsh \ - zi/lib/zsh/side.zsh \ - zi/lib/zsh/install.zsh \ - zi/lib/zsh/autoload.zsh \ - zi/lib/zsh/additional.zsh - @mkdir -p zsdoc/asciidoc - cp -vf zsdoc/*.adoc zsdoc/asciidoc/ - -clean: - rm -rf zi - rm -vf zsdoc/*.adoc - -distclean: clean - rm -rf zsdoc/data - -.PHONY: all clean clone man pdf html adoc From 6f9055212133cdc7a8038f677a51d78f7f25b7c4 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:33:00 +0000 Subject: [PATCH 062/470] Delete Makefile --- zsdoc/Makefile | 78 -------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 zsdoc/Makefile diff --git a/zsdoc/Makefile b/zsdoc/Makefile deleted file mode 100644 index b540f2f..0000000 --- a/zsdoc/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -all: man pdf html - -# MAN -# Converted with a2x from asciidoc package - -man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 - -man/zi.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc - -man/side.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc - -man/install.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc - -man/autoload.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc - -man/additional.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc - -# PDF -# Uses asciidoctor not a2x (i.e. not asciidoc) - -pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf - -pdf/zi.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc - -pdf/side.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc - -pdf/install.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc - -pdf/autoload.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc - -pdf/additional.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc - -html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html - -html/zi.zsh.html: - @mkdir -p html - asciidoctor -D html zi.zsh.adoc - -html/side.zsh.html: - @mkdir -p html - asciidoctor -D html side.zsh.adoc - -html/install.zsh.html: - @mkdir -p html - asciidoctor -D html install.zsh.adoc - -html/autoload.zsh.html: - @mkdir -p html - asciidoctor -D html autoload.zsh.adoc - -html/additional.zsh.html: - @mkdir -p html - asciidoctor -D html additional.zsh.adoc - -clean: - rm -rvf man pdf html data - -.PHONY: man pdf html clean From bc5422e670114da31722d4e04324c7825afa0073 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:33:06 +0000 Subject: [PATCH 063/470] Delete README.md --- zsdoc/README.md | 50 ------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 zsdoc/README.md diff --git a/zsdoc/README.md b/zsdoc/README.md deleted file mode 100644 index c9709b2..0000000 --- a/zsdoc/README.md +++ /dev/null @@ -1,50 +0,0 @@ -The files will be processed and their documentation will be generated -in subdirectory `zsdoc` (with meta-data in subdirectory `data`). - -> Supported are Bash and Zsh scripts. - -- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` -- Zsh control binary is: `zsh` -- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` - -Options: - -```shell --h/--help # Usage information --v/--verbose # More verbose operation-status output --q/--quiet # No status messages --n/--noansi # No colors in terminal output ---cignore # Specify which comment lines should be ignored --f/--fpath # Paths separated by : pointing to directories with functions ---synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" ---blocka # String used as block-begin, default: {{{ ---blockb # String used as block-end, default: }}} ---scomm # Strip comment char "#" from function comments ---bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) -``` - -Example --cignore options: - -```shell ---cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ ---cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ -``` - -File is parsed for synopsis block, which can be e.g.: - -```shell -# synopsis {{{my synopsis, can be multi-line}}} -``` - - Other block that is parsed is commenting on environment variables. There can be multiple such blocks, - -their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines -and results in a table in the output AsciiDoc document. An example block: - -```shell -# env-vars {{{ -# PATH -> paths to executables -# MANPATH -> paths to manuals }}} -``` - - Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From ffb82f233ebf6b84e62a1aad44931c02707c1c46 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:33:21 +0000 Subject: [PATCH 064/470] Delete Zsh-Native-Scripting-Handbook.html --- zsh/Zsh-Native-Scripting-Handbook.html | 1307 ------------------------ 1 file changed, 1307 deletions(-) delete mode 100644 zsh/Zsh-Native-Scripting-Handbook.html diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - - -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file From ccacd66e9960d0af822fee306f3e8541f941842e Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 06:33:27 +0000 Subject: [PATCH 065/470] Delete Zsh-Plugin-Standard.html --- zsh/Zsh-Plugin-Standard.html | 1785 ---------------------------------- 1 file changed, 1785 deletions(-) delete mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/zsh/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file From 6196a00db574752e73cee09158657509d29424f7 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:34:36 +0000 Subject: [PATCH 066/470] deploy: 1dd6f8dea972f2736508e7a5f156476b94f1212b --- Makefile | 28 + zsdoc/Makefile | 78 ++ zsdoc/README.md | 50 + zsh/Zsh-Native-Scripting-Handbook.html | 1307 +++++++++++++++++ zsh/Zsh-Plugin-Standard.html | 1785 ++++++++++++++++++++++++ 5 files changed, 3248 insertions(+) create mode 100644 Makefile create mode 100644 zsdoc/Makefile create mode 100644 zsdoc/README.md create mode 100644 zsh/Zsh-Native-Scripting-Handbook.html create mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..946d81d --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc + +%.zwc: % + zi/lib/zcompile $< + +clone: clean + git clone --depth 1 --branch main https://github.com/z-shell/zi + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh + rm -vrf zsdoc/data + rm -vrf zsdoc/asciidoc/*.adoc + zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ + zi/zi.zsh \ + zi/lib/zsh/side.zsh \ + zi/lib/zsh/install.zsh \ + zi/lib/zsh/autoload.zsh \ + zi/lib/zsh/additional.zsh + @mkdir -p zsdoc/asciidoc + cp -vf zsdoc/*.adoc zsdoc/asciidoc/ + +clean: + rm -rf zi + rm -vf zsdoc/*.adoc + +distclean: clean + rm -rf zsdoc/data + +.PHONY: all clean clone man pdf html adoc diff --git a/zsdoc/Makefile b/zsdoc/Makefile new file mode 100644 index 0000000..b540f2f --- /dev/null +++ b/zsdoc/Makefile @@ -0,0 +1,78 @@ +all: man pdf html + +# MAN +# Converted with a2x from asciidoc package + +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 + +man/zi.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc + +man/side.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc + +man/install.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc + +man/autoload.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc + +man/additional.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc + +# PDF +# Uses asciidoctor not a2x (i.e. not asciidoc) + +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf + +pdf/zi.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc + +pdf/side.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc + +pdf/install.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc + +pdf/autoload.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc + +pdf/additional.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html + +html/zi.zsh.html: + @mkdir -p html + asciidoctor -D html zi.zsh.adoc + +html/side.zsh.html: + @mkdir -p html + asciidoctor -D html side.zsh.adoc + +html/install.zsh.html: + @mkdir -p html + asciidoctor -D html install.zsh.adoc + +html/autoload.zsh.html: + @mkdir -p html + asciidoctor -D html autoload.zsh.adoc + +html/additional.zsh.html: + @mkdir -p html + asciidoctor -D html additional.zsh.adoc + +clean: + rm -rvf man pdf html data + +.PHONY: man pdf html clean diff --git a/zsdoc/README.md b/zsdoc/README.md new file mode 100644 index 0000000..c9709b2 --- /dev/null +++ b/zsdoc/README.md @@ -0,0 +1,50 @@ +The files will be processed and their documentation will be generated +in subdirectory `zsdoc` (with meta-data in subdirectory `data`). + +> Supported are Bash and Zsh scripts. + +- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` +- Zsh control binary is: `zsh` +- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` + +Options: + +```shell +-h/--help # Usage information +-v/--verbose # More verbose operation-status output +-q/--quiet # No status messages +-n/--noansi # No colors in terminal output +--cignore # Specify which comment lines should be ignored +-f/--fpath # Paths separated by : pointing to directories with functions +--synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" +--blocka # String used as block-begin, default: {{{ +--blockb # String used as block-end, default: }}} +--scomm # Strip comment char "#" from function comments +--bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) +``` + +Example --cignore options: + +```shell +--cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ +--cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ +``` + +File is parsed for synopsis block, which can be e.g.: + +```shell +# synopsis {{{my synopsis, can be multi-line}}} +``` + + Other block that is parsed is commenting on environment variables. There can be multiple such blocks, + +their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines +and results in a table in the output AsciiDoc document. An example block: + +```shell +# env-vars {{{ +# PATH -> paths to executables +# MANPATH -> paths to manuals }}} +``` + + Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + + +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/zsh/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file From 57952c3104c7e6bced02fe6ac4700475f532ae5f Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 06:57:51 +0000 Subject: [PATCH 067/470] deploy: f79a9c032b7fef3cf6836c8b8225b6f789fb15ff --- code/asciidoc/additional.zsh.adoc | 165 + code/asciidoc/autoload.zsh.adoc | 1520 ++++++ code/asciidoc/install.zsh.adoc | 746 +++ code/asciidoc/side.zsh.adoc | 300 ++ code/asciidoc/zi.zsh.adoc | 1583 ++++++ code/html/additional.zsh.html | 2735 +++++++++++ code/html/autoload.zsh.html | 5041 ++++++++++++++++++++ code/html/install.zsh.html | 3648 ++++++++++++++ code/html/side.zsh.html | 2932 ++++++++++++ code/html/zi.zsh.html | 4886 +++++++++++++++++++ code/pdf/additional.zsh.pdf | Bin 0 -> 99114 bytes code/pdf/autoload.zsh.pdf | Bin 0 -> 440338 bytes code/pdf/install.zsh.pdf | Bin 0 -> 242957 bytes code/pdf/side.zsh.pdf | Bin 0 -> 135509 bytes code/pdf/zi.zsh.pdf | Bin 0 -> 412082 bytes zsh/zsh/Zsh-Native-Scripting-Handbook.html | 1307 +++++ zsh/zsh/Zsh-Plugin-Standard.html | 1785 +++++++ 17 files changed, 26648 insertions(+) create mode 100644 code/asciidoc/additional.zsh.adoc create mode 100644 code/asciidoc/autoload.zsh.adoc create mode 100644 code/asciidoc/install.zsh.adoc create mode 100644 code/asciidoc/side.zsh.adoc create mode 100644 code/asciidoc/zi.zsh.adoc create mode 100644 code/html/additional.zsh.html create mode 100644 code/html/autoload.zsh.html create mode 100644 code/html/install.zsh.html create mode 100644 code/html/side.zsh.html create mode 100644 code/html/zi.zsh.html create mode 100644 code/pdf/additional.zsh.pdf create mode 100644 code/pdf/autoload.zsh.pdf create mode 100644 code/pdf/install.zsh.pdf create mode 100644 code/pdf/side.zsh.pdf create mode 100644 code/pdf/zi.zsh.pdf create mode 100644 zsh/zsh/Zsh-Native-Scripting-Handbook.html create mode 100644 zsh/zsh/Zsh-Plugin-Standard.html diff --git a/code/asciidoc/additional.zsh.adoc b/code/asciidoc/additional.zsh.adoc new file mode 100644 index 0000000..50e0404 --- /dev/null +++ b/code/asciidoc/additional.zsh.adoc @@ -0,0 +1,165 @@ +additional.zsh(1) +================= +:compat-mode!: + +NAME +---- +additional.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-clear-debug-report + .zi-debug-start + .zi-debug-stop + .zi-debug-unload + .zi-service + .zi-wrap-track-functions + :zi-tmp-subst-source + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-clear-debug-report +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-debug-report [[[ + Forgets dtrace repport gathered up to this moment. +____ + +Has 1 line(s). Calls functions: + + .zi-clear-debug-report + `-- autoload.zsh/.zi-clear-report-for + +Called by: + + autoload.zsh/.zi-unload + zi.zsh/zi + +.zi-debug-start +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-start [[[ + Starts Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 9 line(s). Calls functions: + + .zi-debug-start + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-diff + `-- zi.zsh/.zi-tmp-subst-on + +Called by: + + zi.zsh/zi + +.zi-debug-stop +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-stop [[[ + Stops Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 3 line(s). Calls functions: + + .zi-debug-stop + |-- zi.zsh/.zi-diff + `-- zi.zsh/.zi-tmp-subst-off + +Called by: + + zi.zsh/zi + +.zi-debug-unload +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-unload [[[ + Reverts changes detected by dtrace run. +____ + +Has 6 line(s). Calls functions: + + .zi-debug-unload + |-- autoload.zsh/.zi-unload + `-- zi.zsh/+zi-message + +Uses feature(s): _source_ + +Called by: + + zi.zsh/zi + +.zi-service +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-service [[[ + Handles given service, i.e. obtains lock, runs it, or waits if no lock + + $1 - type "p" or "s" (plugin or snippet) + $2 - mode - for plugin (light or load) + $3 - id - URL or plugin ID or alias name (from id-as'') +____ + +Has 29 line(s). Calls functions: + + .zi-service + |-- zi.zsh/.zi-load + `-- zi.zsh/.zi-load-snippet + +Uses feature(s): _kill_, _read_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-wrap-track-functions +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-wrap-track-functions [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-source +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-source [[[ +____ + +Has 25 line(s). Calls functions: + + :zi-tmp-subst-source + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + diff --git a/code/asciidoc/autoload.zsh.adoc b/code/asciidoc/autoload.zsh.adoc new file mode 100644 index 0000000..58fb2ad --- /dev/null +++ b/code/asciidoc/autoload.zsh.adoc @@ -0,0 +1,1520 @@ +autoload.zsh(1) +=============== +:compat-mode!: + +NAME +---- +autoload.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-analytics-menu + .zi-any-to-uspl2 + .zi-at-eval + .zi-build-module + .zi-cd + .zi-cdisable + .zi-cenable + .zi-changes + .zi-check-comp-consistency + .zi-check-which-completions-are-enabled + .zi-check-which-completions-are-installed + .zi-clear-completions + .zi-clear-report-for + .zi-compile-uncompile-all + .zi-compiled + .zi-confirm + .zi-control-menu + .zi-create + .zi-delete + .zi-diff-env-compute + .zi-diff-functions-compute + .zi-diff-options-compute + .zi-diff-parameter-compute + .zi-edit + .zi-exists-message + .zi-find-completions-of-plugin + .zi-format-env + .zi-format-functions + .zi-format-options + .zi-format-parameter + .zi-get-completion-owner + .zi-get-completion-owner-uspl2col + .zi-get-path + .zi-glance + .zi-help + .zi-list-bindkeys + .zi-list-compdef-replay + .zi-ls + .zi-module + .zi-pager + .zi-prepare-readlink + .zi-recall + .zi-recently + .zi-restore-extendedglob + .zi-run-delete-hooks + .zi-save-set-extendedglob + .zi-search-completions + .zi-self-update + .zi-show-all-reports + .zi-show-completions + .zi-show-debug-report + .zi-show-registered-plugins + .zi-show-report + .zi-show-times + .zi-show-zstatus + .zi-stress + .zi-uncompile-plugin + .zi-uninstall-completions + .zi-unload + .zi-unregister-plugin + .zi-update-all-parallel + .zi-update-or-status + .zi-update-or-status-all + .zi-update-or-status-snippet + .zi-wait-for-update-jobs + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-analytics-menu +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-analytics-menu [[[ + Shows ❮ ZI ❯ analytics. + + User-action entry point. +____ + +Has 23 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-any-to-uspl2 +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-uspl2 [[[ + Converts given plugin-spec to format that's used in keys for hash tables. + So basically, creates string "user/plugin" (this format is called: uspl2). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 2 line(s). Calls functions: + + .zi-any-to-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-clear-report-for + .zi-exists-message + +.zi-at-eval +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-build-module +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-build-module [[[ + Performs ./configure && make on the module and displays information how to load the module in .zshrc. +____ + +Has 41 line(s). Calls functions: + + .zi-build-module + `-- zi.zsh/+zi-message + +Called by: + + .zi-module + +.zi-cd +~~~~~~ + +____ + + FUNCTION: .zi-cd [[[ + Jumps to plugin's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 15 line(s). Calls functions: + + .zi-cd + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-cdisable +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cdisable [[[ + Enables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 27 line(s). Calls functions: + + .zi-cdisable + +Called by: + + zi.zsh/zi + +.zi-cenable +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-cenable [[[ + Disables given installed completion. + + User-action entry point. + + $1 - e.g. "_mkdir" or "mkdir" +____ + +Has 26 line(s). Calls functions: + + .zi-cenable + +Called by: + + zi.zsh/zi + +.zi-changes +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-changes [[[ + Shows `git log` of given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-changes + |-- side.zsh/.zi-exists-physically-message + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-check-comp-consistency +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-comp-consistency [[[ + ❮ ZI ❯ creates symlink for each installed completion. + This function checks whether given completion (i.e. file like "_mkdir") is indeed a symlink. + Backup file is a completion that is disabled - has the leading "_" removed. + + $1 - path to completion within plugin's directory + $2 - path to backup file within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-check-which-completions-are-enabled +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-enabled [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is disabled - returns 0 or 1 on corresponding positions in reply. + + Uninstalled completions will be reported as "0" - i.e. disabled + + $1, ... - path to completion within plugin's directory +____ + +Has 10 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-check-which-completions-are-installed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-check-which-completions-are-installed [[[ + For each argument that each should be a path to completion + within a plugin's dir, it checks whether that completion + is installed - returns 0 or 1 on corresponding positions in reply. + + $1, ... - path to completion within plugin's directory +____ + +Has 11 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-clear-completions +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-completions [[[ + Delete stray and improper completions. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 35 line(s). Calls functions: + + .zi-clear-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-clear-report-for +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-report-for [[[ + Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 23 line(s). Calls functions: + + .zi-clear-report-for + +Called by: + + .zi-unload + additional.zsh/.zi-clear-debug-report + +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-compiled +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. + + User-action entry point. +____ + +Has 23 line(s). Calls functions: + + .zi-compiled + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-confirm +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-confirm [[[ + Prints given question, waits for "y" key, evals given expression if "y" obtained + + $1 - question + $2 - expression +____ + +Has 22 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _read_ + +Called by: + + .zi-delete + +.zi-control-menu +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-control-menu [[[ + Shows control options. + + User-action entry point. +____ + +Has 22 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-create +~~~~~~~~~~ + +____ + + FUNCTION: .zi-create [[[ + Creates a plugin, also on Github (if not "_local/name" plugin). + + User-action entry point. + + $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 103 line(s). Calls functions: + + .zi-create + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _autoload_, _setopt_, _vared_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-delete +~~~~~~~~~~ + +____ + + FUNCTION: .zi-delete [[[ + Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). + + User-action entry point. + + $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 93 line(s). Calls functions: + + .zi-delete + |-- side.zsh/.zi-compute-ice + |-- zi.zsh/+zi-prehelp-usage-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-parse-opts + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-diff-env-compute +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env-compute [[[ + Computes ZI_PATH, ZI_FPATH that hold (f)path components + added by plugin. Uses data gathered earlier by .zi-diff-env(). + + $1 - user/plugin +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-functions-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions-compute [[[ + Computes FUNCTIONS that holds new functions added by plugin. + Uses data gathered earlier by .zi-diff-functions(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-options-compute +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options-compute [[[ + Computes OPTIONS that holds options changed by plugin. + Uses data gathered earlier by .zi-diff-options(). + + $1 - user/plugin +____ + +Has 16 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-diff-parameter-compute +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter-compute [[[ + Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold + parameters created or changed (their type) by plugin. Uses + data gathered earlier by .zi-diff-parameter(). + + $1 - user/plugin +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + .zi-unload + +.zi-edit +~~~~~~~~ + +____ + + FUNCTION: .zi-edit [[[ + Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-edit + `-- side.zsh/.zi-compute-ice + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-exists-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-message [[[ + Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - (optional) plugin (only when $1 - i.e. user - given) +____ + +Has 7 line(s). Calls functions: + + .zi-exists-message + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-show-report + .zi-unload + +.zi-find-completions-of-plugin +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-completions-of-plugin [[[ + Searches for completions owned by given plugin. + Returns them in `reply' array. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 5 line(s). Calls functions: + + .zi-find-completions-of-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-format-env +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-env [[[ + Creates one-column text about FPATH or PATH elements added when given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) + $2 - if 1, then examine PATH, if 2, then examine FPATH +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-functions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-functions [[[ + Creates a one or two columns text with functions created by given plugin. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 34 line(s). Doesn't call other functions. + +Called by: + + .zi-show-report + +.zi-format-options +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-options [[[ + Creates one-column text about options that changed when plugin "$1" was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 19 line(s). Calls functions: + + .zi-format-options + +Called by: + + .zi-show-report + +.zi-format-parameter +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-format-parameter [[[ + Creates one column text that lists global parameters that changed when the given plugin was loaded. + + $1 - user/plugin (i.e. uspl2 format of plugin-spec) +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-report + +.zi-get-completion-owner +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner [[[ + Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. + + Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. + + :A will read the link "twice" and give the final repository + directory, possibly without username in the uspl format; readlink will read the link "once" + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-clear-completions + .zi-get-completion-owner-uspl2col + .zi-show-completions + +.zi-get-completion-owner-uspl2col +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-completion-owner-uspl2col [[[ + For shortening of code - returns colorized plugin name + that owns given completion. + + $1 - absolute path to completion file (in COMPLETIONS_DIR) + $2 - readlink command (":" or "readlink") +____ + +Has 2 line(s). Calls functions: + + .zi-get-completion-owner-uspl2col + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + .zi-cdisable + .zi-cenable + +.zi-get-path +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-path [[[ + Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path + ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. +____ + +Has 5 line(s). Calls functions: + + .zi-get-path + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-cd + .zi-uninstall-completions + +.zi-glance +~~~~~~~~~~ + +____ + + FUNCTION: .zi-glance [[[ + Shows colorized source code of plugin. Is able to use pygmentize, + highlight, GNU source-highlight. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 37 line(s). Calls functions: + + .zi-glance + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-help +~~~~~~~~ + +____ + + FUNCTION: .zi-help [[[ + Shows usage information. + + User-action entry point. +____ + +Has 31 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-list-bindkeys +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-bindkeys [[[ +____ + +Has 39 line(s). Calls functions: + + .zi-list-bindkeys + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Called by: + + zi.zsh/zi + +.zi-list-compdef-replay +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-list-compdef-replay [[[ + Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping + for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. + + User-action entry point. +____ + +Has 5 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-ls +~~~~~~ + +____ + + FUNCTION: .zi-ls [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Called by: + + zi.zsh/zi + +.zi-module +~~~~~~~~~~ + +____ + + FUNCTION: .zi-module [[[ + Function that has sub-commands passed as long-options (with two dashes, --). + It's an attempt to plugin only this one function into `zi' function + defined in zi.zsh, to not make this file longer than it's needed. +____ + +Has 24 line(s). Calls functions: + + .zi-module + +Called by: + + .zi-build-module + zi.zsh/Script-Body + zi.zsh/zi + +.zi-pager +~~~~~~~~~ + +____ + + FUNCTION: .zi-pager [[[ + BusyBox less lacks the -X and -i options, so it can use more + TODO: .zi-pager:7: less not found +____ + +Has 14 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-glance + .zi-self-update + .zi-update-or-status + +.zi-prepare-readlink +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-readlink [[[ + Prepares readlink command, used for establishing completion's owner. + + $REPLY = ":" or "readlink" +____ + +Has 4 line(s). Doesn't call other functions. + +Uses feature(s): _type_ + +Called by: + + .zi-cdisable + .zi-cenable + .zi-clear-completions + .zi-show-completions + +.zi-recall +~~~~~~~~~~ + +____ + + FUNCTION: .zi-recall [[[ +____ + +Has 33 line(s). Calls functions: + + .zi-recall + |-- side.zsh/.zi-compute-ice + `-- zi.zsh/+zi-deploy-message + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-recently +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-recently [[[ + Shows plugins that obtained commits in specified past time. + + User-action entry point. + + $1 - time spec, e.g. "1 week" +____ + +Has 23 line(s). Calls functions: + + .zi-recently + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-restore-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-restore-extendedglob [[[ + Restores extendedglob-option from state saved earlier. +____ + +Has 1 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-run-delete-hooks +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-delete-hooks [[[ +____ + +Has 17 line(s). Calls functions: + + .zi-run-delete-hooks + `-- side.zsh/.zi-countdown + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-save-set-extendedglob +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-save-set-extendedglob [[[ + Enables extendedglob-option first saving if it was already + enabled, for restoration of this state later. +____ + +Has 2 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-format-options + .zi-unload + +.zi-search-completions +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-search-completions [[[ + While .zi-show-completions() shows what completions are + installed, this functions searches through all plugin dirs + showing what's available in general (for installation). + + User-action entry point. +____ + +Has 39 line(s). Calls functions: + + .zi-search-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-self-update +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-self-update [[[ + Updates ❮ ZI ❯ code (does a git pull). + + User-action entry point. +____ + +Has 43 line(s). Calls functions: + + .zi-self-update + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_, _zcompile_ + +Called by: + + .zi-update-or-status-all + zi.zsh/zi + +.zi-show-all-reports +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-all-reports [[[ + Displays reports of all loaded plugins. + + User-action entry point. +____ + +Has 5 line(s). Calls functions: + + .zi-show-all-reports + +Called by: + + zi.zsh/zi + +.zi-show-completions +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-completions [[[ + Display installed (enabled and disabled), completions. Detect + stray and improper ones. + + Completions live even when plugin isn't loaded - if they are + installed and enabled. + + User-action entry point. +____ + +Has 61 line(s). Calls functions: + + .zi-show-completions + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-debug-report +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-debug-report [[[ + Displays dtrace report (data recorded in interactive session). + + User-action entry point. +____ + +Has 1 line(s). Calls functions: + + .zi-show-debug-report + +Called by: + + zi.zsh/zi + +.zi-show-registered-plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-registered-plugins [[[ + Lists loaded plugins (subcommands list, loaded). + + User-action entry point. +____ + +Has 19 line(s). Calls functions: + + .zi-show-registered-plugins + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-report +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-report [[[ + Displays report of the plugin given. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 66 line(s). Calls functions: + + .zi-show-report + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-show-all-reports + .zi-show-debug-report + zi.zsh/zi + +.zi-show-times +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-times [[[ + Shows loading times of all loaded plugins. + + User-action entry point. +____ + +Has 54 line(s). Calls functions: + + .zi-show-times + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-show-zstatus +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-show-zstatus [[[ + Shows ❮ ZI ❯ status, i.e. number of loaded plugins, + of available completions, etc. + + User-action entry point. +____ + +Has 47 line(s). Calls functions: + + .zi-show-zstatus + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + zi.zsh/zi + +.zi-stress +~~~~~~~~~~ + +____ + + FUNCTION: .zi-stress [[[ + Compiles plugin with various options on and off to see how well the code is written. The options are: + + NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 31 line(s). Calls functions: + + .zi-stress + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-first + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_, _zcompile_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-uncompile-plugin +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uncompile-plugin [[[ + Uncompiles given plugin. + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 20 line(s). Calls functions: + + .zi-uncompile-plugin + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compile-uncompile-all + zi.zsh/zi + +.zi-uninstall-completions +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-uninstall-completions [[[ + Removes all completions of given plugin from Zshell (i.e. from FPATH). + The FPATH is typically `~/.zi/completions/'. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 39 line(s). Calls functions: + + .zi-uninstall-completions + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-unload +~~~~~~~~~~ + +____ + + FUNCTION: .zi-unload [[[ + 0. Call the Zsh Plugin's Standard *_plugin_unload function + 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update + 1. Delete bindkeys (...) + 2. Delete Zstyles + 3. Restore options + 4. Remove aliases + 5. Restore Zle state + 6. Unfunction functions (created by plugin) + 7. Clean-up FPATH and PATH + 8. Delete created variables + 9. Forget the plugin + + User-action entry point. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 380 line(s). Calls functions: + + .zi-unload + |-- additional.zsh/.zi-clear-debug-report + |-- side.zsh/.zi-any-colorify-as-uspl2 + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ + +Called by: + + additional.zsh/.zi-debug-unload + zi.zsh/.zi-run-task + zi.zsh/zi + +.zi-unregister-plugin +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-unregister-plugin [[[ + Removes the plugin from ZI_REGISTERED_PLUGINS array and from the + zsh_loaded_plugins array (managed according to the plugin standard) +____ + +Has 5 line(s). Calls functions: + + .zi-unregister-plugin + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-unload + +.zi-update-all-parallel +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-in-parallel [[[ +____ + +Has 63 line(s). Calls functions: + + .zi-update-all-parallel + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-update-or-status-all + +.zi-update-or-status +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status [[[ + Updates (git pull) or does `git status' for given plugin. + + User-action entry point. + + $1 - "status" for status, other for update + $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) + $3 - plugin (only when $1 - i.e. user - given) +____ + +Has 263 line(s). Calls functions: + + .zi-update-or-status + |-- install.zsh/.zi-get-latest-gh-r-url-part + |-- install.zsh/.zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-exists-physically + |-- side.zsh/.zi-exists-physically-message + |-- side.zsh/.zi-store-ices + |-- side.zsh/.zi-two-paths + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-set-m-func + +Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + zi.zsh/zi + +.zi-update-or-status-all +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-all [[[ + Updates (git pull) or does `git status` for all existing plugins. + This includes also plugins that are not loaded into Zsh (but exist + on disk). Also updates (i.e. redownloads) snippets. + + User-action entry point. +____ + +Has 102 line(s). Calls functions: + + .zi-update-or-status-all + |-- install.zsh/.zi-compinit + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/.zi-get-mtime-into + +Uses feature(s): _setopt_, _source_ + +Called by: + + zi.zsh/zi + +.zi-update-or-status-snippet +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-update-or-status-snippet [[[ + + Implements update or status operation for snippet given by URL. + + $1 - "status" or "update" + $2 - snippet URL +____ + +Has 28 line(s). Calls functions: + + .zi-update-or-status-snippet + |-- install.zsh/.zi-update-snippet + `-- side.zsh/.zi-compute-ice + +Uses feature(s): _source_ + +Called by: + + .zi-update-all-parallel + .zi-update-or-status-all + .zi-update-or-status + +.zi-wait-for-update-jobs +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-wait-for-update-jobs [[[ +____ + +Has 14 line(s). Calls functions: + + .zi-wait-for-update-jobs + `-- zi.zsh/+zi-message + +Uses feature(s): _wait_ + +Called by: + + .zi-update-all-parallel + diff --git a/code/asciidoc/install.zsh.adoc b/code/asciidoc/install.zsh.adoc new file mode 100644 index 0000000..8e5bdbc --- /dev/null +++ b/code/asciidoc/install.zsh.adoc @@ -0,0 +1,746 @@ +install.zsh(1) +============== +:compat-mode!: + +NAME +---- +install.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-at-eval + .zi-compile-plugin + .zi-compinit + .zi-download-file-stdout + .zi-download-snippet + .zi-extract + .zi-forget-completion + .zi-get-cygwin-package + .zi-get-latest-gh-r-url-part + .zi-get-package + .zi-get-url-mtime + .zi-install-completions + .zi-mirror-using-svn + .zi-parse-json + .zi-setup-plugin-dir + .zi-update-snippet + zicp + ziextract + zimv + zpextract + ∞zi-atclone-hook + ∞zi-atpull-e-hook + ∞zi-atpull-hook + ∞zi-compile-plugin-hook + ∞zi-cp-hook + ∞zi-extract-hook + ∞zi-make-e-hook + ∞zi-make-ee-hook + ∞zi-make-hook + ∞zi-mv-hook + ∞zi-ps-on-update-hook + ∞zi-reset-hook +AUTOLOAD compinit + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +Uses feature(s): _source_ + +.zi-at-eval +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-at-eval [[[ +____ + +Has 5 line(s). Calls functions: + + .zi-at-eval + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_ + +Called by: + + ∞zi-atpull-e-hook + ∞zi-atpull-hook + +.zi-compile-plugin +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compile-plugin [[[ + Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 84 line(s). Calls functions: + + .zi-compile-plugin + |-- side.zsh/.zi-compute-ice + |-- side.zsh/.zi-first + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _zcompile_ + +Called by: + + ∞zi-compile-plugin-hook + autoload.zsh/.zi-compile-uncompile-all + zi.zsh/zi + +.zi-compinit +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compinit [[[ + User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. + After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. + + No arguments. +____ + +Has 26 line(s). Calls functions: + + .zi-compinit + |-- compinit + `-- zi.zsh/+zi-message + +Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ + +Called by: + + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-or-status-all + zi.zsh/.zi-prepare-home + zi.zsh/zi + +.zi-download-file-stdout +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-file-stdout [[[ + Downloads file to stdout. Supports following backend commands: + curl, wget, lftp, lynx. Used by snippet loading. +____ + +Has 46 line(s). Calls functions: + + .zi-download-file-stdout + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + .zi-get-cygwin-package + .zi-get-package + .zi-setup-plugin-dir + +.zi-download-snippet +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-download-snippet [[[ + Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, + with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows + to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. +____ + +Has 309 line(s). Calls functions: + + .zi-download-snippet + |-- side.zsh/.zi-store-ices + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_, _zcompile_ + +Called by: + + .zi-update-snippet + zi.zsh/.zi-load-snippet + +.zi-extract +~~~~~~~~~~~ + +____ + + FUNCTION: .zi-extract() [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-extract + |-- zi.zsh/+zi-message + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + ∞zi-extract-hook + +.zi-forget-completion +~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-forget-completion [[[ + Implements alternation of Zsh state so that already initialized + completion stops being visible to Zsh. + + $1 - completion function name, e.g. "_cp"; can also be "cp" +____ + +Has 20 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-compinit + .zi-install-completions + autoload.zsh/.zi-uninstall-completions + zi.zsh/zi + +.zi-get-cygwin-package +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-cygwin-package [[[ +____ + +Has 70 line(s). Calls functions: + + .zi-get-cygwin-package + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + +.zi-get-latest-gh-r-url-part +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-latest-gh-r-url-part [[[ + Gets version string of latest release of given Github package. + Connects to Github releases page. +____ + +Has 101 line(s). Calls functions: + + .zi-get-latest-gh-r-url-part + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-setup-plugin-dir + autoload.zsh/.zi-update-or-status + +.zi-get-package +~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-get-package [[[ +____ + +Has 194 line(s). Calls functions: + + .zi-get-package + |-- zi.zsh/+zi-message + |-- zi.zsh/@zi-substitute + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_, _setopt_, _trap_ + +Called by: + + zi.zsh/.zi-load + +_Environment variables used:_ zi.zsh -> ZPFX + +.zi-get-url-mtime +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-url-mtime [[[ + For the given URL returns the date in the Last-Modified header as a time stamp +____ + +Has 34 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _setopt_, _trap_, _type_ + +Called by: + + .zi-download-snippet + +.zi-install-completions +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-install-completions [[[ + Installs all completions of given plugin. After that they are + visible to `compinit'. Visible completions can be selectively + disabled and enabled. User can access completion data with + `clist' or `completions' subcommand. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $3 - if 1, then reinstall, otherwise only install completions that aren't there +____ + +Has 61 line(s). Calls functions: + + .zi-install-completions + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-exists-physically-message + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + .zi-setup-plugin-dir + zi.zsh/zi + +.zi-mirror-using-svn +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-mirror-using-svn [[[ + Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', + in normal mode invokes `svn checkout --non-interactive -q '. In test mode only + compares remote and local revision and outputs true if update is needed. + + $1 - URL + $2 - mode, "" - normal, "-u" - update, "-t" - test + $3 - subdirectory (not path) with working copy, needed for -t and -u +____ + +Has 27 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-download-snippet + +.zi-parse-json +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. +____ + +Has 102 line(s). Calls functions: + + .zi-parse-json + +Uses feature(s): _setopt_ + +Called by: + + .zi-get-package + +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. + + $1 - user + $2 - plugin +____ + +Has 189 line(s). Calls functions: + + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _trap_ + +Called by: + + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load + +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-update-snippet [[[ +____ + +Has 72 line(s). Calls functions: + + .zi-update-snippet + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/.zi-pack-ice + +Uses feature(s): _eval_, _setopt_ + +Called by: + + autoload.zsh/.zi-update-or-status-snippet + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zimv + +_Environment variables used:_ zi.zsh -> ZPFX + +ziextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file +____ + +Has 275 line(s). Calls functions: + + ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +zimv +~~~~ + +____ + + ]]] + FUNCTION zimv [[[ +____ + +Has 3 line(s). Calls functions: + + zimv + `-- zicp + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zpextract [[[ +____ + +Has 1 line(s). Calls functions: + + zpextract + `-- ziextract + `-- zi.zsh/+zi-message + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-cp-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-cp-hook [[[ +____ + +Has 24 line(s). Calls functions: + + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-extract-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-mv-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-mv-hook [[[ +____ + +Has 21 line(s). Calls functions: + + ∞zi-mv-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-ps-on-update-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-reset-hook +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: ∞zi-reset-opt-hook [[[ +____ + +Has 79 line(s). Calls functions: + + ∞zi-reset-hook + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + .zi-compinit + diff --git a/code/asciidoc/side.zsh.adoc b/code/asciidoc/side.zsh.adoc new file mode 100644 index 0000000..da9afa2 --- /dev/null +++ b/code/asciidoc/side.zsh.adoc @@ -0,0 +1,300 @@ +side.zsh(1) +=========== +:compat-mode!: + +NAME +---- +side.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-any-colorify-as-uspl2 + .zi-compute-ice + .zi-countdown + .zi-exists-physically + .zi-exists-physically-message + .zi-first + .zi-store-ices + .zi-two-paths +AUTOLOAD zmv + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-any-colorify-as-uspl2 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-colorify-as-uspl2 [[[ + Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + $REPLY = ANSI-colorified "user/plugin" string +____ + +Has 22 line(s). Calls functions: + + .zi-any-colorify-as-uspl2 + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-clear-completions + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-exists-message + autoload.zsh/.zi-get-completion-owner-uspl2col + autoload.zsh/.zi-list-bindkeys + autoload.zsh/.zi-recently + autoload.zsh/.zi-search-completions + autoload.zsh/.zi-show-completions + autoload.zsh/.zi-show-registered-plugins + autoload.zsh/.zi-show-times + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + zi.zsh/.zi-formatter-pid + +.zi-compute-ice +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compute-ice [[[ + Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, + taking priorities into account. Also returns path to snippet directory and optional name of snippet file + (only valid if ICE[svn] is not set). + + Can also pack resulting ices into ZI_SICE (see $2). + + $1 - URL (also plugin-spec) + $2 - "pack" or "nopack" or "pack-nf" - packing means ICE + wins with static ice; "pack-nf" means that disk-ices will + be ignored (no-file?) + $3 - name of output associative array, "ICE" is the default + $4 - name of output string parameter, to hold path to directory ("local_dir") + $5 - name of output string parameter, to hold filename ("filename") + $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") +____ + +Has 116 line(s). Calls functions: + + .zi-compute-ice + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-pack-ice + `-- zmv + +Uses feature(s): _autoload_, _setopt_, _zmv_ + +Called by: + + autoload.zsh/.zi-delete + autoload.zsh/.zi-edit + autoload.zsh/.zi-recall + autoload.zsh/.zi-update-or-status-snippet + autoload.zsh/.zi-update-or-status + install.zsh/.zi-compile-plugin + +.zi-countdown +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-countdown [[[ + Displays a countdown 5...4... etc. and returns 0 if it + sucessfully reaches 0, or 1 if Ctrl-C will be pressed. +____ + +Has 14 line(s). Calls functions: + + .zi-countdown + `-- zi.zsh/+zi-message + +Uses feature(s): _trap_ + +Called by: + + autoload.zsh/.zi-run-delete-hooks + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-atpull-e-hook + install.zsh/∞zi-atpull-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + +.zi-exists-physically +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically [[[ + Checks if directory of given plugin exists in PLUGIN_DIR. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 6 line(s). Calls functions: + + .zi-exists-physically + `-- zi.zsh/.zi-any-to-user-plugin + +Called by: + + .zi-exists-physically-message + autoload.zsh/.zi-create + autoload.zsh/.zi-update-or-status + +.zi-exists-physically-message +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-exists-physically-message [[[ + Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. + + Testable. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 22 line(s). Calls functions: + + .zi-exists-physically-message + |-- zi.zsh/+zi-message + |-- zi.zsh/.zi-any-to-pid + `-- zi.zsh/.zi-any-to-user-plugin + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-changes + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + +.zi-first +~~~~~~~~~ + +____ + + FUNCTION: .zi-first [[[ + Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct + ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching + is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) +____ + +Has 19 line(s). Calls functions: + + .zi-first + |-- zi.zsh/.zi-any-to-pid + |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-find-other-matches + `-- zi.zsh/.zi-get-object-path + +Called by: + + .zi-two-paths + autoload.zsh/.zi-glance + autoload.zsh/.zi-stress + install.zsh/.zi-compile-plugin + +.zi-store-ices +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-store-ices [[[ + Saves ice mods in given hash onto disk. + + $1 - directory where to create / delete files + $2 - name of hash that holds values + $3 - additional keys of hash to store, space separated + $4 - additional keys of hash to store, empty-meaningful ices, space separated + $5 - the URL, if applicable + $6 - the mode (1 - svn, 0 - single file), if applicable +____ + +Has 28 line(s). Doesn't call other functions. + +Called by: + + autoload.zsh/.zi-update-or-status + install.zsh/.zi-download-snippet + install.zsh/.zi-setup-plugin-dir + +.zi-two-paths +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-two-paths [[[ + Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), + returns 2 possible paths for further examination +____ + +Has 22 line(s). Calls functions: + + .zi-two-paths + `-- zi.zsh/.zi-get-object-path + +Uses feature(s): _setopt_ + +Called by: + + .zi-compute-ice + autoload.zsh/.zi-update-or-status + +zmv +~~~ + +____ + + function zmv { + zmv, zcp, zln: + + This is a multiple move based on zsh pattern matching. To get the full + power of it, you need a postgraduate degree in zsh. However, simple + tasks work OK, so if that's all you need, here are some basic examples: + zmv '(*).txt' '$1.lis' + Rename foo.txt to foo.lis, etc. The parenthesis is the thing that + gets replaced by the $1 (not the `*', as happens in mmv, and note the + `$', not `=', so that you need to quote both words). +____ + +Has 299 line(s). Doesn't call other functions. + +Uses feature(s): _eval_, _getopts_, _read_, _setopt_ + +Called by: + + .zi-compute-ice + diff --git a/code/asciidoc/zi.zsh.adoc b/code/asciidoc/zi.zsh.adoc new file mode 100644 index 0000000..7d2eb35 --- /dev/null +++ b/code/asciidoc/zi.zsh.adoc @@ -0,0 +1,1583 @@ +zi.zsh(1) +========= +:compat-mode!: + +NAME +---- +zi.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + +zi-deploy-message + +zi-message + +zi-prehelp-usage-message + -zi_scheduler_add_sh + .zi-add-fpath + .zi-add-report + .zi-any-to-pid + .zi-any-to-user-plugin + .zi-compdef-clear + .zi-compdef-replay + .zi-diff + .zi-diff-env + .zi-diff-functions + .zi-diff-options + .zi-diff-parameter + .zi-find-other-matches + .zi-formatter-bar + .zi-formatter-bar-util + .zi-formatter-pid + .zi-formatter-th-bar + .zi-formatter-url + .zi-get-mtime-into + .zi-get-object-path + .zi-ice + .zi-load + .zi-load-ices + .zi-load-object + .zi-load-plugin + .zi-load-snippet + .zi-main-message-formatter + .zi-pack-ice + .zi-parse-opts + .zi-prepare-home + .zi-register-plugin + .zi-run + .zi-run-task + .zi-set-m-func + .zi-setup-params + .zi-submit-turbo + .zi-tmp-subst-off + .zi-tmp-subst-on + .zi-util-shands-path + :zi-reload-and-run + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + @autoload + @zi-register-annex + @zi-register-hook + @zi-substitute + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + pmodload + zi + zi-turbo + zicdclear + zicdreplay + zicompdef + zicompinit + zpcdclear + zpcdreplay + zpcompdef + zpcompinit +AUTOLOAD add-zsh-hook +AUTOLOAD compinit +AUTOLOAD is-at-least +PRECMD-HOOK @zi-scheduler + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 202 line(s). Calls functions: + + Script-Body + |-- +zi-message + |-- @zi-register-hook + |-- add-zsh-hook + |-- autoload.zsh/.zi-module + `-- is-at-least + +Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ + +_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR + ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked +____ + +Has 13 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _zle_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + ++zi-message +~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message. [[[ +____ + +Has 14 line(s). Doesn't call other functions. + +Called by: + + +zi-prehelp-usage-message + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + Script-Body + zi + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-unload + additional.zsh/:zi-tmp-subst-source + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + install.zsh/ziextract + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message + ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-prehelp-usage-message. [[[ +____ + +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + +Called by: + + zi + autoload.zsh/.zi-delete + +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ + +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-add-fpath +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-fpath. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-add-fpath + +Called by: + + zi + +.zi-add-report +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-add-report. [[[ + Adds a report line for given plugin. + + $1 - uspl2, i.e. user/plugin + $2, ... - the text +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + :zi-tmp-subst-alias + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + :zi-tmp-subst-compdef + :zi-tmp-subst-zle + :zi-tmp-subst-zstyle + +.zi-any-to-pid +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-pid. [[[ +____ + +Has 21 line(s). Calls functions: + + .zi-any-to-pid + +Uses feature(s): _setopt_ + +Called by: + + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-exists-physically-message + side.zsh/.zi-first + +.zi-any-to-user-plugin +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-any-to-user-plugin. [[[ + Allows elastic plugin-spec across the code. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin (only when $1 - i.e. user - given) + + Returns user and plugin in $reply. + +____ + +Has 25 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-add-fpath + .zi-get-object-path + .zi-load + .zi-run + :zi-tmp-subst-autoload + autoload.zsh/.zi-any-to-uspl2 + autoload.zsh/.zi-changes + autoload.zsh/.zi-compile-uncompile-all + autoload.zsh/.zi-compiled + autoload.zsh/.zi-create + autoload.zsh/.zi-delete + autoload.zsh/.zi-find-completions-of-plugin + autoload.zsh/.zi-glance + autoload.zsh/.zi-show-report + autoload.zsh/.zi-stress + autoload.zsh/.zi-uncompile-plugin + autoload.zsh/.zi-unload + autoload.zsh/.zi-unregister-plugin + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + install.zsh/.zi-install-completions + side.zsh/.zi-any-colorify-as-uspl2 + side.zsh/.zi-compute-ice + side.zsh/.zi-exists-physically-message + side.zsh/.zi-exists-physically + side.zsh/.zi-first + +_Environment variables used:_ ZPFX + +.zi-compdef-clear +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-clear. [[[ + Implements user-exposed functionality to clear gathered compdefs. +____ + +Has 3 line(s). Calls functions: + + .zi-compdef-clear + `-- +zi-message + +Called by: + + zi + zicdclear + zpcdclear + +.zi-compdef-replay +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-compdef-replay. [[[ + Runs gathered compdef calls. This allows to run `compinit' after loading plugins. +____ + +Has 16 line(s). Calls functions: + + .zi-compdef-replay + `-- +zi-message + +Uses feature(s): _compdef_ + +Called by: + + zi + zicdreplay + zpcdreplay + +.zi-diff +~~~~~~~~ + +____ + + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types +____ + +Has 4 line(s). Calls functions: + + .zi-diff + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-stop + +.zi-diff-env +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env. [[[ + Implements detection of change in PATH and FPATH. + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 15 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + .zi-load-plugin + +.zi-diff-functions +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-functions. [[[ + Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-options +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-options. [[[ + Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-diff-parameter +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-parameter. [[[ + Implements detection of change in any parameter's existence and type. + Performs data gathering, computation is done in *-compute(). + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-diff + +.zi-find-other-matches +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-find-other-matches. [[[ + Plugin's main source file is in general `name.plugin.zsh'. However, + there can be different conventions, if that file is not found, then + this functions examines other conventions in the most sane order. +____ + +Has 17 line(s). Doesn't call other functions. + +Called by: + + .zi-load-plugin + .zi-load-snippet + side.zsh/.zi-first + +.zi-formatter-bar +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-bar-util +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-bar-util. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + .zi-formatter-bar + .zi-formatter-th-bar + +.zi-formatter-pid +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-pid. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-formatter-pid + `-- side.zsh/.zi-any-colorify-as-uspl2 + +Uses feature(s): _source_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-th-bar +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-th-bar. [[[ +____ + +Has 1 line(s). Calls functions: + + .zi-formatter-th-bar + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-formatter-url +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-formatter-url. [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-get-mtime-into +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-mtime-into. [[[ +____ + +Has 7 line(s). Doesn't call other functions. + +Called by: + + Script-Body + autoload.zsh/.zi-self-update + autoload.zsh/.zi-update-or-status-all + +.zi-get-object-path +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-get-object-path. [[[ +____ + +Has 23 line(s). Calls functions: + + .zi-get-object-path + +Called by: + + .zi-load-ices + .zi-load-snippet + .zi-run + zi + autoload.zsh/.zi-get-path + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-first + side.zsh/.zi-two-paths + +.zi-ice +~~~~~~~ + +____ + + FUNCTION: .zi-ice. [[[ + Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for + next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. +____ + +Has 12 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load +~~~~~~~~ + +____ + + FUNCTION: .zi-load. [[[ + Implements the exposed-to-user action of loading a plugin. + + $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) + $2 - plugin name, if the third format is used +____ + +Has 76 line(s). Calls functions: + + .zi-load + |-- +zi-deploy-message + |-- install.zsh/.zi-get-package + `-- install.zsh/.zi-setup-plugin-dir + +Uses feature(s): _eval_, _setopt_, _source_, _zle_ + +Called by: + + .zi-load-object + .zi-run-task + additional.zsh/.zi-service + +.zi-load-ices +~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-ices. [[[ +____ + +Has 22 line(s). Calls functions: + + .zi-load-ices + +Called by: + + zi + +_Environment variables used:_ ZPFX + +.zi-load-object +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-object. [[[ +____ + +Has 10 line(s). Calls functions: + + .zi-load-object + +Called by: + + zi + +.zi-load-plugin +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-plugin. [[[ + Lower-level function for loading a plugin. + + $1 - user + $2 - plugin + $3 - mode (light or load) +____ + +Has 107 line(s). Calls functions: + + .zi-load-plugin + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ + +Called by: + + .zi-load + +.zi-load-snippet +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-load-snippet. [[[ + Implements the exposed-to-user action of loading a snippet. + + $1 - url (can be local, absolute path). +____ + +Has 173 line(s). Calls functions: + + .zi-load-snippet + |-- +zi-deploy-message + |-- +zi-message + `-- install.zsh/.zi-download-snippet + +Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ + +Called by: + + .zi-load-object + .zi-load + .zi-run-task + pmodload + additional.zsh/.zi-service + +.zi-main-message-formatter +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message-formatter [[[ +____ + +Has 18 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-pack-ice +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-pack-ice. [[[ + Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for + second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin + or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update + install.zsh/.zi-update-snippet + side.zsh/.zi-compute-ice + +.zi-parse-opts +~~~~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: +zi-parse-opts. [[[ +____ + +Has 2 line(s). Doesn't call other functions. + +Called by: + + zi + autoload.zsh/.zi-delete + +.zi-prepare-home +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-prepare-home. [[[ + Creates all directories needed by ZI, first checks if they already exist. +____ + +Has 38 line(s). Calls functions: + + .zi-prepare-home + |-- autoload.zsh/.zi-clear-completions + `-- install.zsh/.zi-compinit + +Uses feature(s): _source_ + +Called by: + + Script-Body + +_Environment variables used:_ ZPFX + +.zi-register-plugin +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-register-plugin. [[[ + Adds the plugin to ZI_REGISTERED_PLUGINS array and to the + zsh_loaded_plugins array (managed according to the plugin standard: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). +____ + +Has 20 line(s). Calls functions: + + .zi-register-plugin + `-- +zi-message + +Called by: + + .zi-load + +.zi-run +~~~~~~~ + +____ + + FUNCTION: .zi-run. [[[ + Run code inside plugin's folder + It uses the `correct' parameter from upper's scope zi(). +____ + +Has 24 line(s). Calls functions: + + .zi-run + `-- +zi-message + +Uses feature(s): _eval_, _setopt_ + +Called by: + + zi + +.zi-run-task +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-run-task. [[[ + A backend, worker function of .zi-scheduler. It obtains the tasks + index and a few of its properties (like the type: plugin, snippet, + service plugin, service snippet) and executes it first checking for + additional conditions (like non-numeric wait'' ice). + + $1 - the pass number, either 1st or 2nd pass + $2 - the time assigned to the task + $3 - type: plugin, snippet, service plugin, service snippet + $4 - task's index in the ZI[WAIT_ICE_...] fields + $5 - mode: load or light + $6 - the plugin-spec or snippet URL or alias name (from id-as'') +____ + +Has 45 line(s). Calls functions: + + .zi-run-task + `-- autoload.zsh/.zi-unload + +Uses feature(s): _eval_, _source_, _zle_, _zpty_ + +Called by: + + @zi-scheduler + +.zi-set-m-func +~~~~~~~~~~~~~~ + +____ + + FUNCTION:.zi-set-m-func() [[[ + Sets and withdraws the temporary, atclone/atpull time function `m`. +____ + +Has 17 line(s). Calls functions: + + .zi-set-m-func + `-- +zi-message + +Uses feature(s): _setopt_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-update-or-status + +.zi-setup-params +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-setup-params. [[[ +____ + +Has 3 line(s). Doesn't call other functions. + +Called by: + + .zi-load-snippet + .zi-load + +.zi-submit-turbo +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-submit-turbo. [[[ + If `zi load`, `zi light` or `zi snippet` will be + preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' + ice-mods then the plugin or snipped is to be loaded in turbo-mode, + and this function adds it to internal data structures, so that + @zi-scheduler can run (load, unload) this as a task. +____ + +Has 16 line(s). Doesn't call other functions. + +Called by: + + zi + +.zi-tmp-subst-off +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). +____ + +Has 17 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_, _unfunction_ + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-stop + +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. +____ + +Has 29 line(s). Doesn't call other functions. + +Uses feature(s): _source_ + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. +____ + +Has 8 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + .zi-any-to-pid + +_Environment variables used:_ ZPFX + +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 30 line(s). Calls functions: + + :zi-tmp-subst-alias + +Uses feature(s): _alias_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-autoload +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-autoload. [[[ + Function defined to hijack plugin's calls to the `autoload' builtin. + + The hijacking is not only to gather report data, but also to. + run custom `autoload' function, that doesn't need FPATH. +____ + +Has 106 line(s). Calls functions: + + :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ + +Called by: + + .zi-load-plugin + @autoload + +:zi-tmp-subst-bindkey +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-bindkey. [[[ + Function defined to hijack plugin's calls to the `bindkey' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 107 line(s). Calls functions: + + :zi-tmp-subst-bindkey + `-- is-at-least + +Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-compdef +~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-compdef. [[[ + Function defined to hijack plugin's calls to the `compdef' function. + The hijacking is not only for reporting, but also to save compdef + calls so that `compinit' can be called after loading plugins. +____ + +Has 5 line(s). Calls functions: + + :zi-tmp-subst-compdef + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zle +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 33 line(s). Calls functions: + + :zi-tmp-subst-zle + +Uses feature(s): _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. + + The hijacking is to gather report data (which is used in unload). +____ + +Has 19 line(s). Calls functions: + + :zi-tmp-subst-zstyle + +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@autoload +~~~~~~~~~ + +____ + + ]]] + FUNCTION: @autoload. [[[ +____ + +Has 3 line(s). Calls functions: + + @autoload + `-- :zi-tmp-subst-autoload + |-- +zi-message + `-- is-at-least + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. + +____ + +Has 74 line(s). *Is a precmd hook*. Calls functions: + + @zi-scheduler + `-- add-zsh-hook + +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-substitute +~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-substitute. [[[ +____ + +Has 36 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + autoload.zsh/.zi-at-eval + install.zsh/.zi-at-eval + install.zsh/.zi-get-package + install.zsh/∞zi-atclone-hook + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook + +_Environment variables used:_ ZPFX + +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-unload + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +pmodload +~~~~~~~~ + +____ + + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. +____ + +Has 15 line(s). Calls functions: + + pmodload + +Uses feature(s): _zstyle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ + +____ + + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. +____ + +Has 547 line(s). Calls functions: + + zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ + +Called by: + + zi-turbo + +zi-turbo +~~~~~~~~ + +____ + + FUNCTION: zi-turbo. [[[ + With zi-turbo first argument is a wait time and suffix, i.e. "0a". + Anything that doesn't match will be passed as if it were an ice mod. + Default ices depth'3' and lucid, allowed values [0-9][a-d]. +____ + +Has 1 line(s). Calls functions: + + zi-turbo + `-- zi + |-- +zi-message + |-- +zi-prehelp-usage-message + |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + `-- install.zsh/.zi-install-completions + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdclear +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. +____ + +Has 1 line(s). Calls functions: + + zicdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdreplay +~~~~~~~~~~ + +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompinit +~~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. +____ + +Has 1 line(s). Calls functions: + + zicompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdclear +~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcdreplay +~~~~~~~~~~ + +____ + + ]]] + Compatibility functions. [[[ + zinit() { zi "$@"; } +____ + +Has 1 line(s). Calls functions: + + zpcdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompdef +~~~~~~~~~ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zpcompinit +~~~~~~~~~~ + +Has 1 line(s). Calls functions: + + zpcompinit + `-- compinit + +Uses feature(s): _autoload_, _compinit_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +add-zsh-hook +~~~~~~~~~~~~ + +____ + + Add to HOOK the given FUNCTION. + HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, + zshexit, zsh_directory_name (the _functions subscript is not required). + + With -d, remove the function from the hook instead; delete the hook + variable if it is empty. + + -D behaves like -d, but pattern characters are active in the + function name, so any matching function will be deleted from the hook. + +____ + +Has 93 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _getopts_ + +Called by: + + @zi-scheduler + Script-Body + +compinit +~~~~~~~~ + +____ + + Initialisation for new style completion. This mainly contains some helper + functions and setup. Everything else is split into different files that + will automatically be made autoloaded (see the end of this file). The + names of the files that will be considered for autoloading are those that + begin with an underscores (like `_condition). + + The first line of each of these files is read and must indicate what + should be done with its contents: + + `#compdef ' +____ + +Has 549 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ + +Called by: + + zi + zicompinit + zpcompinit + +is-at-least +~~~~~~~~~~~ + +____ + + + Test whether $ZSH_VERSION (or some value of your choice, if a second argument + is provided) is greater than or equal to x.y.z-r (in argument one). In fact, + it'll accept any dot/dash-separated string of numbers as its second argument + and compare it to the dot/dash-separated first argument. Leading non-number + parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered + when the comparison is done; only the numbers matter. Any left-out segments + in the first argument that are present in the version string compared are + considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. + +____ + +Has 56 line(s). Doesn't call other functions. + +Called by: + + :zi-tmp-subst-autoload + :zi-tmp-subst-bindkey + Script-Body + diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html new file mode 100644 index 0000000..f702ec4 --- /dev/null +++ b/code/html/additional.zsh.html @@ -0,0 +1,2735 @@ + + + + + + + + + additional.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
    +.zi-debug-start
    +.zi-debug-stop
    +.zi-debug-unload
    +.zi-service
    +.zi-wrap-track-functions
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
    +|-- autoload.zsh/.zi-unload
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-service [[[
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
    +$2 - mode - for plugin (light or load)
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
    +|-- zi.zsh/.zi-load
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-track-functions
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html new file mode 100644 index 0000000..361408a --- /dev/null +++ b/code/html/autoload.zsh.html @@ -0,0 +1,5041 @@ + + + + + + + + + autoload.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-analytics-menu
    +.zi-any-to-uspl2
    +.zi-at-eval
    +.zi-build-module
    +.zi-cd
    +.zi-cdisable
    +.zi-cenable
    +.zi-changes
    +.zi-check-comp-consistency
    +.zi-check-which-completions-are-enabled
    +.zi-check-which-completions-are-installed
    +.zi-clear-completions
    +.zi-clear-report-for
    +.zi-compile-uncompile-all
    +.zi-compiled
    +.zi-confirm
    +.zi-control-menu
    +.zi-create
    +.zi-delete
    +.zi-diff-env-compute
    +.zi-diff-functions-compute
    +.zi-diff-options-compute
    +.zi-diff-parameter-compute
    +.zi-edit
    +.zi-exists-message
    +.zi-find-completions-of-plugin
    +.zi-format-env
    +.zi-format-functions
    +.zi-format-options
    +.zi-format-parameter
    +.zi-get-completion-owner
    +.zi-get-completion-owner-uspl2col
    +.zi-get-path
    +.zi-glance
    +.zi-help
    +.zi-list-bindkeys
    +.zi-list-compdef-replay
    +.zi-ls
    +.zi-module
    +.zi-pager
    +.zi-prepare-readlink
    +.zi-recall
    +.zi-recently
    +.zi-restore-extendedglob
    +.zi-run-delete-hooks
    +.zi-save-set-extendedglob
    +.zi-search-completions
    +.zi-self-update
    +.zi-show-all-reports
    +.zi-show-completions
    +.zi-show-debug-report
    +.zi-show-registered-plugins
    +.zi-show-report
    +.zi-show-times
    +.zi-show-zstatus
    +.zi-stress
    +.zi-uncompile-plugin
    +.zi-uninstall-completions
    +.zi-unload
    +.zi-unregister-plugin
    +.zi-update-all-parallel
    +.zi-update-or-status
    +.zi-update-or-status-all
    +.zi-update-or-status-snippet
    +.zi-wait-for-update-jobs
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Shows ❮ ZI ❯ analytics.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
    +Converts given plugin-spec to format that's used in keys for hash tables.
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 41 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
    +|-- side.zsh/.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
    +❮ ZI ❯ creates symlink for each installed completion.
    +This function checks whether given completion (i.e.
    +file like "_mkdir") is indeed a symlink. Backup file
    +is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    + ~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    + ~~~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +|-- install.zsh/.zi-compile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-control-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-control-menu [[[
    +Shows control options.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
    +|-- side.zsh/.zi-compute-ice
    +|-- zi.zsh/+zi-prehelp-usage-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
    +Computes ZI_PATH, ZI_FPATH that hold (f)path components
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
    +Computes FUNCTIONS that holds new functions added by plugin.
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
    +Computes OPTIONS that holds options changed by plugin.
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
    +Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    +parameters created or changed (their type) by plugin. Uses
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
    +Searches for completions owned by given plugin.
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
    +.zi-get-completion-owner-uspl2col
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +For shortening of code - returns colorized plugin name
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
    +Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
    +Shows colorized source code of plugin. Is able to use pygmentize,
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
    +Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
    +Function that has sub-commands passed as long-options (with two dashes, --).
    +It's an attempt to plugin only this one function into `zi' function
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
    +zi.zsh/Script-Body
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +BusyBox less lacks the -X and -i options, so it can use more
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
    +.zi-self-update
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +.zi-clear-completions
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
    +|-- side.zsh/.zi-compute-ice
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
    +Enables extendedglob-option first saving if it was already
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
    +While .zi-show-completions() shows what completions are
    +installed, this functions searches through all plugin dirs
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
    +Display installed (enabled and disabled), completions. Detect
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    + ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
    +.zi-show-debug-report
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 51 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
    +Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 47 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
    +Removes all completions of given plugin from Zshell (i.e. from FPATH).
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
    +0. Call the Zsh Plugin's Standard *_plugin_unload function
    +0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    +1. Delete bindkeys (...)
    +2. Delete Zstyles
    +3. Restore options
    +4. Remove aliases
    +5. Restore Zle state
    +6. Unfunction functions (created by plugin)
    +7. Clean-up FPATH and PATH
    +8. Delete created variables
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, + unalias, + unfunction, zle, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
    +zi.zsh/.zi-run-task
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
    +Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
    +$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 263 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
    +|-- install.zsh/.zi-get-latest-gh-r-url-part
    +|-- install.zsh/.zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-exists-physically
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-store-ices
    +|-- side.zsh/.zi-two-paths
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt, source, + trap, + wait +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
    +Updates (git pull) or does `git status` for all existing plugins.
    +This includes also plugins that are not loaded into Zsh (but exist
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 96 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
    +|-- install.zsh/.zi-compinit
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
    +|-- install.zsh/.zi-update-snippet
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html new file mode 100644 index 0000000..65bfcd5 --- /dev/null +++ b/code/html/install.zsh.html @@ -0,0 +1,3648 @@ + + + + + + + + + install.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
    + .zi-compile-plugin
    + .zi-compinit
    + .zi-download-file-stdout
    + .zi-download-snippet
    + .zi-extract
    + .zi-forget-completion
    + .zi-get-cygwin-package
    + .zi-get-latest-gh-r-url-part
    + .zi-get-package
    + .zi-get-url-mtime
    + .zi-install-completions
    + .zi-mirror-using-svn
    + .zi-parse-json
    + .zi-setup-plugin-dir
    + .zi-update-snippet
    + zicp
    + ziextract
    + zimv
    + zpextract
    + ∞zi-atclone-hook
    + ∞zi-atpull-e-hook
    + ∞zi-atpull-hook
    + ∞zi-compile-plugin-hook
    + ∞zi-cp-hook
    + ∞zi-extract-hook
    + ∞zi-make-e-hook
    + ∞zi-make-ee-hook
    + ∞zi-make-hook
    + ∞zi-mv-hook
    + ∞zi-ps-on-update-hook
    + ∞zi-reset-hook
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 84 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +autoload.zsh/.zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
    +User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
    +|-- compinit
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-or-status-all
    +zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
    +Downloads file to stdout. Supports following backend commands:
    +curl, wget, lftp, lynx. Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-get-cygwin-package
    +.zi-get-package
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
    +Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    +with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 309 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
    +|-- side.zsh/.zi-store-ices
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
    +|-- zi.zsh/+zi-message
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-forget-completion [[[
    +Implements alternation of Zsh state so that already initialized
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +.zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-latest-gh-r-url-part [[[
    +Gets version string of latest release of given Github package.
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 101 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 194 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/@zi-substitute
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
    +Installs all completions of given plugin. After that they are
    +visible to `compinit'. Visible completions can be selectively
    +disabled and enabled. User can access completion data with
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-setup-plugin-dir
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
    +Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    +in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    +compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
    +$2 - mode, "" - normal, "-u" - update, "-t" - test
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
    +Clones given plugin into PLUGIN_DIR. Supports multiple
    +sites (respecting `from' and `proto' ice modifiers).
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 189 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-store-ices
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 72 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ziextract [[[
    +If the file is an archive, it is extracted by this function.
    +Next stage is scanning of files with the common utility `file',
    +to detect executables. They are given +x mode. There are also
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    +
    +
    +
    +

    Has 274 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
    +.zi-get-package
    +.zi-setup-plugin-dir
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 79 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html new file mode 100644 index 0000000..76e3eab --- /dev/null +++ b/code/html/side.zsh.html @@ -0,0 +1,2932 @@ + + + + + + + + + side.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
    + .zi-compute-ice
    + .zi-countdown
    + .zi-exists-physically
    + .zi-exists-physically-message
    + .zi-first
    + .zi-store-ices
    + .zi-two-paths
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-clear-completions
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-exists-message
    +autoload.zsh/.zi-get-completion-owner-uspl2col
    +autoload.zsh/.zi-list-bindkeys
    +autoload.zsh/.zi-recently
    +autoload.zsh/.zi-search-completions
    +autoload.zsh/.zi-show-completions
    +autoload.zsh/.zi-show-registered-plugins
    +autoload.zsh/.zi-show-times
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
    +Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    +taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
    +$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    +wins with static ice; "pack-nf" means that disk-ices will
    +be ignored (no-file?)
    +$3 - name of output associative array, "ICE" is the default
    +$4 - name of output string parameter, to hold path to directory ("local_dir")
    +$5 - name of output string parameter, to hold filename ("filename")
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-pack-ice
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
    +autoload.zsh/.zi-edit
    +autoload.zsh/.zi-recall
    +autoload.zsh/.zi-update-or-status-snippet
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
    +Displays a countdown 5...4... etc. and returns 0 if it
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-atpull-e-hook
    +install.zsh/∞zi-atpull-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
    +Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    +ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
    +|-- zi.zsh/.zi-any-to-pid
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-find-other-matches
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
    +$2 - name of hash that holds values
    +$3 - additional keys of hash to store, space separated
    +$4 - additional keys of hash to store, empty-meaningful ices, space separated
    +$5 - the URL, if applicable
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
    +Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
    +power of it, you need a postgraduate degree in zsh.  However, simple
    +tasks work OK, so if that's all you need, here are some basic examples:
    +zmv '(*).txt' '$1.lis'
    +Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    +gets replaced by the $1 (not the `*', as happens in mmv, and note the
    +`$', not `=', so that you need to quote both words).
    +
    +
    +
    +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html new file mode 100644 index 0000000..ec9e442 --- /dev/null +++ b/code/html/zi.zsh.html @@ -0,0 +1,4886 @@ + + + + + + + + + zi.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
    + +zi-message
    + +zi-prehelp-usage-message
    + -zi_scheduler_add_sh
    + .zi-add-fpath
    + .zi-add-report
    + .zi-any-to-pid
    + .zi-any-to-user-plugin
    + .zi-compdef-clear
    + .zi-compdef-replay
    + .zi-diff
    + .zi-diff-env
    + .zi-diff-functions
    + .zi-diff-options
    + .zi-diff-parameter
    + .zi-find-other-matches
    + .zi-formatter-bar
    + .zi-formatter-bar-util
    + .zi-formatter-pid
    + .zi-formatter-th-bar
    + .zi-formatter-url
    + .zi-get-mtime-into
    + .zi-get-object-path
    + .zi-ice
    + .zi-load
    + .zi-load-ices
    + .zi-load-object
    + .zi-load-plugin
    + .zi-load-snippet
    + .zi-main-message-formatter
    + .zi-pack-ice
    + .zi-parse-opts
    + .zi-prepare-home
    + .zi-register-plugin
    + .zi-run
    + .zi-run-task
    + .zi-set-m-func
    + .zi-setup-params
    + .zi-submit-turbo
    + .zi-tmp-subst-off
    + .zi-tmp-subst-on
    + .zi-util-shands-path
    + :zi-reload-and-run
    + :zi-tmp-subst-alias
    + :zi-tmp-subst-autoload
    + :zi-tmp-subst-bindkey
    + :zi-tmp-subst-compdef
    + :zi-tmp-subst-zle
    + :zi-tmp-subst-zstyle
    + @autoload
    + @zi-register-annex
    + @zi-register-hook
    + @zi-substitute
    + @zsh-plugin-run-on-unload
    + @zsh-plugin-run-on-update
    + pmodload
    + zi
    + zi-turbo
    + zicdclear
    + zicdreplay
    + zicompdef
    + zicompinit
    + zpcdclear
    + zpcdreplay
    + zpcompdef
    + zpcompinit
    +AUTOLOAD add-zsh-hook
    +AUTOLOAD compinit
    +AUTOLOAD is-at-least
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 202 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
    +|-- +zi-message
    +|-- @zi-register-hook
    +|-- add-zsh-hook
    +|-- autoload.zsh/.zi-module
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, + is-at-least, setopt, source, zmodload, zstyle +

    +
    +
    +

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
    +Deploys a sub-prompt message to be displayed OR a `zle
    +.reset-prompt' call to be invoked
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +.zi-compdef-clear
    +.zi-compdef-replay
    +.zi-load-snippet
    +.zi-register-plugin
    +.zi-run
    +.zi-set-m-func
    +:zi-tmp-subst-autoload
    +Script-Body
    +zi
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-unload
    +additional.zsh/:zi-tmp-subst-source
    +autoload.zsh/.zi-build-module
    +autoload.zsh/.zi-cd
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-show-zstatus
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +autoload.zsh/.zi-wait-for-update-jobs
    +install.zsh/.zi-compile-plugin
    +install.zsh/.zi-compinit
    +install.zsh/.zi-download-file-stdout
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-extract
    +install.zsh/.zi-get-cygwin-package
    +install.zsh/.zi-get-latest-gh-r-url-part
    +install.zsh/.zi-get-package
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +install.zsh/ziextract
    +install.zsh/∞zi-ps-on-update-hook
    +install.zsh/∞zi-reset-hook
    +side.zsh/.zi-countdown
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
    +Copies task into ZI_RUN array, called when a task timeouts.
    +A small function ran from pattern in /-substitution as a math
    +function.
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +:zi-tmp-subst-alias
    +:zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +:zi-tmp-subst-compdef
    +:zi-tmp-subst-zle
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
    +.zi-get-object-path
    +.zi-load
    +.zi-run
    +:zi-tmp-subst-autoload
    +autoload.zsh/.zi-any-to-uspl2
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-delete
    +autoload.zsh/.zi-find-completions-of-plugin
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-show-report
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-unregister-plugin
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-compute-ice
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-exists-physically
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdclear
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdreplay
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
    +Implements detection of change in any parameter's existence and type.
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
    +Plugin's main source file is in general `name.plugin.zsh'. However,
    +there can be different conventions, if that file is not found, then
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
    +.zi-load-snippet
    +.zi-run
    +zi
    +autoload.zsh/.zi-get-path
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-first
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
    +Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 76 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
    +|-- +zi-deploy-message
    +|-- install.zsh/.zi-get-package
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-run-task
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, + zle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
    +|-- +zi-deploy-message
    +|-- +zi-message
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, + unfunction, zparseopts, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-load
    +.zi-run-task
    +pmodload
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
    +Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    +second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +@zsh-plugin-run-on-unload
    +@zsh-plugin-run-on-update
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
    +|-- autoload.zsh/.zi-clear-completions
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
    +Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    +zsh_loaded_plugins array (managed according to the plugin standard:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
    +Run code inside plugin's folder
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
    +A backend, worker function of .zi-scheduler. It obtains the tasks
    +index and a few of its properties (like the type: plugin, snippet,
    +service plugin, service snippet) and executes it first checking for
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
    +$2 - the time assigned to the task
    +$3 - type: plugin, snippet, service plugin, service snippet
    +$4 - task's index in the ZI[WAIT_ICE_...] fields
    +$5 - mode: load or light
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
    +If `zi load`, `zi light` or `zi snippet`  will be
    +preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    +ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    +and this function adds it to internal data structures, so that
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
    +Turn off temporary substituting of functions completely for a given mode ("load", "light",
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
    +Turn on temporary substituting of functions of builtins and functions according to passed
    +mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
    +Marks given function ($3) for autoloading, and executes it triggering the load.
    +$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
    +$2 - autoload options
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +|-- +zi-message
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, + zparseopts +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts +

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
    +Function defined to hijack plugin's calls to the `compdef' function.
    +The hijacking is not only for reporting, but also to save compdef
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
    +Searches for timeout tasks, executes them. There's an array of tasks
    +waiting for execution, this scheduler manages them, detects which ones
    +should be run at current moment, decides to remove (or not) them from
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
    +invocation of the scheduler; this results in chain of `sched'
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
    +by one; this is handy if e.g. a docker image starts up and
    +needs to install all turbo-mode plugins without any hesitation
    +(delay), i.e. "burst" allows to run package installations from
    +script, not from prompt.
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
    +install.zsh/.zi-at-eval
    +install.zsh/.zi-get-package
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-cp-hook
    +install.zsh/∞zi-extract-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism, see:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 547 line(s). Calls functions:

    +
    +
    +
    +
    zi
    +|-- +zi-message
    +|-- +zi-prehelp-usage-message
    +|   `-- +zi-message
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- additional.zsh/.zi-debug-start
    +|-- additional.zsh/.zi-debug-stop
    +|-- additional.zsh/.zi-debug-unload
    +|-- autoload.zsh/.zi-analytics-menu
    +|-- autoload.zsh/.zi-cdisable
    +|-- autoload.zsh/.zi-cenable
    +|-- autoload.zsh/.zi-clear-completions
    +|-- autoload.zsh/.zi-compile-uncompile-all
    +|-- autoload.zsh/.zi-compiled
    +|-- autoload.zsh/.zi-control-menu
    +|-- autoload.zsh/.zi-help
    +|-- autoload.zsh/.zi-list-bindkeys
    +|-- autoload.zsh/.zi-list-compdef-replay
    +|-- autoload.zsh/.zi-ls
    +|-- autoload.zsh/.zi-module
    +|-- autoload.zsh/.zi-recently
    +|-- autoload.zsh/.zi-search-completions
    +|-- autoload.zsh/.zi-self-update
    +|-- autoload.zsh/.zi-show-all-reports
    +|-- autoload.zsh/.zi-show-completions
    +|-- autoload.zsh/.zi-show-debug-report
    +|-- autoload.zsh/.zi-show-registered-plugins
    +|-- autoload.zsh/.zi-show-report
    +|-- autoload.zsh/.zi-show-times
    +|-- autoload.zsh/.zi-show-zstatus
    +|-- autoload.zsh/.zi-uncompile-plugin
    +|-- autoload.zsh/.zi-uninstall-completions
    +|-- autoload.zsh/.zi-unload
    +|-- autoload.zsh/.zi-update-or-status
    +|-- autoload.zsh/.zi-update-or-status-all
    +|-- compinit
    +|-- install.zsh/.zi-compile-plugin
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, + source +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
    +With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    +Anything that doesn't match will be passed as if it were an ice mod.
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
    +`-- zi
    +    |-- +zi-message
    +    |-- +zi-prehelp-usage-message
    +    |   `-- +zi-message
    +    |-- additional.zsh/.zi-clear-debug-report
    +    |-- additional.zsh/.zi-debug-start
    +    |-- additional.zsh/.zi-debug-stop
    +    |-- additional.zsh/.zi-debug-unload
    +    |-- autoload.zsh/.zi-analytics-menu
    +    |-- autoload.zsh/.zi-cdisable
    +    |-- autoload.zsh/.zi-cenable
    +    |-- autoload.zsh/.zi-clear-completions
    +    |-- autoload.zsh/.zi-compile-uncompile-all
    +    |-- autoload.zsh/.zi-compiled
    +    |-- autoload.zsh/.zi-control-menu
    +    |-- autoload.zsh/.zi-help
    +    |-- autoload.zsh/.zi-list-bindkeys
    +    |-- autoload.zsh/.zi-list-compdef-replay
    +    |-- autoload.zsh/.zi-ls
    +    |-- autoload.zsh/.zi-module
    +    |-- autoload.zsh/.zi-recently
    +    |-- autoload.zsh/.zi-search-completions
    +    |-- autoload.zsh/.zi-self-update
    +    |-- autoload.zsh/.zi-show-all-reports
    +    |-- autoload.zsh/.zi-show-completions
    +    |-- autoload.zsh/.zi-show-debug-report
    +    |-- autoload.zsh/.zi-show-registered-plugins
    +    |-- autoload.zsh/.zi-show-report
    +    |-- autoload.zsh/.zi-show-times
    +    |-- autoload.zsh/.zi-show-zstatus
    +    |-- autoload.zsh/.zi-uncompile-plugin
    +    |-- autoload.zsh/.zi-uninstall-completions
    +    |-- autoload.zsh/.zi-unload
    +    |-- autoload.zsh/.zi-update-or-status
    +    |-- autoload.zsh/.zi-update-or-status-all
    +    |-- compinit
    +    |-- install.zsh/.zi-compile-plugin
    +    |-- install.zsh/.zi-compinit
    +    |-- install.zsh/.zi-forget-completion
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicdclear. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompdef. [[[
    +Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompinit. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It runs `autoload compinit; compinit' and respects
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +zinit() { zi "$@"; }
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
    +HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicompinit
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    +it'll accept any dot/dash-separated string of numbers as its second argument
    +and compare it to the dot/dash-separated first argument. Leading non-number
    +parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    +when the comparison is done; only the numbers matter. Any left-out segments
    +in the first argument that are present in the version string compared are
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    +
    +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +Script-Body
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/pdf/additional.zsh.pdf b/code/pdf/additional.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..96e8b636b15f079643ad5b41703e38bf5c24f7d3 GIT binary patch literal 99114 zcmeFaiCbOAl`kqlAaT$qG$N3MI1&Ph>2T(ONdhDggO~>~i{T(ZOkxIs$kcJ-A%h(! z9XoasXLb^2aBL^BJNA(K@pA0bB%vSSA*MKP}$DCQ$KQZVx@9*sC z>7VEy8SWgk%#HW8?zgq3q?j@b$NZfWBV*?M`QzRF{XHYyj3Cc+b64lMzsEc>Y_1yX zoE}Efs)WBs^aKf#n)IqDzI?`B2KE!xTE%%c8@ zBWADDX7T#kOqmV+{%QYM)tJB6Kjt6q#zm;4L;d5UgPpU7M!H2^6JwKp6RHuY2@7hd zRI7hJ0AEEt(Fw@{ZZpUYzR1}a}THZpp}g9U?rf6o<< z){XTKUGZT4*u)i&6^;x~pn&6M))`G*;~yWH9McsKtLm=xPncUWVRbN8|ICCrvt$VE zU7*536_#lF3p9v3NFPdtZjaTrM2ne+{8Rni{+i+fbN9H(YJoW_9Pb`B1syG{U2?Rx zu)<_2s59BTc8k^FbD2FJkHzY8n(KN@nMIJ%GV6LxIc}TViGQC5=CtG-pG5=D2*&R##U4*K&^2?Q%i04wuvEbM`v@RQd`#z$tVApWEt1F9{CV7hHDQz02*kz?BY}Tuz6@ zYQzT-hnsWyYYX(yRQOxN9JV zx}J*Re62Vtiqm0K4xFY0(n+08m6;yZuGMXlsLQPtWzdM~B~@9esxGN_x2ez63ms8G zg5pLzF7xzF4N1%PnQBedD{`eSpJr09BqwY_^Xo7wv(2V?HTrP3&)(y9pzpcR#q8i= z+vwCTx5wTC|K;*n-Mt?BHTGeuSaz?)?Y&B|f{WtN9LRMlh|OW~IX^-{dOg+^cledu z@kAd^A6m=0!eY=xcEf?<)_gsR;zd_=U%4o_yTLzu+!zmlyB-B_`z)TTm@I}Wb{H&f zy&fky6r&5q>xSX_ann%)70=53@<(VUm($`~#%vv((wlJc9<5-!_t`xt3<~K$FM`Id zxwe$w#lU6R(SQ@)-vtA4!{hQcorAHH&)I!_#sUtQvCFQ8PaHnlyqcSF1r3GlR;L|S z>-1cYA)~`#v$(9wjNdRA@xodhb}I&}R`eSm2N-rQBtE+zW%9dwA-~LeAcIpxN-G*p z8=$~BVhm#Ua^Mm)JmI)S>k}NHz-QtFm)#E^ip)7O#JI2*|6O*B3>kNI(&Nft1|An9 z9$1Oh4b^A{%v><6QRj9AT?h%GIj_&+bvnG}94$YNq#U>ss&YLBK@O|a;;=h0`sQPS z6Yc7=_;5Sslfhr<{vlRx$8(F%$&#>O9Iv}AHoHxg%ztgYlFj0F+kEC5dQA+bylCYc zdQC5Skn6@?(`~c(>>kezt*6^%!84Kj#$MA4Ck^wwk?rZRTWmgu6W4TFJeXB7x{C2= z>sfh6xyrK(9$N66WOsWlKJ*eiyucOX;Y1hU@xkGcrx#u1a=^Tq!h=rh#p8<}$K4fK z;Q2!d?3np;`1k;$1U3wl>^?le7+KmpS`z)DD%x#QrBd-h6CRaZe1@?r37$__YCS_0 zRTsqRau{c^L^xf=Rf&zi$tnA6RNEExuHl!Eb*KC0y)L3<3-AH;CfgHef- zQ%yXg&53A34jD3NM|@f?Js5JR$rlU_Rz5?)M{P_`I2@SRT@vt79P4=`C$^rRGxLfT^VoFLO|u z+KJAgQJeYD$jYYhI6I3m3mhz_4+7QkX%AoyJcX`s=D8YkhL^u^9|RD0=#S!ZUbJy6=zo7*C7e4#F-Jp*Gv$Ygj^mwBwRYrx+vIjFXENKzaX zP;WPx^-^W?(x%J;yoS~ak!g2$z1^K@6(bWPwf?dG-i(5gL7L2D*M#;uwhpgs>%gIW zIP;KyynC#Fl&`aK@0DWrkBv_h_H{yHH)WQ0s)*g?GG#XQ_e}KR6{Yst)|6Q{Qa{|^ z&9}==zDCt5qYBE*SWx}#^0B67NIWjD#o;jzPYw>Y>F>U^x7kbUq`l_md&hCS55-jT z(yTRseuBIaZ`t3`(K+1RH!_wnF*2HB)~aIO-_hfr=t>`H##?nn`4YYcQPD_8*GSJSq*`NAIy*cvI^NIov^TU6&GmOo42^b-Pj-z@bjaJ< z6g-YFo8Xt&TE;8X#pSQhFKu7H2agh-K>MzwX`Q+euAphvx`Cjkl^4>1H_BT5FRu?K z;`tJ2Y1`^=?KL5H@#J9pjeS`iD~!xyKPQ)+R*6WnC2J{}gG^qpc1zoO7G@$nxZ8^&F8t`=5 zoc=)LXOv)-NPqWAG~iNwb_E)6DRT*Ez@_yKx+2xR?d%2e+@~aJRP4pPqSY68ap|>k@k-#uCA|$?70=gRTw-Pv zuSbGkTzW7Qj}&T%tYZ2ISw#Z_WF?TnfsvUW)vl!vk5y6h(Q%-pYILkuL>nBdh>VRd zU2OsTxzcM)b)GR$R`I_leQ|Icq_Mwf^@1Axi1G$wCfj!zR+*POUum3w%)x$7;b?}{qF&@AEll7h(c}+E0 ze?zaSChKqHHTB8*Yjw>Jom0kYH;c;$!!c$_4GCPOJ_T&Z)Fd(HQY>Dpos-1cG&9x= zNiN2`vKu!Kn+^Fg7fFMMZ=coa4oob&G1;Z1Q8UX%T%TGt1cA9_LnO1sZaq^ys;;Wf zE*k~Yr(k3d)nwAxh+cIv=908Gb*H_bSfaa?&dkWvt=ogQH*T-;Un`w%Ue>!_ z#|dUPj0SI~FE6FbSU_MBQMy@Nqv7IulVCLCqL)f%7^^D1Ky(6!* zN#&O0=A5e27j#R~r-%Z}1-KsZ^5p_IZ1NdP94(lJ*PNfsJ{yvtaiSqpBV{*6;x0VS z==0BRt3z@zCZO>a3{Udn{A6^E)esgg^9{^EV=0HE(HA1>aeahsBtTKrz}OIphK)>B zRKKb|&Nd3BkF*0NR~ZJXrj50Y=vAGc%tRY$jS;pXxv9IA_7oXiyYTkdWnIRt7}LAU zI=U5i{FRJoRY|xmY&kdV>6WSJrQ>RQms+8M*I=4kv(a5$k8-&%gjmk;UZGt2`$#TS z!{7BNkrP_=F4JcEr2QqDQYC`hzHIdxUL&sDiLazBl{>K7El%rl{`VSB(O-4i0`D1( z@uj#}LlWdB44HDVPV@*FUyA#5Vl9$3N;O=p)8(*uUBNEaiJ_nytKtJL7R$#ajj{Gx z#dQ~JBnY@zLnKNxGS#E%s=A9c3Z}c*K*^Ph4OC5Yu|{+SF4jnExL8ASQ+FTD#bOEH z6&xFvXkYJ%0xZh3ICWpK>=M6A9sIRk0IE>Tac8TxJRI?2AuyJeNOz!+kFKVr&`0rJ#u z)by&3?~=5}@YOi`rtVhSQ{=fE-#J-)zGa-s6=w*p^#D?pgTZnR_^H z7d?kx>$w8e?J!JR-p}30CvmO?Uh2vWNl*HlmAH}abL)A$X&rux7RvpM*_OCK0qG6S&U{_`;wTH9B; z&>C~G*nZ;*%dA(vKz;dT*4kD{`ieVQAIY7S{)RR-($)-KvxU}IT2H-X*)(Mf7zl&nHvc#(vuGw1B>+ZIVB}g^F@KBf--*;Skx%- zz@kPyt}klT^V1hK%JqyzjcP%MtauE}BdOyuZDcHJ)T3%qqeP8Gjd~P!7cRflXOL7y zmegBD9zjd=v@N8TUDUYbJYy#5?@(VHZ3JoTFIv^(qo&m--Bm2e0O| zwZwp0TF!^64S>Uw3-QgWE5@8Zw>=R6OXJKuOe-kq5&sFDB6Rr6ZUP zS7e6w^>wi~lUfkoLWrawigXy6%22}GSnW_nb+mj3*tilRR~1xl)( zp7e@n&rT|`f+r`H^6yzgD>ZtVV!`SQy!yU;sr9lmJwYC5#e=<-tRPTD!MC}~t@_p{ zd;aRHzwzPlva7$ZF!yu)SF5O=#Vrn&^;<41li^YscrAEtuHe(QEmC{s@U6u)ZAN|w z?ZRiz?%)FPsn>9%D9-iVISFevu(8WB9{fg5e7UgiCN`8ZT#$+fIcX(PP8xSrZ08hk z(r7Q9Z#ZdwM2^qwc)m8>g|&cK*c|-jj0-O@kwRbDCo$bgtAhb2tps8_MrL|cyO!>x zRZ(;&9Vn@C(t1TSC#@nYaMCK}-?N53nv-^E>(MTE(l=xd3)9`$BjReGooG(x`s^Pk zW{JIhEDr1o5g3|X|IbZs=r#3)Bsa32`a%*PmI~wZ$IC~(*LF<@m#$%*L|{pWE`Vp! zpO$rzdi-{Jv16|@u$zz*tM-`%T$?;^V`nuuzM$QNoUm0No`VC+Ih;0_inb;MvsF%f zEiF-fF^3)xJcH{Jd9F4xR8e(7eI6ecj7ICb(wugxat9) zd^ov#p*Be5X3QKY>Yt7nKHa|Lvl6Tz#v}mF#YZCAdHmp#TXu4%Z0!MGlVXQ)?L6%R z6KwR1^lIt=tE4d`m2Dc;xhrmy5B#PD4X?5ZLH&C%#l-O=drfTPhR;#rIgRa9Nja5Sn!hNIC- zY&aTKBjr6*Y$c9HCB3Pxzhv7ohu4NRhnG7VyOVp9ayK2AJhqMJ_MmntXZC6)R0OMx6ldel# z&=Ngk=Ui^mDh1|lus&G=2EE(3&l+0>dy#Q}TdIP2a(jD+9Ukr@w8x6Rg46Hq=!4ov za1Jcj5_hxG+n$V*9eB|8ExRwIvB1sl_$z+|$0c9NJ?ksnL;&AvEJagk)Dy2AkM-i7 z)!H>I4_5A339y(=xo2H~wQQOB%mS;fh4IMpKJ2eF zn~4vs0|i<#o9XVtZ2`Y?a!s{hgIBcSA$Q4Tm#nnlp!ynL60erMxNj`E=8~#vdy`)4 zUnk(cmH7DllIvdQx^lMFjqRzg*s9uN8TM<(;OpA{7=zfi4b#KR&bMHW8c#&pDC%lE z8uDxWz>g6HjbQLmr}0xk+KbmqHd56FG?#C5k8SEP)&YLh4emLvy3U)`<9mK=PVZQ5 zv-%dbTRnd|BB&h7?Y(^zMBBd@8iv%8VkR2$jfNE^~OvcFc>{Lo1uJdESlOyt8FnNKw&LDNEp zOwIDxY|xGNVU5iC*f4vn;Y&UbKQS~WhOqG>=F)<`C&X4}S_(Cdt4H;DAw3?L z7t$p%5v1p*V(N1Gw2)CCeO|~Yu|6+kR7oa=jObM#JuXRWObr=l|NZK0rOzKS$AW#T zFpKliJ|JA_k0E{J3F8$_MHo%2&qd%JjI!{RR$az9*x%7>yZXm=80KOOarx(V{0%^M zB7YC(zKmb%0f*s{?354wlHm=82`k^$;$y5pzE)d3ul&cXuCNCA^6hE=*47})My4O< z*HwcydtR~zS$l@iH`>)6WMm`RW!E6v%vadp84JiS+gR0s-^E(81o`7G4wc@5oyzgE zIm@hE$@wci^)4yUl1D*wP5gM$HGb+sZo3!k2oG!Okex(L~ea1_Hrq$lu;OD%>c2`b8bU*|FD1Dlvy}3iJw*S;FpT{t1b8iQthi& zy!tPa=s&cg<;;POuKMJFj7vC^T(X6J-3jYkG>L+9PgGJ`0KlI|&7S*Xr2YqV1TAU?@TCsXp>zP`Kd7QODiFr(`5#vGq z<+75CK9#1WF#xnRec72@ugG603JREoj3BuNT>B_Z`-n`74VpMy zU+#AVwM`jrYD3-5uZzNRBWY5Ud8CPM5gQ zFcy-BdJlr+0kdEH0;s^6__2cxo;=4!L{E#Tl8G0E2W5>m1M~NIMYamTzDnT@>I0WT z1*|3Mpn7uJ|KlI-Lnz>oAUWUMza=M1B4-fvnCB&O;qwxLh5^+Dx<&o zHY8wc>88XngcA}?Ws9nMZd-fUkJxxYA}E#HwFYE!Leu=FE-;Cmhe2n`Kmc9sHNxy> z9k*@**`&;(>|ixwDpPRTeX7i%N{3xk)T9$cfQ?6!jSVT}nOQIVP~@QTz)|3KU_Q0Z zvIE?`VfoPrdFu8#k%8u_D;NS3^_0;^dt76x&Y!5;e~5M20W`HLn*@I%1B8`lNhgv( z1R43^)|SsMpHSf&slAPz`P0N77#!h*74gTYSO(a?xhjUw%eK2^|FGiE}J)l>yM!CnN| zsybbwBdsM|L_(|B#Q@Ya(_Z+r#D&rd0Mz`>vk!rWoLKA_3G}A69a-6uWG8|*zS=91 zmC!-00!TRt46Tq;Uj9l+5_>>O2}mUCQ6&eq6eX<}4z!3COf3Skl=}gjV+LU}B`)zO zhmO(TJ@e4(zd|68b+o1Y!lS|`4TcR^g$-Om)gwwXc{X3-)Uc$XAzrvwd2I0IChLF; z;qiDmKIKOE{!bFmKYE&4``1U8=#xhE`q%o>^O65=#D z0=4WKY*}n%F{rP!0#%!m=p%>%p8wIwI`%X`1#sGxxQZQe75(UdDs`0GX)5pOfF$ji zhx_UfI)MQ8DeCEHb9*bzAQ}i*0A{H2?(7lS|8>t7S=I__oOhn+S*ooF2w=0+je@8` zrMhUD7XL}mvrkx}+9&DG-um1@c01K^VHY3*!W>V10l~P$ z77^^D2VQlO-C!b?y(nSy@Zgkr5FFcLXB3Ds@lye7VAgwjhm%?2X0}xcaID&9i66L^bP0QkNGWdLwoSd9UdSHQ81S(lVOzJTa9;*tcbKiXSR$h(G+bsv; zC8%$g5VTCVw>~SO>ac7Wz-rY_R5*b5wLNuz{=|#CB_2816zP>`R zvyp>rwz$#Uqn!u^>Dd*6nOpQ&&jsUQxtF&j1KlOx&W_J__LsJTP4>kqQp9z>^ zcq+}4ePch+#x^$~OgLX;ESP2>OTL#LC%W>b#}TkgB!;gxEqcKKl3DnZObM|1Bm`~V zQ_{+2q$U6~b4FWNOMEMWV`IXDE&%DVrh7qRfYt0`fPA`@)2l6}6A1Ul)4vH+^JH3{ z>IvXz7HMqpK(CpMv+Sl}11^3~!c7-hjifT~JCCa>AUb`DSFdPcvnv&Y3x?CD+y{=i zsg*rd;T56NU@m+sV=J4tXNLOJhUAf80FlbaRJ=1yxqVTBzg3p#!vYI&&V(6|v*RyZUL({gl0Y z56Jl+>{9AU+?F7TcA4@f!0pab2TZCe)ONt`B<(!=|LUP^P?ZWCn{u4}l>T52DDdnT z5N7TKVNL)RszcQvx-uTIn)M*NfV9IX)iz)am}m0=GFOi<34jd+SlyO2OiPHD=&3;o z|K&Sh5+;}~Ad+_O=b+Ih^QwqFm2&X>*ZQ-D=vvs5a-CG&h#ZMU(09-d%Cf})J?3-2 zKoGH&Jq|#tG?k{aD+p{ixOp1qF^TfH3#h!NGfTtexT3NM@3A)-=ux54WrxNi5wB!Rn)d9vV>qLB`Hn2Nfnji>AV;O@SHH zurRNFbvH|txh@HGb57cfa@vT!{Rv4@Ey20R-h1$LolV3_^ip$W4tfH?^=L*MxgueM2|puY6bg53z$)+>9gqroZ5 z3X^0sSoRlzty$~_M}fQ;`@Aw}UV~}_R3xy3wZP|pC=!D*djJ~)u$O7P=kEpWEfG=t zJ_)G}?`|G1z4++_1PN>-=G!wH2MRbSfzX_Bc47dVbNkx8JqVtAxLjnQC*S+NKEr1c zVfd>L3&Tujc|Dp>;Ea~kBsmT`7RQnRW+kv8C=Ij_VmYTlcu~MRkG=T_0(Bj5hu9u~ z1h(zC@T~~g6So7y*}UF45WxH2dj2QEosppXbl`R&5`!*)+bXd)eu{7c_=g{VQY4_N zrT3K43a50hWvRuUK}VG*+Gs6rITod3}HvI3O(Ofsl2_S-~B#+lpR) z5DZt{odHM78Vw#yoQ1swupP(?rvX#yK-z#$ ze>Q2O10idE3JB;1p1)uCb(;~IfV&gu?v4+pgEAw);zGPILg{^@TXqA~yz{rnUqM`&ok#;94L{^unzm)YotxGoa#m zk5Ku(@blyA5sL+~0km<`(YO|{r9hSdkUO?;G@lm|*zx)uYerdk6HP92E%nn6w5K%E zOi#S|8BkVfd%zbXMq?CM*sRo|Og1~vACA-M=NT!%6dI8un%`t2rvf7?>7jP}SWf^| zF2ELb88Ky6h|?l6d*s0SDOELAgX#dVA2MSBmVX;?7+4U{Z{wod2}uIbJjNaYc;m+) zg{Fyp{$nkc}Wv?_G%fuU~wU-Z3v{eWfH(wkeS& z1Z~2Wb<<1%%mXmVN;W_H#7Px@`%#gzO7T=$Ff1T4f9`i8npZ(R!l~lSv$y9=zWIId zPySM~<%8R&B!OE3P}PtZz5||3z<%NA4FmPBKgQ;70SYv*bMurt-Gj_(OEicNC=eq-7#jsZ4e|65;BdV*GvKBn`r4)|D{{dE1GBpX zX!S2XviQ~yX}OL@5MC-gNo&Se9s$qNv(*4w+2#NfttMbw$s!fnb@r=Z-u>+}_XkTY zRD}T?2E@>Tb+e{+ATx6x2LU8XaPB)2g3xvt&r%#MudKo zzi3y3yEBbv0h&8b)gaJj?GaK5nLt24`|kcqN|DI^c7xAz%u~EZGlR|MyRRcPBNZnZg`z z87fkWFy-~nfljmdE)xiVS2KXh1C%f)b*_*evQrCDWcl?YU5a4GAqR%GXyNyY8(*eJiGpd zPd@d;cE{Pf*-}X&KY@T=@6{(HK8GL!$O7evXnKH&vL!Mhfhrmg5CLoi1L)p20!L~^ z)V6r~_}TA+-^SJl^Z{#{*y?3&kfK%7pn&J^b-(fb6Mk?xs#~s?0|s6H+JoR(%z=~r zsv!_z$IelifCcymB}}K+6xf4cfaVkxcigX9Srs3`r=O^9p0JvD9KehZxM{fTS%KOVdbayu=b{@d>E+bijw{+YT0l_XF^bq1Oek>pI9@^DXo15s8t zUYR>fl3rMt&t?YD;0$={PPSdg+mC=MqXp*$7Hxd-ADK%z5D-!T!mgoBWY>$ZYm&FD zZi(z3X9KLBakhQ%kCSiyc#TMd>4nD-OP^y?@*MUzfh>aq(Ht;_K>yIHiVikk9aW9IzfDqsuH6=G zYel%*0rJ!X=Wa*PNX-CFkF%+wX^{e^iX&hsWGx#8*Hfvd*RgZ4^K7HY>opZ{|n`!V(}W+uo=;Vtds%J6Ae;s}s0SSsB>Uogk6Vd<~RFqTD^}4RG&j z0X+$P7MaTr0j91K>xbRa1lfZN!pnm)AJOnJUDvUc9{Dt34 z`nGLX4sBfd72Z&$Hx~XhMq!X&Xn-T4;uZ}~&OVV=KY`b><;j`aHs9I&*dF~IHVrawGz%iLU-x=??%_>_ZKV7u zxV}`7XMO@gzfz%0Zvi|YHCw`11WBF0XDUFe1O`31E5}+Bf#`N1?G6wI904+SK;0la zb$w`Kz0wz}AyCmk`|>Fxv*aPdM&-$irYKO=63S^pAh7B6dwDk~h?nRqze2bp7i8vN zzW?pF9@AfGc(rG_H@+yTCQc&U4K&5D0Rj5k_C+26lv0t+tPOyzdOZE42Z4h{xdd`5 z=NA2eHezo$+0B~mWTPwn*Yj2oMeApyY)uW^$hG@AWKG9H855r80ZM^2;Z}N~ zKi~0r(Bn&or2qCa3IX)RC9X#M35jNDdIf*sI~gLO66>t2KaDXHMK?#9#dE!PLf+G!X!s&BitaOaQ5CfNJi%Ia+^m8wi_|i3Qf>eeh_g zuw4>l&>Ukw_@=}_E3D(fD;FB*Z9J%ov&u*gW~_VxbmZLE_R;K1fDJ_;hk$hhtcAe4 zzckoFa1GsM5@%kChuhj{?z8|v?oJ6^+awek<6x00EwM?Vl&6TaQTZ0cA};>QCPL6Y znn4V(#~CleBM8*MhKfGGZUiu^t`sRz+Cjx3S}i+oMF9w{3@`@FQ$5-O{=$!_n=INe z?@BNJl6|iB6tnH@23P+NfP{(#lMQ(0T<5wO7eI*E#-yq3WEU$Q>A%AO1{7~AIHnD8lv zhzb!<=9eA29&x1?aQb3luq+V|0$%*Y8BmAKm5V@W-joiW%4M3~LYBQB2&ikW9~O>1 zm1Wel-1_P_Y2mxvIdTv*6!`XigQN2ZTY%e@^@5E$s#P~EuM!bJBrW2(AAwL?@xWl% zHATO&qgIu-->z)X0jcUhy^et9U}AYYixX?OHVhlD(DZvmM_36i6p9 zZf7*80jyPRw?yfde9HKL&wf&pAO|j|JYz?aP4h@3@0kWxKr1%K3nRa5@y) zT>q2^DwK1O*n|Y2*=w@qB2@7Wp)kC=tfvP7y!fefFH1Pz_; zZ91)`a08JeT^Cb$(2Ca}-w{@gRo5&oMIE&aQENxRj9qVQBSP;OI z4}m=UMVpGU6as9&U|2)n7D7B-%T%j?Yu~(srA>2#2<&c;2~DA*1A@06ZqJCbMF0A8TFhl69EISv%? zBT#+Yzga|9;~<#fB37L32`KIj?GWxHJ9oeW%~ebluPxr5jM@$U_n*vUPYTIn=3^`c zyT>>$PJ2)`Fp?B~hAkCx0Hl$vI=;Ry6Tx9NMi6Ws@BZpuB`;e`p^hYlL>~9 z$S7Jk>rOQnU-r4mn|Bz=!!y_@1~l3xdS?-fIml}XY>*&5p_s-&l>zoRB-|!JXc0n} zkBzV(63}92i6s|djv+aezD=DMLbLhf?VpiDyd)s{fBoW1Usu*Fl3@vgDHY|rc#DXr z2LM}8Wqc-2MBNg^orzZm5HDee2Poq!I>XZwIAWl+6&2HB8%se1R+n@dyy-aASvXg> zwqsw?@f49aA6MRQ1o4P--wYdMnl}2gwYeZvPJTFTo9Y1+wDwVdTRva|(3XNBtRJz4 z!zO$Vrat7-KMY&)<*@eAVA06%1U_i&9_t^S7#YJSVTf0B4*AWQc8Ay7-I-P~GBHx? zAM5YUC>R;+kp%c|%#TmF)i>2Vr9k_}FvD)Mn=|Y#{DL00da_wvUVLSUkIPPsoAJ3> z?Sy}*!Hkd4N+vo7`@8dpPvApqMDxeH`F*qvUrzHIL5XG9eRg~+-8p*1-+!VHN1gae zF%yrb60`ce{AN*A%*n4C_3!`muNv{Y-z)pXjeY?@6Df)X`PYAXh_|bWjYr0l>Cp}X zmHmWFo(>tGSpC|a=CmkC7l44xz<%X*GDSo~r2p8hl896&n>B$BtqnLXGJ`HL)CNN= z%kb1|x);CFM0t8@n!g?)vjJ29 z>(_&1y!vTST7iph9>5A4-~vbQQq*pUn0EWDsXb97AM;do(HJ9pVVV&%EWKv)Y(~4X z9bWS0#*dBD#x;Bm zk^C>oVgzUNKCgcv8$yAH0w9|`|KcYYWtxat-e}Ap;}liGjrv899biBLgYqa~FR*k| zi9V*-n_9BBqz80HNxb-)Nh`Ca8!6BmTEW6L%I=vPlAf9&z zCgCVR6(sHACwZ&bz@n-m#oNIH*vDS_21pFA-2|i?VF>V~&8yB6!kpH{>2Je4X)Vv( z>pyqzoA=CazxcqGxDjHo#DS=RW95!JO zTNS{u%;cPFSYj;__^Crca&7!VeGtQh5iCYB3EAAnc6pX8=%rV&?e=rx7~= zECRAH)4bYSkAeWG<~&-h0B_)Z6alG@N}xXJ23DXdm6{9(_RstI(4ln0BB#>u10rw% zb*3tH1trJv3OPY2@1s;P&4<@d-qpImZe{>)>1ya*u1vBusqhG-+VjrqN-57j&L*KY zSz`dtqh_9YywsMJv^g5=kq>^Bm0Jr2@b1HNpkqLmK!7G8KrLJXe|+#^k$8*)J1-xj z;@8_{D2E+@@YBpz>lM*~pEn`~r@@{(*ipw}$Xp+i2hVlj_mzV42^#Ngd7huMeY9_%9R@ggk-$a-Eb{6aF%#V84@XOKIWYIXEypPv`+>L=ae%)R>h8^JXGf*BgerQmR1ziKX5+d(F zIj>fho5zB5AEd+opX#N}c(@AQwkWWjh}Vh7EA_19wb}3-x5Dj2PDjq{c=qnz`suLM za0F4n@J)1}k-%;1d1s;{HZuyC2{rFWuqA&}4#y|}x+kVO_Z5;~@>GF6be1#zr*EO# z2J8mv)A(S=y&@Lc=iwc3ulCBiCvRVM*9h|j(C-6MCFtY537~u&pG)ZW1Omg$f>>Tm zU^j>0yu$!q_yP;Py=ZM^$aD|Av_n1F6oX%D>sS@YB7`>(J23i{Ppk=uArMe^2@}1v z8a$Nl%SB{%OZb60gli;SGAqC#86bgGt^%t2$0Bb%0uH+IXx?NqfV`()0+k2pr(eDo z#I#e6MN>u0ZWmBhMCk_t<@|Y{XA#EPFg_q4pfcafKM@h=K45e~c(j>!*IW^^5-;Bd z!a)ll4tT&Vyg{j44r2sDVi9hPORHchKlsU+iIFZa#rxHONfPlcy=eZgZ~j)I8*ID# z!IibHJsjD^8Udz&wXB4iF*JicLvlE1Q9Po>FMpejno4EVWPzA?yFC)OpV#1hkNF)U z(hjLvHr<-OP*6ZVZ?OW0SmM!ary&3n)059}3+HsqzNdeU;7B}(g(^H2%C3+cn*s`O zH}}v^rZD9<_bvbIwMS{1RGd-z+1nbp@RUJBy;$jceP)~9VXiG&To_H5m)1}-j+)c|X^f&?lZCel_33`zr?qA398PD?m7NrMUo zcpS8V~druT>(*hIZ{v)PiWyQoz=EgrBMxHbVKA#x0~ zK=nYd;n7xFQEX!Vu44!RehIYtC|4p9(Dfx{$Iky!Sry`Qbs*I9P-p^Mp1!aV2x#}b z@&n<_yl^~lx*9|qTF=lt>t6X3sK1<=HPcZHu^|Dq>i9^XQvuB0vjEK@1) zWLk9FQM%Mb;3?pfzdivP-;)b^X#=iJ-nJ$x{3MPDWIB!u!+@xa=8Z3iSo``$SY9uy z1f(&qz`7G5y8>P1%pS&QJBf#m(DbL-QWl^AG(iC>jBbSfr&UBP5(s5W>}YOlTSTb6 z#1-*zYk!XkY*Bvxh;u;vfcub5}f;I z3GD|%z+_NLSK0;~U6avZ4%Bh5ah{77>(M`y9Dn=!2;Tn{t)Pkb z2sV7U9faivG?l#kgz^z05XwdeoKB!_Lo=sTDNmmJHR2cV9&1P7N=z+A&;axTiq5YGIsa8F6Y3gJ**fjZ;SA~^ zzY`?7nR#fVvK%mp8@rjuA>e=f`lq0PW5<()0S&eFg0{2C*>8_WWsJnMOw&^ik)){# zvFq*Mw#T&5JQB4>$$D7DEqlAD4cg^u7KarBur&aOq9WIyIo!9SL+KHsy6tkP8Uf4O zs5BlAK6xmT)(=PvJtGWg_<>hwunQTH?(k^ZL8cX?e^;!(iXDAlGe~s=+p+EG&w=jU!Ly!u$lgh7ivWh~+6LN0Q)&H|@7^G$|@6ioWR3w0Q0f;-*YNayV;k5K*;D|C7YezX^)f?ixrjups!R~$g zGobc!_ki-scI`v+bDw9UsHO(T=2!)souQuB&XP|4+Y`5*LI_~uTwy`8v`J$2N$+b9 zi?r$N=arvy%@3M95EjnM5uWObYTlP9(V9IuHrBQ#bPSXV7qCkZ&6|}sf(BP--%e!$ zLV)S2=7;tm6576HE^0XDu(pkv=Cz{Ns2g-=2adal10VqQ=XK=&bk|ovHvnUS%!d7x zdZin9_e--;2vl!oDo1{IL?4UFWXgTA{Qx^903GR~sU2;dRQE{Z0BiTuSBkIGwHq;5`k}6q75lU`my+ zfxD?wN6CrcW5PQE!3k zxuZ^a9kp-XUH#r~Yu2&%39!y=%pB*&%_G`Ma-MD-=FQjo(iaXQ0E|YTy>FnLX1dBv zB~lw44TJ#!EHbaXi=x!D60U^0h#L&I2?XnlGDZO+*U&Xi|RRF^W{%n=5y0*+w08oxcxMpy@wv zdEAJAi914{pEzSbj=WCXO80*Qh~9R)c& zkzfdzTlT60%m{Esf=UTMBfSO-hMmF!91$TK8IbImjHk)X^V)!Ow=j)>M*?0|<#cMo z^wI-#h;%bM?VSvu?05^9G^&!qk#ev#1h?I(=GMEiD1z@|f;dV&Wps}S334^R>$iy~YEg149 zf@4jH#HJ)}EJMg1+HaqK)(@VCMk<9K5il(QXyA?|q9q*?qC<@V=g4N|zD0VUSzxosrY&{RE$j>VOiLRA)B<_aQTZpcJB85V|NQG) zK})+qf?+N=(r-k_4M?n9^_MdeRjq`GUjzjVeXK+|un*_~YTqOy1n~TxBDM}ypUqa- zqWpRY_$VM?qXa@XAYhNGlqeNhlb{X3OxvV(U;UIRZ@0+k3+jN=N&SnV^P?=3 zi3aIxhy?|dA07);{pjrH*z;|1bY@ho zz_VXa3N|EK!?Jege<-qT2-X7&hbGxMcwb;W*p(vVQdUv>fP7#`l#P~FusV~*2q;ZF z#_9>|^gr|Et&L1Dc?yI#!^>e+D`e5YviEOc6SWa13!Zxjp+J_w8H{o-?>)q>ym?AFxTT+<*LDTuC9-y5qPrG-@IoWjLLcw2Qz>k3AUOL#x;OwJ69td$g_a90n32X zK)?$>bYvx(rb$tmGA7%joJM2d*N`>8wz>z6D=zLt7@PE4dw&+dUa&*}EuLm|oJAU}507;>mh<*4puCClSdi8FW_lOfjN|)+%SJ%; z#pR534kG;E8zKj-ItDVkNEIIzAI)D6>=GE1`h4cI5;gUj!6>r=*BS+~wQ`Z=+3#V6l=b(o&v7B<(7qm`O#EN66f2TddA&7Xj>3V>#y`NYl^*Ou*Pn8k=6WNlR`Xb~_NwhYzt0#S#p zpu?dcn~cNjV!$4J?!M;2&OUG%bSyNA^>l&j*k}M20ziue@M_V+!h^C^SVh(apiTjI zsK>N`V9&JndCo?#Z+_w3#}H^Q@_01^Sg>GV2UfKxrZyVnpoh+%Rf&`Ml#*-jP9Rbq zCRvV-Zl=|kib3cu*rfD)s$YN;h^;vB($~gl6J4xeE|5u@YeAm+-EMWaO^ki-+v5wZ zkk!P393>Ixl^}IXba+14fm9Ha8-y-6btlOC_k##@6*e)$DOLi|XpzvM)Orq$W{0+W zrO3ycXI}kWspjg=f6YkBI#nbN_J|+?!9u5TPBQ`SMAp?oA=$P&2q$K#u+ zL<4qGOSBCG*j|8vhOl<}oHpY?45QN<*q4=UY-AhN*tDI6{`E6oL?kH^1kfUZL5F)9 z+nVRw5g(xKo1VJ8WJV5_A)s9Q+IFFxe1|Q{rs+k90QW3gej6P_mC~aeC{X!T z#P6J=hpg?PQD>)(fhGVqvIjeW0tXx&wSkz(RD2S#(6@eLRh_h{#yBaM*^9`reHIp^ zmp8Iqa?sybDU48dQ>yI}*q@<#kjQzLIbbAt{p-SR%|IBzt_bM)_wU`sB-NFLt!(+@ z!1cfZ;A!AHKL!D0O@pxJd*1&?k#ugpsJLln;H1gN?(=~T0$B|U8Nl;D4-p3Rm~gME zQ`sYPfh=jO(o>=&8KHh?Q`1!qa-@X|9$_@zc(*OE}_)a%-i=K-$$d_ z0^F)>59~S?poYGUJ$MhTgdLq`5mnp;>UjRXfe-FJdk5GvSyN{aP}cxvr0fP9O-rCj z0-7&C8#X4Sfa?)~&}VqP=nRNQtKth&ps}(V450FJuna2 z@JP=tT2C0TN9h4<_TcovOzpEWcIS+W7w`0ME#d8V_~lPiH7Q$~HuWRSNpUr1YBM9s z-XH^b5+sa9Kob%OZ67fBV5T@1v4-0IuCDy1Hn1$lkyc4jO_Nt0Fj3pXfZ959YNSw( z3$?dUE#31Hqft27KTffN!El&m2W*W6@g^_H<46o-bJ6s;3G@Xyiy$;hfH|wVx(=b; z#6(OIyCy+<2XplIpQ}9o!}E8JQ`o}>2Fy-gxW5!($q{Wrw}-tV8)#)mr*Vw#nP)~c zLI6w2i%l(FynnB@ewXIYo|-VFdNz1wu%y7712O7&sIrGeeDSLw<)%Fw5CDoAtn6}t zEz}4gmvNpt0c1x6tO zUgI$Mni#feKfMGXY8Rc70pl4(uRgK(=0gidd2%wa!3y%q;~?yC>a1dxi@k!?o?*AR z1Y%+=kepO4Q?fXA?x$rCbfmuhc}cmGO-Q!`*gD7t25foj=gNvrp@>e8pX7DeWXy;< z2W*xgK0-oJ>ZM9z1x*OcsDT&0JYP(;6`oK!244)E<3WH~IjXKx918Ms^}N{TbH4%w zgvaFx<3&JaXd3{CD2r_e(9&idNW1U|B0EGTw2pQg3?3?p`V5A1--t&vgRW&Gvs78Q zc-xxV>^U^W?jkTmKQWk5H1PsE^r_LX9ZC;~wXt4QhpH))IvafhTM)9-0p7n&!urk8 z%EpvmA7JNXJDBz;)w2-iehe~QL>mL7O8}Y%Y%%@udyk4FwJwK9=B>Z-NX1X*ym@Gw1*52H_fNg>m4* zKrfq-X#sOPLA>m}+PrWHuRMJSWQfg9y9OLnjzMBd{fM-@eV1yZ!4_KPjB?qrl8~xA zTK(!5lW1@KKri(O6mIja!wh3$mBKd;XSogxx@% z5|wmp6oCaO(Cw5k_b@^?@ceJ6NkBmlH5oAa$n>;^W7`MhU>O1;;AD3+D7!0wP0^g; zitA@~M8NZ(NvuZTnzl)t4P6eTkPa^$n4I1ePDfS;1kCqH2s%CR#uqCQzWf7_5nu)V zMjo)x1!BM=ZKrt0B4{;p2OME4ffS1NuW8!jTw|X;+_w=i&G|MPDGn4AgKwQs6*kAs zxeJODQ|6LrALe*Tw=qk#iA0%}UL{A_5W6#AcZeS!80-a?2pj_X5 zCvu{|%+s+6{bMEusU>;!-1*P3>p|%Ay1&{0*edS@qle$H?%Q!5|)4yRw zLTM-l&~#MeOlvzH1t8qA(N$8_`rn2Kf4|aES zsKOaZrVS1Zui!3jnPw9K=9ySs3!Gn>@+#GAtY8PwfF(vG(q!Y{+<_fwY!J36fNZ?5 zpv>w-j%rBoC9zLGG2KaDQyD?W2?*4+Vogp+pj+cm8!!<_VMf67MIyQ#2+%f`L731Y zaklrQuyn^Gom4m*gRb%1Eg*nR&1_-oB1qLLkacm#>(j%)gbyr$0`lA0S^%FjLKQw2 zv30&bC<+Gsbf_MLuN3}HG9BQ&q2TCmX2sKl~B2+M*AhKkcI@r1j3sZ*aB>x zY(r=;5!6#mh_WC<%+5hC!=@>G>X#h*6!0nrusxprR!;FBK70E(eKY&vVLEEPcPj(t|)i7+qUYNIiQ-ricn9u&TTyCbW7pyUiw`jYh;m zh7RllEdg%i6?jrx)o`Kvokw?g*=~SgU~@l+yHo_A6F?R)e`fk1-4O?F0;w!ncyrcj z1WkrCmiFMK(=DSqHfkFs&M?Z31z?*4XaTBy6Tzwyj8F8Q?mI+v0k!~{2Y{`uq-3>u z!~$NVAs6Jr<7<9$1$4mhP5l+JK^5kZo)y zb;)p6NU4sGGSrtJ2r&09FcUyDug6AO<}++Z(2hEFAF@@D-{Z6SJb|r(f_DjW^6SwW zkzBS*klo2$f}EZ<9KQj(1UZB1baR&=-PFVuKyw0jB|`@0<}N|(D>ruu((Hw!^DBw&l}%a6LD6`@yxH+)W6f z%i%IR+^7?GAaXcSU+^rWm%P>Nb7ChT><;9@xmtQ0b7Gexr^_Zg3gH~4_qx?J-H6*R zxjuEqJa6JP*8y$xZ$z(wU4q<~JzQa%EEl(QRgYRumld19u5go}W2fs{v>#=IYnfXW z5w=M^Z6mrBcnNU4GRp_q*|;7~IILd1rz{jRU7 zk&Sx`)r?Gi;87okI3qKOe|C2-o$xfQ^Ewl!~GfHGh?bJf1Dq0uzWulnH5dg^2& z5OCm?yM*CTNXyd(*(i z7OfXSXAu*q2`$!P>V?m4>+Y-KtlLpZ(oS75<5W)ZR*4Wa+)s<*IW^j@L|~|y()|_t z*J~*)G$PiQv8??)pl9|^u>~xuS*a?oDQVpwKk;2~Y(W6k-wZTm?8xjuXfIs=^)F~| zN+Xyb;0$oCV`2}2lm>xmZSj4^~_Eqe(Z6&guOvi3J-aG9jcD$%#$FbdV;*QUeB};9|vSclm z_mg<0%=`!Q`MmF~S5WdK>CP{6W~B4^F8BMkd%w$l#Z$eyfc92I#ZhSp-!pKa zeYk!wfZfZoRYgJsS~pI~9{ctur6iV&N(0=`2-X~|95PlY8&>q~P^@%&eW^WjkJE*K z?~49m3MhQc(} zF{{#(wX(wL3g8hy3P}61i!^zD0dxG!YcnhZ?#dKy2Pqdp+YGBSTCB#4-_ygS zca&KMRJbkpu(mmro^M`%R;As=ALPh(a06($m5~%M)qvKvS#UGmYPk9?yM5vdoau$mvC;Q&Bc_CP)lu-Lk|cpqwWS zaL-xh=&H2W7{+qZ7pMny@-l%S4-oqUn9n}L{xVNEJiwEI>JE)4?tnZfwgCv%9x%px zi7zJwhQM05c=nfcg}pe;%V-9GHX}OBWyno8croD@=5~uA1>!hp9^?!115Inc=3ltV zUEX^aj8~5Y0qNY4NgWFEqyKcYK})#!2)MScLwvt%$%in4Z1GBkp1i@b;n6%@Gl;$} zOb5I5iWPjZV!8wZnAslH+Pp(_@GK{fNGArP5|qRPtYL@10iLG!5c2~FqC>ZN&%{Ec zR{7HT3|~KI=OmCIYImzBya6e`gD=(|)#tdg^uO4L?tD5xvc=)G3 z-O}W=E@&A{XZL_TpdvLfwlux>qvg+D;ZPPpc_2WW>sGs<4K{6ntF9dNiCv!?|lFzcH3dufc6j->;A3`aWs@5R~Z>T~^d*PnnA zdg) zy}#WO*WNKPThby_Vzb-?lW{|H{ZR9yIXF6E`Q+jG;f4w?dKlQxtYY>BgPh2K9FFHK z$MLTx$U}l!!2>dUnAtiEqH%y%Uv2`=qgS{m&>%uNrt!9JmO{$TAAr?^HnoEiR3*Nld3z-Z+^{oB&4-f&ud&M&>Auz&JCAQ=txe z<>s68GH*)PpW^$$M2Sr=7UjmBaBV zD=1@8v|BX`GYlsI+y~5+;2w)ujJb9 z2QHW!C{)QbT#=em2csITzDGoXs0`Deh9@>Nmw|}2Mk^x%@VG+ltJAIwLD8jC;O*K= z8+}1x(18)qPEo;IRBlZ(`amzJqXUec=cg~mVR|hb9I%SmEdqR4*V>`E5ADeetxy39 zgTd}(XZ!RVRpEZ*@>3N|NrtYdw7gKA*M7G3JZu5dLyb3oWc&X6!sm}OnSoO68;&>c zlGb0sy9)9cQWL>N8T zn>pVNhlXae5`hlT$5f87@OFXH7`~`DFhK?LksaDSD~3)8=5sA5PfY*o-cvt><^hTX z4S;+>DiIEsuA$NQ@o%gbUxc#tyL8&0SoBBrxN{i<`^y=kqaeec8)$C^ufySJ-}`xmd$yTDgZRP>3a3}|q;2kO}8&0v3W_U+qj z;-w6Xos)@^kCkMuhYez*J6mjXK$Xmbc z$jlGtj9>vV2J|*T10SO5O5M=AA!Z%%r@nB zv-_T0fDulM;-r>E_XcGax4C-g^l(R;vfA`Lhng2N;0cUgp&!c7>F;rYTt$kB0 zz$YID1}mJ(W-O-BBkPRkj;~(=4+AlVLAJ*;JU`tHv~mN$;{NZa-UMGzPK=uP?2VM1 zVp!5Z0w0JDj!0Wx@W6hiwaObqu)0HdpTE0W_SU@M1igSg0J=au`$ZS74j$X)AA0d0 zRx`v%HxKaC4p4W-HJB%56U!kA#DZbb3e>cKh8t;`y#| zBQqn6b6#s`dou*b0`O3vM#RMBe-s6r*8+}%ETXcY#u@ZK0mFJW6DbjNRNw9TYq|=B zfmKO4KcYMg(`Z`I=Dpa*G8eG8Sxy|l`5%e=f{m!qqc!97I8#~>EW&-2w;^W!H$VIp z2XW<|Np8xbYmQ`;fp36-sxl+JqDDuJeg|?zgz!WHH5S9X_fn?v>uBECbQ>Ld_2*y# zpvJD=x;)7BafSxS5+R&4FHSlYHyIimRMbF|2;}%dL>oF5_yaKFg*zYjJ zF3?Qqhfg!PwjWZ{1@z5O-Qg83*~44Hq&Rmk!xq|v-$2>O8r;U|aCpxcIGvgV8gL5Z zOp@m|+v>?Y<&4q5pnH*BeXJjx&fyq5Y84n%U!UguEiVmucPvbckGYtIi^{=mcmFgH+K@QNS(4}{YPW6oo(z1}KQ z(PnR^KrC72MsH#%vpod_a8PY~kF?oa9&3j;=ot%$6}TdsQrafn!s2roK-EQP8*@uc zo;BXPIB9Y+0eGl)1W%$$zE|wvYWC&)vc+fK+Tq&6YS~w10}H4Rv=>wky7|!Aljk3T zqT{1?phifukVmNwudfWxpv7s1S2L@w@MLSCAYSnN!?WrRfQAmwT&RoEG(mTF|h6QfVxtj_W^8gU<9IT|Mn~<2j~*D|3kH83xj!{Wr+O)O;$p zluoTgP;Mg&X;+=l*4xa?f+--7XQY|s3w+1-*)5yCp77_s&ptTNhvjDXjZclu&!&%0 zB+m>C&5!lWZ24L{zwWT*Ywc-R`4+2lrKjNwG3jX;X8k+ura!y#tu+&?C+Q2{rkl{R zFMO+Qw5@xawt3N8uD^R{(OY}YNbGfq6#Q(o8N8j``8s=N z=VqTk*S--y359d@okef?$u16bXVKd`i{7f~gA<1tbZ609`+Rz5(c5?b`7d1bHcNe! zJIb&98u@i=2Whj}z837*{y*8d-*=Ji{NJ_BW^+6z?VD}3woPt6r)@u*w4Ku?H{1Wz zakl*&<>qVtXSdnTVe8W!`Q5ql|B+wxue0MD_>O;ErQ>~wO#CsYzRqqoTFig(*V(O} ziw#Y?sU(^E$$Z8vZ*5 zhalRU`Gl@@^6Fg>Igwy|x^d}6FhKo1-@Uz~>^ye>>Ou3O3g-ixfa$?458!4u?*Lu> zE$+-m0lc0+A3yMMLvSD;MhJTNu%_e~Pqc4%G^vY!_5($2rJ~%DuqIQom{z*RnY zK;?jecoByowu9QG2_7^I#wh79jDGycnjx{`fLJ0#R6}$r;v+O23=~giTWnc2Fe*N_ zG!zrKVdBCGh~~^|e-E)FcDmIMzsZ{iNv8-R*yHFOjo^)OV)7TEb6&Noej2<|Y#vh= z-xO_$gADxbU8j927>)+^9$=K2qIAqxe{=1raL844%|ynC@m>S@{_CsE=+B>T_dD~8 z^ptJ%HlGg(Dj--M+G_?GU;md5=(R=h8`|QM<{)N-fN8VrdW2_92Qk{r5WpS8gb*-2 zfvK)o@c5L@ItVkb5*d8>a1SJ4y7B_AsY8Va?IxagD*F#_y>;^uHur__Pb`3s_x6K6 zdqUd6X;~3{)Vn zZ7mU6Y@i{y@yt`@y?gN5GksOnrLJo}5RtoEU_y z7zCs(suA$XVRac;H;6Vmax{RBN#@6D;HwwGKK~(DX#*H5sjYTq!~>G~6$ujLmhq|p z9}9Z0xTxr8y!KKn8mYQrrb^Ua2y;+&rD}SKRr~QaW--vl1F5qRL?C_bdFTRFIdCOfBtG4%tD=@uyOzZJ5uhl!@VShr8M);hiSAT+wZ za$5U^xFXrWw92lYG_}#!^I{ui$^d0N{oy&2*}Mk|T@9SOPh_v{y&oRLo&yu99I?AJ z!0T_m3I6+s-v(D>E~2xWE5Xju3NRvqUY9uMYjzdr8Z z4^lpi|KR1QYERh+zU{c7gAU5**G+S=fri~^4S}j+8kw~%F;&d^4UomQCPwVc+BDh# z{nkEE3jV>5#WFAl>Dw#~@PqkAUfv#LCJ<0xD{^QSlG)GP2abT$6rKciIKAQGv)s&& z4#0u=3Q@or(2md!7N&|VG&TFQLe;UqUQ~5SH0JyCjZm0X?Kke){_hVw1x?-D(u!x9 zyIIUx?S-NRdZp$VM>3ak$m%y#H?ML~`^kEv1sgbF3s@2{%o(2CWjk0oCvMU)5Rfox z5CxpI$goY^ctZIBjWZ`$LVH2}$>Fo=TAT|6DreES@&Z`GzrFO25av1Fhnux|Vl2HU zs5$29Phn6)FVg-`=>2E*Fl4}`XI47rDtTLBtY@0U3eN5Cy$)8+AuWLzn8aH@?N<&) z3(#gGc4^<`zXxyE?qid(P3ODDcr%GHe`Z^csE!r3X&K1?eOD;^Z@j&^*;-ImChg(W zl@Vy#f3V~vefreJ$LO9&(5y-rRun+u4p`-?(_vsiOC!$Qn>b9 zeUed}0ab!_`z98dAsHS46S>)GY=8mxWe{@c#H)W7H|)B6{ z3gmG>$(%@4DLgg@#MtZy(Pg_p<)CzK0P4@YMBlT18=}F=*`ZDrh$>HLG#SeS5|fwc zDS#)?(LK-e1Kz`Xvmm&Sb?CQG-3J*Ss;a644Q?#1bUVBb$xC(2#eDH#kQEv`R$Ip* zX)mY*Mf*U#aEcB9+;=ecf}A!;_Kt_;9TKDPX=f!>$5UcC=>YAGJSdu8P5_ncH?N+Wp>zmX7@V_n!|#i|IzGs!`w0Agpw! zat5J)fEp35!D_N#4e&^Mn`Bh`d3WsZVmyEwr$w%31n|~c`Sqi`9B&tWAeGjPlgmVB zZAKatBS~xXZx|=REKgi0I%i-YC>Cs)LjyQ10!&C?_Sii5 zvNVJwD78i3e_Jus6C?@ z3X^vTWLZ)*z;M)p3IY$bsE#{nzrD|XsIIabmmg3K=%z`q-#zwdNch*!FbF&;Pj0B9 zldIa9j6hGoyuX_o<-nc`&##G@Ta62?ietao=G+b;8+Rw#8_s;DN<+KD8uLaT%%$-}0*Yhp`eE!;0 zu2t0JE|K88^kGF1D%jg;W`+ar{{+kpL{F7QfdPRGqJbrR^RW!=Q+CGH`(#t=Fy!jq zwwq6Nb#R8wP?P6{w`9BUzzE2s9lHk@pP5e{^oiiO0EUiNy2Q(V`E#aXUbWf=U2sIi zxmQH;nA~pB!S^4DY=vN+uzIz(!JMx@!7l%|$A1RC4$@Z1h=HQKKFGMQfdFmUzCh8r zFLM`Yyz(3H@hPz04GxX1MzHtp394f0al!#Uc#;JNw1Yl>bB{EHd#PxsYKE}`l(%`8 zg8W%&W~eanY{##>1I|;`RT~B&MnGrZ=+=JKf0+^V0V%(vCKkuHFL!?W3`~N|?x=Xt z)GdJJd--{=GBJY(+9$n@F7{~M9O=h?mTw1RX7qxR<_^a~0Q)P!O82BsL#(SV%NFpj zo-;DD0qzAH{I|zXEzf-P*8e!kf!q!?R((T<(OdL_VeOWQhW4`f^%wMALRQDB(ePxh zZ-9DPG{-=|g*RAfOoM;}V0%G=U=c~W!9^ubnyN@_*lsMB%?CUn7d}y!jO8E`IiU&E zsid*LIfdsWrHX|S+OV*QnPM|btP9}%2mkn+Cm@HCIiUc3d;fUf&yx+>U(jMv4$f|v zVWb(M%MaOSYBbkCAHNMIh|sk#(ZWSsz6Y|mG?rx>sF_nM2Ui3Fn(SGGR`@rs-z#?TTknp6huOY1!%6iB=K>v5F?8&e z?~CDIo*O80=GDt46U+2{pp@{sz{X}H6MJ0@Gfk~L53`3c19(Hr1+fn40Kk74YzD+U z=>pXag@XgbUi~xb4p(FQ4)>C_tVJ-k27o?%+DUfZ%;^_(uU@r19h!q}V)ITrn#0+7 zd--&r#U7k_O?Er;P-;@MD$@5~`}9Gvf{(MBx5Rga^#)jnuAZc0f%t)WW)`Om!Of>E zqJ%<(ae%y-5yULayYMJ8>R>8U&JP5f`-R9=5$9Pt0Eb=c3&zCAPTI#Dp;rwcfRm$k zGf#;gTVbwn`#gwZ4a^>^KC$|^rObW#uIT%gMC!ao*Pt+4kFL~?bspuR8H^dw+5%?D zlLkwA+>=#NHZ{r1=?H{YTa(+A!~s!&Z|xUsH}fZCOL z^cY9i<)!b`#d8XZ*`;F8Zsr2OPy<7aVAY^88p2h|AFWVfi%{LArlWzqXb2e39*{~$#%ABdQQ6j69`J_;?h$=>`&{d% zFO+a7QHkr!#50e}mSx+WMw-IU{VF#3I8;t}8!D~Sp>N4lw9AxBLb7YoVx6dr$maM` zKmaeweyVKdUcsO^P;n@jfZha#7a2srw)zjdA>d7gX`;$;UEdH9)T|mjHkj919{~IK zSso(j*R@J$D!+9blu1@g(D5O$anfcH3Fv`ljz3%4&Jg1)Hv^;o`(OXmIP5N4m3^>;meTiHyna3qMO;^*SWh z3nzS_R7AH*liuO}i6H+@v9$yqk8#>1I=CySFsWc4=Ta4^DyYuPIc?D>17o=6(c&_= zUR3J`-G3v`sTMK|q=QMV4%gm?K(pGJof_4=C)#QmEYtPLgY9Vy zf%9}pBm~3g3ld~NEO#GJxu}~xR*InK{rl@L9EjmTxqG|7nNE8^0w#@%sN5xp9@oJ{ zSZp{bZN^K$Thkg{VFitKmhh~ctBY!xPCZdzI?g;xM*-~859Zr z#R>XE)x_RRRfDXp^C!VLD1Zai9z01CJjBZzoMk%}4#wFn3AFup51xPkIvH7@Idn=C za8`d%3D_?BdnB@jsmKsSfJ)j`Qtm)wrD$Ds1&zA$(4rc4@xr4_N`Pr?0eO~!4fKE= zXk`jcGL4Ti#{@xV{|U-YX^da{!CEp@XArM3y}M`oj7xdMHlJQj4nQ!oqRxESZHn0f za7fzn5aHL~3@@`(DlfXjOs5BZNgt_$IZPkkZ&V+lF5Bl;#ijzRlk8Cc~}^ z<_@X^OR62=V1N{m8e)S<`wvnW==i7vFiu!l&ar!AAYqn`p#z9};$bg{U zX)lIgaIv>pdqWv|$&!CM^Ci*DbXI=e0W}7+89UKfWL^t+nTz*{&Y5bKE@YkcijBkL zga|B)P(G9f!@n9-3C?hTCyIme#BP9KA_#b-YB5(C5zcS3%rX@dZOM2uGdr(f1UxB# zGlDaSbCp~BrziHPs^`hpa*lj;pZ_0DyvhSAKykZVzyT-FEXRHOdrkPo-ZcFspg;Rw zlcgu!G+mjc{>sDA zfkhC&d!hq4iFbB78kh1q`FVIV{xheT#0mKE<<2WkHShv&*>_%Xy7P*YDl1ML{9JbD z6({>VbLSPOzw{L+vu#1SqZwE^A``DS{YQwaR{Tfy|G#}-vjwYXVAT#2R~3P7$}(bQ z4y@#1&eXW^Ti$b89+Q{7}B-iXArn zj{JWsfBuSi>aRF0&I}A1kYXkSezHRS!-^eTJO+04FC7c*@L%MF&6LhR%C?$}_zTg& zWHR2im&uALVC#Vvv*YP4<~01Q#g@G+R*U0-)-*0Fxn(bF8Wy*4Fr^!BJJ6VhS1q?5 zXuNGeRx?V`VJ~wg-U!=zU}oBFr?*%f2V`YQIvmJ#b+($a(j2>*o|SHN*egAY)5Vqp zjcI1AH{@WlS{2P3X`fWLpnUQ93=snhQ%5dmv zrpah>=xSz`)iI8iv^2*wv7{TV_I}OH^o)!R%ouWWBU2kjmIpX1q#mA}oQp&k_&YZh i6N8hH*dKa+zF~H*XJ$^DKP(v;S!P3QY)NgY;eP|5e;LgH literal 0 HcmV?d00001 diff --git a/code/pdf/autoload.zsh.pdf b/code/pdf/autoload.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..01593312bc7fffd21537282e3755843cd7f5c552 GIT binary patch literal 440338 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 GH2lAEiFech literal 0 HcmV?d00001 diff --git a/code/pdf/install.zsh.pdf b/code/pdf/install.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8ca33a5ceceb47a0dd7e6ac2c294f0e4f1dc97e GIT binary patch literal 242957 zcmeFaiIbeibtlL}2iatZr$p)?Srl)P?5^*wqQDCPAs!$I0^kWkU?0^)g8&-rZt$i! z>#<|UWBFWp)}Hk!9OGTv>lyFN`k1vHvK=wDyc)?mJd!MrwYFztC%my&Ozi#z`}^g4 zFTeb%zAk(XR#g+x=>D$E$}jWf`!Zj?eDCGUTlVhUb$2wKPTlgK|M(C6F%`Ait>w9+ zQ`@$+W)3W^9qYAjUple6Hhb*Y^qZ?kUbsDa;f_0|W_GOfX4jTiTDL#AI={5EusqKI zGQ6ubH@n(fXf2;;?OmCD?F5qUU0Gf@HQ#HJ_P+b3dM6fGdK^OW#>rl5X2&dGSbhol z&A!xIZ6!#sZ)#@G>~RF5wuGKIwRUXj1S0aTL@@2{*}2}a)mB&EVASKw3&`=Q)t

    2S~(R8PKXlmx^rQU13mAxyy#okKq#5@WihITHk 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%0D5sBk2;{Vo96BZooCD+R1 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%0D%hi?ocX{p!Qu^Ro~m3slzCd^+QG_`>tfzs z_C4)wNAlg%y=l;jKzK4yatlv2WxVIp^24iDMRI6^cv4jCZ*4gPSz2BT&bpdsJ zp^27rWfprPW<}7f&vK9*!m+R@l)}t`C(LKVJkbQDHk1Y$d{`KTYFjKq4PG2hhs`|| zo^8UY3ENbvp^J$n4j!7ha0p6mX`Xa~3LFnvWoiDJFh_w@hQr%5Z@xV;$oDH~UEO9Y z%g!@^DiyrUsasP>gE9u9VWXSJ0_(Fu9egTs(6G$4uFEM9R=_|fC{07-5w(IfaoTtS zDx2eJq@tb_L!F>jIgbWSQ8zKn{!j#{7I1ySuhETBwK)!nC+4?EmBCx7RcY!&#@VPx zPQ$2|&H6)q5AtMJi;qh&P@s#I3;3F`lJ8Lf(tA*q!4tgF!CbE(eWHfh zr|HQTjj?@P3dh*Y^$ObOCAD9&zR_VtOF3&g2q=)Ern-Ebb9!AKz%1n)59`a}u( z`b3G)PSCzggOZo+6LCIYx?_E6F|~c77DW0s4cu`LGApI)1>b@c%2#_tn+$9i|?VHVvF_Hmt4T7`E?|zB3XyJcxZof73vzm_nO| zhHTT&pw~1sLb%<%%mz(fu4xD=_K*a6FTvC`4Jn8+yae)T8j|v@Ord*h8d#LewcF(> z{^JgSNDQ49dJ2Ct@s0*@vD2JyD#*wuj#)>peJ<0w%n5`@gu?;TYN-OxrOZ$SN5A09 z5%1!fkOHGMq@^m5rgSZxS0eF%mm63Xpihot(Jt36nK@H$vZfE>2UjWO8t6qKrhJ8W z1>z9HBF|rQtOUYv?UABQFK1!VOioyIEkxlGINh0JMN$UbpffIJVO;@LAP45+4F*kS z_>B=zw7D?M1SOtaJ7;E$Zx{h+WDU`PB1fJ&&IcuVFA8qWLIF4eHAi3Afnba&a}Kr? zTmoe}1G1wTFPU24urF&iQV6PJD4uJ74Fx2XIe@!k0m)_@pd*zTva?`95EOw2BvCy0 zc(DV|3pKLt*mhVz_k?6&z4`{#J@T3&>wwb|(lv~cpw&p%7*)KCfhIU%>+Yb7p|JS9(@4ia7x(M<6*Z}< zm8GbO8+wq!Dr!o|DQZd(*{gOX@AE-wAt|*$&C6`i0zp`vIQ}Uni{y{ zNKh0tH6^$~bkH^YR-#b8j4#@Gn8xSsI;@^~){2`QMGR^mrifsZB$xQUC!KQ4(oBDq zwE{ zlbpZfwBYTFY?=kvL@|sT)VxutxZNe1opoW08!?CVa97qHid!%)4`V&`k9}Mt3f174 z?_8ROeSMt9*y9&ChlVXeHwuVwyU=$oElhFyiK8dyoolF!cu9jY5OgrGKZQL=eC%- zbD}t?l0`-Z=qGYc-EWoQIS|7N17;wDEAAAjcsS>n>F!9$1Q}E7!Crk)#G;VKxpeLB zT8-!t@1o6^J&!9yRYx#$gB-f`QlmVmdKcsifh_vHoZ~ERY#J?4R&frl)ZsMNTFj{% zP~9!54l0@|ZgJ&q;;veFviFMSGWhoG$*_B6;@2_ z)|bQ7ZhhI3WS9MpgPrW8ZuiT+=`BX4eAhi>wK$AfL@dWeSs2FLQ4K0vRu)hNinq<> zxB&}a@4&JuyAAY5pH~=o(XWvBzSr z#5TCbWcvb_4`A=z?QS6*R~bYDN#4v&r+c};FprzQY-6+Q&lsSeWp3IW+8B-_RIc-!PxSN_guV`2G@q?{+zo=*w|Dg1^V& z1HM|tCGVtvmjm0lOrd)Q8nWvf8pO|aQ9>h>p!Q`Nl)UWvhN5EEH#|)3tE8y1zM-YM zW0#+m((Q7*1u2woZ!Z&L^eEmjMLaQxfh^NIF&KxENFwHmL44i>OZR>; z2z5rLP%)?>D+V>_i9wAJin*8BpvlXMK}E%iK@U?EgSH@YE02^j4>71eb7JrFDYsbuu%_u05|ic~J+GzSP47D?QcjLR+GFp^r;1)w7CtI63pQy(qYTB@sP zUKD_8Q-sx`MHh3m!6`y zvD5m=K@{u^n3vk1=4#jH9b$HYK4vj@FSG=ZWp`K7 zI}TKDN&7bKu&Nz{f~fKmX_xO1Ru+(BnB}C?DV5W{G1naz?g#WPw{|H7T*$|_EHRGF zg|S)I#!wXpExF)smfdq`(PJRX1$pm_8`QmbyT*9pFCE{51%C613``6m9y0M}ppcG7 z?rG^e`!m?SyRns{ac`n&kse3e7{4^Iakj1Fn^QPfB$_tkMlqOoj-AfdpR(q%w2BpT&J&p z%)0EL(BHVq>&%iH|DY9^Q%g}?1Fua#-{FuYEr0Dz?J>Ve_GgT+(JJH^#y^<76&8bdAEr_ymfJQ-KoZU72Z) zzeHGsIlt$%i4X-E0|n%4ffB}0DO;d~!`l3{Il8bFC@#ViC@xBgXkV&9o2wNl4lyfG zJj_*~cttZCW-geAKyhi`rrki=<=gd2(>32^%{8yjU!Y*;qHw$WiX}#gImO=H)#`DQ z->Bae=x9e6sxrAn-y1%yPyo?~?E&1IBl|1VNx;O6duq)AC?$vr$$;+T4m%hFD!u?a z8W=!@BVph7Gz)+0?NDZ^`x!%-rEX^oVU~6`V<@xK&5WVUQui{3FiU9X-J?mTAnClgJW>!b5h(oOL=knMvN;%Ge+E!sPr9^W8?7*?#`h`=aHWO_^Cf z{W(a=%!U>0mq^WCO1>WezWs&C{?Dem3zOra`}`88tT1|ayvVVfH+liE_a#nQXLTRX zbUTjrOPrFQ`x2+1C`uz(woceqR$$7+Uf|B**`^xzSXD?yppT(D+#Ke2p)*#-{w4C>fjYw$ML zC}&T;+!ibjD8bJQLb$Gyi9m^eFt?9*d;lN$#ROc1i-fUWV3jB|g>C{Ru>gssD0iJ_ z5^I|Hz1ucQU}}<%dYeYjXD`7mZro(GH|M6Ye;ajY8YN^mj1m&`wu>}E#FcxQ4Vt{{ zR*|A&H;NplPA*E(RBB4#j*ApoDc{Nz%6BP38601p&UF=cA$LI&(Aor3xk}QokBv1( z*_dAh4M#mTPH<2f^|3KpL)J$OaIof=88kYi&B`q)?^lyB|JG$?slHda(D z8#_!b8*4#?IW>?68*9q9GKKDqjnNt9yi)zY`G#f!=Yp_)KR|aE#eS3QXL{pvvzwW~ z)%d0<=Ue@<5}v?U0b+$tlrP)M3Ox?E=j^=yq_z>rp1HnuahnSd z3x9S|X$M`9T%z+fXyx8LrOIUfD@*zB?Z&ZJnCtrkf0A3fF?_TF8$CIM?;q(DXcj{L zQ=nyLv%3(N8H$*U;dU?R;tr(5Q0{T#3TNo`c!xhV?CWPVM*9t;MQ=WbBK-)44*b2_ z+lC5$RzDNP=s3HdiDH`R^)ni>{fq{^enumNV(w)&X!5fCjG|)u84pwKXKX>teyj%a z=w~#g>t{6lR-(|o^)selr$Lv_<{6yG0--`D4Bu~x;;QQ($(F3k+;N|E#@ z)C z85Uhw+0qK*%dl{=(RF7Rwo7O(!dpahQL=94UaCQxt6fNQh}oqyhq+x! zb48QIG#9*Mhkr}jw`pgN4rI|T-=To47e}~Ukgy5?`5vNklBR%rRS|G6zVDptcprsy zBF4=k%u}#&g@qs~~lYC!bjK>A~{8J1m6r203#d9C{{kp*Jg^d85{>d7pl_ z1#j^_m*f9vdQ?Az!*`i)OY%*FDtEPhBDgF*m4gc0AmbGr%$N7~Y3W@oXk#v)MUQ}k zgd8X#4J=TF-@j=xzbEB*-w_yy+kb=Hb7%>$j+MeqoYHgnI1HHJRu0sne>2eD*}?5d z^9@kf@$wdrFygW_oAHeuQlDSAA~)a+4NArfby2fYHqwYU|1k!`A0Dr?8;{xhdh$hB zUc(Wxc^05P@d*|P@LbgJ+LS3%6YpO%9A~g+Jv;sb-7wH1H^-V2=%@B;XS?@UJ|LBH zP#`K_cLEOJ6w?Cu7SqxPcU&agP1WB-E-B?ClKZ3?$|kbJwnomfGUoHV{FEfVj0>Fa zO$F;Vp9qp(G7JG~dU@ANx)|RG!^PX07Hba(W2HD>u+OONeqIG<^hUmfbHZ@YN=`*u@45<3-DT$i17-)`ps^}*ZpyRz-+ZGp?S zr>CN7H*z&b7wl6|*$MeR%A}W1^ah zG&@e@&W)K4;&T3aS$;5+d-E;fK}A!f7iN|v_!OR??5%;? z7+LjnFSJ3)&@O^njO-ey!`QBY+7e~c;EvsIc2c(hYTxu0C0D+Ev1|v#p~RiK$8U+{ zlAi_KSB+uB7|!uIF?_cn%*_b1MP|e}7U-~9BO9%pSRm}Xc~mytFrw#1D>pEj;WM8k zOEe7THbxA$C9)wohO`krhO|+(dE!FFSjcO?*kCfRaP2pm;0lDV{YG(@Y&`4he^H!3 zVG?b>HfYQVPbl{n`>qqqLzs+OJLeHo3f|6}yl^ zmy0R>uw6cp_RAZ3G3*<#SMBXx7#7#vajVI@>ZQ2%IM13BLl+sA?7oY?|{P#larh zDZ*IcOr>)ojQ#oucXYAyZz!+(q(ld?_~ZjmQ|BxOXzr7&NR1HR!<}<#3Q*^e`X8JV zLDyhV7aX)$IK>ps(HWo~K;OYC7LbQZ1g0vu1P=0=A4$xZWgrN1s`${{V*1ZpqW#ES^_~ZxXa0WxGvL= zp!9}hpGeBxs~QEFGenvn%rvQ~ghIXKY(=8-EF8)QJ7a`*qS=@uRlO4xs1TFwbV{XG&m_vgRemOnC zX@_0@i|~$TB+=D08?+06HjFpuvYm|)(zzGfpk!#*04+v#5zxcfzD-LlYkRhQcO1uL zCj|??O|E-T!jLt=2u8fQ#xdya?y?+*=N!hHUeV}k@h(v|P{iO_Ay&d7;H_Na70OY` z8uFzv#|{Ey42E7AJhiHUxTFJ0@a#5F%t4hTN>{8H%q$agrxM))TEHp(h4qJ_r7Jh!OF9;k(cSGY+( zl?-FPPb#1@#pUsw;p^o%Si@ritFi{q0+fO!^jei=Y+yOQ}dCXsj-*0f@DWoCwH5BjcVle;~A(VTai_b?ppoGAj;z(f+c7SV*r89vG8P8j zURl$;6}l{%$h%^0qXqFRKfaCvacM>PCk;3YMO32Ri^`SS>*9d8*?qxP;^0L$XH>V!x zn~z=;twW;+I&eIbw~)%GBbV9o?XDZW%e6N{tr(buhCu93>B5^Vgog6M8!S(hU~J^| zV0LmhlnbR8vtke3yYNQClzaLuCylWxlGtGg`7XS{HWq&mxhHF)30(CMO?q+@%gq>` z`Q>JUM~#zKZfeNNO$~Z-QzJxBx|i9Y$;--3Ma8a;CLE?#MN*2YijNYwjH!S7tOuS9an!mj+!8x6*?> zVE*1M^e`EeKlpn{hL~C4!Htr>l^!nf81)d09{Jpa>`IRYy_Ft~khLA+WL{>2CNI0x zqo~-G9*3!2>Cu9ys+E-cjtxF5xLsH;D(vuHVkTW zS2WOL;VSF_XlSNXN~lK<65`%4e2odLIpvMU-P;wm{=nrP*GSmkt|Z2`6R1ju%vl3% zH~17Ke(%~9Z|lPJ*0rlBb{Md-Ix|zS!SI{460+?|gI>GR2x&;}Wj1K?a_ve` zaqY@t>e`hQL|cml@@ZF+@~upvduvxQRCzi_|7C7fk(EPTKg1%{z*|*#_XAW6@r-&m z*cCGOJMi8Eus_07K%!O-zE+MUE-aJrEoOm>H$)h<3f}pE6-iMyl$nClAQ6R^L?M>+ zVi;6LaE#_wohq|_M>M#GCAw5xMrC`3MnjTC#bp>;P%hWXdLOj(P&_C#VcyO4JEnte zVv!mlZVpKk=l)(9BP)SR(RZ88;WRobHX z!N7$mE;d1O4wX%#Ct73_!w5#H&xn!;FJrQZni|2T1&D(yXS{eUKh&eXNCb0jkYQ4` zOpsBEtAYokTuFsDP>0F9#}JAnD1z+SY_aGcPLAM)*UWE#Sc&gWc|DD!P0 zq;GSd1WIoBIP<5VhK7ZRRL)!N|40`r^Ab#lP}VvVXl7J?^X7+q#2Bv-gy0BfW$RbR zDk3pq# zB#cYJaCy>DmX)fBiFhhI%dDz}WMnUAs&-I|tAYtP9fd=G7B6Xad~ZHBC@rmEHMTL->Qi z(qqR@AS!_=0`_g%ds|!U0-5$E>PSTS5z}mCiG962tu5`D?m+3bj$Yg*mBg)5EnVF` zL7b5aQ7vI_Jp&Fi`zAhhZ))jj%>>JuGtJE*%uPd>;ljjV@a=?1266QopF$WW8it$3 zZB+Z~yE4es;Dx*dg;1chn)hCz$21sh&j5p3Uijq-m%_K8pq(g%1HCL(Ss$+TV-*7y zG2|L+f{EWXXT3>le^=&`BSa1~lGsIeH1?t4|G4X6KN>iDg55ZvKy*MX&-N+!TWPlHeQ0IfndV0;hDG~0a4~2RMbsTpB8rU512t7*5!94?IVhIE z{anc$sPX4H*(pX;fSN&x6-cxi?}Spsaj@KaCLA225(`*N5L80uKro7Z9h__(z*$*p zMt<6{`Vuf$=P-PqM3p9iG=d>aII*M!gK*N%?@Fy~ezz#*!V2mtp@C#GzsN~8wzvd% z9a~XeE4wvUp@mXOa=n8L@fZneG+u30_qKHhYeRB-U2s)+HPnKFVH=E?V8jNaCK$EB zm5;{mtj_6*`9ISb#$_b9@Pk7$J=RI9xdpAPu^Ex-#``jv51H`&*eB z{{BhoI2;V)dfbGoa?EK>XV==3>B4=B6|MC>neCazj;4%ZGNta7|N7Za0N0AH)V}y} z@xz`kzFHTt4!-rzeQVhUxXUDV>5bj+EZ;1ljtyN?r#|)x1a_@`;#+X0of{DwpBg_N z-lh|>gPGnl%Kxa51#vKDaarIXLi=GhTy@c>iA@*G+BR5QU>3A5 zygqDhCFSrImM*U z{S+1vA?APslXqR%Q6~P8n>u2eNon)4X%fkjoPGFR+g|^MgvFi+hb6wemjwgxbsfXS z4||OB!Lz7isRR>>4MIc#@W?y({z))5B;sa7T-e)Kk9=>ZA|+4iCNcAyFk0*)cvo$O zbq(gZ&%gql5(l>T;}V3P`ofy6)Af0E*LnEnkPpVsyIcv!!L((pr>QQ?DseFJ9K55Z zk0#k3{pzCfz|@UPp_%(oRrV8ePw5_tg<;gAc#6RzD3dm7up zwFR&|;svUb7!LEWC9vBUKC(Nv1ym5yOAPm^ShE)f1bLwtp z$dc|juzLggYZ=t6>h#DQ9Uz4X}>EkaZ$jt0O2J z0NsoP>^QND+yS^O4(u)%@?$^DMwmL71u(CD7gk$KTT6Radfq&Zg!AfO!xCWGGcY@9 zBpian$_I3^`c`ZsPYEnr$pY_@fbv7AxTmvDHfWI+6fDGLCuiQ$@$M-Z!K#F(W|N$bRtz#DP5mh7~qPVwQ~*x4h`3kB8xH zBD2@mU4Q=1;2xJ}#1Ala+FaNbY;FKjefcuJZ5){yz_$vlUpraF6*;LKhSj=mAFMhf zdf)+EO2azwAMf~q1o^mp#`)=cC0MbkI`r6|Q^Wzrdkp@{Um<)j1}nTARtmrGB07+)k2D3)Ou=)F|FsB~>7VOi(*~(0mG|ONA6x$Zy z1`LJ%C<($&bhbYK^|SD>_FGCs*!y4 z;&>@V#VVLxPkr?FfBkWI7HZky6`0d6ZufAw#9d(PqhE$+neqd3(*ifc+eCTSOIgTf z1gL?T{lo_+45K(W0W&NDixmq9?0x)`a9;khq8{ASxF#LihA37zv)sT!3?Fl>n}VYO z#t$sz7N!KuhWWz-UzY%Ea<0}pd^PRzpgX|2U#6jJ@RM(kMOhnwpa1==3vg=ds$oZA z$a?~;%W=vNtO341A&+1$fmsKm<BF$k9iImqP;^XOvhGqCG9nAlJV^k+FWx1_okLRnqX21d*8QDZ8nzEhkie)c`aWE_?-s+y63(sv5W!C>g;Ex{S+@#Szz)( zLTXH9Y4}V$%Nw4naQf6|;V!bp*d3p8J^#l|A!0rWQDRFdBz%R-A98Ve?>(kvX6J2Uw&Kgl01IO~6Yb{|6hFl#0Dm4D#lr@t+sLs!IwU0DpP zi5`jSyGVI0u=ljM;XQN1-Y;JKC}MZQ)Wcka3BgQggat5@-s=B57sO>E z(gSc*e*o{+p4oNm5~q;iFH#chxUvwogRt|#qlo*X;J?y8=_=dbB^Q6?h3}CReG_4g zRjJ4nbIFB(smJD*rAJcAY8Xz6%n&CI{9XT0DKm5_re&+cth5 zi@{d|wy!460?Xix>sVqK`v943JWTsmz6-EAwsDu>fxw9!@PrqI zPao*ot?j@)gy-e2NNCH+?cP9$eGtNq}y}kv6sJC zI%^@ZSq-D&Zeh>p=#{ZIMj!@o@L;WY#GWC}rd=*FB0lmCfa0hU=64??YT6`Hj46eg zGalCT%7^|kxvXduDHDJJ41>`(l3^|o*}y7TzxqZIe|L~Y0FW#K%=P-J34yAeH>&z= ztCdH;|G~$0vzZD!_b=-ylJxET*=6@kJZ-E%KXfC&4A*zUy4)d;`s#?t%(HdZ=aLDV zVXn#(*z*=ms|~QB?F^Gzwt7i_6812Qxduj{hdD83{|xR1jf9s7wLSWw9yrD1qE)q(9tXg1#icNS;cO!StxWi8n!Um_t&X*@c)$Ku)fn=?!w0k@;P;IPf%6@ z=%mEkMs(w+j=%nKMV?`{A&)0*(<1Ng|)P+d-NyT&L92K@mK#v(!y5iSCp_slZof%eX!;h8Fn}X@7@+z z0%R*vTY!lHl}s6ip+tD)Q>^`}ed9*K0UVk6haY^Vb}xLder!u{)5fFldG9-oQ17Lz zCkX_4uLuTKlcs}}oq-K%*K&tmJO>Lz8 zSBguL11QM^$a^>b{cqp5$i>t|ZjNg|N>qvTtl1M-00+esUoA_>Jdq_c_3dN>fv(P@ z@I3w(>mEh0se)g9inFRk135(6PN*N%q zY0Lz8Sl~4w*9bJbdqe^ zGII8#pNBPR>G8{O5@gsi7{Kt#=1#?2BK&q|NA1~B3rHa*IhKZ%RE}}UUi|5t67nEm zAbFzu(!Fihw^9CG+3|x4J?7=*(Imos|vc9V@n_T+x`PZzxrfzZ#5$Kk|=+e)_VfB~#qz48j2q=ZN|(t&OZX~u@xF@79u zz}XqI#B;g*=CXtEHf)A97KZFo`tx_Dud|XI3=eB24K;J;te=AT{j-_Ta#sA2-+blL zZ$2n#NrZ7XU~O4Gr+FjX>tw9!FeJfTn4Aa1oIwn|_|u&H8J^HBscFe7%X8C6aR)=Z9=6}fzKBAZrE(@EH+ z{2^Jt7)F4UCM}4|$tH;_+1U=y)tj(RpP6!VN+SydxJh;+0|3&megpR9n-m3rW8(Pj zj?)VeWCgLtj?1IRe%cSuMhOhGH{& z-EimxQ3tSnIiNrSu#PYCLCGsWgiVg{1K(E%^ZK{fQF^itRv#Zrb_A?cmV>wNQZMWt z$_^5hKM@!~@)p66K?E)YMpP6r#ic#9E>b+@2iVpCT95EO@?&;syV@jv%y0i*Jbs(} zd9C#ZtBagvb}TktI?}R_H~|6)abZ9EE$4-2(X~1@#f@f}x4}J`2w!iU7y?L}jpBu^ zEHB|JGqeT~TRcNMq~k;6KGuIk-w@FCMuf z!RjSntb6G_y=KP?{uMCC`(OSDoCSTbSP}DK04x)k{5W4tPU$8M`2&GDaMr=F!Jhfo zuYQ$`3HZ(T#1*?voSSe+LcabyOnU2F*aD;A@Ey%AhVlSlhAYJzi9TQf45*)(0RY&f^b=tMxMT^7b2ztd^-+Jh2Zk`(`gHP4ut90ABlU4eU&_C!UTVeB+WlEroN0sFRUS^c`rIXxL4x5Oy8& z$f7ZrE*L;-_E3Wu~VZ&V6YA#m#$08vG36Uu<_2`JY+^Nu-(mUL;(|EcJU#gy#29Hbc(lFnOj1PTz_KRdDa48F>?YW z&a#OBI2@ZsjyeNVe5iuOAsqpmC&OYU0KTS!$pl!oy+_f9 zv)M`6`M*En2ye@K>-lX+e)J7>`iH9+r{vV%?EcC)rkDk@JaXSvT2K zfMjK11rDzzg3A9yC#yv>;^39buyxP|pTNx)vhUfm5@J6IV8T%))ipKMrzY$z+j!tW z7!j=cLknOjv%T`+-DD*JHvbM{Fov(tyjf=x;w7ueVZ$r0FI`M|*Op!lduu>Jf4hg2!NHbafK#MsMK4!OV{Dn~XrVH~=#i#sT}}b_oSe&5n=`G_6ODR=)CGi7)QhBOchzed1jVr{Bds z_PLSppMYV<#PJhg0t_huU~K^Ax7U(w86vZ^?w{NC$`2#(rIlTj!w_@kC@g`;e!v$4 z_8ez+7(~{PtLgrdqx5lJxAGi|M0zke(nLd zbua?_c?^b?LTplOa{$Unz_N95m7WMplsGM;1e~obx>F)9vb>R6SgfKB7{2ECIU+W* zQp-wydGbf2S;;GsEM_$fV4OJm#%&1A?UyLnd+A-Zj>(noUTe89-X$ZavL%)TnX;9g z*xD{7_ns&l;c_oAQ`Er%j8#rr2|ro8sAlqJd9r>7M}FhksL50Sr3ZXWy1KYT}?@vt!FKagX!?4rZK=PE0%kmMh+Kdr@Vn2Q70+H`{M6SZFqU!#a2%$F^)gSw zu(f*NV=5Ch4YGAFB3~ex!$cOgN>>X1E53^xXz}ZG3vaN-M zbMW+^!y99(y2`?6YhoR+QS;Z@o<_n8Xi$p5t4wl59xM}w*;H3{NE~?$kW~G9LEeODd0GJ5VFWxgL zam9Z4y~-V=4&cm{=BaQ-zWz}OlM$Z$$70yq8?~6^wb87phCK&h11|396wmh9C{`>$ zDI)=v7_bP26~PJtC?BiDtiE}!m31c2H?o?H^aN|5%EgMOaV*I(BXjz2dcxzMfcK)3 z`Mf{jx~1hxHOj;FFq3Mxrq9)xERnAc({8nYGz~hOqS@E-wSuX_?_L9YGP^ti*;z}OJop%Ddar1w5^BEY123` zy<)9A+#wEZ4%7LVbpTkpnWYZB_P#S_=RhK1KlMdeHLOVoEc8SPjdhXhH7m;8(=d&* zt7mSdh}b4cHu4qEykqPEI4tkzzQ*7pdic8<(qhIuSXWugL8TeIfQLS{R>`I#K@}hS zANm5GCT>Wo)o>;?ZH4{nH^^lIH^m_j0fIZlC4q{RohE2rW=Sh-3o!>N#=y+%D|+Im zz49x*b>`yo`d@uj!oPi>eO7xBizqMx&KM#lw&KkO z4k%__jXn%(jYPn{eC*M062W5TW(Kuu%6da^CNeD=aQxB)- z=igocrv`?N;}VQO8qV;8uzvN$BNEfAZ@sXSl9be$3$v|Np2A+W{?LfaV}sG5CFA|TCog{&R*s`SS;rjpm{WTXPH;7LwOs7!=)wuOj`p7F`nF84w6QrE zjyJ8T?&#?_l<8_|URU1H+9U}oT3R!>^;r*k@+WdmYF#8839gI8aj9VxNBHrD=u{nk z(OQ4DJBaf$hk7z?H9?%xtn8_8ZE4)veio-c5!~9{$itjC^`GK7Ckd^?!F3$$tiQM` z({lD4p2l#}s`Qu*h0-bii7x-aNqaIYlEmwP>RpfNWQ2U=(F*ny|MMsR$m;Hyva5Rq zY0bLeL%{IfzTw?Hqh9#S;2P4oUt%c_TP}#dRGh1DC?XeY5{VU?Jg|r&tq!JJ;+(A+ zNw~&Ei|6XufB)&{T-+MxyAIz17aHg(D;XGvn4fFc>fv~aBGwP=c?6V72<&rl@Mw8i z)|}AkVkv9Wr*A&?PyILl$G?1JpSI*472ht|6h>sdZtq_A@X}M?aenbE6z7rmg%@7- zKT7k#Y7gneq>b&H5mnnlp}Kod%aQfFCH)~4g%JtDKER*tEuIB?2aKkB@?*ytzqWWy zhBA(?0aU{rnFwp$v+sgUE{I=&1z>?4#Nnd^te}_`VA{D?1E-dH!8h ztr%Rpy781UtV@1Bujs(9Ig$zJkB2jY{Ujwet9|S1?_iK=#$06w7<>ai(M+b;Oz=9u zd2yW0r+{TJyQfyNd!~0;apkf~4hXbYGI0kgmsBDOu$^W(tlRyJ3H0%@%F3zwGxL_- zO?bfWZv{-{>+eoJ_8A7QQW`Gnc!+^2MSZ+QJx6l3GPWn9(97<*mQ97F8{Kip*web; z0AjDb6L$Bo*Z*M~8l?_A&z?$S`RYhq*1bzV9*wdedHIsQChoKmu3rMcHu8n6n z-!x&4DYJP{`|xKnkACLmzrH&6^)F7J)1iIAAHMU6qILi48y}LN!(QTi2jM#kQ!FvD zV=8;MA$*E?*HUINyHhMA$@I{VV9mN(2U~#1_D_d(ylUN*qKt|rB0N?SoW4qGocqlK zNhW1G2b78Na zNg#H4%lZ9BIMPX+BpwsbttF29%^I(BSc@RQtRN8qjtd1E$;L&sPkdQ|#q5ELY6Iub z!>ymxLILwX)hNVxLqxsFX(C+(+4%fc?El&oF zcV2i#!Au#u_=dzyzBzulb`-nD?G25P*sO7N9s2`7qd1lA3s#B`wkHOgms3y)wA4`G zR(ABc7!DH?EwFy^53pYRh&*UHdQ>w+cInk6ahvmCliDQB0v zssYxyqp$=niZex=*#4dFNm26w_$QY?`K~Q{=DJvTst$1mH1R5@o`93$Y!K)9pKTKl z?EUQ7Ui%)bB`z)j-y(Bph&`Z+{7QJIN|OC>Sono7qoNWQg!9{X!fKtX;vaqzIt>G0 zzW`t-0O;V5k>ee{;&-2hCE!W@XZ{8;t6-*e!zz-;us5CS(CWL4&{eM|>tnW@pzUvh z9{ZAn zJK(UWz1LoT7aVeEh&;d=udU$A9T2$@F0_eWrc}zc>|p7C_eJwE_*P$nwT|TgXaV|W zz~3cNq=e#qDGopR1F%k^>)v8!mSJiEyjE07Th&!FTORQ zVuwWZ!y&)0-KiiszK1d?FbY-z<{Zpe7yujOu+1bqV1qV(br3@#)lSCaPx(Ur6i@-f zJnB_SUXke0a7fb-3^SlOn;4)(U=@wt4hyjGdZTz?^Cbsh!e?Mn8~{@1M_v^lY+^7* zDKV~2qQ`_7%a;Q#&VhA2#H;}ie+||Im|y&5{YZ&|y^#b2bdpa2#V>wAJj*AOY0ga} zBQ0V2Eu&`0lgZ+E@2DX|JE$mXT!FxNiC~*_Q2g5W;lD=CJI3}gt5qItgQH@#Z-mxW zc>gYW2)kW;m-=?iXXevJQC^i&OfHotFMV$MW%!oV5a-b>66Hf(9jqdl{$9$({$5xD zEBRYMV?)g>66~R`z*0JCW@Tq?USwsNbI?rkSFi+_u=B~ zKW+jg!7zzC+yr-$vSE13h@E{W*}`@x`Sg|$at^(Gpzo@!#dyy z)MzDS%Fm55YLye`FTfM>+_sa8mytCA#Yb5geA{&x(oTSQ0wydXQIAUi_Qc7n#ed$` z#oTL%*gBD!tzg}7oPcLRdThzLZw^ltZyXNU9k3z^Yl`^i zZG>y?ih?`2c!|XR>c^|A_U;!y?6pS&u$4*@+q|ia4FE8CY^;OQk+NX!mc}g;mg}ok z#<3EYPT&j3U;<0Jm%_7fyjHdn0Z|)ZNb3>N#WP|ZOMdaG;S~P-Vduyy3PU1sIR>kh zd1~3n^W$d08ZqS@W4A2(%{OMi!yb3_E?DC(vB;#IRttQ9nl-RyPMt3y*b$gw37ub+ zWE&)&X3Vtgh4;z>*dDi)lB7(RS+fat@?U@W39S=^*qHWAXr5aE*Bs2+0uNyBBv>Q} zv)c{BrZ~QQ8SD{S0q|a^fh9oS)K!~q%vj3QtuRKCKmP7>EK+RDxs!03>1Bxl&wUxz z!+!yb6lNm8glcgo!kN7j))}p+k;=ur#3S?M`x{4S8`(6OqmpUYXq&C~hAbXH?6KM& zb8iiQum@%)%#%NyzLpe9jiy{;J&@_y-H`Y!C14zd;=&dCp8Tpm9EIG znU|^`IaVGm5GQqGfp&QkhOOeJeJ%V(Rd&Oa;fv0=$Ek(zrX(1KGp*_>?0QywStr?Q z$?CJqPQV59!%*IB9l^(`5$A|V6(gsQKe8{$63!>8%`LL7@_;Nm& z%?t%D!U?gS$>>@)7uneZ<^;nFltLR`{A-D06?$#4pPVePqQrU4y&GEIQ`Zk6zVBF5 zKl#iLq*AAgSnquBob?CHMR_;Kp%=&}6nxKrlyoa%tpQfT>?8L+@_CI|Auen((ZYRK zu1kcLi$4au@@`mrpZbjEMlv(@!{WkTI|ddj_c9Dg_THuu3 z=POIShm$0p7?_hyMQQ^xck?Pl`!5YyI3-HX}PBX{jikSXO;gKf3&l5N(xD0YvPFTZOvoaO8fC$KhJ)}JVbGc2NPJbiTb&6If7rpUqz zSi9$6KmRWA!X~4&!o2iezU&$dz}7Onq%<1|3q9`D55hh`f*fSY1XjUm7w@U^(-lhl zQ$1@Z)a@j>53tfV{rVjzN5WkQGZkjk=JGx`#CZhF(J2iFDUDJ)%uPS=Ibf1`!~$S0 za)ev<%xA~K3BokY)4btt51WB1e39&yM2 zYivz5J#1Wnn+sqOC$^Vc#=0;m510hAtLa5@;D3Je>jxLW4X=i^tR=uEv~=&x znTxdS6CV8`Vg&TP2&^Z&pN5%ul)}uxg_qw6e>aS_Yxn|8JO4T}5g@Y(q{b{eb4a{O z#5sGWPuPT*=f6#fJx8ksUPT8!RzDxIs1B-cz`J5ci3*CNHMP(EOP~jF6_j}`l8zh! zs9YY87*Pm+nw5Pn1B*;V_P67qgJur3r@m})?IT}D{5aBhZz&lNaEi5Gw0bAwuAiLG z+J63HurAMmb#uh^i*<0#;zkS}!19?7e~hmWyz&Fq?1|RBqu|uAg#e6Syc9VBN~eL) z&tj7mFIKR&CTN?0x4fkUwg5@6agmu_!*`&1N#9&DO*zcSu4S+RV~&l6y_Gc+sV^#m zGmPvro3A~ul4=ae=U|8PtvEV&ac2dB8(kC`V~K>0G%s3Jd9XInCBaUYW_P>uif4>C zO~fRim8s{ z@^l&nCSaU6o|u@5i2rRi37`IMY(E0+|K}gRD~YZ#Z*2ms1heX|#aw`J`GH5i1cyIz zK=c3`#kmUSBFtVdKlWXKW|&PB#(*9DPkc^%VxR1)KK^eX`-TMCYqyHW%tEwqh#{%S zL^Ob(e{<$@A0uba<}m^WK;~nrgU!XTGf#hZ1II!2?Mx5wB<(eXqLi4WFtM{o zU{5Sd!1g2p0=ro7buce|ymAhlei**PRQbeHlV1M|WlzMhOr#Oh9D@N|pi2afmask_ z{VJ>{{|Odg!V3(QRx)QmH{~D84S4*6vtS46y}FTj*hl!r1rlt6GhMu}XZ`;_d(Z{W zE(+}4KK}W?B6$R+F*V>E*;{L@Wk2aXf6H(Ffn0rvH2T9Azj-#+8Cwr;v;9TA$A^I< zjhCt(d+;V6Z-xOJKF*2~*zbI!;VU9%3k13sFb2RH1?+(7oI5W9XDm$dSZ&U~{@SY# zAnafRN6|+X!0LYK?_pP+*h@ZNKi4d}r{M(@1z@on$zlMFmcT&!xewkzWKS(?1TZPC zT*XlX;Dp9Uwj>X$aHv)8!BZwGW3oaX_5`L@DL*OE`L@@7SV|mE zNs5O*z7n41jD%pb5CSLWJpV!Q&7G0Ohu0B%8fFqq(c#}QQAcSfYgn=G5kO)8LXzPM&@G6JfZF7Ux$# z6c_eH=li!$e)@6=YY;%TaPZtG*037_u>4+WS$F1Ke*^LDWL6ZYYhV~QZF~Mc32lT! z4rE(WmM1ADm-g+bCS96Vm69u&?~SXlcB~4nUh&L=l51H!NY&gf{>et1Ahu2lRi$51CqS&+NUWS2qa?sdNdY^n_Za7*`{usz1q4|1I*B|iPWg-(@a$N+{omjJRd}XrBbJ9O zAix~{=2S2^8 z2%f+!SPoc0k82gQP|}^ASm^I9hgm}gG}lwV_6hh@*4)@d|7y~+ zbvG;kIeW8sVb7QYt4@L}4xqX&MluL&{y+ctVew6e!#Xhg`D|5(`d<9Y;_L8C+D0PG z>5i{&efTp)U43zc9Iyo~BT-0k09j-0p_-YIGgaqVwn%I)S+6SutFL1LY_b@j{)Nwq zXN5RN%rN}%PggzhaiX%k4pti_aNszsTE17{_3z!B`rIesHy;R?%zRrr#={9XwpF7obw$NA1Sf_x8HEl@KEw^@JGyi{vQ#1oc*H%mT4>uhXC5s{IBnP zcPBzbnN`u2h6VWjN8eLgt@S@A`pX|gGKZ=bvPgjal&a(_{*Z$-fYCq~?;1E&;w@2p z5!%ayqZof0<{Hc`5I~ruKfVCgTA1ldyhgfpFwc_o%=HpW>cX-!To%vc_zS6R))g?=|npN*rxkbHLT~@QK-mZG@ zy#kq#1PFmZGC+nTKmvp?2@pyW2(uQBO*0U%X|{oxNt>0-O5U2k;QfB*+d5Yg&dPf$ z?`6GN&tAW;>~HV0&)(nn?S1Y&);SmK%q$pCM#J4)fk!JQrxqGMdrIsp6C%Nb%Gu)^ zkBA}XqvzcXuRpB)ZOaNT14U^gQUk8Ep{91n)evSi%Mhp~@l~(ioe--Uh8A2=-AWf8 z+mPB{zH{tc)Lbc7Zs!V7X+U2C!wYkpn>|%aP?c}#PN0V~XYgiKV4-qD-nQ3I{pseL zpqr%d2d5YoJ9th^x z5);pWd$5P`jdE~+u>p4fR4IP6Sq$wWEyL<#3ZY zA|;Mz98?IZ^&eUht8gE>VQa4?hD~+YOV^8!{^t3|U^vYT0Jw1hT<$uKa!A9V;~+I! zsqBmYn4`Lq2l#&C(*$gMh-nC1dI+qEr#2<__tP^G>UxsIv6z(uvj+>C`k0IE z!Miu3w<9yc^I-wlXsDzzqjeSv6NgvRY!IM=Vukvj_i!JtJj+ujnZbZ85p)%=CxDt2 zv~DxgihTkc&08;se(`2!DC%;ZY+!3gdBgD(p*E@3_)PslmgG@9<&| zWY%?Cx8J)%3LmJ>r$*0lUj?Q>zkISGxCe6bbrrwCSd_SUo7LtX*M_0 z=-YvX#7}OA1X4hLqJpQ+fX#mL9q>vqGTws7NM2t8^>QD*=U8D}azI7&>yN4Q*IRnk zWM|i;r{IRi51)WBzy88KrPJL~U8NQQv#6U}25=ITLcg$X%mfBRx;Ym>ob9NL7Q>aF z1rDw@txKVgdk@g!2{tng7T-O;t(LL60CK8aBh2Zjaj*$c2}s~Bq71?d)GEd4YLUx4 z8kp-6dGUUc!jFhJ1)&@?>9x?*y&z_;UFKV@6#o)WS>(zY3fo)HC6^C6ygi_D#Qqr* zO}j^Q7Rn?D7zVX>M>HiYMyXvE2CvA9F3yVQ20H%m)V&a`NnoT7kbvV%I2JbAJ}Tu= z<_eoQGd0vHpf!WI>W-&_F-nvJAaw?4=f4Uj@aGbkSYbAdbngB#%C+0{dR>X&^`AKk zbc1Z1O~FU^@NzV6o;LMzB?Fei>}J-_7Q1%l_XTw^%fdj_bsWNtb-Q4s z(u;yQg@ki=gEQZ2;=%e=vgP@;^<{H+$uZYze;FIpKm6uBC|f@JGPsUk-n|CBs%o)x zAOgzqGlAS01fP8yvLRA0LpcU|?HRDZe%;J@ae|C~d;-`n9|p^62Q$3=JUG{q;OuZ7 zS7GPS`(NQ;fzT5iB$r?&s2ky^Gxg%Lb9WnstN5hnac3&SGU-9!hTs z0(4Csi1O7(!6Ji`4Q^$0A7E?Q&}Q0Qb?IwwJvXSXQm9~_3%Gv*5q@ACFOSq-#g`4` z3aWG#7uq+HQI_R7z)X-+Y~`7RV6MR~z`=EhD0X4~y28ylpM5h<8<+8jK^w z?>zgf7xZ>HCsj+a_%*)$I5f3YL7QMqlg6^ZYwZCaey118<@;5ly~*=$ft+i=T)n_1 zl4HQvLJbM_`b$5iuNFDuj0Vq{I!G_BU`}obWSE#5>gZ^+H+Gz6hsE0eRzU&O4v~=$ zox5{UM|;qU^|(|9c3O&bgB|`Kx-rFk-17Jn@1P}9yxhJ?EHwQz4t)|hEhDp9;AX}y!a4DbQDyU z2nH}5%sXKEjeEhF?i+S1-Lu2W#!)aGqg)(1LYmKMr{~u6>Q8;ZXCspI+P#WZd!PiC z8gH;T0em-b{`@nC1aSyn1Wb}&fR1}JWJQ3_h zux%;S{mu zTSD0aRe_kEI_%3_+-z?WTY?(>zEqQ{ZmwRycY&LW4tlaba%aUJkXfJ`q4;0C)q@L~ z9d?6WeF2P%8d%y&-714Ds@Yi(3-~cz)0G(&1IIF}>#W(SX-()`mNq4+|_7l0YFA}YAbD{eo6)q?I;dNW*#GZ2{tnc8~_-}(9PANwZCXSjx#K)|&-z_kDE zw-h?O$R(tMxf-yNN(XVx#erO>!FKw=02MoC5Swo0fL(m@?H8?(e}0A@atD=pjfQeh z3{}&3?Q5&eD0+jEL5D!RaP)wH<34?I-CtY zqO)tWb}Q(Whs?R%6DW@Qf^l`1FbI=AqZ}B(E8!8)P|z4Xu46H3p(rls(>u83*D*=d znfgvZkK8j>PQkAZOu)|%f-GJ0Vz6!FV5fDPD4q~Iptrxcw<4C^U3wX;6EqPzTEh+m zjx(XmumcPEU_~m_YI!g6kao`1R#(hGZGv=sbYJX_%e-EMQrg%+uL-P9ar8?obDrT8 zc*mCV5GHF=+I!zEfh^*NYXD7yycNx;A)v^RH(0=|pvpNOBJd3p`Nmfv%R%Xf`^{#? z2so4s#))3%8F<^CCvN2j>iLqT>%XVTX0r5KGaT<}+V_ekKDyf^me0MSDI<%oXv(s5 zqyGQ?E1K|9sDn=tN1JZEqDgWAJTFaG_bNAD(ZscKW?g*3Yn$N4E1KX3UUL8PyPd>Q zf8#rr{>H;G2K8|uN`|wSGpId1do9p!yrPL$=-3;tXyQVzmgKncil!T{Xp&5*5^>`d zP2vZBmEkAuzwaxWvQ6rvoc4;QY`#Y5I)tBmh|a`EOww*WUk#dRGDcJG+W3m5zeX8W zM<4oe2hM3WWky>vERKFrZ^7%8uGijT&b+RjZ7rtjoXcjqetQefXU40RaPBO=$_X+% zGdnudj5+c3PnlVmFLaL8O5GT3!+TTtYNl))tF=d67G5!x1-ELibHXufZ#AoPno%|# zI6r;HK5x+faUbl<&HuOktG}WNZvi{_<;oOoHD=%ixati}+1XimUDN-{+iEV{3<`g?K87|Tiu@VJ%ZviZ>7wD3P6CmiP9=1;r_#wQmcZl)$WrKi~eH9e=2~yu$==?m8HN@V9S@+Vd1V&%QHwY7|0y++2D3 zmG8?z`Rc?{;@u*F_M@&HRt|5;@r9P-{)k7G=1Vi34~a&v1KJHHH}--OnXmDndiz%8CcUs(+w4`j z2*p|5vGLhLLHpnJXperVaqVEWAxvEz7axRLEX6Je4x^EAj10-O)2VGvC%i6v56ZSn zIluGtheU-;hYa~EhjSEeJSa9qeWz9FooZa~gSiqE`QC%uhb=W7t^BmZAp?yGV04pF z%E|Bkvnbko%c@qF7+k?B1dlxZ-p?3VfWgZWb!`OF)vHNLpXXs>D!hE3UY7`s?fdMD z7atbu-1zA{x`oSq-oHbPX*G3pSWOuiXD&!Qcb6z!2m+Ov^C&s)*U{lzXdT_nUH$3o zoZCQh5*RQs-n}mjVilgy;~IK`gLEWZ(A*T0g0Ww$Vj2J~Ak|`$PAHq*{L|O}$+)9Jso{t=XxdZi<}GONew(W_{3Mt_EzU-i(y!jbml-RzY6fQLkVi&C;+Tcdu@T!I9URg@{a}EecW)X7uQrzVF)Um;Dsfh!0-nlS$CDVAiI8JsJ5tecV*d|e z4ziv;>uBxVaD)bi5AQOa9aQ04E|R0cs{>DQ{4t=2b+2wl3uyHPn**sutUY6d;`#4@ zWi=IbK>!gv4B)<98&?Bv8=Ml8@D%!pi!1q^uZx9F@X>y5TFQ*eXLo&e_h+|vgq&qk zM}pXhF@FDXut3l&4~?FMNQ!46aT`n!TP?B&qGzpntz}K6zL*ywoO$55l)*h?J@bF_ zm2W_EjWxuT(Cs{UjImw^?ZpWu&tABPp|nPJ{>!uADFfQOed%w3vv)i9{lo0i3&ivQ zhFJ!9B#;F<3>uGQ5+?<4*~DB@4uXFEo67C|b(OW%#=#_i7=bp9HgFKE1hmP`{`|dk z;9iU{7yzTH!mNS{0~JO6xCP*W5%t`II& z9V;a@ZYcP2P`M*wHiZ_`2|6x5ZB64g0&vqkfC7|5dbmbU?0}`x2V6}a7a~B)zUHSB<|Mt?I+zaAI=)g4X z|8(d4)d-F<%Tzq1}$^7{|*tw5So>cfiaL&b2 z)UJu4qSLd-JisAProdN)7*n6x1=DP!3WGL1XV#@%k)c|XPEZFpnT}8y8L8{ zQ?Ke4MV?8A&+mWuV-@x)&Oor$N{<4}CJt{q+3?Fp>3>hgWEnIG;v(4s4RV(TENvpw z=7XSc?-8hV#8vJvzI_*pbQ7?Wv3*iBSN0hTii-)dX7G%STom&lZf<=b#@LlC4n)x+ z61=u7Wrz!mF5l>U>p=)}8W_MdcjRA<3v*h)sYa;4DV*Pa((wgP^Oo|_O(M(vr-Q&1Z~UQyRxf&jQg8Jt+o5m?)d0=L!FgZsLH zg@FF`Uv6K4*o!(84z;R0Kb(eZzfqy^V9^HVGuRFJwS4m-a%%AEw2w z1V>`>{40NWJ`rrcf&MdQrOQ;wjK9C<(OQ#DH2s%Uoyxb8rz< z(NV0k06G{nU_^VPC1+Y3B$m=E4=^n_l&iOh z34D&DIX%_FE0Idc0;ubSbPs(TX08j5=9cLiLf1Nh0*-_2I=-Wx6XS#huRcA%G_7)Y zGBHIt7-sh9$iNIE7u3`?SQmXf1Jbc7TH-R~J2wyTEWjaZV*XD%5iEzr$~dLU)>`LgLTrxn#Z^s^RL>U8%a}= ziw^`xT?h(@m`LU%eKvN$+nE8{j}CKChZnh#w}OD`l=zW;QNgtrK0`+87G3FFUu0x` zdrQFUL7&{l^{Wb7v;Zn9uYI9S$_)`rsG`d^Z$XsMSpibPz69K#K300YHwtQ(k8m`B zF{ilDc}rb8r7q&>NrfAwalK#vIURC*6M1`678 zSI1{EP1ObOG*srUf#t%Ac<_GO0OlPJ1O_O3K@6kv2sD5@A8-N`wb_-JOJDjp?Y^T` z)xvhU0J>&?XwxqWJH zvg^$Q875{?bM2HnH$ApU1a+;`i|H1yGavy|gu4pR3fgM*k;1l#a|W0m0;hV06(~1@ zb#f!~`sHn6GM*`5!m*2>4}S*E(si+Jm|EfSPOWqT5Gg`kP|~tc%q_`x%6;e7BTyML zfKd(=by|e!!~5)xyxx583p<=0(8*=b`2rW80b{s${7yPpyZf5*7@Mqv0G^wvRoygk zGy{@J!j+c^;tsYk!VKvG3AiBCXs+I=TRS*(pmg`WG|=hZI#48~s<-{>L6mgx_|z%odkdfgX#iIevfN*~def@|MO;{E`H9jmN_ zm(pLX*W^7NaJTwpi_ zv-zyji%=ZfwPku@C4YMmwrOc#(c6VI`lxWiK>O9R zbzZIZf-bRmiG{(S`*p-~El&+`Cp`ea-ibkP*v^bI&U;!0v&sFHE_x?qxT2p(_I%P7Yz&<`!y%|D(MPAYLQxtA0TCj) zMF`(?g7mh7@et*FsY((7J__1uil5?8)D?tt$T5QnUcD2Ny$D=%4a$H`O8I@@7j7!jK|BaJd>kzL z@{hn9KpCUj`@0yP)66oJ0sbl@+%sX*aRyqht$kfLK*``@X5ZRlhEr-Ss*{c;S2GLM zjJSQh{V*7ZFv!k;h6Rx&BEnw#E|iYSiCA?|*PK-7oJ-fS;#SlSVd?*;8I>4;f!J%gK&hsy!w4xxe3xR zR@Xqk0UU|b?hExI&fgU~76nU_XYyN*G&-G>HsJA0mOQ!zP@nb^Thdt+SzunB@iPW06NB%12w*zD`@rB@mEr^0QZ&iJio)GK6EM#VqzgjZNDs{|Grc*8% zComlW=I#NeVhjz?J|07=uEki+^Viml&i0K)^RP^I{q93x9C8#_H|HdnUWE)j=EZJ% zbSspSZLmUPP*fzOG3toX#m;_~q9d62yvzu+Z8D^Qg+SPdNkXT@%rG?Izc7U)7A6Q_~8@b91KdAb^q5hBi~&IJK%h ztjkR42UUcOabvGa21^39CiNv~uP$Xo^XTFUJFj&-X^*|z-5Rypl*9547{H9!prl7z%QDwvKX$A+3dJJ>Qa8Zq)8_#5&QDav*ol{E zz#DW}>jTQ^W7_YcR56~1o9WFcPSUj)45(Gdbd9L8h@EEbkEgW1PJ^Z7wSVE>bB1H! z%G0(>NP+sGvJ=t4-5~DlY7WO&%fvc58rLH7S$ zV))Tf$DjWFwP(dLhO_(ot;tiflS>Pxsp-`Dp^>FY`@B3LhCdD*!k^3XPYL%uGG>fU z&A`u&nvD2kNRu%mTYp|G%aDF%acHU~+Gt3xTC`7&4HQq0Ob)SFyf82{y@R6Y*2B*Wd!apTHUmpI$iPoBfD;WC8bI8vi$A@IMYeHY<0paW zzu^#d62IM(pgUk(gw9zD#Dc2*tNfK3n^YBB)r>+VXxDb*Q8BuL*JI$uqhdE66_ZS; z5^>{EG4TVxGjNmnJ3lIxtvKsKFV}J?%MvAN152iF75WS+wWhJyX_9j-S)Ka z)vs6HJ(lhMQrm;}-DCb9a(7%eq$5B6nlE-C%DrWxNmn&1W4PWjYkBXU1 zmj8`M#TElT{08=wx9*4?2=A1=#>XnsgP)jqM`4m*dj*BM)^PQixK8Izezx)E0VO4g zQWtZ$n?*AiZxpF}P@w@~-ucpiU&T+x)wF_m?`K(WcMA;;1(vLQC`#@fK+dVx8kZjV4q>ynD<9Nw6nPwQ_8ymmKdUd9;%-5}l_ z*=gjBI3Uqa4N%=Cje%|a^6i0vHIBPx-bFklVk4sPNG3l{*W1;7tk>?@@>qf)+#Byh zR*Ad&=Dx{MR0#6cqx(yt`VL5$_k!4a63Dek-Id~frE6avo@Em4i&am#BVSMl&|Ut) zJl`xo{I^{A61ad-2Ri7pe8c8Dx3WP(V={PBhS37S+eCu(Sgs=Nt(-yI&^l8hrGjzb zmzg&nA_wXwM4p0BZn=7Ud{0DE;@L*}ZGaKD{L|I!YRFM~qzZHr1eiG888tAd(_$7L z#&z$g+xLU^L#T=az4?!+-A$0IjbN|b0w$PW&{ZfG?_*m*(<0}uL%XksQgby^FC&B< z3y!F7d2~vxm>3j+3l||fVrV=#g25;-V3InBj{47+xn%h5t3BiGuRs87o5iJP;o)46 z^z;dkfE{Y@T0H;5z@B0|<9YlHZ*Ky2x0&j>@HM{`=S_JP!*fX3bOw-4V24&;Lt zMdjwSJtewdw#e6RTQabF<;ooP6g{E+^>9o){kFidIkuB(PQ6<@C-;o@Q{$>b6dd8$ z^FA&H#t+2k)y{zhs*o;lh6YvxJT1`bz3iRCtnJKo>q+&d?*WR_zIJf><}70q0BSma zTSez7ZA}NG2()B2m~Jm^9^dto^xt8w5#}6N}cfWq(mrcO+a(=lpk zF#Ts+Vj+S+ZT&O?+(&_|ymX%yYff}o)CslEa>Qkz23`v48FXMkL>xp$V{4j}YJ1{- zcmExyGH1e2HkQ}!`VXbKLC;=w{W#N0FK>eSIfyDygW6Dvp#z>Ck=;%rK1d!kQS_So_Q32Dg)9F^yG=BD{GEvVfx< z%;Y)Vyv<$~cvwZ66LHFQ0uS*mt)hoiC#rY<4p&P$tXWsSG83DZ1#R9q3J!F&$J@Ck z-0UUm5K*O-#`Cv9x%?Hdqsb?k^(`P%cRrotQ+^m6C_c`sup5&V=%7o0njp?qz#K?v zc5DDBjurZ-m5IXc-=#!y^g2F%87imAhRi$8ss=PZ2L_}hgsUjoSv48P80Eh8&r&J=d@6=f10DT6O zgFH{?m#b7R8|8G%If5ooc)vHefJXw8<8waCqJ~ve`7#lKvJ@s8;Q8j4nAiZU zd%)Ijo#x;Qu^6nPb%cHXZWyr@@$r>f^OaR~R@{V9Nj&#}3jPnX08AH_%R4o6?KY6=v|j9a5SMQjeQjgz+&%1%!|DZ{<_4V)Qo9y3U=GCHN+q-y$Etbi zd7mgA+XDLIo!{<|D)0pp7_-i$j&<7hqb#rdfR8= z575A#9eEtq#LFuXZ+BCn^x=TDzr|+~s6=d*R^Y3m+2aSQ9NB#GxMN04&0{PUs0BNG z`8F>Umq7#NHQ<1&h(n!D4bVdBN``n%?c>?X(wTtdAj&{qQ8-R6nySE9W*6-= z3(RU3D0!di*x8|5^67F9P)ug~NeG^(IucBW!&_YWNuas{u(|9?@Z}SM;QpYc4ehNV zRZw-j{x}1pQHx7sr^k0vB<8cTkF;_1zn%R-b-ULh&?!^F)VzT(s z9dACuLA6dY`aKmY2aoh{+0TGHy;hhvM(vX#6o#c0#E=1#gGzxu9++@+hA9CAkJbjv zg_`H+6d;o$oCF!GJ;4pk?nO|2U~f|lBgOhvMh}Rf^XX-?l*@tG1T{8kh0Drp>bxw+=6Z`=Xn`Pu4;gR1(?g@ z+zHg$+=A-Kg>YzIEhFeme1J;@m@D2EnN?UcD+GHpIqY zsznTKXI4$-nAE=WRY6;Iw-_`I~N&j5dAi-Eh)avOWxr z=@A?o9M(1jGe*BVdwFZgG^gk{bp1U9tjI;J|1_PoCy*O2X z0|uD6)ikjez=h*U7JY^h%!*r)lJNY!1)fLHAfji!-MS^J6+-*_tc;j$8}zGRTCQQx z+CihBn)I67#X=~15ug|7v-pKxDWBBMP)_WWw?U|MhV}+Mo$k@r_v@$bDu8M{>>A84 z^p}@r8%|Z^nd!Q16@=izqz)9b2bbKqL*@EyFo_N6SD%LveDF^qO+19TNB5|a(Q5;a zQ4gT_@v~r;9|hB~y~-=V9Aj||l+p}VUCeI!Sz*XhYZE$M>{tstOK{L|&?$FUF2U*e zKRo*rNMIIJSI;eJ`Blfc7NoNBy%*P@CFFBtZ+>5l;LIS#GFP`;xJ}gfZjt#A+^YbK zh`pTM4d=Z}*TnC&b3^QG;&F9MF2S0bMj;2KIxB;kzC#~;9_&0X5p2N)jJrIbHlA*% zT|6v$2aJ26U@laS-i;E%puP@wj%jGBHv=2CjcJ>BveY=VJdCsjy?T5-A zdK(vuS=T$c(?m+~G=$50_v>|YmX7R5?G;ThoqM)iuVDTGgY17;t*r)nt0rKQsqNnh zMgq!;MQRT`UH!&zS3kb!^hWQMr@#T`a$mUUW3fm7 zu}7)xm8l18fVfP6t3LwEm;l@J=rBsLOxV+>nESw-h!m#kuODRsv4Z0QN2pv5n}}RT;=(Wny7==xJMzw_ho^3Xz!7AOb}Nzo7OG4#iKmuFRf+zVgmXx}{6BnVJv3_r~oreUU04Dw0y^ z4Y6_Nc)C~orpr2X=Rq*;9DSgu`bEx*xk{%8D*r+SK4x42HUzAoVfqCq{PZPGLC_Ad zRt>f#<+Y*6&t4Q2y!S8|Gp=N!##yZYcE>#xqJeW&C@*pk6?8+?Z_P7Ez=Dbldve-0 zIYXZ<-ad5c0cjWBQpDM2)3dE3apq%f98v0OPZ-2;kQ(!Vk54|;0Z{%t=d5!3&F`@h z_dB44rvqF#R!c7TT|rtdGpa*NIk7OM7-jmm{If5LaYNgB>Nx~8kITOyLi{%h&;xAmg;1HZ{``sO)1Z z8EpQ_KY|~?QctIDu|QKLoI24$H{D3rsigAc)n{C7cx)dEiUhs)I2fS4QS7~&pf&a7fpa`e2d+Co5CqR= z^Qw0GKg7y9o^7YHGXoQy!s~zTYxqKLrv@UH!tb z_TC{B#`4z~7agxX>DAkqLkEm`#_3iDBsN5?AKiMIz7p^Q98kP+47|1c-|o9d4B$QM zpQ-g1iIQ@W@@|;9;VeVTydK?*0#}6;CJ2!50aGnR3c?#l{Pz|we+{J#rV8M0s%5|< zr1Z)&!>J$q5W2R3FUR*dt6rr#7=m%12Th6zoO9Y{R?cxJ5NJQ=#f>;4<@DK_)?U4W z$v)eaG@TAvCD!)NMktGAQlekXpnx&v0F(EX7nK45_*xjg_>XT=lPa_4Z*54G8tf2C zQ`)a+w#C&gW^;qh2C=WBAg(8t-?)?e^&;2Z=P`Q-w(#LCy@pd*Z_xJf1dfawax91| z$C3)x`J1O6O{Xt@^(Yt<{FOU4w%JUu`o||9u%&(Sgxa}3en8CJYB(yO6{I~H38^wK zF{N#qYJ~O{LMT8X==TpjO)(H?XmcHgqP@ew9`yE)p=Vrth{K2j8JPDaYLDQ0OCoVQ z&to1>&CFM$^nUfbStu3Pfwg4?fCIa4YB-vq(k8QBD!7{HH-I&~ws1Lh zfI>Nvx4*9cHrXJGYNv7!rLzJV2elPKpnZBT*vZi&;J|Dadpt|cyW{O&M4x+l zRE^%dp0U@S!=L2{S|b@5K>PX<#jUB=I0LROM^XvCB-*DxQuCJLO#B&MP=KS0ZXf(i z)V-X+S6%(#u18SNes5TB!A0?xU_-@JPyzTtu(UC_<`<+F7OwQz*)5>P-XNvJ6M1Sd zC_5`xK=tE(DM*0e90Bb`mdtn^LAnOT)3z$ba1NhN6RbG;g~4;d6MW&5homwwovzc7 z-`qYeg>(^2W0&FHPyYe3V9mx}>$z0`+Jk(MM+?}6njhmI>BQMPf#%l0_F~aZFP;CE zt}35~+r?sJBDrL8F(?B>LWp5CM~dN5*2o@uSC|=t}%X6VPffc>-(az z0+`{23*dF<{cnP;gSems4*!07-&-%{_0_?=!hW@1r;3K+1uED9+l$>NST8L*fdCKCHpq3%AO`TZD6npZp^yvJ zu)e;q1-TbF%_=u|EN~>+2fUamFcFnnB*x8J z#fLG~(wTTEdS&SruZWS(b#%|4AAX)&sB)OJQK8UYn=F>{uuT85e&}vS9+V9Vk(#}n z`;d+ck1#C+On+t|kisk+PIk>Jlk#5fMGxhJ+&Z_!&XajDxXgWe`cJ?3Ik*Z>97hh& z1%gfpODq@{XyGZavg6^-Cu86H5!5`E0hL40M!1+b%(8#~>bD?bK-?dB#qR(C?Ci9t z41{vcCjG_y&Pdn-=W^k3XJbBo8KTxB^3p?`a~6o#thMIyIS9Yp7U#j@vy29E2LC~2fN*C^@Eb%DX}B z6V=D_TF#S5=8%p<)zHe=}J1 z<5ss&ds!SiU>vweC`wL@LtJ}+Q8d5yi^%zpZiB|Y0B*zqZGoFo;+|2s$t`m8I**Q7 z_WUW}Uwd?HIKybl&T{|_8A{1%gc-2eGC4Lr^p<6 znwKUia)94>ii|G0@f4Z1nK(WGNtW9G*deSF7tZ=jS+H%-z_=4(iMX<5kaX=8VPz)Rj5w>MbZQ z9QyP}1u3fI^wnILbev;@On#3Qtmbks06*pkst;;6o+7*P6q)3N`tEk)DKc>fZ_02P z{+*v9+xr!ETPA*33_nDcjk3)a zooU1mj42;cx7zSyW3Xpi@bn#jbPRP_W(x?%nXOWXPv=$>bp9|Ie?$#GIJVoz4f*-} z`Tx`>`cq`9^FzZ1y2XIEf~bGd=4}4<9qj6#2@ikrU-a~@318R_nliKSJ#BxhtSo#n zJz%nZu9XGvB-!7}nwj-Elf`&&5LPSJ!GQy9_|3nACiB4qZKjORo3MWNA85xTYrfgg+_M0pj#)GXaSqFV@vswM@wRPR~$ literal 0 HcmV?d00001 diff --git a/code/pdf/zi.zsh.pdf b/code/pdf/zi.zsh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..17a6daf5a46ef3ff06ddf430b957f5c478219294 GIT binary patch literal 412082 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

    YKgSIj{KMZ)ouetQ@} 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/zsh/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/zsh/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/zsh/zsh/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + +

    +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/zsh/zsh/Zsh-Plugin-Standard.html b/zsh/zsh/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/zsh/zsh/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file From 9f7bd2058f67ece68d9c7cfefe873d35b6dd476d Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Mon, 3 Jan 2022 07:06:43 +0000 Subject: [PATCH 068/470] clean --- Makefile | 28 - code/asciidoc/additional.zsh.adoc | 165 - code/asciidoc/autoload.zsh.adoc | 1520 ------ code/asciidoc/install.zsh.adoc | 746 --- code/asciidoc/side.zsh.adoc | 300 -- code/asciidoc/zi.zsh.adoc | 1583 ------ code/html/additional.zsh.html | 2735 ----------- code/html/autoload.zsh.html | 5041 -------------------- code/html/install.zsh.html | 3648 -------------- code/html/side.zsh.html | 2932 ------------ code/html/zi.zsh.html | 4886 ------------------- code/pdf/additional.zsh.pdf | Bin 99114 -> 0 bytes code/pdf/autoload.zsh.pdf | Bin 440338 -> 0 bytes code/pdf/install.zsh.pdf | Bin 242957 -> 0 bytes code/pdf/side.zsh.pdf | Bin 135509 -> 0 bytes code/pdf/zi.zsh.pdf | Bin 412082 -> 0 bytes zsdoc/Makefile | 78 - zsdoc/README.md | 50 - zsdoc/asciidoc/additional.zsh.adoc | 165 - zsdoc/asciidoc/autoload.zsh.adoc | 1520 ------ zsdoc/asciidoc/install.zsh.adoc | 746 --- zsdoc/asciidoc/side.zsh.adoc | 300 -- zsdoc/asciidoc/zi.zsh.adoc | 1583 ------ zsdoc/html/additional.zsh.html | 2735 ----------- zsdoc/html/autoload.zsh.html | 5041 -------------------- zsdoc/html/install.zsh.html | 3648 -------------- zsdoc/html/side.zsh.html | 2932 ------------ zsdoc/html/zi.zsh.html | 4886 ------------------- zsdoc/pdf/additional.zsh.pdf | Bin 99114 -> 0 bytes zsdoc/pdf/autoload.zsh.pdf | Bin 440338 -> 0 bytes zsdoc/pdf/install.zsh.pdf | Bin 242957 -> 0 bytes zsdoc/pdf/side.zsh.pdf | Bin 135509 -> 0 bytes zsdoc/pdf/zi.zsh.pdf | Bin 412082 -> 0 bytes zsh/Zsh-Native-Scripting-Handbook.html | 1307 ----- zsh/Zsh-Plugin-Standard.html | 1785 ------- zsh/zsh/Zsh-Native-Scripting-Handbook.html | 1307 ----- zsh/zsh/Zsh-Plugin-Standard.html | 1785 ------- 37 files changed, 53452 deletions(-) delete mode 100644 Makefile delete mode 100644 code/asciidoc/additional.zsh.adoc delete mode 100644 code/asciidoc/autoload.zsh.adoc delete mode 100644 code/asciidoc/install.zsh.adoc delete mode 100644 code/asciidoc/side.zsh.adoc delete mode 100644 code/asciidoc/zi.zsh.adoc delete mode 100644 code/html/additional.zsh.html delete mode 100644 code/html/autoload.zsh.html delete mode 100644 code/html/install.zsh.html delete mode 100644 code/html/side.zsh.html delete mode 100644 code/html/zi.zsh.html delete mode 100644 code/pdf/additional.zsh.pdf delete mode 100644 code/pdf/autoload.zsh.pdf delete mode 100644 code/pdf/install.zsh.pdf delete mode 100644 code/pdf/side.zsh.pdf delete mode 100644 code/pdf/zi.zsh.pdf delete mode 100644 zsdoc/Makefile delete mode 100644 zsdoc/README.md delete mode 100644 zsdoc/asciidoc/additional.zsh.adoc delete mode 100644 zsdoc/asciidoc/autoload.zsh.adoc delete mode 100644 zsdoc/asciidoc/install.zsh.adoc delete mode 100644 zsdoc/asciidoc/side.zsh.adoc delete mode 100644 zsdoc/asciidoc/zi.zsh.adoc delete mode 100644 zsdoc/html/additional.zsh.html delete mode 100644 zsdoc/html/autoload.zsh.html delete mode 100644 zsdoc/html/install.zsh.html delete mode 100644 zsdoc/html/side.zsh.html delete mode 100644 zsdoc/html/zi.zsh.html delete mode 100644 zsdoc/pdf/additional.zsh.pdf delete mode 100644 zsdoc/pdf/autoload.zsh.pdf delete mode 100644 zsdoc/pdf/install.zsh.pdf delete mode 100644 zsdoc/pdf/side.zsh.pdf delete mode 100644 zsdoc/pdf/zi.zsh.pdf delete mode 100644 zsh/Zsh-Native-Scripting-Handbook.html delete mode 100644 zsh/Zsh-Plugin-Standard.html delete mode 100644 zsh/zsh/Zsh-Native-Scripting-Handbook.html delete mode 100644 zsh/zsh/Zsh-Plugin-Standard.html diff --git a/Makefile b/Makefile deleted file mode 100644 index 946d81d..0000000 --- a/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc - -%.zwc: % - zi/lib/zcompile $< - -clone: clean - git clone --depth 1 --branch main https://github.com/z-shell/zi - -adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh - rm -vrf zsdoc/data - rm -vrf zsdoc/asciidoc/*.adoc - zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ - zi/zi.zsh \ - zi/lib/zsh/side.zsh \ - zi/lib/zsh/install.zsh \ - zi/lib/zsh/autoload.zsh \ - zi/lib/zsh/additional.zsh - @mkdir -p zsdoc/asciidoc - cp -vf zsdoc/*.adoc zsdoc/asciidoc/ - -clean: - rm -rf zi - rm -vf zsdoc/*.adoc - -distclean: clean - rm -rf zsdoc/data - -.PHONY: all clean clone man pdf html adoc diff --git a/code/asciidoc/additional.zsh.adoc b/code/asciidoc/additional.zsh.adoc deleted file mode 100644 index 50e0404..0000000 --- a/code/asciidoc/additional.zsh.adoc +++ /dev/null @@ -1,165 +0,0 @@ -additional.zsh(1) -================= -:compat-mode!: - -NAME ----- -additional.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-clear-debug-report - .zi-debug-start - .zi-debug-stop - .zi-debug-unload - .zi-service - .zi-wrap-track-functions - :zi-tmp-subst-source - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -.zi-clear-debug-report -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-debug-report [[[ - Forgets dtrace repport gathered up to this moment. -____ - -Has 1 line(s). Calls functions: - - .zi-clear-debug-report - `-- autoload.zsh/.zi-clear-report-for - -Called by: - - autoload.zsh/.zi-unload - zi.zsh/zi - -.zi-debug-start -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-start [[[ - Starts Dtrace, i.e. session tracking for changes in Zsh state. -____ - -Has 9 line(s). Calls functions: - - .zi-debug-start - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-diff - `-- zi.zsh/.zi-tmp-subst-on - -Called by: - - zi.zsh/zi - -.zi-debug-stop -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-stop [[[ - Stops Dtrace, i.e. session tracking for changes in Zsh state. -____ - -Has 3 line(s). Calls functions: - - .zi-debug-stop - |-- zi.zsh/.zi-diff - `-- zi.zsh/.zi-tmp-subst-off - -Called by: - - zi.zsh/zi - -.zi-debug-unload -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-unload [[[ - Reverts changes detected by dtrace run. -____ - -Has 6 line(s). Calls functions: - - .zi-debug-unload - |-- autoload.zsh/.zi-unload - `-- zi.zsh/+zi-message - -Uses feature(s): _source_ - -Called by: - - zi.zsh/zi - -.zi-service -~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-service [[[ - Handles given service, i.e. obtains lock, runs it, or waits if no lock - - $1 - type "p" or "s" (plugin or snippet) - $2 - mode - for plugin (light or load) - $3 - id - URL or plugin ID or alias name (from id-as'') -____ - -Has 29 line(s). Calls functions: - - .zi-service - |-- zi.zsh/.zi-load - `-- zi.zsh/.zi-load-snippet - -Uses feature(s): _kill_, _read_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-wrap-track-functions -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-wrap-track-functions [[[ -____ - -Has 19 line(s). Doesn't call other functions. - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-source -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-source [[[ -____ - -Has 25 line(s). Calls functions: - - :zi-tmp-subst-source - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - diff --git a/code/asciidoc/autoload.zsh.adoc b/code/asciidoc/autoload.zsh.adoc deleted file mode 100644 index 58fb2ad..0000000 --- a/code/asciidoc/autoload.zsh.adoc +++ /dev/null @@ -1,1520 +0,0 @@ -autoload.zsh(1) -=============== -:compat-mode!: - -NAME ----- -autoload.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-analytics-menu - .zi-any-to-uspl2 - .zi-at-eval - .zi-build-module - .zi-cd - .zi-cdisable - .zi-cenable - .zi-changes - .zi-check-comp-consistency - .zi-check-which-completions-are-enabled - .zi-check-which-completions-are-installed - .zi-clear-completions - .zi-clear-report-for - .zi-compile-uncompile-all - .zi-compiled - .zi-confirm - .zi-control-menu - .zi-create - .zi-delete - .zi-diff-env-compute - .zi-diff-functions-compute - .zi-diff-options-compute - .zi-diff-parameter-compute - .zi-edit - .zi-exists-message - .zi-find-completions-of-plugin - .zi-format-env - .zi-format-functions - .zi-format-options - .zi-format-parameter - .zi-get-completion-owner - .zi-get-completion-owner-uspl2col - .zi-get-path - .zi-glance - .zi-help - .zi-list-bindkeys - .zi-list-compdef-replay - .zi-ls - .zi-module - .zi-pager - .zi-prepare-readlink - .zi-recall - .zi-recently - .zi-restore-extendedglob - .zi-run-delete-hooks - .zi-save-set-extendedglob - .zi-search-completions - .zi-self-update - .zi-show-all-reports - .zi-show-completions - .zi-show-debug-report - .zi-show-registered-plugins - .zi-show-report - .zi-show-times - .zi-show-zstatus - .zi-stress - .zi-uncompile-plugin - .zi-uninstall-completions - .zi-unload - .zi-unregister-plugin - .zi-update-all-parallel - .zi-update-or-status - .zi-update-or-status-all - .zi-update-or-status-snippet - .zi-wait-for-update-jobs - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-analytics-menu -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-analytics-menu [[[ - Shows ❮ ZI ❯ analytics. - - User-action entry point. -____ - -Has 23 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-any-to-uspl2 -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-uspl2 [[[ - Converts given plugin-spec to format that's used in keys for hash tables. - So basically, creates string "user/plugin" (this format is called: uspl2). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 2 line(s). Calls functions: - - .zi-any-to-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-clear-report-for - .zi-exists-message - -.zi-at-eval -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-build-module -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-build-module [[[ - Performs ./configure && make on the module and displays information how to load the module in .zshrc. -____ - -Has 41 line(s). Calls functions: - - .zi-build-module - `-- zi.zsh/+zi-message - -Called by: - - .zi-module - -.zi-cd -~~~~~~ - -____ - - FUNCTION: .zi-cd [[[ - Jumps to plugin's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 15 line(s). Calls functions: - - .zi-cd - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-cdisable -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cdisable [[[ - Enables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 27 line(s). Calls functions: - - .zi-cdisable - -Called by: - - zi.zsh/zi - -.zi-cenable -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cenable [[[ - Disables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 26 line(s). Calls functions: - - .zi-cenable - -Called by: - - zi.zsh/zi - -.zi-changes -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-changes [[[ - Shows `git log` of given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-changes - |-- side.zsh/.zi-exists-physically-message - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-check-comp-consistency -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-comp-consistency [[[ - ❮ ZI ❯ creates symlink for each installed completion. - This function checks whether given completion (i.e. file like "_mkdir") is indeed a symlink. - Backup file is a completion that is disabled - has the leading "_" removed. - - $1 - path to completion within plugin's directory - $2 - path to backup file within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-check-which-completions-are-enabled -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-enabled [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is disabled - returns 0 or 1 on corresponding positions in reply. - - Uninstalled completions will be reported as "0" - i.e. disabled - - $1, ... - path to completion within plugin's directory -____ - -Has 10 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-check-which-completions-are-installed -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-installed [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is installed - returns 0 or 1 on corresponding positions in reply. - - $1, ... - path to completion within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-clear-completions -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-completions [[[ - Delete stray and improper completions. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 35 line(s). Calls functions: - - .zi-clear-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-clear-report-for -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-report-for [[[ - Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 23 line(s). Calls functions: - - .zi-clear-report-for - -Called by: - - .zi-unload - additional.zsh/.zi-clear-debug-report - -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-compiled -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. - - User-action entry point. -____ - -Has 23 line(s). Calls functions: - - .zi-compiled - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-confirm -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-confirm [[[ - Prints given question, waits for "y" key, evals given expression if "y" obtained - - $1 - question - $2 - expression -____ - -Has 22 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _read_ - -Called by: - - .zi-delete - -.zi-control-menu -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-control-menu [[[ - Shows control options. - - User-action entry point. -____ - -Has 22 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-create -~~~~~~~~~~ - -____ - - FUNCTION: .zi-create [[[ - Creates a plugin, also on Github (if not "_local/name" plugin). - - User-action entry point. - - $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 103 line(s). Calls functions: - - .zi-create - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _autoload_, _setopt_, _vared_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-delete -~~~~~~~~~~ - -____ - - FUNCTION: .zi-delete [[[ - Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 93 line(s). Calls functions: - - .zi-delete - |-- side.zsh/.zi-compute-ice - |-- zi.zsh/+zi-prehelp-usage-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-parse-opts - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-diff-env-compute -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env-compute [[[ - Computes ZI_PATH, ZI_FPATH that hold (f)path components - added by plugin. Uses data gathered earlier by .zi-diff-env(). - - $1 - user/plugin -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-functions-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions-compute [[[ - Computes FUNCTIONS that holds new functions added by plugin. - Uses data gathered earlier by .zi-diff-functions(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-options-compute -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options-compute [[[ - Computes OPTIONS that holds options changed by plugin. - Uses data gathered earlier by .zi-diff-options(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-parameter-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter-compute [[[ - Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold - parameters created or changed (their type) by plugin. Uses - data gathered earlier by .zi-diff-parameter(). - - $1 - user/plugin -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-edit -~~~~~~~~ - -____ - - FUNCTION: .zi-edit [[[ - Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-edit - `-- side.zsh/.zi-compute-ice - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-exists-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-message [[[ - Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 7 line(s). Calls functions: - - .zi-exists-message - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-show-report - .zi-unload - -.zi-find-completions-of-plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-completions-of-plugin [[[ - Searches for completions owned by given plugin. - Returns them in `reply' array. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 5 line(s). Calls functions: - - .zi-find-completions-of-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-format-env -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-env [[[ - Creates one-column text about FPATH or PATH elements added when given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) - $2 - if 1, then examine PATH, if 2, then examine FPATH -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-functions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-functions [[[ - Creates a one or two columns text with functions created by given plugin. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 34 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-options -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-options [[[ - Creates one-column text about options that changed when plugin "$1" was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 19 line(s). Calls functions: - - .zi-format-options - -Called by: - - .zi-show-report - -.zi-format-parameter -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-parameter [[[ - Creates one column text that lists global parameters that changed when the given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-get-completion-owner -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner [[[ - Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. - - Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. - - :A will read the link "twice" and give the final repository - directory, possibly without username in the uspl format; readlink will read the link "once" - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 19 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-clear-completions - .zi-get-completion-owner-uspl2col - .zi-show-completions - -.zi-get-completion-owner-uspl2col -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner-uspl2col [[[ - For shortening of code - returns colorized plugin name - that owns given completion. - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 2 line(s). Calls functions: - - .zi-get-completion-owner-uspl2col - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-get-path -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-path [[[ - Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path - ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. -____ - -Has 5 line(s). Calls functions: - - .zi-get-path - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-cd - .zi-uninstall-completions - -.zi-glance -~~~~~~~~~~ - -____ - - FUNCTION: .zi-glance [[[ - Shows colorized source code of plugin. Is able to use pygmentize, - highlight, GNU source-highlight. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 37 line(s). Calls functions: - - .zi-glance - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-help -~~~~~~~~ - -____ - - FUNCTION: .zi-help [[[ - Shows usage information. - - User-action entry point. -____ - -Has 31 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-list-bindkeys -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-bindkeys [[[ -____ - -Has 39 line(s). Calls functions: - - .zi-list-bindkeys - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - zi.zsh/zi - -.zi-list-compdef-replay -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-compdef-replay [[[ - Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping - for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. - - User-action entry point. -____ - -Has 5 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-ls -~~~~~~ - -____ - - FUNCTION: .zi-ls [[[ -____ - -Has 18 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-module -~~~~~~~~~~ - -____ - - FUNCTION: .zi-module [[[ - Function that has sub-commands passed as long-options (with two dashes, --). - It's an attempt to plugin only this one function into `zi' function - defined in zi.zsh, to not make this file longer than it's needed. -____ - -Has 24 line(s). Calls functions: - - .zi-module - -Called by: - - .zi-build-module - zi.zsh/Script-Body - zi.zsh/zi - -.zi-pager -~~~~~~~~~ - -____ - - FUNCTION: .zi-pager [[[ - BusyBox less lacks the -X and -i options, so it can use more - TODO: .zi-pager:7: less not found -____ - -Has 14 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-glance - .zi-self-update - .zi-update-or-status - -.zi-prepare-readlink -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-readlink [[[ - Prepares readlink command, used for establishing completion's owner. - - $REPLY = ":" or "readlink" -____ - -Has 4 line(s). Doesn't call other functions. - -Uses feature(s): _type_ - -Called by: - - .zi-cdisable - .zi-cenable - .zi-clear-completions - .zi-show-completions - -.zi-recall -~~~~~~~~~~ - -____ - - FUNCTION: .zi-recall [[[ -____ - -Has 33 line(s). Calls functions: - - .zi-recall - |-- side.zsh/.zi-compute-ice - `-- zi.zsh/+zi-deploy-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-recently -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-recently [[[ - Shows plugins that obtained commits in specified past time. - - User-action entry point. - - $1 - time spec, e.g. "1 week" -____ - -Has 23 line(s). Calls functions: - - .zi-recently - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-restore-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-restore-extendedglob [[[ - Restores extendedglob-option from state saved earlier. -____ - -Has 1 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-run-delete-hooks -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-delete-hooks [[[ -____ - -Has 17 line(s). Calls functions: - - .zi-run-delete-hooks - `-- side.zsh/.zi-countdown - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-save-set-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-save-set-extendedglob [[[ - Enables extendedglob-option first saving if it was already - enabled, for restoration of this state later. -____ - -Has 2 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-search-completions -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-search-completions [[[ - While .zi-show-completions() shows what completions are - installed, this functions searches through all plugin dirs - showing what's available in general (for installation). - - User-action entry point. -____ - -Has 39 line(s). Calls functions: - - .zi-search-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-self-update -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-self-update [[[ - Updates ❮ ZI ❯ code (does a git pull). - - User-action entry point. -____ - -Has 43 line(s). Calls functions: - - .zi-self-update - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_, _zcompile_ - -Called by: - - .zi-update-or-status-all - zi.zsh/zi - -.zi-show-all-reports -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-all-reports [[[ - Displays reports of all loaded plugins. - - User-action entry point. -____ - -Has 5 line(s). Calls functions: - - .zi-show-all-reports - -Called by: - - zi.zsh/zi - -.zi-show-completions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-completions [[[ - Display installed (enabled and disabled), completions. Detect - stray and improper ones. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 61 line(s). Calls functions: - - .zi-show-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-debug-report -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-debug-report [[[ - Displays dtrace report (data recorded in interactive session). - - User-action entry point. -____ - -Has 1 line(s). Calls functions: - - .zi-show-debug-report - -Called by: - - zi.zsh/zi - -.zi-show-registered-plugins -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-registered-plugins [[[ - Lists loaded plugins (subcommands list, loaded). - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-show-registered-plugins - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-report -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-report [[[ - Displays report of the plugin given. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 66 line(s). Calls functions: - - .zi-show-report - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-all-reports - .zi-show-debug-report - zi.zsh/zi - -.zi-show-times -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-times [[[ - Shows loading times of all loaded plugins. - - User-action entry point. -____ - -Has 54 line(s). Calls functions: - - .zi-show-times - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-zstatus -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-zstatus [[[ - Shows ❮ ZI ❯ status, i.e. number of loaded plugins, - of available completions, etc. - - User-action entry point. -____ - -Has 47 line(s). Calls functions: - - .zi-show-zstatus - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-stress -~~~~~~~~~~ - -____ - - FUNCTION: .zi-stress [[[ - Compiles plugin with various options on and off to see how well the code is written. The options are: - - NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 31 line(s). Calls functions: - - .zi-stress - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_, _zcompile_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-uncompile-plugin -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uncompile-plugin [[[ - Uncompiles given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 20 line(s). Calls functions: - - .zi-uncompile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compile-uncompile-all - zi.zsh/zi - -.zi-uninstall-completions -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uninstall-completions [[[ - Removes all completions of given plugin from Zshell (i.e. from FPATH). - The FPATH is typically `~/.zi/completions/'. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 39 line(s). Calls functions: - - .zi-uninstall-completions - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-unload -~~~~~~~~~~ - -____ - - FUNCTION: .zi-unload [[[ - 0. Call the Zsh Plugin's Standard *_plugin_unload function - 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update - 1. Delete bindkeys (...) - 2. Delete Zstyles - 3. Restore options - 4. Remove aliases - 5. Restore Zle state - 6. Unfunction functions (created by plugin) - 7. Clean-up FPATH and PATH - 8. Delete created variables - 9. Forget the plugin - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 380 line(s). Calls functions: - - .zi-unload - |-- additional.zsh/.zi-clear-debug-report - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ - -Called by: - - additional.zsh/.zi-debug-unload - zi.zsh/.zi-run-task - zi.zsh/zi - -.zi-unregister-plugin -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-unregister-plugin [[[ - Removes the plugin from ZI_REGISTERED_PLUGINS array and from the - zsh_loaded_plugins array (managed according to the plugin standard) -____ - -Has 5 line(s). Calls functions: - - .zi-unregister-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-unload - -.zi-update-all-parallel -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-in-parallel [[[ -____ - -Has 63 line(s). Calls functions: - - .zi-update-all-parallel - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-update-or-status-all - -.zi-update-or-status -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status [[[ - Updates (git pull) or does `git status' for given plugin. - - User-action entry point. - - $1 - "status" for status, other for update - $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $3 - plugin (only when $1 - i.e. user - given) -____ - -Has 263 line(s). Calls functions: - - .zi-update-or-status - |-- install.zsh/.zi-get-latest-gh-r-url-part - |-- install.zsh/.zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-exists-physically - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-store-ices - |-- side.zsh/.zi-two-paths - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-set-m-func - -Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - zi.zsh/zi - -.zi-update-or-status-all -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-all [[[ - Updates (git pull) or does `git status` for all existing plugins. - This includes also plugins that are not loaded into Zsh (but exist - on disk). Also updates (i.e. redownloads) snippets. - - User-action entry point. -____ - -Has 102 line(s). Calls functions: - - .zi-update-or-status-all - |-- install.zsh/.zi-compinit - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-update-or-status-snippet -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-snippet [[[ - - Implements update or status operation for snippet given by URL. - - $1 - "status" or "update" - $2 - snippet URL -____ - -Has 28 line(s). Calls functions: - - .zi-update-or-status-snippet - |-- install.zsh/.zi-update-snippet - `-- side.zsh/.zi-compute-ice - -Uses feature(s): _source_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - .zi-update-or-status - -.zi-wait-for-update-jobs -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-wait-for-update-jobs [[[ -____ - -Has 14 line(s). Calls functions: - - .zi-wait-for-update-jobs - `-- zi.zsh/+zi-message - -Uses feature(s): _wait_ - -Called by: - - .zi-update-all-parallel - diff --git a/code/asciidoc/install.zsh.adoc b/code/asciidoc/install.zsh.adoc deleted file mode 100644 index 8e5bdbc..0000000 --- a/code/asciidoc/install.zsh.adoc +++ /dev/null @@ -1,746 +0,0 @@ -install.zsh(1) -============== -:compat-mode!: - -NAME ----- -install.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-at-eval - .zi-compile-plugin - .zi-compinit - .zi-download-file-stdout - .zi-download-snippet - .zi-extract - .zi-forget-completion - .zi-get-cygwin-package - .zi-get-latest-gh-r-url-part - .zi-get-package - .zi-get-url-mtime - .zi-install-completions - .zi-mirror-using-svn - .zi-parse-json - .zi-setup-plugin-dir - .zi-update-snippet - zicp - ziextract - zimv - zpextract - ∞zi-atclone-hook - ∞zi-atpull-e-hook - ∞zi-atpull-hook - ∞zi-compile-plugin-hook - ∞zi-cp-hook - ∞zi-extract-hook - ∞zi-make-e-hook - ∞zi-make-ee-hook - ∞zi-make-hook - ∞zi-mv-hook - ∞zi-ps-on-update-hook - ∞zi-reset-hook -AUTOLOAD compinit - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-at-eval -~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Called by: - - ∞zi-atpull-e-hook - ∞zi-atpull-hook - -.zi-compile-plugin -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-plugin [[[ - Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 84 line(s). Calls functions: - - .zi-compile-plugin - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-first - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _zcompile_ - -Called by: - - ∞zi-compile-plugin-hook - autoload.zsh/.zi-compile-uncompile-all - zi.zsh/zi - -.zi-compinit -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compinit [[[ - User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. - After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. - - No arguments. -____ - -Has 26 line(s). Calls functions: - - .zi-compinit - |-- compinit - `-- zi.zsh/+zi-message - -Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ - -Called by: - - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-or-status-all - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-download-file-stdout -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-file-stdout [[[ - Downloads file to stdout. Supports following backend commands: - curl, wget, lftp, lynx. Used by snippet loading. -____ - -Has 46 line(s). Calls functions: - - .zi-download-file-stdout - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - .zi-get-cygwin-package - .zi-get-package - .zi-setup-plugin-dir - -.zi-download-snippet -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-snippet [[[ - Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, - with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows - to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. -____ - -Has 309 line(s). Calls functions: - - .zi-download-snippet - |-- side.zsh/.zi-store-ices - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _zcompile_ - -Called by: - - .zi-update-snippet - zi.zsh/.zi-load-snippet - -.zi-extract -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-extract() [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-extract - |-- zi.zsh/+zi-message - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - ∞zi-extract-hook - -.zi-forget-completion -~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-forget-completion [[[ - Implements alternation of Zsh state so that already initialized - completion stops being visible to Zsh. - - $1 - completion function name, e.g. "_cp"; can also be "cp" -____ - -Has 20 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-compinit - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - zi.zsh/zi - -.zi-get-cygwin-package -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-cygwin-package [[[ -____ - -Has 70 line(s). Calls functions: - - .zi-get-cygwin-package - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - -.zi-get-latest-gh-r-url-part -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-latest-gh-r-url-part [[[ - Gets version string of latest release of given Github package. - Connects to Github releases page. -____ - -Has 101 line(s). Calls functions: - - .zi-get-latest-gh-r-url-part - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - autoload.zsh/.zi-update-or-status - -.zi-get-package -~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-package [[[ -____ - -Has 194 line(s). Calls functions: - - .zi-get-package - |-- zi.zsh/+zi-message - |-- zi.zsh/@zi-substitute - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _trap_ - -Called by: - - zi.zsh/.zi-load - -_Environment variables used:_ zi.zsh -> ZPFX - -.zi-get-url-mtime -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-url-mtime [[[ - For the given URL returns the date in the Last-Modified header as a time stamp -____ - -Has 34 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - -.zi-install-completions -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-install-completions [[[ - Installs all completions of given plugin. After that they are - visible to `compinit'. Visible completions can be selectively - disabled and enabled. User can access completion data with - `clist' or `completions' subcommand. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $3 - if 1, then reinstall, otherwise only install completions that aren't there -____ - -Has 61 line(s). Calls functions: - - .zi-install-completions - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - .zi-setup-plugin-dir - zi.zsh/zi - -.zi-mirror-using-svn -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-mirror-using-svn [[[ - Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', - in normal mode invokes `svn checkout --non-interactive -q '. In test mode only - compares remote and local revision and outputs true if update is needed. - - $1 - URL - $2 - mode, "" - normal, "-u" - update, "-t" - test - $3 - subdirectory (not path) with working copy, needed for -t and -u -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - -.zi-parse-json -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. -____ - -Has 102 line(s). Calls functions: - - .zi-parse-json - -Uses feature(s): _setopt_ - -Called by: - - .zi-get-package - -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. - - $1 - user - $2 - plugin -____ - -Has 189 line(s). Calls functions: - - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_ - -Called by: - - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load - -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-update-snippet [[[ -____ - -Has 72 line(s). Calls functions: - - .zi-update-snippet - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/.zi-pack-ice - -Uses feature(s): _eval_, _setopt_ - -Called by: - - autoload.zsh/.zi-update-or-status-snippet - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 275 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -zimv -~~~~ - -____ - - ]]] - FUNCTION zimv [[[ -____ - -Has 3 line(s). Calls functions: - - zimv - `-- zicp - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zpextract [[[ -____ - -Has 1 line(s). Calls functions: - - zpextract - `-- ziextract - `-- zi.zsh/+zi-message - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-compile-plugin-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-compile-plugin-hook - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-cp-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-cp-hook [[[ -____ - -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-e-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-ee-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-mv-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-mv-hook [[[ -____ - -Has 21 line(s). Calls functions: - - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-ps-on-update-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-ps-on-update-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-reset-hook -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ -____ - -Has 79 line(s). Calls functions: - - ∞zi-reset-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - .zi-compinit - diff --git a/code/asciidoc/side.zsh.adoc b/code/asciidoc/side.zsh.adoc deleted file mode 100644 index da9afa2..0000000 --- a/code/asciidoc/side.zsh.adoc +++ /dev/null @@ -1,300 +0,0 @@ -side.zsh(1) -=========== -:compat-mode!: - -NAME ----- -side.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-any-colorify-as-uspl2 - .zi-compute-ice - .zi-countdown - .zi-exists-physically - .zi-exists-physically-message - .zi-first - .zi-store-ices - .zi-two-paths -AUTOLOAD zmv - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -.zi-any-colorify-as-uspl2 -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-colorify-as-uspl2 [[[ - Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $REPLY = ANSI-colorified "user/plugin" string -____ - -Has 22 line(s). Calls functions: - - .zi-any-colorify-as-uspl2 - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-exists-message - autoload.zsh/.zi-get-completion-owner-uspl2col - autoload.zsh/.zi-list-bindkeys - autoload.zsh/.zi-recently - autoload.zsh/.zi-search-completions - autoload.zsh/.zi-show-completions - autoload.zsh/.zi-show-registered-plugins - autoload.zsh/.zi-show-times - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - zi.zsh/.zi-formatter-pid - -.zi-compute-ice -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compute-ice [[[ - Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, - taking priorities into account. Also returns path to snippet directory and optional name of snippet file - (only valid if ICE[svn] is not set). - - Can also pack resulting ices into ZI_SICE (see $2). - - $1 - URL (also plugin-spec) - $2 - "pack" or "nopack" or "pack-nf" - packing means ICE - wins with static ice; "pack-nf" means that disk-ices will - be ignored (no-file?) - $3 - name of output associative array, "ICE" is the default - $4 - name of output string parameter, to hold path to directory ("local_dir") - $5 - name of output string parameter, to hold filename ("filename") - $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") -____ - -Has 116 line(s). Calls functions: - - .zi-compute-ice - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-pack-ice - `-- zmv - -Uses feature(s): _autoload_, _setopt_, _zmv_ - -Called by: - - autoload.zsh/.zi-delete - autoload.zsh/.zi-edit - autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status-snippet - autoload.zsh/.zi-update-or-status - install.zsh/.zi-compile-plugin - -.zi-countdown -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-countdown [[[ - Displays a countdown 5...4... etc. and returns 0 if it - sucessfully reaches 0, or 1 if Ctrl-C will be pressed. -____ - -Has 14 line(s). Calls functions: - - .zi-countdown - `-- zi.zsh/+zi-message - -Uses feature(s): _trap_ - -Called by: - - autoload.zsh/.zi-run-delete-hooks - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-atpull-e-hook - install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - -.zi-exists-physically -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically [[[ - Checks if directory of given plugin exists in PLUGIN_DIR. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-create - autoload.zsh/.zi-update-or-status - -.zi-exists-physically-message -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically-message [[[ - Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 22 line(s). Calls functions: - - .zi-exists-physically-message - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-changes - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - -.zi-first -~~~~~~~~~ - -____ - - FUNCTION: .zi-first [[[ - Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct - ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching - is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-first - |-- zi.zsh/.zi-any-to-pid - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-find-other-matches - `-- zi.zsh/.zi-get-object-path - -Called by: - - .zi-two-paths - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - install.zsh/.zi-compile-plugin - -.zi-store-ices -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-store-ices [[[ - Saves ice mods in given hash onto disk. - - $1 - directory where to create / delete files - $2 - name of hash that holds values - $3 - additional keys of hash to store, space separated - $4 - additional keys of hash to store, empty-meaningful ices, space separated - $5 - the URL, if applicable - $6 - the mode (1 - svn, 0 - single file), if applicable -____ - -Has 28 line(s). Doesn't call other functions. - -Called by: - - autoload.zsh/.zi-update-or-status - install.zsh/.zi-download-snippet - install.zsh/.zi-setup-plugin-dir - -.zi-two-paths -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-two-paths [[[ - Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), - returns 2 possible paths for further examination -____ - -Has 22 line(s). Calls functions: - - .zi-two-paths - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-update-or-status - -zmv -~~~ - -____ - - function zmv { - zmv, zcp, zln: - - This is a multiple move based on zsh pattern matching. To get the full - power of it, you need a postgraduate degree in zsh. However, simple - tasks work OK, so if that's all you need, here are some basic examples: - zmv '(*).txt' '$1.lis' - Rename foo.txt to foo.lis, etc. The parenthesis is the thing that - gets replaced by the $1 (not the `*', as happens in mmv, and note the - `$', not `=', so that you need to quote both words). -____ - -Has 299 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _getopts_, _read_, _setopt_ - -Called by: - - .zi-compute-ice - diff --git a/code/asciidoc/zi.zsh.adoc b/code/asciidoc/zi.zsh.adoc deleted file mode 100644 index 7d2eb35..0000000 --- a/code/asciidoc/zi.zsh.adoc +++ /dev/null @@ -1,1583 +0,0 @@ -zi.zsh(1) -========= -:compat-mode!: - -NAME ----- -zi.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - +zi-deploy-message - +zi-message - +zi-prehelp-usage-message - -zi_scheduler_add_sh - .zi-add-fpath - .zi-add-report - .zi-any-to-pid - .zi-any-to-user-plugin - .zi-compdef-clear - .zi-compdef-replay - .zi-diff - .zi-diff-env - .zi-diff-functions - .zi-diff-options - .zi-diff-parameter - .zi-find-other-matches - .zi-formatter-bar - .zi-formatter-bar-util - .zi-formatter-pid - .zi-formatter-th-bar - .zi-formatter-url - .zi-get-mtime-into - .zi-get-object-path - .zi-ice - .zi-load - .zi-load-ices - .zi-load-object - .zi-load-plugin - .zi-load-snippet - .zi-main-message-formatter - .zi-pack-ice - .zi-parse-opts - .zi-prepare-home - .zi-register-plugin - .zi-run - .zi-run-task - .zi-set-m-func - .zi-setup-params - .zi-submit-turbo - .zi-tmp-subst-off - .zi-tmp-subst-on - .zi-util-shands-path - :zi-reload-and-run - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - @autoload - @zi-register-annex - @zi-register-hook - @zi-substitute - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - pmodload - zi - zi-turbo - zicdclear - zicdreplay - zicompdef - zicompinit - zpcdclear - zpcdreplay - zpcompdef - zpcompinit -AUTOLOAD add-zsh-hook -AUTOLOAD compinit -AUTOLOAD is-at-least -PRECMD-HOOK @zi-scheduler - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 202 line(s). Calls functions: - - Script-Body - |-- +zi-message - |-- @zi-register-hook - |-- add-zsh-hook - |-- autoload.zsh/.zi-module - `-- is-at-least - -Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ - -_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR - -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked -____ - -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall - -+zi-message -~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message. [[[ -____ - -Has 14 line(s). Doesn't call other functions. - -Called by: - - +zi-prehelp-usage-message - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - Script-Body - zi - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-unload - additional.zsh/:zi-tmp-subst-source - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - install.zsh/ziextract - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message - -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-prehelp-usage-message. [[[ -____ - -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - -Called by: - - zi - autoload.zsh/.zi-delete - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ - -Has 7 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-add-fpath -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-fpath. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-add-fpath - -Called by: - - zi - -.zi-add-report -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-report. [[[ - Adds a report line for given plugin. - - $1 - uspl2, i.e. user/plugin - $2, ... - the text -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - -.zi-any-to-pid -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-pid. [[[ -____ - -Has 21 line(s). Calls functions: - - .zi-any-to-pid - -Uses feature(s): _setopt_ - -Called by: - - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-exists-physically-message - side.zsh/.zi-first - -.zi-any-to-user-plugin -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-user-plugin. [[[ - Allows elastic plugin-spec across the code. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - - Returns user and plugin in $reply. - -____ - -Has 25 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-add-fpath - .zi-get-object-path - .zi-load - .zi-run - :zi-tmp-subst-autoload - autoload.zsh/.zi-any-to-uspl2 - autoload.zsh/.zi-changes - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-delete - autoload.zsh/.zi-find-completions-of-plugin - autoload.zsh/.zi-glance - autoload.zsh/.zi-show-report - autoload.zsh/.zi-stress - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-unregister-plugin - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-compute-ice - side.zsh/.zi-exists-physically-message - side.zsh/.zi-exists-physically - side.zsh/.zi-first - -_Environment variables used:_ ZPFX - -.zi-compdef-clear -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-clear. [[[ - Implements user-exposed functionality to clear gathered compdefs. -____ - -Has 3 line(s). Calls functions: - - .zi-compdef-clear - `-- +zi-message - -Called by: - - zi - zicdclear - zpcdclear - -.zi-compdef-replay -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-replay. [[[ - Runs gathered compdef calls. This allows to run `compinit' after loading plugins. -____ - -Has 16 line(s). Calls functions: - - .zi-compdef-replay - `-- +zi-message - -Uses feature(s): _compdef_ - -Called by: - - zi - zicdreplay - zpcdreplay - -.zi-diff -~~~~~~~~ - -____ - - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types -____ - -Has 4 line(s). Calls functions: - - .zi-diff - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-stop - -.zi-diff-env -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env. [[[ - Implements detection of change in PATH and FPATH. - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - .zi-load-plugin - -.zi-diff-functions -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions. [[[ - Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-options -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options. [[[ - Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-parameter -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter. [[[ - Implements detection of change in any parameter's existence and type. - Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-find-other-matches -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-other-matches. [[[ - Plugin's main source file is in general `name.plugin.zsh'. However, - there can be different conventions, if that file is not found, then - this functions examines other conventions in the most sane order. -____ - -Has 17 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - side.zsh/.zi-first - -.zi-formatter-bar -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-bar-util -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar-util. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-formatter-bar - .zi-formatter-th-bar - -.zi-formatter-pid -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-pid. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-formatter-pid - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _source_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-th-bar -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-th-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-th-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-url -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-url. [[[ -____ - -Has 19 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-get-mtime-into -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-mtime-into. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - Script-Body - autoload.zsh/.zi-self-update - autoload.zsh/.zi-update-or-status-all - -.zi-get-object-path -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-object-path. [[[ -____ - -Has 23 line(s). Calls functions: - - .zi-get-object-path - -Called by: - - .zi-load-ices - .zi-load-snippet - .zi-run - zi - autoload.zsh/.zi-get-path - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - side.zsh/.zi-first - side.zsh/.zi-two-paths - -.zi-ice -~~~~~~~ - -____ - - FUNCTION: .zi-ice. [[[ - Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for - next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. -____ - -Has 12 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load -~~~~~~~~ - -____ - - FUNCTION: .zi-load. [[[ - Implements the exposed-to-user action of loading a plugin. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin name, if the third format is used -____ - -Has 76 line(s). Calls functions: - - .zi-load - |-- +zi-deploy-message - |-- install.zsh/.zi-get-package - `-- install.zsh/.zi-setup-plugin-dir - -Uses feature(s): _eval_, _setopt_, _source_, _zle_ - -Called by: - - .zi-load-object - .zi-run-task - additional.zsh/.zi-service - -.zi-load-ices -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-ices. [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-load-ices - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load-object -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-object. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-load-object - -Called by: - - zi - -.zi-load-plugin -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-plugin. [[[ - Lower-level function for loading a plugin. - - $1 - user - $2 - plugin - $3 - mode (light or load) -____ - -Has 107 line(s). Calls functions: - - .zi-load-plugin - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ - -Called by: - - .zi-load - -.zi-load-snippet -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-snippet. [[[ - Implements the exposed-to-user action of loading a snippet. - - $1 - url (can be local, absolute path). -____ - -Has 173 line(s). Calls functions: - - .zi-load-snippet - |-- +zi-deploy-message - |-- +zi-message - `-- install.zsh/.zi-download-snippet - -Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ - -Called by: - - .zi-load-object - .zi-load - .zi-run-task - pmodload - additional.zsh/.zi-service - -.zi-main-message-formatter -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message-formatter [[[ -____ - -Has 18 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-pack-ice -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-pack-ice. [[[ - Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for - second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin - or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - install.zsh/.zi-update-snippet - side.zsh/.zi-compute-ice - -.zi-parse-opts -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: +zi-parse-opts. [[[ -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - zi - autoload.zsh/.zi-delete - -.zi-prepare-home -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-home. [[[ - Creates all directories needed by ZI, first checks if they already exist. -____ - -Has 38 line(s). Calls functions: - - .zi-prepare-home - |-- autoload.zsh/.zi-clear-completions - `-- install.zsh/.zi-compinit - -Uses feature(s): _source_ - -Called by: - - Script-Body - -_Environment variables used:_ ZPFX - -.zi-register-plugin -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-register-plugin. [[[ - Adds the plugin to ZI_REGISTERED_PLUGINS array and to the - zsh_loaded_plugins array (managed according to the plugin standard: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). -____ - -Has 20 line(s). Calls functions: - - .zi-register-plugin - `-- +zi-message - -Called by: - - .zi-load - -.zi-run -~~~~~~~ - -____ - - FUNCTION: .zi-run. [[[ - Run code inside plugin's folder - It uses the `correct' parameter from upper's scope zi(). -____ - -Has 24 line(s). Calls functions: - - .zi-run - `-- +zi-message - -Uses feature(s): _eval_, _setopt_ - -Called by: - - zi - -.zi-run-task -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-task. [[[ - A backend, worker function of .zi-scheduler. It obtains the tasks - index and a few of its properties (like the type: plugin, snippet, - service plugin, service snippet) and executes it first checking for - additional conditions (like non-numeric wait'' ice). - - $1 - the pass number, either 1st or 2nd pass - $2 - the time assigned to the task - $3 - type: plugin, snippet, service plugin, service snippet - $4 - task's index in the ZI[WAIT_ICE_...] fields - $5 - mode: load or light - $6 - the plugin-spec or snippet URL or alias name (from id-as'') -____ - -Has 45 line(s). Calls functions: - - .zi-run-task - `-- autoload.zsh/.zi-unload - -Uses feature(s): _eval_, _source_, _zle_, _zpty_ - -Called by: - - @zi-scheduler - -.zi-set-m-func -~~~~~~~~~~~~~~ - -____ - - FUNCTION:.zi-set-m-func() [[[ - Sets and withdraws the temporary, atclone/atpull time function `m`. -____ - -Has 17 line(s). Calls functions: - - .zi-set-m-func - `-- +zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-update-or-status - -.zi-setup-params -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-params. [[[ -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - -.zi-submit-turbo -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-submit-turbo. [[[ - If `zi load`, `zi light` or `zi snippet` will be - preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' - ice-mods then the plugin or snipped is to be loaded in turbo-mode, - and this function adds it to internal data structures, so that - @zi-scheduler can run (load, unload) this as a task. -____ - -Has 16 line(s). Doesn't call other functions. - -Called by: - - zi - -.zi-tmp-subst-off -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). -____ - -Has 17 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-stop - -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _source_ - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-start - -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. -____ - -Has 8 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-any-to-pid - -_Environment variables used:_ ZPFX - -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 30 line(s). Calls functions: - - :zi-tmp-subst-alias - -Uses feature(s): _alias_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-autoload -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-autoload. [[[ - Function defined to hijack plugin's calls to the `autoload' builtin. - - The hijacking is not only to gather report data, but also to. - run custom `autoload' function, that doesn't need FPATH. -____ - -Has 106 line(s). Calls functions: - - :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ - -Called by: - - .zi-load-plugin - @autoload - -:zi-tmp-subst-bindkey -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-bindkey. [[[ - Function defined to hijack plugin's calls to the `bindkey' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 107 line(s). Calls functions: - - :zi-tmp-subst-bindkey - `-- is-at-least - -Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-compdef -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-compdef. [[[ - Function defined to hijack plugin's calls to the `compdef' function. - The hijacking is not only for reporting, but also to save compdef - calls so that `compinit' can be called after loading plugins. -____ - -Has 5 line(s). Calls functions: - - :zi-tmp-subst-compdef - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zle -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 33 line(s). Calls functions: - - :zi-tmp-subst-zle - -Uses feature(s): _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 19 line(s). Calls functions: - - :zi-tmp-subst-zstyle - -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@autoload -~~~~~~~~~ - -____ - - ]]] - FUNCTION: @autoload. [[[ -____ - -Has 3 line(s). Calls functions: - - @autoload - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-annex -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 4 line(s). Doesn't call other functions. - -Called by: - - Script-Body - -@zi-scheduler -~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-substitute -~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-substitute. [[[ -____ - -Has 36 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - autoload.zsh/.zi-at-eval - install.zsh/.zi-at-eval - install.zsh/.zi-get-package - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX - -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-unload - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -pmodload -~~~~~~~~ - -____ - - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. -____ - -Has 15 line(s). Calls functions: - - pmodload - -Uses feature(s): _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zi -~~ - -____ - - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. -____ - -Has 547 line(s). Calls functions: - - zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- additional.zsh/.zi-clear-debug-report - |-- additional.zsh/.zi-debug-start - |-- additional.zsh/.zi-debug-stop - |-- additional.zsh/.zi-debug-unload - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ - -Called by: - - zi-turbo - -zi-turbo -~~~~~~~~ - -____ - - FUNCTION: zi-turbo. [[[ - With zi-turbo first argument is a wait time and suffix, i.e. "0a". - Anything that doesn't match will be passed as if it were an ice mod. - Default ices depth'3' and lucid, allowed values [0-9][a-d]. -____ - -Has 1 line(s). Calls functions: - - zi-turbo - `-- zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- additional.zsh/.zi-clear-debug-report - |-- additional.zsh/.zi-debug-start - |-- additional.zsh/.zi-debug-stop - |-- additional.zsh/.zi-debug-unload - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompdef -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. -____ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompinit -~~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. -____ - -Has 1 line(s). Calls functions: - - zicompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdclear -~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdreplay -~~~~~~~~~~ - -____ - - ]]] - Compatibility functions. [[[ - zinit() { zi "$@"; } -____ - -Has 1 line(s). Calls functions: - - zpcdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompdef -~~~~~~~~~ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompinit -~~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -add-zsh-hook -~~~~~~~~~~~~ - -____ - - Add to HOOK the given FUNCTION. - HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, - zshexit, zsh_directory_name (the _functions subscript is not required). - - With -d, remove the function from the hook instead; delete the hook - variable if it is empty. - - -D behaves like -d, but pattern characters are active in the - function name, so any matching function will be deleted from the hook. - -____ - -Has 93 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _getopts_ - -Called by: - - @zi-scheduler - Script-Body - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - zi - zicompinit - zpcompinit - -is-at-least -~~~~~~~~~~~ - -____ - - - Test whether $ZSH_VERSION (or some value of your choice, if a second argument - is provided) is greater than or equal to x.y.z-r (in argument one). In fact, - it'll accept any dot/dash-separated string of numbers as its second argument - and compare it to the dot/dash-separated first argument. Leading non-number - parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered - when the comparison is done; only the numbers matter. Any left-out segments - in the first argument that are present in the version string compared are - considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. - -____ - -Has 56 line(s). Doesn't call other functions. - -Called by: - - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - Script-Body - diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html deleted file mode 100644 index f702ec4..0000000 --- a/code/html/additional.zsh.html +++ /dev/null @@ -1,2735 +0,0 @@ - - - - - - - - - additional.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-clear-debug-report
    -.zi-debug-start
    -.zi-debug-stop
    -.zi-debug-unload
    -.zi-service
    -.zi-wrap-track-functions
    -:zi-tmp-subst-source
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-unload
    -zi.zsh/zi
    -
    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-start
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-stop
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-unload
    -|-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    -
    -
    -
    -
    -
    $1 - type "p" or "s" (plugin or snippet)
    -$2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    .zi-service
    -|-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-track-functions
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-wrap-track-functions [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -
    -
    - - - - diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html deleted file mode 100644 index 361408a..0000000 --- a/code/html/autoload.zsh.html +++ /dev/null @@ -1,5041 +0,0 @@ - - - - - - - - - autoload.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    autoload.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-analytics-menu
    -.zi-any-to-uspl2
    -.zi-at-eval
    -.zi-build-module
    -.zi-cd
    -.zi-cdisable
    -.zi-cenable
    -.zi-changes
    -.zi-check-comp-consistency
    -.zi-check-which-completions-are-enabled
    -.zi-check-which-completions-are-installed
    -.zi-clear-completions
    -.zi-clear-report-for
    -.zi-compile-uncompile-all
    -.zi-compiled
    -.zi-confirm
    -.zi-control-menu
    -.zi-create
    -.zi-delete
    -.zi-diff-env-compute
    -.zi-diff-functions-compute
    -.zi-diff-options-compute
    -.zi-diff-parameter-compute
    -.zi-edit
    -.zi-exists-message
    -.zi-find-completions-of-plugin
    -.zi-format-env
    -.zi-format-functions
    -.zi-format-options
    -.zi-format-parameter
    -.zi-get-completion-owner
    -.zi-get-completion-owner-uspl2col
    -.zi-get-path
    -.zi-glance
    -.zi-help
    -.zi-list-bindkeys
    -.zi-list-compdef-replay
    -.zi-ls
    -.zi-module
    -.zi-pager
    -.zi-prepare-readlink
    -.zi-recall
    -.zi-recently
    -.zi-restore-extendedglob
    -.zi-run-delete-hooks
    -.zi-save-set-extendedglob
    -.zi-search-completions
    -.zi-self-update
    -.zi-show-all-reports
    -.zi-show-completions
    -.zi-show-debug-report
    -.zi-show-registered-plugins
    -.zi-show-report
    -.zi-show-times
    -.zi-show-zstatus
    -.zi-stress
    -.zi-uncompile-plugin
    -.zi-uninstall-completions
    -.zi-unload
    -.zi-unregister-plugin
    -.zi-update-all-parallel
    -.zi-update-or-status
    -.zi-update-or-status-all
    -.zi-update-or-status-snippet
    -.zi-wait-for-update-jobs
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-analytics-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-analytics-menu [[[
    -Shows ❮ ZI ❯ analytics.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-any-to-uspl2
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-uspl2 [[[
    -Converts given plugin-spec to format that's used in keys for hash tables.
    -So basically, creates string "user/plugin" (this format is called: uspl2).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-report-for
    -.zi-exists-message
    -
    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-build-module
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-build-module [[[
    -Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    -
    -
    -
    -
    -
    -

    Has 41 line(s). Calls functions:

    -
    -
    -
    -
    .zi-build-module
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    zi-cd
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cd [[[
    -Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cd
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-cdisable
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cdisable [[[
    -Enables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cdisable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-cenable
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cenable [[[
    -Disables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cenable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-changes
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-changes [[[
    -Shows `git log` of given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-changes
    -|-- side.zsh/.zi-exists-physically-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-check-comp-consistency
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-comp-consistency [[[
    -❮ ZI ❯ creates symlink for each installed completion.
    -This function checks whether given completion (i.e.
    -file like "_mkdir") is indeed a symlink. Backup file
    -is a completion that is disabled - has the leading "_" removed.
    -
    -
    -
    -
    -
    $1 - path to completion within plugin's directory
    -$2 - path to backup file within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-check-which-completions-are-enabled
    -

    - ~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is disabled - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    Uninstalled completions will be reported as "0" - i.e. disabled
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-check-which-completions-are-installed
    -

    - ~~~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-installed [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is installed - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-clear-completions
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-completions [[[
    -Delete stray and improper completions.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 35 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-clear-report-for
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-report-for [[[
    -Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -additional.zsh/.zi-clear-debug-report
    -
    -
    -
    -
    zi-compile-uncompile-all
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-uncompile-all [[[
    -Compiles or uncompiles all existing (on disk) plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -|-- install.zsh/.zi-compile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-compiled
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compiled [[[
    -Displays list of plugins that are compiled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compiled
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-confirm
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-confirm [[[
    -Prints given question, waits for "y" key, evals given expression if "y" obtained
    -
    -
    -
    -
    -
    $1 - question
    -$2 - expression
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, read

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-delete
    -
    -
    -
    -
    zi-control-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-control-menu [[[
    -Shows control options.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-create
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-create [[[
    -Creates a plugin, also on Github (if not "_local/name" plugin).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 103 line(s). Calls functions:

    -
    -
    -
    -
    .zi-create
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, vared

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-delete
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-delete [[[
    -Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Calls functions:

    -
    -
    -
    -
    .zi-delete
    -|-- side.zsh/.zi-compute-ice
    -|-- zi.zsh/+zi-prehelp-usage-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-parse-opts
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-diff-env-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env-compute [[[
    -Computes ZI_PATH, ZI_FPATH that hold (f)path components
    -added by plugin. Uses data gathered earlier by .zi-diff-env().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-functions-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions-compute [[[
    -Computes FUNCTIONS that holds new functions added by plugin.
    -Uses data gathered earlier by .zi-diff-functions().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-options-compute
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options-compute [[[
    -Computes OPTIONS that holds options changed by plugin.
    -Uses data gathered earlier by .zi-diff-options().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-parameter-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter-compute [[[
    -Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    -parameters created or changed (their type) by plugin. Uses
    -data gathered earlier by .zi-diff-parameter().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-edit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-edit [[[
    -Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-edit
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-exists-message
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-message [[[
    -Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-message
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-find-completions-of-plugin
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-completions-of-plugin [[[
    -Searches for completions owned by given plugin.
    -Returns them in `reply' array.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-find-completions-of-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-env
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-env [[[
    -Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -$2 - if 1, then examine PATH, if 2, then examine FPATH
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-functions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-functions [[[
    -Creates a one or two columns text with functions created by given plugin.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-options [[[
    -Creates one-column text about options that changed when plugin "$1" was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-format-options
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-parameter
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-parameter [[[
    -Creates one column text that lists global parameters that changed when the given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-get-completion-owner
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner [[[
    -Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    -
    -
    -
    -
    -
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    -
    -
    -
    -
    -
    :A will read the link "twice" and give the final repository
    -directory, possibly without username in the uspl format; readlink will read the link "once"
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-completions
    -.zi-get-completion-owner-uspl2col
    -.zi-show-completions
    -
    -
    -
    -
    zi-get-completion-owner-uspl2col
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    -For shortening of code - returns colorized plugin name
    -that owns given completion.
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-completion-owner-uspl2col
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-get-path
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-path [[[
    -Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    -("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-path
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cd
    -.zi-uninstall-completions
    -
    -
    -
    -
    zi-glance
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-glance [[[
    -Shows colorized source code of plugin. Is able to use pygmentize,
    -highlight, GNU source-highlight.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 37 line(s). Calls functions:

    -
    -
    -
    -
    .zi-glance
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-help
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-help [[[
    -Shows usage information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-bindkeys
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-bindkeys [[[
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-list-bindkeys
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-compdef-replay
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-compdef-replay [[[
    -Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    -for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-ls
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ls [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-module
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-module [[[
    -Function that has sub-commands passed as long-options (with two dashes, --).
    -It's an attempt to plugin only this one function into `zi' function
    -defined in zi.zsh, to not make this file longer than it's needed.
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-build-module
    -zi.zsh/Script-Body
    -zi.zsh/zi
    -
    -
    -
    -
    zi-pager
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pager [[[
    -BusyBox less lacks the -X and -i options, so it can use more
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-glance
    -.zi-self-update
    -.zi-update-or-status
    -
    -
    -
    -
    zi-prepare-readlink
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-readlink [[[
    -Prepares readlink command, used for establishing completion's owner.
    -
    -
    -
    -
    -
    $REPLY = ":" or "readlink"
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -.zi-clear-completions
    -.zi-show-completions
    -
    -
    -
    -
    zi-recall
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recall [[[
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recall
    -|-- side.zsh/.zi-compute-ice
    -`-- zi.zsh/+zi-deploy-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-recently
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recently [[[
    -Shows plugins that obtained commits in specified past time.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - time spec, e.g. "1 week"
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recently
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-restore-extendedglob
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-restore-extendedglob [[[
    -Restores extendedglob-option from state saved earlier.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-run-delete-hooks
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-delete-hooks [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-delete-hooks
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-save-set-extendedglob
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-save-set-extendedglob [[[
    -Enables extendedglob-option first saving if it was already
    -enabled, for restoration of this state later.
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-search-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-search-completions [[[
    -While .zi-show-completions() shows what completions are
    -installed, this functions searches through all plugin dirs
    -showing what's available in general (for installation).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-search-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-self-update
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-self-update [[[
    -Updates ❮ ZI ❯ code (does a git pull).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 43 line(s). Calls functions:

    -
    -
    -
    -
    .zi-self-update
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-all-reports
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-all-reports [[[
    -Displays reports of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-all-reports
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-completions [[[
    -Display installed (enabled and disabled), completions. Detect
    -stray and improper ones.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-debug-report
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-debug-report [[[
    -Displays dtrace report (data recorded in interactive session).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-debug-report
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-registered-plugins
    -

    - ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-registered-plugins [[[
    -Lists loaded plugins (subcommands list, loaded).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-registered-plugins
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-report
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-report [[[
    -Displays report of the plugin given.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 66 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-report
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-all-reports
    -.zi-show-debug-report
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-times
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-times [[[
    -Shows loading times of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 51 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-times
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-zstatus
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-zstatus [[[
    -Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    -of available completions, etc.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 47 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-zstatus
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-stress
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-stress [[[
    -Compiles plugin with various options on and off to see how well the code is written. The options are:
    -
    -
    -
    -
    -
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Calls functions:

    -
    -
    -
    -
    .zi-stress
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-uncompile-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uncompile-plugin [[[
    -Uncompiles given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uncompile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-uninstall-completions
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uninstall-completions [[[
    -Removes all completions of given plugin from Zshell (i.e. from FPATH).
    -The FPATH is typically `~/.zi/completions/'.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uninstall-completions
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-unload
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unload [[[
    -0. Call the Zsh Plugin's Standard *_plugin_unload function
    -0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    -1. Delete bindkeys (...)
    -2. Delete Zstyles
    -3. Restore options
    -4. Remove aliases
    -5. Restore Zle state
    -6. Unfunction functions (created by plugin)
    -7. Clean-up FPATH and PATH
    -8. Delete created variables
    -9. Forget the plugin
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 380 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unload
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): alias, bindkey, eval, setopt, - unalias, - unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    additional.zsh/.zi-debug-unload
    -zi.zsh/.zi-run-task
    -zi.zsh/zi
    -
    -
    -
    -
    zi-unregister-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unregister-plugin [[[
    -Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    -zsh_loaded_plugins array (managed according to the plugin standard)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unregister-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -
    -
    -
    -
    zi-update-all-parallel
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-in-parallel [[[
    -
    -
    -
    -
    -
    -

    Has 63 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-all-parallel
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -
    -
    -
    -
    zi-update-or-status
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status [[[
    -Updates (git pull) or does `git status' for given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - "status" for status, other for update
    -$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$3 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 263 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status
    -|-- install.zsh/.zi-get-latest-gh-r-url-part
    -|-- install.zsh/.zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-exists-physically
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-store-ices
    -|-- side.zsh/.zi-two-paths
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-set-m-func
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt, source, - trap, - wait -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-all
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-all [[[
    -Updates (git pull) or does `git status` for all existing plugins.
    -This includes also plugins that are not loaded into Zsh (but exist
    -on disk). Also updates (i.e. redownloads) snippets.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 96 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-all
    -|-- install.zsh/.zi-compinit
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-snippet
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-snippet [[[
    -
    -
    -
    -
    -
    Implements update or status operation for snippet given by URL.
    -
    -
    -
    -
    -
    $1 - "status" or "update"
    -$2 - snippet URL
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-snippet
    -|-- install.zsh/.zi-update-snippet
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -.zi-update-or-status
    -
    -
    -
    -
    zi-wait-for-update-jobs
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-wait-for-update-jobs [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-wait-for-update-jobs
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html deleted file mode 100644 index 65bfcd5..0000000 --- a/code/html/install.zsh.html +++ /dev/null @@ -1,3648 +0,0 @@ - - - - - - - - - install.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    install.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-at-eval
    - .zi-compile-plugin
    - .zi-compinit
    - .zi-download-file-stdout
    - .zi-download-snippet
    - .zi-extract
    - .zi-forget-completion
    - .zi-get-cygwin-package
    - .zi-get-latest-gh-r-url-part
    - .zi-get-package
    - .zi-get-url-mtime
    - .zi-install-completions
    - .zi-mirror-using-svn
    - .zi-parse-json
    - .zi-setup-plugin-dir
    - .zi-update-snippet
    - zicp
    - ziextract
    - zimv
    - zpextract
    - ∞zi-atclone-hook
    - ∞zi-atpull-e-hook
    - ∞zi-atpull-hook
    - ∞zi-compile-plugin-hook
    - ∞zi-cp-hook
    - ∞zi-extract-hook
    - ∞zi-make-e-hook
    - ∞zi-make-ee-hook
    - ∞zi-make-hook
    - ∞zi-mv-hook
    - ∞zi-ps-on-update-hook
    - ∞zi-reset-hook
    -AUTOLOAD compinit
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -∞zi-atpull-hook
    -
    -
    -
    -
    zi-compile-plugin
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-plugin [[[
    -Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 84 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-plugin
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -autoload.zsh/.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-compinit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compinit [[[
    -User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    -After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    -
    -
    -
    -
    -
    No arguments.
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compinit
    -|-- compinit
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, setopt, unfunction -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-or-status-all
    -zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-download-file-stdout
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-file-stdout [[[
    -Downloads file to stdout. Supports following backend commands:
    -curl, wget, lftp, lynx. Used by snippet loading.
    -
    -
    -
    -
    -
    -

    Has 46 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-file-stdout
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-get-cygwin-package
    -.zi-get-package
    -.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-download-snippet
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-snippet [[[
    -Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    -with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    -to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    -
    -
    -
    -
    -
    -

    Has 309 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-snippet
    -|-- side.zsh/.zi-store-ices
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-snippet
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    zi-extract
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-extract() [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-extract
    -|-- zi.zsh/+zi-message
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-extract-hook
    -
    -
    -
    -
    zi-forget-completion
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-forget-completion [[[
    -Implements alternation of Zsh state so that already initialized
    -completion stops being visible to Zsh.
    -
    -
    -
    -
    -
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -.zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -zi.zsh/zi
    -
    -
    -
    -
    zi-get-cygwin-package
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-cygwin-package [[[
    -
    -
    -
    -
    -
    -

    Has 70 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-cygwin-package
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -
    -
    -
    -
    zi-get-latest-gh-r-url-part
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-latest-gh-r-url-part [[[
    -Gets version string of latest release of given Github package.
    -Connects to Github releases page.
    -
    -
    -
    -
    -
    -

    Has 101 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-latest-gh-r-url-part
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-get-package
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-package [[[
    -
    -
    -
    -
    -
    -

    Has 194 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-package
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/@zi-substitute
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-load
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-get-url-mtime
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-url-mtime [[[
    -For the given URL returns the date in the Last-Modified header as a time stamp
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-install-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-install-completions [[[
    -Installs all completions of given plugin. After that they are
    -visible to `compinit'. Visible completions can be selectively
    -disabled and enabled. User can access completion data with
    -`clist' or `completions' subcommand.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$3 - if 1, then reinstall, otherwise only install completions that aren't there
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-install-completions
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-setup-plugin-dir
    -zi.zsh/zi
    -
    -
    -
    -
    zi-mirror-using-svn
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-mirror-using-svn [[[
    -Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    -in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    -compares remote and local revision and outputs true if update is needed.
    -
    -
    -
    -
    -
    $1 - URL
    -$2 - mode, "" - normal, "-u" - update, "-t" - test
    -$3 - subdirectory (not path) with working copy, needed for -t and -u
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-parse-json
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-parse-json [[[
    -Retrievies the ice-list from given profile from the JSON of the package.json.
    -
    -
    -
    -
    -
    -

    Has 102 line(s). Calls functions:

    -
    -
    -
    -
    .zi-parse-json
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-get-package
    -
    -
    -
    -
    zi-setup-plugin-dir
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-plugin-dir [[[
    -Clones given plugin into PLUGIN_DIR. Supports multiple
    -sites (respecting `from' and `proto' ice modifiers).
    -Invokes compilation of plugin's main file.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -
    -
    -
    -
    -
    -

    Has 189 line(s). Calls functions:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-store-ices
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -zi.zsh/.zi-load
    -
    -
    -
    -
    zi-update-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-update-snippet [[[
    -
    -
    -
    -
    -
    -

    Has 72 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-snippet
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- zi.zsh/.zi-pack-ice
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status-snippet
    -
    -
    -
    -
    -

    zicp

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zicp [[[
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zimv
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    -

    ziextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ziextract [[[
    -If the file is an archive, it is extracted by this function.
    -Next stage is scanning of files with the common utility `file',
    -to detect executables. They are given +x mode. There are also
    -messages to the user on performed actions.
    -
    -
    -
    -
    -
    $1 - url
    -$2 - file
    -
    -
    -
    -
    -
    -

    Has 274 line(s). Calls functions:

    -
    -
    -
    -
    ziextract
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, unfunction, zparseopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-extract
    -.zi-get-package
    -.zi-setup-plugin-dir
    -zpextract
    -
    -
    -
    -
    -

    zimv

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zimv [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    zimv
    -`-- zicp
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zpextract [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpextract
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atclone-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atclone-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atclone-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-compile-plugin-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-compile-plugin-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-cp-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-cp-hook [[[
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-cp-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-extract-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-extract-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-extract-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-e-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-ee-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-ee-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-ee-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-mv-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-mv-hook [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-mv-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-ps-on-update-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-ps-on-update-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-ps-on-update-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-reset-hook

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ∞zi-reset-opt-hook [[[
    -
    -
    -
    -
    -
    -

    Has 79 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-reset-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html deleted file mode 100644 index 76e3eab..0000000 --- a/code/html/side.zsh.html +++ /dev/null @@ -1,2932 +0,0 @@ - - - - - - - - - side.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    side.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-any-colorify-as-uspl2
    - .zi-compute-ice
    - .zi-countdown
    - .zi-exists-physically
    - .zi-exists-physically-message
    - .zi-first
    - .zi-store-ices
    - .zi-two-paths
    -AUTOLOAD zmv
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-any-colorify-as-uspl2
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    -Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$REPLY = ANSI-colorified "user/plugin" string
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-colorify-as-uspl2
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-clear-completions
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-exists-message
    -autoload.zsh/.zi-get-completion-owner-uspl2col
    -autoload.zsh/.zi-list-bindkeys
    -autoload.zsh/.zi-recently
    -autoload.zsh/.zi-search-completions
    -autoload.zsh/.zi-show-completions
    -autoload.zsh/.zi-show-registered-plugins
    -autoload.zsh/.zi-show-times
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -zi.zsh/.zi-formatter-pid
    -
    -
    -
    -
    zi-compute-ice
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compute-ice [[[
    -Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    -taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    -(only valid if ICE[svn] is not set).
    -
    -
    -
    -
    -
    Can also pack resulting ices into ZI_SICE (see $2).
    -
    -
    -
    -
    -
    $1 - URL (also plugin-spec)
    -$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    -wins with static ice; "pack-nf" means that disk-ices will
    -be ignored (no-file?)
    -$3 - name of output associative array, "ICE" is the default
    -$4 - name of output string parameter, to hold path to directory ("local_dir")
    -$5 - name of output string parameter, to hold filename ("filename")
    -$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    -
    -
    -
    -
    -
    -

    Has 116 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compute-ice
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-pack-ice
    -`-- zmv
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, zmv

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-delete
    -autoload.zsh/.zi-edit
    -autoload.zsh/.zi-recall
    -autoload.zsh/.zi-update-or-status-snippet
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-countdown
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-countdown [[[
    -Displays a countdown 5...4... etc. and returns 0 if it
    -sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-countdown
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-run-delete-hooks
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-atpull-e-hook
    -install.zsh/∞zi-atpull-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -
    -
    -
    -
    zi-exists-physically
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-exists-physically-message
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically-message [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -
    -
    -
    -
    zi-first
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-first [[[
    -Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    -ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    -is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-first
    -|-- zi.zsh/.zi-any-to-pid
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-find-other-matches
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-two-paths
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-store-ices
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-store-ices [[[
    -Saves ice mods in given hash onto disk.
    -
    -
    -
    -
    -
    $1 - directory where to create / delete files
    -$2 - name of hash that holds values
    -$3 - additional keys of hash to store, space separated
    -$4 - additional keys of hash to store, empty-meaningful ices, space separated
    -$5 - the URL, if applicable
    -$6 - the mode (1 - svn, 0 - single file), if applicable
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-two-paths
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-two-paths [[[
    -Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    -returns 2 possible paths for further examination
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-two-paths
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    -

    zmv

    -
    -
    -
    -
    -
    function zmv {
    -zmv, zcp, zln:
    -
    -
    -
    -
    -
    This is a multiple move based on zsh pattern matching.  To get the full
    -power of it, you need a postgraduate degree in zsh.  However, simple
    -tasks work OK, so if that's all you need, here are some basic examples:
    -zmv '(*).txt' '$1.lis'
    -Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    -gets replaced by the $1 (not the `*', as happens in mmv, and note the
    -`$', not `=', so that you need to quote both words).
    -
    -
    -
    -
    -
    -

    Has 299 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, getopts, read, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html deleted file mode 100644 index ec9e442..0000000 --- a/code/html/zi.zsh.html +++ /dev/null @@ -1,4886 +0,0 @@ - - - - - - - - - zi.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    zi.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     +zi-deploy-message
    - +zi-message
    - +zi-prehelp-usage-message
    - -zi_scheduler_add_sh
    - .zi-add-fpath
    - .zi-add-report
    - .zi-any-to-pid
    - .zi-any-to-user-plugin
    - .zi-compdef-clear
    - .zi-compdef-replay
    - .zi-diff
    - .zi-diff-env
    - .zi-diff-functions
    - .zi-diff-options
    - .zi-diff-parameter
    - .zi-find-other-matches
    - .zi-formatter-bar
    - .zi-formatter-bar-util
    - .zi-formatter-pid
    - .zi-formatter-th-bar
    - .zi-formatter-url
    - .zi-get-mtime-into
    - .zi-get-object-path
    - .zi-ice
    - .zi-load
    - .zi-load-ices
    - .zi-load-object
    - .zi-load-plugin
    - .zi-load-snippet
    - .zi-main-message-formatter
    - .zi-pack-ice
    - .zi-parse-opts
    - .zi-prepare-home
    - .zi-register-plugin
    - .zi-run
    - .zi-run-task
    - .zi-set-m-func
    - .zi-setup-params
    - .zi-submit-turbo
    - .zi-tmp-subst-off
    - .zi-tmp-subst-on
    - .zi-util-shands-path
    - :zi-reload-and-run
    - :zi-tmp-subst-alias
    - :zi-tmp-subst-autoload
    - :zi-tmp-subst-bindkey
    - :zi-tmp-subst-compdef
    - :zi-tmp-subst-zle
    - :zi-tmp-subst-zstyle
    - @autoload
    - @zi-register-annex
    - @zi-register-hook
    - @zi-substitute
    - @zsh-plugin-run-on-unload
    - @zsh-plugin-run-on-update
    - pmodload
    - zi
    - zi-turbo
    - zicdclear
    - zicdreplay
    - zicompdef
    - zicompinit
    - zpcdclear
    - zpcdreplay
    - zpcompdef
    - zpcompinit
    -AUTOLOAD add-zsh-hook
    -AUTOLOAD compinit
    -AUTOLOAD is-at-least
    -PRECMD-HOOK @zi-scheduler
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 202 line(s). Calls functions:

    -
    -
    -
    -
    Script-Body
    -|-- +zi-message
    -|-- @zi-register-hook
    -|-- add-zsh-hook
    -|-- autoload.zsh/.zi-module
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, alias, autoload, export, - is-at-least, setopt, source, zmodload, zstyle -

    -
    -
    -

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    -
    -
    -
    -

    +zi-deploy-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-deploy-message. [[[
    -Deploys a sub-prompt message to be displayed OR a `zle
    -.reset-prompt' call to be invoked
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-recall
    -
    -
    -
    -
    -

    +zi-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-message. [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -.zi-compdef-clear
    -.zi-compdef-replay
    -.zi-load-snippet
    -.zi-register-plugin
    -.zi-run
    -.zi-set-m-func
    -:zi-tmp-subst-autoload
    -Script-Body
    -zi
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-unload
    -additional.zsh/:zi-tmp-subst-source
    -autoload.zsh/.zi-build-module
    -autoload.zsh/.zi-cd
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-show-zstatus
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -autoload.zsh/.zi-wait-for-update-jobs
    -install.zsh/.zi-compile-plugin
    -install.zsh/.zi-compinit
    -install.zsh/.zi-download-file-stdout
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-extract
    -install.zsh/.zi-get-cygwin-package
    -install.zsh/.zi-get-latest-gh-r-url-part
    -install.zsh/.zi-get-package
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -install.zsh/ziextract
    -install.zsh/∞zi-ps-on-update-hook
    -install.zsh/∞zi-reset-hook
    -side.zsh/.zi-countdown
    -side.zsh/.zi-exists-physically-message
    -
    -
    -
    -
    -

    +zi-prehelp-usage-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-prehelp-usage-message. [[[
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    -

    -zi_scheduler_add_sh

    -
    -
    -
    -
    -
    FUNCTION: -zi_scheduler_add_sh. [[[
    -Copies task into ZI_RUN array, called when a task timeouts.
    -A small function ran from pattern in /-substitution as a math
    -function.
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-add-fpath
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-fpath. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-add-fpath
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-add-report
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-report. [[[
    -Adds a report line for given plugin.
    -
    -
    -
    -
    -
    $1 - uspl2, i.e. user/plugin
    -$2, ... - the text
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -:zi-tmp-subst-alias
    -:zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -:zi-tmp-subst-compdef
    -:zi-tmp-subst-zle
    -:zi-tmp-subst-zstyle
    -
    -
    -
    -
    zi-any-to-pid
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-any-to-user-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-user-plugin. [[[
    -Allows elastic plugin-spec across the code.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    Returns user and plugin in $reply.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-add-fpath
    -.zi-get-object-path
    -.zi-load
    -.zi-run
    -:zi-tmp-subst-autoload
    -autoload.zsh/.zi-any-to-uspl2
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-delete
    -autoload.zsh/.zi-find-completions-of-plugin
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-show-report
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-unregister-plugin
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-compute-ice
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-exists-physically
    -side.zsh/.zi-first
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-compdef-clear
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-clear. [[[
    -Implements user-exposed functionality to clear gathered compdefs.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-clear
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdclear
    -zpcdclear
    -
    -
    -
    -
    zi-compdef-replay
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-replay. [[[
    -Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-replay
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): compdef

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdreplay
    -zpcdreplay
    -
    -
    -
    -
    zi-diff
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff. [[[
    -Performs diff actions of all types
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-diff-env
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env. [[[
    -Implements detection of change in PATH and FPATH.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -.zi-load-plugin
    -
    -
    -
    -
    zi-diff-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions. [[[
    -Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options. [[[
    -Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-parameter
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter. [[[
    -Implements detection of change in any parameter's existence and type.
    -Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-find-other-matches
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-other-matches. [[[
    -Plugin's main source file is in general `name.plugin.zsh'. However,
    -there can be different conventions, if that file is not found, then
    -this functions examines other conventions in the most sane order.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-formatter-bar
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar-util
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar-util. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-bar
    -.zi-formatter-th-bar
    -
    -
    -
    -
    zi-formatter-pid
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-pid
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-th-bar
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-th-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-th-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-url
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-url. [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-get-mtime-into
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-mtime-into. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-update-or-status-all
    -
    -
    -
    -
    zi-get-object-path
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-object-path. [[[
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-ices
    -.zi-load-snippet
    -.zi-run
    -zi
    -autoload.zsh/.zi-get-path
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-first
    -side.zsh/.zi-two-paths
    -
    -
    -
    -
    zi-ice
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ice. [[[
    -Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    -next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    -
    -
    -
    -
    -
    -

    Has 12 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load. [[[
    -Implements the exposed-to-user action of loading a plugin.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin name, if the third format is used
    -
    -
    -
    -
    -
    -

    Has 76 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load
    -|-- +zi-deploy-message
    -|-- install.zsh/.zi-get-package
    -`-- install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-run-task
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-load-ices
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-ices. [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-ices
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load-object
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-object. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-object
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-load-plugin
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-plugin. [[[
    -Lower-level function for loading a plugin.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -$3 - mode (light or load)
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-plugin
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, unfunction, - zle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-load-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-snippet. [[[
    -Implements the exposed-to-user action of loading a snippet.
    -
    -
    -
    -
    -
    $1 - url (can be local, absolute path).
    -
    -
    -
    -
    -
    -

    Has 173 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-snippet
    -|-- +zi-deploy-message
    -|-- +zi-message
    -`-- install.zsh/.zi-download-snippet
    -
    -
    -
    -

    Uses feature(s): autoload, eval, setopt, source, - unfunction, zparseopts, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-load
    -.zi-run-task
    -pmodload
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-main-message-formatter
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: +zi-message-formatter [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-pack-ice
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pack-ice. [[[
    -Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    -second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    -or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -@zsh-plugin-run-on-unload
    -@zsh-plugin-run-on-update
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-compute-ice
    -
    -
    -
    -
    zi-parse-opts
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: +zi-parse-opts. [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    zi-prepare-home
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-home. [[[
    -Creates all directories needed by ZI, first checks if they already exist.
    -
    -
    -
    -
    -
    -

    Has 38 line(s). Calls functions:

    -
    -
    -
    -
    .zi-prepare-home
    -|-- autoload.zsh/.zi-clear-completions
    -`-- install.zsh/.zi-compinit
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-register-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-register-plugin. [[[
    -Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    -zsh_loaded_plugins array (managed according to the plugin standard:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-register-plugin
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-run
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run. [[[
    -Run code inside plugin's folder
    -It uses the `correct' parameter from upper's scope zi().
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-run-task
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-task. [[[
    -A backend, worker function of .zi-scheduler. It obtains the tasks
    -index and a few of its properties (like the type: plugin, snippet,
    -service plugin, service snippet) and executes it first checking for
    -additional conditions (like non-numeric wait'' ice).
    -
    -
    -
    -
    -
    $1 - the pass number, either 1st or 2nd pass
    -$2 - the time assigned to the task
    -$3 - type: plugin, snippet, service plugin, service snippet
    -$4 - task's index in the ZI[WAIT_ICE_...] fields
    -$5 - mode: load or light
    -$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-task
    -`-- autoload.zsh/.zi-unload
    -
    -
    -
    -

    Uses feature(s): eval, source, zle, zpty

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -
    -
    -
    -
    zi-set-m-func
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION:.zi-set-m-func() [[[
    -Sets and withdraws the temporary, atclone/atpull time function `m`.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-set-m-func
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-setup-params
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-params. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -
    -
    -
    -
    zi-submit-turbo
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-submit-turbo. [[[
    -If `zi load`, `zi light` or `zi snippet`  will be
    -preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    -ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    -and this function adds it to internal data structures, so that
    -@zi-scheduler can run (load, unload) this as a task.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-tmp-subst-off
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-off. [[[
    -Turn off temporary substituting of functions completely for a given mode ("load", "light",
    -"light-b" (i.e. the `trackbinds' mode) or "compdef").
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-tmp-subst-on
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-on. [[[
    -Turn on temporary substituting of functions of builtins and functions according to passed
    -mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    -to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -
    -
    -
    -
    zi-util-shands-path
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-util-shands-path. [[[
    -Replaces parts of path with %HOME, etc.
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    :zi-reload-and-run

    -
    -
    -
    -
    -
    FUNCTION: :zi-reload-and-run. [[[
    -Marks given function ($3) for autoloading, and executes it triggering the load.
    -$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    -because using that on older Zsh versions causes problems with traps.
    -
    -
    -
    -
    -
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    -
    -
    -
    -
    -
    $1 - FPATH dedicated to function
    -$2 - autoload options
    -$3 - function name (one that needs autoloading)
    -
    -
    -
    -
    -
    Author: Bart Schaefer
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, unfunction

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-alias

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-alias. [[[
    -Function defined to hijack plugin's calls to the `alias' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-alias
    -
    -
    -
    -

    Uses feature(s): alias, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-autoload

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-autoload. [[[
    -Function defined to hijack plugin's calls to the `autoload' builtin.
    -
    -
    -
    -
    -
    The hijacking is not only to gather report data, but also to.
    -run custom `autoload' function, that doesn't need FPATH.
    -
    -
    -
    -
    -
    -

    Has 106 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -|-- +zi-message
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): autoload, eval, is-at-least, setopt, - zparseopts -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -@autoload
    -
    -
    -
    -
    -

    :zi-tmp-subst-bindkey

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    -Function defined to hijack plugin's calls to the `bindkey' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-bindkey
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts -

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-compdef

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-compdef. [[[
    -Function defined to hijack plugin's calls to the `compdef' function.
    -The hijacking is not only for reporting, but also to save compdef
    -calls so that `compinit' can be called after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-compdef
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zle. [[[.
    -Function defined to hijack plugin's calls to the `zle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zle
    -
    -
    -
    -

    Uses feature(s): setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zstyle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    -Function defined to hijack plugin's calls to the `zstyle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zstyle
    -
    -
    -
    -

    Uses feature(s): setopt, zparseopts, zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @autoload

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: @autoload. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    @autoload
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-annex

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-annex. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-hook

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-hook. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -
    -

    @zi-scheduler

    -
    -
    -
    -
    -
    FUNCTION: @zi-scheduler. [[[
    -Searches for timeout tasks, executes them. There's an array of tasks
    -waiting for execution, this scheduler manages them, detects which ones
    -should be run at current moment, decides to remove (or not) them from
    -the array after execution.
    -
    -
    -
    -
    -
    $1 - if "following", then it is non-first (second and more)
    -invocation of the scheduler; this results in chain of `sched'
    -invocations that results in repetitive @zi-scheduler activity.
    -
    -
    -
    -
    -
    if "burst", then all tasks are marked timeout and executed one
    -by one; this is handy if e.g. a docker image starts up and
    -needs to install all turbo-mode plugins without any hesitation
    -(delay), i.e. "burst" allows to run package installations from
    -script, not from prompt.
    -
    -
    -
    -
    -
    -

    Has 74 line(s). Is a precmd hook. Calls functions:

    -
    -
    -
    -
    @zi-scheduler
    -`-- add-zsh-hook
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-substitute

    -
    -
    -
    -
    -
    FUNCTION: @zi-substitute. [[[
    -
    -
    -
    -
    -
    -

    Has 36 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-at-eval
    -install.zsh/.zi-at-eval
    -install.zsh/.zi-get-package
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-cp-hook
    -install.zsh/∞zi-extract-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -install.zsh/∞zi-mv-hook
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    @zsh-plugin-run-on-unload

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism, see:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zsh-plugin-run-on-update

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-update
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    pmodload

    -
    -
    -
    -
    -
    FUNCTION: pmodload. [[[
    -Compatibility with Prezto. Calls can be recursive.
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    pmodload
    -
    -
    -
    -

    Uses feature(s): zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zi

    -
    -
    -
    -
    -
    FUNCTION: zi. [[[
    -Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    -
    -
    -
    -
    -
    -

    Has 547 line(s). Calls functions:

    -
    -
    -
    -
    zi
    -|-- +zi-message
    -|-- +zi-prehelp-usage-message
    -|   `-- +zi-message
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- additional.zsh/.zi-debug-start
    -|-- additional.zsh/.zi-debug-stop
    -|-- additional.zsh/.zi-debug-unload
    -|-- autoload.zsh/.zi-analytics-menu
    -|-- autoload.zsh/.zi-cdisable
    -|-- autoload.zsh/.zi-cenable
    -|-- autoload.zsh/.zi-clear-completions
    -|-- autoload.zsh/.zi-compile-uncompile-all
    -|-- autoload.zsh/.zi-compiled
    -|-- autoload.zsh/.zi-control-menu
    -|-- autoload.zsh/.zi-help
    -|-- autoload.zsh/.zi-list-bindkeys
    -|-- autoload.zsh/.zi-list-compdef-replay
    -|-- autoload.zsh/.zi-ls
    -|-- autoload.zsh/.zi-module
    -|-- autoload.zsh/.zi-recently
    -|-- autoload.zsh/.zi-search-completions
    -|-- autoload.zsh/.zi-self-update
    -|-- autoload.zsh/.zi-show-all-reports
    -|-- autoload.zsh/.zi-show-completions
    -|-- autoload.zsh/.zi-show-debug-report
    -|-- autoload.zsh/.zi-show-registered-plugins
    -|-- autoload.zsh/.zi-show-report
    -|-- autoload.zsh/.zi-show-times
    -|-- autoload.zsh/.zi-show-zstatus
    -|-- autoload.zsh/.zi-uncompile-plugin
    -|-- autoload.zsh/.zi-uninstall-completions
    -|-- autoload.zsh/.zi-unload
    -|-- autoload.zsh/.zi-update-or-status
    -|-- autoload.zsh/.zi-update-or-status-all
    -|-- compinit
    -|-- install.zsh/.zi-compile-plugin
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, eval, setopt, - source -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi-turbo
    -
    -
    -
    -
    -

    zi-turbo

    -
    -
    -
    -
    -
    FUNCTION: zi-turbo. [[[
    -With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    -Anything that doesn't match will be passed as if it were an ice mod.
    -Default ices depth'3' and lucid, allowed values [0-9][a-d].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zi-turbo
    -`-- zi
    -    |-- +zi-message
    -    |-- +zi-prehelp-usage-message
    -    |   `-- +zi-message
    -    |-- additional.zsh/.zi-clear-debug-report
    -    |-- additional.zsh/.zi-debug-start
    -    |-- additional.zsh/.zi-debug-stop
    -    |-- additional.zsh/.zi-debug-unload
    -    |-- autoload.zsh/.zi-analytics-menu
    -    |-- autoload.zsh/.zi-cdisable
    -    |-- autoload.zsh/.zi-cenable
    -    |-- autoload.zsh/.zi-clear-completions
    -    |-- autoload.zsh/.zi-compile-uncompile-all
    -    |-- autoload.zsh/.zi-compiled
    -    |-- autoload.zsh/.zi-control-menu
    -    |-- autoload.zsh/.zi-help
    -    |-- autoload.zsh/.zi-list-bindkeys
    -    |-- autoload.zsh/.zi-list-compdef-replay
    -    |-- autoload.zsh/.zi-ls
    -    |-- autoload.zsh/.zi-module
    -    |-- autoload.zsh/.zi-recently
    -    |-- autoload.zsh/.zi-search-completions
    -    |-- autoload.zsh/.zi-self-update
    -    |-- autoload.zsh/.zi-show-all-reports
    -    |-- autoload.zsh/.zi-show-completions
    -    |-- autoload.zsh/.zi-show-debug-report
    -    |-- autoload.zsh/.zi-show-registered-plugins
    -    |-- autoload.zsh/.zi-show-report
    -    |-- autoload.zsh/.zi-show-times
    -    |-- autoload.zsh/.zi-show-zstatus
    -    |-- autoload.zsh/.zi-uncompile-plugin
    -    |-- autoload.zsh/.zi-uninstall-completions
    -    |-- autoload.zsh/.zi-unload
    -    |-- autoload.zsh/.zi-update-or-status
    -    |-- autoload.zsh/.zi-update-or-status-all
    -    |-- compinit
    -    |-- install.zsh/.zi-compile-plugin
    -    |-- install.zsh/.zi-compinit
    -    |-- install.zsh/.zi-forget-completion
    -    `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdclear

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicdclear. [[[
    -A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdreplay

    -
    -
    -
    -
    -
    FUNCTION: zicdreplay. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It works like `zi cdreplay', which cannot be invoked from such hook ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompdef

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompdef. [[[
    -Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompinit. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It runs `autoload compinit; compinit' and respects
    -ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdclear

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdreplay

    -
    -
    -
    -
    -
    ]]]
    -Compatibility functions. [[[
    -zinit() { zi "$@"; }
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompdef

    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompinit

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    add-zsh-hook

    -
    -
    -
    -
    -
    Add to HOOK the given FUNCTION.
    -HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    -zshexit, zsh_directory_name (the _functions subscript is not required).
    -
    -
    -
    -
    -
    With -d, remove the function from the hook instead; delete the hook
    -variable if it is empty.
    -
    -
    -
    -
    -
    -D behaves like -d, but pattern characters are active in the
    -function name, so any matching function will be deleted from the hook.
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, getopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -Script-Body
    -
    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicompinit
    -zpcompinit
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    -is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    -it'll accept any dot/dash-separated string of numbers as its second argument
    -and compare it to the dot/dash-separated first argument. Leading non-number
    -parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    -when the comparison is done; only the numbers matter. Any left-out segments
    -in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -Script-Body
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/code/pdf/additional.zsh.pdf b/code/pdf/additional.zsh.pdf deleted file mode 100644 index 96e8b636b15f079643ad5b41703e38bf5c24f7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99114 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 diff --git a/code/pdf/autoload.zsh.pdf b/code/pdf/autoload.zsh.pdf deleted file mode 100644 index 01593312bc7fffd21537282e3755843cd7f5c552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440338 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 GH2lAEiFech diff --git a/code/pdf/install.zsh.pdf b/code/pdf/install.zsh.pdf deleted file mode 100644 index b8ca33a5ceceb47a0dd7e6ac2c294f0e4f1dc97e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242957 zcmeFaiIbeibtlL}2iatZr$p)?Srl)P?5^*wqQDCPAs!$I0^kWkU?0^)g8&-rZt$i! z>#<|UWBFWp)}Hk!9OGTv>lyFN`k1vHvK=wDyc)?mJd!MrwYFztC%my&Ozi#z`}^g4 zFTeb%zAk(XR#g+x=>D$E$}jWf`!Zj?eDCGUTlVhUb$2wKPTlgK|M(C6F%`Ait>w9+ zQ`@$+W)3W^9qYAjUple6Hhb*Y^qZ?kUbsDa;f_0|W_GOfX4jTiTDL#AI={5EusqKI zGQ6ubH@n(fXf2;;?OmCD?F5qUU0Gf@HQ#HJ_P+b3dM6fGdK^OW#>rl5X2&dGSbhol z&A!xIZ6!#sZ)#@G>~RF5wuGKIwRUXj1S0aTL@@2{*}2}a)mB&EVASKw3&`=Q)t

    2S~(R8PKXlmx^rQU13mAxyy#okKq#5@WihITHk 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%0D5sBk2;{Vo96BZooCD+R1 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%0D%hi?ocX{p!Qu^Ro~m3slzCd^+QG_`>tfzs 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 diff --git a/code/pdf/zi.zsh.pdf b/code/pdf/zi.zsh.pdf deleted file mode 100644 index 17a6daf5a46ef3ff06ddf430b957f5c478219294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412082 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

    YKgSIj{KMZ)ouetQ@} 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 Av;Y7A diff --git a/zsdoc/Makefile b/zsdoc/Makefile deleted file mode 100644 index b540f2f..0000000 --- a/zsdoc/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -all: man pdf html - -# MAN -# Converted with a2x from asciidoc package - -man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 - -man/zi.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man zi.zsh.adoc - -man/side.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man side.zsh.adoc - -man/install.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man install.zsh.adoc - -man/autoload.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc - -man/additional.zsh.1: - @mkdir -p man - a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc - -# PDF -# Uses asciidoctor not a2x (i.e. not asciidoc) - -pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf - -pdf/zi.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf zi.zsh.adoc - -pdf/side.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf side.zsh.adoc - -pdf/install.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf install.zsh.adoc - -pdf/autoload.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc - -pdf/additional.zsh.pdf: - @mkdir -p pdf - asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc - -html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html - -html/zi.zsh.html: - @mkdir -p html - asciidoctor -D html zi.zsh.adoc - -html/side.zsh.html: - @mkdir -p html - asciidoctor -D html side.zsh.adoc - -html/install.zsh.html: - @mkdir -p html - asciidoctor -D html install.zsh.adoc - -html/autoload.zsh.html: - @mkdir -p html - asciidoctor -D html autoload.zsh.adoc - -html/additional.zsh.html: - @mkdir -p html - asciidoctor -D html additional.zsh.adoc - -clean: - rm -rvf man pdf html data - -.PHONY: man pdf html clean diff --git a/zsdoc/README.md b/zsdoc/README.md deleted file mode 100644 index c9709b2..0000000 --- a/zsdoc/README.md +++ /dev/null @@ -1,50 +0,0 @@ -The files will be processed and their documentation will be generated -in subdirectory `zsdoc` (with meta-data in subdirectory `data`). - -> Supported are Bash and Zsh scripts. - -- Reading configuration from: `/usr/local/share/zsdoc/zsd.config` -- Zsh control binary is: `zsh` -- Usage: `zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ...` - -Options: - -```shell --h/--help # Usage information --v/--verbose # More verbose operation-status output --q/--quiet # No status messages --n/--noansi # No colors in terminal output ---cignore # Specify which comment lines should be ignored --f/--fpath # Paths separated by : pointing to directories with functions ---synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" ---blocka # String used as block-begin, default: {{{ ---blockb # String used as block-end, default: }}} ---scomm # Strip comment char "#" from function comments ---bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) -``` - -Example --cignore options: - -```shell ---cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ ---cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ -``` - -File is parsed for synopsis block, which can be e.g.: - -```shell -# synopsis {{{my synopsis, can be multi-line}}} -``` - - Other block that is parsed is commenting on environment variables. There can be multiple such blocks, - -their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines -and results in a table in the output AsciiDoc document. An example block: - -```shell -# env-vars {{{ -# PATH -> paths to executables -# MANPATH -> paths to manuals }}} -``` - - Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. diff --git a/zsdoc/asciidoc/additional.zsh.adoc b/zsdoc/asciidoc/additional.zsh.adoc deleted file mode 100644 index 50e0404..0000000 --- a/zsdoc/asciidoc/additional.zsh.adoc +++ /dev/null @@ -1,165 +0,0 @@ -additional.zsh(1) -================= -:compat-mode!: - -NAME ----- -additional.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-clear-debug-report - .zi-debug-start - .zi-debug-stop - .zi-debug-unload - .zi-service - .zi-wrap-track-functions - :zi-tmp-subst-source - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -.zi-clear-debug-report -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-debug-report [[[ - Forgets dtrace repport gathered up to this moment. -____ - -Has 1 line(s). Calls functions: - - .zi-clear-debug-report - `-- autoload.zsh/.zi-clear-report-for - -Called by: - - autoload.zsh/.zi-unload - zi.zsh/zi - -.zi-debug-start -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-start [[[ - Starts Dtrace, i.e. session tracking for changes in Zsh state. -____ - -Has 9 line(s). Calls functions: - - .zi-debug-start - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-diff - `-- zi.zsh/.zi-tmp-subst-on - -Called by: - - zi.zsh/zi - -.zi-debug-stop -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-stop [[[ - Stops Dtrace, i.e. session tracking for changes in Zsh state. -____ - -Has 3 line(s). Calls functions: - - .zi-debug-stop - |-- zi.zsh/.zi-diff - `-- zi.zsh/.zi-tmp-subst-off - -Called by: - - zi.zsh/zi - -.zi-debug-unload -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-debug-unload [[[ - Reverts changes detected by dtrace run. -____ - -Has 6 line(s). Calls functions: - - .zi-debug-unload - |-- autoload.zsh/.zi-unload - `-- zi.zsh/+zi-message - -Uses feature(s): _source_ - -Called by: - - zi.zsh/zi - -.zi-service -~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-service [[[ - Handles given service, i.e. obtains lock, runs it, or waits if no lock - - $1 - type "p" or "s" (plugin or snippet) - $2 - mode - for plugin (light or load) - $3 - id - URL or plugin ID or alias name (from id-as'') -____ - -Has 29 line(s). Calls functions: - - .zi-service - |-- zi.zsh/.zi-load - `-- zi.zsh/.zi-load-snippet - -Uses feature(s): _kill_, _read_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-wrap-track-functions -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-wrap-track-functions [[[ -____ - -Has 19 line(s). Doesn't call other functions. - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-source -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-source [[[ -____ - -Has 25 line(s). Calls functions: - - :zi-tmp-subst-source - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - diff --git a/zsdoc/asciidoc/autoload.zsh.adoc b/zsdoc/asciidoc/autoload.zsh.adoc deleted file mode 100644 index 58fb2ad..0000000 --- a/zsdoc/asciidoc/autoload.zsh.adoc +++ /dev/null @@ -1,1520 +0,0 @@ -autoload.zsh(1) -=============== -:compat-mode!: - -NAME ----- -autoload.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-analytics-menu - .zi-any-to-uspl2 - .zi-at-eval - .zi-build-module - .zi-cd - .zi-cdisable - .zi-cenable - .zi-changes - .zi-check-comp-consistency - .zi-check-which-completions-are-enabled - .zi-check-which-completions-are-installed - .zi-clear-completions - .zi-clear-report-for - .zi-compile-uncompile-all - .zi-compiled - .zi-confirm - .zi-control-menu - .zi-create - .zi-delete - .zi-diff-env-compute - .zi-diff-functions-compute - .zi-diff-options-compute - .zi-diff-parameter-compute - .zi-edit - .zi-exists-message - .zi-find-completions-of-plugin - .zi-format-env - .zi-format-functions - .zi-format-options - .zi-format-parameter - .zi-get-completion-owner - .zi-get-completion-owner-uspl2col - .zi-get-path - .zi-glance - .zi-help - .zi-list-bindkeys - .zi-list-compdef-replay - .zi-ls - .zi-module - .zi-pager - .zi-prepare-readlink - .zi-recall - .zi-recently - .zi-restore-extendedglob - .zi-run-delete-hooks - .zi-save-set-extendedglob - .zi-search-completions - .zi-self-update - .zi-show-all-reports - .zi-show-completions - .zi-show-debug-report - .zi-show-registered-plugins - .zi-show-report - .zi-show-times - .zi-show-zstatus - .zi-stress - .zi-uncompile-plugin - .zi-uninstall-completions - .zi-unload - .zi-unregister-plugin - .zi-update-all-parallel - .zi-update-or-status - .zi-update-or-status-all - .zi-update-or-status-snippet - .zi-wait-for-update-jobs - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-analytics-menu -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-analytics-menu [[[ - Shows ❮ ZI ❯ analytics. - - User-action entry point. -____ - -Has 23 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-any-to-uspl2 -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-uspl2 [[[ - Converts given plugin-spec to format that's used in keys for hash tables. - So basically, creates string "user/plugin" (this format is called: uspl2). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 2 line(s). Calls functions: - - .zi-any-to-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-clear-report-for - .zi-exists-message - -.zi-at-eval -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-build-module -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-build-module [[[ - Performs ./configure && make on the module and displays information how to load the module in .zshrc. -____ - -Has 41 line(s). Calls functions: - - .zi-build-module - `-- zi.zsh/+zi-message - -Called by: - - .zi-module - -.zi-cd -~~~~~~ - -____ - - FUNCTION: .zi-cd [[[ - Jumps to plugin's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 15 line(s). Calls functions: - - .zi-cd - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-cdisable -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cdisable [[[ - Enables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 27 line(s). Calls functions: - - .zi-cdisable - -Called by: - - zi.zsh/zi - -.zi-cenable -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-cenable [[[ - Disables given installed completion. - - User-action entry point. - - $1 - e.g. "_mkdir" or "mkdir" -____ - -Has 26 line(s). Calls functions: - - .zi-cenable - -Called by: - - zi.zsh/zi - -.zi-changes -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-changes [[[ - Shows `git log` of given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-changes - |-- side.zsh/.zi-exists-physically-message - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-check-comp-consistency -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-comp-consistency [[[ - ❮ ZI ❯ creates symlink for each installed completion. - This function checks whether given completion (i.e. file like "_mkdir") is indeed a symlink. - Backup file is a completion that is disabled - has the leading "_" removed. - - $1 - path to completion within plugin's directory - $2 - path to backup file within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-check-which-completions-are-enabled -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-enabled [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is disabled - returns 0 or 1 on corresponding positions in reply. - - Uninstalled completions will be reported as "0" - i.e. disabled - - $1, ... - path to completion within plugin's directory -____ - -Has 10 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-check-which-completions-are-installed -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-check-which-completions-are-installed [[[ - For each argument that each should be a path to completion - within a plugin's dir, it checks whether that completion - is installed - returns 0 or 1 on corresponding positions in reply. - - $1, ... - path to completion within plugin's directory -____ - -Has 11 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-clear-completions -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-completions [[[ - Delete stray and improper completions. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 35 line(s). Calls functions: - - .zi-clear-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-clear-report-for -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-clear-report-for [[[ - Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 23 line(s). Calls functions: - - .zi-clear-report-for - -Called by: - - .zi-unload - additional.zsh/.zi-clear-debug-report - -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-compiled -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. - - User-action entry point. -____ - -Has 23 line(s). Calls functions: - - .zi-compiled - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-confirm -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-confirm [[[ - Prints given question, waits for "y" key, evals given expression if "y" obtained - - $1 - question - $2 - expression -____ - -Has 22 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _read_ - -Called by: - - .zi-delete - -.zi-control-menu -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-control-menu [[[ - Shows control options. - - User-action entry point. -____ - -Has 22 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-create -~~~~~~~~~~ - -____ - - FUNCTION: .zi-create [[[ - Creates a plugin, also on Github (if not "_local/name" plugin). - - User-action entry point. - - $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 103 line(s). Calls functions: - - .zi-create - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _autoload_, _setopt_, _vared_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-delete -~~~~~~~~~~ - -____ - - FUNCTION: .zi-delete [[[ - Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory). - - User-action entry point. - - $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 93 line(s). Calls functions: - - .zi-delete - |-- side.zsh/.zi-compute-ice - |-- zi.zsh/+zi-prehelp-usage-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-parse-opts - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-diff-env-compute -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env-compute [[[ - Computes ZI_PATH, ZI_FPATH that hold (f)path components - added by plugin. Uses data gathered earlier by .zi-diff-env(). - - $1 - user/plugin -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-functions-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions-compute [[[ - Computes FUNCTIONS that holds new functions added by plugin. - Uses data gathered earlier by .zi-diff-functions(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-options-compute -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options-compute [[[ - Computes OPTIONS that holds options changed by plugin. - Uses data gathered earlier by .zi-diff-options(). - - $1 - user/plugin -____ - -Has 16 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-diff-parameter-compute -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter-compute [[[ - Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold - parameters created or changed (their type) by plugin. Uses - data gathered earlier by .zi-diff-parameter(). - - $1 - user/plugin -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - .zi-unload - -.zi-edit -~~~~~~~~ - -____ - - FUNCTION: .zi-edit [[[ - Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-edit - `-- side.zsh/.zi-compute-ice - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-exists-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-message [[[ - Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - (optional) plugin (only when $1 - i.e. user - given) -____ - -Has 7 line(s). Calls functions: - - .zi-exists-message - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-show-report - .zi-unload - -.zi-find-completions-of-plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-completions-of-plugin [[[ - Searches for completions owned by given plugin. - Returns them in `reply' array. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 5 line(s). Calls functions: - - .zi-find-completions-of-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-format-env -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-env [[[ - Creates one-column text about FPATH or PATH elements added when given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) - $2 - if 1, then examine PATH, if 2, then examine FPATH -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-functions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-functions [[[ - Creates a one or two columns text with functions created by given plugin. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 34 line(s). Doesn't call other functions. - -Called by: - - .zi-show-report - -.zi-format-options -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-options [[[ - Creates one-column text about options that changed when plugin "$1" was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 19 line(s). Calls functions: - - .zi-format-options - -Called by: - - .zi-show-report - -.zi-format-parameter -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-format-parameter [[[ - Creates one column text that lists global parameters that changed when the given plugin was loaded. - - $1 - user/plugin (i.e. uspl2 format of plugin-spec) -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-report - -.zi-get-completion-owner -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner [[[ - Returns "user---plugin" string (uspl1 format) of plugin that owns given completion. - - Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available. - - :A will read the link "twice" and give the final repository - directory, possibly without username in the uspl format; readlink will read the link "once" - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 19 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-clear-completions - .zi-get-completion-owner-uspl2col - .zi-show-completions - -.zi-get-completion-owner-uspl2col -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-completion-owner-uspl2col [[[ - For shortening of code - returns colorized plugin name - that owns given completion. - - $1 - absolute path to completion file (in COMPLETIONS_DIR) - $2 - readlink command (":" or "readlink") -____ - -Has 2 line(s). Calls functions: - - .zi-get-completion-owner-uspl2col - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - .zi-cdisable - .zi-cenable - -.zi-get-path -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-path [[[ - Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path - ("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname. -____ - -Has 5 line(s). Calls functions: - - .zi-get-path - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-cd - .zi-uninstall-completions - -.zi-glance -~~~~~~~~~~ - -____ - - FUNCTION: .zi-glance [[[ - Shows colorized source code of plugin. Is able to use pygmentize, - highlight, GNU source-highlight. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 37 line(s). Calls functions: - - .zi-glance - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-help -~~~~~~~~ - -____ - - FUNCTION: .zi-help [[[ - Shows usage information. - - User-action entry point. -____ - -Has 31 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-list-bindkeys -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-bindkeys [[[ -____ - -Has 39 line(s). Calls functions: - - .zi-list-bindkeys - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Called by: - - zi.zsh/zi - -.zi-list-compdef-replay -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-list-compdef-replay [[[ - Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping - for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs. - - User-action entry point. -____ - -Has 5 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-ls -~~~~~~ - -____ - - FUNCTION: .zi-ls [[[ -____ - -Has 18 line(s). Doesn't call other functions. - -Called by: - - zi.zsh/zi - -.zi-module -~~~~~~~~~~ - -____ - - FUNCTION: .zi-module [[[ - Function that has sub-commands passed as long-options (with two dashes, --). - It's an attempt to plugin only this one function into `zi' function - defined in zi.zsh, to not make this file longer than it's needed. -____ - -Has 24 line(s). Calls functions: - - .zi-module - -Called by: - - .zi-build-module - zi.zsh/Script-Body - zi.zsh/zi - -.zi-pager -~~~~~~~~~ - -____ - - FUNCTION: .zi-pager [[[ - BusyBox less lacks the -X and -i options, so it can use more - TODO: .zi-pager:7: less not found -____ - -Has 14 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-glance - .zi-self-update - .zi-update-or-status - -.zi-prepare-readlink -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-readlink [[[ - Prepares readlink command, used for establishing completion's owner. - - $REPLY = ":" or "readlink" -____ - -Has 4 line(s). Doesn't call other functions. - -Uses feature(s): _type_ - -Called by: - - .zi-cdisable - .zi-cenable - .zi-clear-completions - .zi-show-completions - -.zi-recall -~~~~~~~~~~ - -____ - - FUNCTION: .zi-recall [[[ -____ - -Has 33 line(s). Calls functions: - - .zi-recall - |-- side.zsh/.zi-compute-ice - `-- zi.zsh/+zi-deploy-message - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-recently -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-recently [[[ - Shows plugins that obtained commits in specified past time. - - User-action entry point. - - $1 - time spec, e.g. "1 week" -____ - -Has 23 line(s). Calls functions: - - .zi-recently - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-restore-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-restore-extendedglob [[[ - Restores extendedglob-option from state saved earlier. -____ - -Has 1 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-run-delete-hooks -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-delete-hooks [[[ -____ - -Has 17 line(s). Calls functions: - - .zi-run-delete-hooks - `-- side.zsh/.zi-countdown - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-save-set-extendedglob -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-save-set-extendedglob [[[ - Enables extendedglob-option first saving if it was already - enabled, for restoration of this state later. -____ - -Has 2 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-format-options - .zi-unload - -.zi-search-completions -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-search-completions [[[ - While .zi-show-completions() shows what completions are - installed, this functions searches through all plugin dirs - showing what's available in general (for installation). - - User-action entry point. -____ - -Has 39 line(s). Calls functions: - - .zi-search-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-self-update -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-self-update [[[ - Updates ❮ ZI ❯ code (does a git pull). - - User-action entry point. -____ - -Has 43 line(s). Calls functions: - - .zi-self-update - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_, _zcompile_ - -Called by: - - .zi-update-or-status-all - zi.zsh/zi - -.zi-show-all-reports -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-all-reports [[[ - Displays reports of all loaded plugins. - - User-action entry point. -____ - -Has 5 line(s). Calls functions: - - .zi-show-all-reports - -Called by: - - zi.zsh/zi - -.zi-show-completions -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-completions [[[ - Display installed (enabled and disabled), completions. Detect - stray and improper ones. - - Completions live even when plugin isn't loaded - if they are - installed and enabled. - - User-action entry point. -____ - -Has 61 line(s). Calls functions: - - .zi-show-completions - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-debug-report -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-debug-report [[[ - Displays dtrace report (data recorded in interactive session). - - User-action entry point. -____ - -Has 1 line(s). Calls functions: - - .zi-show-debug-report - -Called by: - - zi.zsh/zi - -.zi-show-registered-plugins -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-registered-plugins [[[ - Lists loaded plugins (subcommands list, loaded). - - User-action entry point. -____ - -Has 19 line(s). Calls functions: - - .zi-show-registered-plugins - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-report -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-report [[[ - Displays report of the plugin given. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 66 line(s). Calls functions: - - .zi-show-report - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-show-all-reports - .zi-show-debug-report - zi.zsh/zi - -.zi-show-times -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-times [[[ - Shows loading times of all loaded plugins. - - User-action entry point. -____ - -Has 54 line(s). Calls functions: - - .zi-show-times - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-show-zstatus -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-show-zstatus [[[ - Shows ❮ ZI ❯ status, i.e. number of loaded plugins, - of available completions, etc. - - User-action entry point. -____ - -Has 47 line(s). Calls functions: - - .zi-show-zstatus - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - zi.zsh/zi - -.zi-stress -~~~~~~~~~~ - -____ - - FUNCTION: .zi-stress [[[ - Compiles plugin with various options on and off to see how well the code is written. The options are: - - NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 31 line(s). Calls functions: - - .zi-stress - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-first - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_, _zcompile_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-uncompile-plugin -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uncompile-plugin [[[ - Uncompiles given plugin. - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 20 line(s). Calls functions: - - .zi-uncompile-plugin - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compile-uncompile-all - zi.zsh/zi - -.zi-uninstall-completions -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-uninstall-completions [[[ - Removes all completions of given plugin from Zshell (i.e. from FPATH). - The FPATH is typically `~/.zi/completions/'. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 39 line(s). Calls functions: - - .zi-uninstall-completions - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-unload -~~~~~~~~~~ - -____ - - FUNCTION: .zi-unload [[[ - 0. Call the Zsh Plugin's Standard *_plugin_unload function - 0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update - 1. Delete bindkeys (...) - 2. Delete Zstyles - 3. Restore options - 4. Remove aliases - 5. Restore Zle state - 6. Unfunction functions (created by plugin) - 7. Clean-up FPATH and PATH - 8. Delete created variables - 9. Forget the plugin - - User-action entry point. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 380 line(s). Calls functions: - - .zi-unload - |-- additional.zsh/.zi-clear-debug-report - |-- side.zsh/.zi-any-colorify-as-uspl2 - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, _zle_, _zstyle_ - -Called by: - - additional.zsh/.zi-debug-unload - zi.zsh/.zi-run-task - zi.zsh/zi - -.zi-unregister-plugin -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-unregister-plugin [[[ - Removes the plugin from ZI_REGISTERED_PLUGINS array and from the - zsh_loaded_plugins array (managed according to the plugin standard) -____ - -Has 5 line(s). Calls functions: - - .zi-unregister-plugin - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-unload - -.zi-update-all-parallel -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-in-parallel [[[ -____ - -Has 63 line(s). Calls functions: - - .zi-update-all-parallel - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-update-or-status-all - -.zi-update-or-status -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status [[[ - Updates (git pull) or does `git status' for given plugin. - - User-action entry point. - - $1 - "status" for status, other for update - $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin) - $3 - plugin (only when $1 - i.e. user - given) -____ - -Has 263 line(s). Calls functions: - - .zi-update-or-status - |-- install.zsh/.zi-get-latest-gh-r-url-part - |-- install.zsh/.zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-exists-physically - |-- side.zsh/.zi-exists-physically-message - |-- side.zsh/.zi-store-ices - |-- side.zsh/.zi-two-paths - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-set-m-func - -Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - zi.zsh/zi - -.zi-update-or-status-all -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-all [[[ - Updates (git pull) or does `git status` for all existing plugins. - This includes also plugins that are not loaded into Zsh (but exist - on disk). Also updates (i.e. redownloads) snippets. - - User-action entry point. -____ - -Has 102 line(s). Calls functions: - - .zi-update-or-status-all - |-- install.zsh/.zi-compinit - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-get-mtime-into - -Uses feature(s): _setopt_, _source_ - -Called by: - - zi.zsh/zi - -.zi-update-or-status-snippet -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-update-or-status-snippet [[[ - - Implements update or status operation for snippet given by URL. - - $1 - "status" or "update" - $2 - snippet URL -____ - -Has 28 line(s). Calls functions: - - .zi-update-or-status-snippet - |-- install.zsh/.zi-update-snippet - `-- side.zsh/.zi-compute-ice - -Uses feature(s): _source_ - -Called by: - - .zi-update-all-parallel - .zi-update-or-status-all - .zi-update-or-status - -.zi-wait-for-update-jobs -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-wait-for-update-jobs [[[ -____ - -Has 14 line(s). Calls functions: - - .zi-wait-for-update-jobs - `-- zi.zsh/+zi-message - -Uses feature(s): _wait_ - -Called by: - - .zi-update-all-parallel - diff --git a/zsdoc/asciidoc/install.zsh.adoc b/zsdoc/asciidoc/install.zsh.adoc deleted file mode 100644 index 8e5bdbc..0000000 --- a/zsdoc/asciidoc/install.zsh.adoc +++ /dev/null @@ -1,746 +0,0 @@ -install.zsh(1) -============== -:compat-mode!: - -NAME ----- -install.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-at-eval - .zi-compile-plugin - .zi-compinit - .zi-download-file-stdout - .zi-download-snippet - .zi-extract - .zi-forget-completion - .zi-get-cygwin-package - .zi-get-latest-gh-r-url-part - .zi-get-package - .zi-get-url-mtime - .zi-install-completions - .zi-mirror-using-svn - .zi-parse-json - .zi-setup-plugin-dir - .zi-update-snippet - zicp - ziextract - zimv - zpextract - ∞zi-atclone-hook - ∞zi-atpull-e-hook - ∞zi-atpull-hook - ∞zi-compile-plugin-hook - ∞zi-cp-hook - ∞zi-extract-hook - ∞zi-make-e-hook - ∞zi-make-ee-hook - ∞zi-make-hook - ∞zi-mv-hook - ∞zi-ps-on-update-hook - ∞zi-reset-hook -AUTOLOAD compinit - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -Uses feature(s): _source_ - -.zi-at-eval -~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-at-eval [[[ -____ - -Has 5 line(s). Calls functions: - - .zi-at-eval - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_ - -Called by: - - ∞zi-atpull-e-hook - ∞zi-atpull-hook - -.zi-compile-plugin -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compile-plugin [[[ - Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 84 line(s). Calls functions: - - .zi-compile-plugin - |-- side.zsh/.zi-compute-ice - |-- side.zsh/.zi-first - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _zcompile_ - -Called by: - - ∞zi-compile-plugin-hook - autoload.zsh/.zi-compile-uncompile-all - zi.zsh/zi - -.zi-compinit -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compinit [[[ - User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell. - After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions. - - No arguments. -____ - -Has 26 line(s). Calls functions: - - .zi-compinit - |-- compinit - `-- zi.zsh/+zi-message - -Uses feature(s): _autoload_, _compinit_, _setopt_, _unfunction_ - -Called by: - - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-or-status-all - zi.zsh/.zi-prepare-home - zi.zsh/zi - -.zi-download-file-stdout -~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-file-stdout [[[ - Downloads file to stdout. Supports following backend commands: - curl, wget, lftp, lynx. Used by snippet loading. -____ - -Has 46 line(s). Calls functions: - - .zi-download-file-stdout - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - .zi-get-cygwin-package - .zi-get-package - .zi-setup-plugin-dir - -.zi-download-snippet -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-download-snippet [[[ - Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory, - with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows - to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto. -____ - -Has 309 line(s). Calls functions: - - .zi-download-snippet - |-- side.zsh/.zi-store-ices - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_, _zcompile_ - -Called by: - - .zi-update-snippet - zi.zsh/.zi-load-snippet - -.zi-extract -~~~~~~~~~~~ - -____ - - FUNCTION: .zi-extract() [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-extract - |-- zi.zsh/+zi-message - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - ∞zi-extract-hook - -.zi-forget-completion -~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-forget-completion [[[ - Implements alternation of Zsh state so that already initialized - completion stops being visible to Zsh. - - $1 - completion function name, e.g. "_cp"; can also be "cp" -____ - -Has 20 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-compinit - .zi-install-completions - autoload.zsh/.zi-uninstall-completions - zi.zsh/zi - -.zi-get-cygwin-package -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-cygwin-package [[[ -____ - -Has 70 line(s). Calls functions: - - .zi-get-cygwin-package - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - -.zi-get-latest-gh-r-url-part -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-latest-gh-r-url-part [[[ - Gets version string of latest release of given Github package. - Connects to Github releases page. -____ - -Has 101 line(s). Calls functions: - - .zi-get-latest-gh-r-url-part - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-setup-plugin-dir - autoload.zsh/.zi-update-or-status - -.zi-get-package -~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-get-package [[[ -____ - -Has 194 line(s). Calls functions: - - .zi-get-package - |-- zi.zsh/+zi-message - |-- zi.zsh/@zi-substitute - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_, _setopt_, _trap_ - -Called by: - - zi.zsh/.zi-load - -_Environment variables used:_ zi.zsh -> ZPFX - -.zi-get-url-mtime -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-url-mtime [[[ - For the given URL returns the date in the Last-Modified header as a time stamp -____ - -Has 34 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _setopt_, _trap_, _type_ - -Called by: - - .zi-download-snippet - -.zi-install-completions -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-install-completions [[[ - Installs all completions of given plugin. After that they are - visible to `compinit'. Visible completions can be selectively - disabled and enabled. User can access completion data with - `clist' or `completions' subcommand. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $3 - if 1, then reinstall, otherwise only install completions that aren't there -____ - -Has 61 line(s). Calls functions: - - .zi-install-completions - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - .zi-setup-plugin-dir - zi.zsh/zi - -.zi-mirror-using-svn -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-mirror-using-svn [[[ - Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update', - in normal mode invokes `svn checkout --non-interactive -q '. In test mode only - compares remote and local revision and outputs true if update is needed. - - $1 - URL - $2 - mode, "" - normal, "-u" - update, "-t" - test - $3 - subdirectory (not path) with working copy, needed for -t and -u -____ - -Has 27 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-download-snippet - -.zi-parse-json -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. -____ - -Has 102 line(s). Calls functions: - - .zi-parse-json - -Uses feature(s): _setopt_ - -Called by: - - .zi-get-package - -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. - - $1 - user - $2 - plugin -____ - -Has 189 line(s). Calls functions: - - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_ - -Called by: - - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load - -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-update-snippet [[[ -____ - -Has 72 line(s). Calls functions: - - .zi-update-snippet - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/.zi-pack-ice - -Uses feature(s): _eval_, _setopt_ - -Called by: - - autoload.zsh/.zi-update-or-status-snippet - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 275 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -zimv -~~~~ - -____ - - ]]] - FUNCTION zimv [[[ -____ - -Has 3 line(s). Calls functions: - - zimv - `-- zicp - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zpextract [[[ -____ - -Has 1 line(s). Calls functions: - - zpextract - `-- ziextract - `-- zi.zsh/+zi-message - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-compile-plugin-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-compile-plugin-hook - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-cp-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-cp-hook [[[ -____ - -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-e-hook -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-ee-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-make-hook [[[ -____ - -Has 4 line(s). Calls functions: - - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-mv-hook -~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-mv-hook [[[ -____ - -Has 21 line(s). Calls functions: - - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-ps-on-update-hook [[[ -____ - -Has 14 line(s). Calls functions: - - ∞zi-ps-on-update-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-reset-hook -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ -____ - -Has 79 line(s). Calls functions: - - ∞zi-reset-hook - `-- zi.zsh/+zi-message - -Uses feature(s): _eval_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - .zi-compinit - diff --git a/zsdoc/asciidoc/side.zsh.adoc b/zsdoc/asciidoc/side.zsh.adoc deleted file mode 100644 index da9afa2..0000000 --- a/zsdoc/asciidoc/side.zsh.adoc +++ /dev/null @@ -1,300 +0,0 @@ -side.zsh(1) -=========== -:compat-mode!: - -NAME ----- -side.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - .zi-any-colorify-as-uspl2 - .zi-compute-ice - .zi-countdown - .zi-exists-physically - .zi-exists-physically-message - .zi-first - .zi-store-ices - .zi-two-paths -AUTOLOAD zmv - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). - -.zi-any-colorify-as-uspl2 -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-colorify-as-uspl2 [[[ - Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin). - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - $REPLY = ANSI-colorified "user/plugin" string -____ - -Has 22 line(s). Calls functions: - - .zi-any-colorify-as-uspl2 - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-exists-message - autoload.zsh/.zi-get-completion-owner-uspl2col - autoload.zsh/.zi-list-bindkeys - autoload.zsh/.zi-recently - autoload.zsh/.zi-search-completions - autoload.zsh/.zi-show-completions - autoload.zsh/.zi-show-registered-plugins - autoload.zsh/.zi-show-times - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - zi.zsh/.zi-formatter-pid - -.zi-compute-ice -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compute-ice [[[ - Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice, - taking priorities into account. Also returns path to snippet directory and optional name of snippet file - (only valid if ICE[svn] is not set). - - Can also pack resulting ices into ZI_SICE (see $2). - - $1 - URL (also plugin-spec) - $2 - "pack" or "nopack" or "pack-nf" - packing means ICE - wins with static ice; "pack-nf" means that disk-ices will - be ignored (no-file?) - $3 - name of output associative array, "ICE" is the default - $4 - name of output string parameter, to hold path to directory ("local_dir") - $5 - name of output string parameter, to hold filename ("filename") - $6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet") -____ - -Has 116 line(s). Calls functions: - - .zi-compute-ice - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-pack-ice - `-- zmv - -Uses feature(s): _autoload_, _setopt_, _zmv_ - -Called by: - - autoload.zsh/.zi-delete - autoload.zsh/.zi-edit - autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status-snippet - autoload.zsh/.zi-update-or-status - install.zsh/.zi-compile-plugin - -.zi-countdown -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-countdown [[[ - Displays a countdown 5...4... etc. and returns 0 if it - sucessfully reaches 0, or 1 if Ctrl-C will be pressed. -____ - -Has 14 line(s). Calls functions: - - .zi-countdown - `-- zi.zsh/+zi-message - -Uses feature(s): _trap_ - -Called by: - - autoload.zsh/.zi-run-delete-hooks - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-atpull-e-hook - install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - -.zi-exists-physically -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically [[[ - Checks if directory of given plugin exists in PLUGIN_DIR. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 6 line(s). Calls functions: - - .zi-exists-physically - `-- zi.zsh/.zi-any-to-user-plugin - -Called by: - - .zi-exists-physically-message - autoload.zsh/.zi-create - autoload.zsh/.zi-update-or-status - -.zi-exists-physically-message -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-exists-physically-message [[[ - Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't. - - Testable. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 22 line(s). Calls functions: - - .zi-exists-physically-message - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-changes - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - -.zi-first -~~~~~~~~~ - -____ - - FUNCTION: .zi-first [[[ - Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct - ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching - is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) -____ - -Has 19 line(s). Calls functions: - - .zi-first - |-- zi.zsh/.zi-any-to-pid - |-- zi.zsh/.zi-any-to-user-plugin - |-- zi.zsh/.zi-find-other-matches - `-- zi.zsh/.zi-get-object-path - -Called by: - - .zi-two-paths - autoload.zsh/.zi-glance - autoload.zsh/.zi-stress - install.zsh/.zi-compile-plugin - -.zi-store-ices -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-store-ices [[[ - Saves ice mods in given hash onto disk. - - $1 - directory where to create / delete files - $2 - name of hash that holds values - $3 - additional keys of hash to store, space separated - $4 - additional keys of hash to store, empty-meaningful ices, space separated - $5 - the URL, if applicable - $6 - the mode (1 - svn, 0 - single file), if applicable -____ - -Has 28 line(s). Doesn't call other functions. - -Called by: - - autoload.zsh/.zi-update-or-status - install.zsh/.zi-download-snippet - install.zsh/.zi-setup-plugin-dir - -.zi-two-paths -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-two-paths [[[ - Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file), - returns 2 possible paths for further examination -____ - -Has 22 line(s). Calls functions: - - .zi-two-paths - `-- zi.zsh/.zi-get-object-path - -Uses feature(s): _setopt_ - -Called by: - - .zi-compute-ice - autoload.zsh/.zi-update-or-status - -zmv -~~~ - -____ - - function zmv { - zmv, zcp, zln: - - This is a multiple move based on zsh pattern matching. To get the full - power of it, you need a postgraduate degree in zsh. However, simple - tasks work OK, so if that's all you need, here are some basic examples: - zmv '(*).txt' '$1.lis' - Rename foo.txt to foo.lis, etc. The parenthesis is the thing that - gets replaced by the $1 (not the `*', as happens in mmv, and note the - `$', not `=', so that you need to quote both words). -____ - -Has 299 line(s). Doesn't call other functions. - -Uses feature(s): _eval_, _getopts_, _read_, _setopt_ - -Called by: - - .zi-compute-ice - diff --git a/zsdoc/asciidoc/zi.zsh.adoc b/zsdoc/asciidoc/zi.zsh.adoc deleted file mode 100644 index 7d2eb35..0000000 --- a/zsdoc/asciidoc/zi.zsh.adoc +++ /dev/null @@ -1,1583 +0,0 @@ -zi.zsh(1) -========= -:compat-mode!: - -NAME ----- -zi.zsh - a shell script - -SYNOPSIS --------- -Documentation automatically generated with `zsdoc' - -FUNCTIONS ---------- - - +zi-deploy-message - +zi-message - +zi-prehelp-usage-message - -zi_scheduler_add_sh - .zi-add-fpath - .zi-add-report - .zi-any-to-pid - .zi-any-to-user-plugin - .zi-compdef-clear - .zi-compdef-replay - .zi-diff - .zi-diff-env - .zi-diff-functions - .zi-diff-options - .zi-diff-parameter - .zi-find-other-matches - .zi-formatter-bar - .zi-formatter-bar-util - .zi-formatter-pid - .zi-formatter-th-bar - .zi-formatter-url - .zi-get-mtime-into - .zi-get-object-path - .zi-ice - .zi-load - .zi-load-ices - .zi-load-object - .zi-load-plugin - .zi-load-snippet - .zi-main-message-formatter - .zi-pack-ice - .zi-parse-opts - .zi-prepare-home - .zi-register-plugin - .zi-run - .zi-run-task - .zi-set-m-func - .zi-setup-params - .zi-submit-turbo - .zi-tmp-subst-off - .zi-tmp-subst-on - .zi-util-shands-path - :zi-reload-and-run - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - @autoload - @zi-register-annex - @zi-register-hook - @zi-substitute - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - pmodload - zi - zi-turbo - zicdclear - zicdreplay - zicompdef - zicompinit - zpcdclear - zpcdreplay - zpcompdef - zpcompinit -AUTOLOAD add-zsh-hook -AUTOLOAD compinit -AUTOLOAD is-at-least -PRECMD-HOOK @zi-scheduler - -DETAILS -------- - -Script Body -~~~~~~~~~~~ - -Has 202 line(s). Calls functions: - - Script-Body - |-- +zi-message - |-- @zi-register-hook - |-- add-zsh-hook - |-- autoload.zsh/.zi-module - `-- is-at-least - -Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ - -_Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR - -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked -____ - -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall - -+zi-message -~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message. [[[ -____ - -Has 14 line(s). Doesn't call other functions. - -Called by: - - +zi-prehelp-usage-message - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - Script-Body - zi - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-unload - additional.zsh/:zi-tmp-subst-source - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - install.zsh/ziextract - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message - -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-prehelp-usage-message. [[[ -____ - -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - -Called by: - - zi - autoload.zsh/.zi-delete - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ - -Has 7 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-add-fpath -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-fpath. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-add-fpath - -Called by: - - zi - -.zi-add-report -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-add-report. [[[ - Adds a report line for given plugin. - - $1 - uspl2, i.e. user/plugin - $2, ... - the text -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - :zi-tmp-subst-alias - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - :zi-tmp-subst-compdef - :zi-tmp-subst-zle - :zi-tmp-subst-zstyle - -.zi-any-to-pid -~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-pid. [[[ -____ - -Has 21 line(s). Calls functions: - - .zi-any-to-pid - -Uses feature(s): _setopt_ - -Called by: - - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-exists-physically-message - side.zsh/.zi-first - -.zi-any-to-user-plugin -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-any-to-user-plugin. [[[ - Allows elastic plugin-spec across the code. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin (only when $1 - i.e. user - given) - - Returns user and plugin in $reply. - -____ - -Has 25 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-add-fpath - .zi-get-object-path - .zi-load - .zi-run - :zi-tmp-subst-autoload - autoload.zsh/.zi-any-to-uspl2 - autoload.zsh/.zi-changes - autoload.zsh/.zi-compile-uncompile-all - autoload.zsh/.zi-compiled - autoload.zsh/.zi-create - autoload.zsh/.zi-delete - autoload.zsh/.zi-find-completions-of-plugin - autoload.zsh/.zi-glance - autoload.zsh/.zi-show-report - autoload.zsh/.zi-stress - autoload.zsh/.zi-uncompile-plugin - autoload.zsh/.zi-unload - autoload.zsh/.zi-unregister-plugin - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - install.zsh/.zi-install-completions - side.zsh/.zi-any-colorify-as-uspl2 - side.zsh/.zi-compute-ice - side.zsh/.zi-exists-physically-message - side.zsh/.zi-exists-physically - side.zsh/.zi-first - -_Environment variables used:_ ZPFX - -.zi-compdef-clear -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-clear. [[[ - Implements user-exposed functionality to clear gathered compdefs. -____ - -Has 3 line(s). Calls functions: - - .zi-compdef-clear - `-- +zi-message - -Called by: - - zi - zicdclear - zpcdclear - -.zi-compdef-replay -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-compdef-replay. [[[ - Runs gathered compdef calls. This allows to run `compinit' after loading plugins. -____ - -Has 16 line(s). Calls functions: - - .zi-compdef-replay - `-- +zi-message - -Uses feature(s): _compdef_ - -Called by: - - zi - zicdreplay - zpcdreplay - -.zi-diff -~~~~~~~~ - -____ - - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types -____ - -Has 4 line(s). Calls functions: - - .zi-diff - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-start - additional.zsh/.zi-debug-stop - -.zi-diff-env -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-env. [[[ - Implements detection of change in PATH and FPATH. - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 15 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - .zi-load-plugin - -.zi-diff-functions -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-functions. [[[ - Implements detection of newly created functions. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-options -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-options. [[[ - Implements detection of change in option state. Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-diff-parameter -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-diff-parameter. [[[ - Implements detection of change in any parameter's existence and type. - Performs data gathering, computation is done in *-compute(). - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-diff - -.zi-find-other-matches -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-find-other-matches. [[[ - Plugin's main source file is in general `name.plugin.zsh'. However, - there can be different conventions, if that file is not found, then - this functions examines other conventions in the most sane order. -____ - -Has 17 line(s). Doesn't call other functions. - -Called by: - - .zi-load-plugin - .zi-load-snippet - side.zsh/.zi-first - -.zi-formatter-bar -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-bar-util -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-bar-util. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - .zi-formatter-bar - .zi-formatter-th-bar - -.zi-formatter-pid -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-pid. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-formatter-pid - `-- side.zsh/.zi-any-colorify-as-uspl2 - -Uses feature(s): _source_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-th-bar -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-th-bar. [[[ -____ - -Has 1 line(s). Calls functions: - - .zi-formatter-th-bar - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-formatter-url -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-formatter-url. [[[ -____ - -Has 19 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-get-mtime-into -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-mtime-into. [[[ -____ - -Has 7 line(s). Doesn't call other functions. - -Called by: - - Script-Body - autoload.zsh/.zi-self-update - autoload.zsh/.zi-update-or-status-all - -.zi-get-object-path -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-get-object-path. [[[ -____ - -Has 23 line(s). Calls functions: - - .zi-get-object-path - -Called by: - - .zi-load-ices - .zi-load-snippet - .zi-run - zi - autoload.zsh/.zi-get-path - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - side.zsh/.zi-first - side.zsh/.zi-two-paths - -.zi-ice -~~~~~~~ - -____ - - FUNCTION: .zi-ice. [[[ - Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for - next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update. -____ - -Has 12 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load -~~~~~~~~ - -____ - - FUNCTION: .zi-load. [[[ - Implements the exposed-to-user action of loading a plugin. - - $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin) - $2 - plugin name, if the third format is used -____ - -Has 76 line(s). Calls functions: - - .zi-load - |-- +zi-deploy-message - |-- install.zsh/.zi-get-package - `-- install.zsh/.zi-setup-plugin-dir - -Uses feature(s): _eval_, _setopt_, _source_, _zle_ - -Called by: - - .zi-load-object - .zi-run-task - additional.zsh/.zi-service - -.zi-load-ices -~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-ices. [[[ -____ - -Has 22 line(s). Calls functions: - - .zi-load-ices - -Called by: - - zi - -_Environment variables used:_ ZPFX - -.zi-load-object -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-object. [[[ -____ - -Has 10 line(s). Calls functions: - - .zi-load-object - -Called by: - - zi - -.zi-load-plugin -~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-plugin. [[[ - Lower-level function for loading a plugin. - - $1 - user - $2 - plugin - $3 - mode (light or load) -____ - -Has 107 line(s). Calls functions: - - .zi-load-plugin - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ - -Called by: - - .zi-load - -.zi-load-snippet -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-load-snippet. [[[ - Implements the exposed-to-user action of loading a snippet. - - $1 - url (can be local, absolute path). -____ - -Has 173 line(s). Calls functions: - - .zi-load-snippet - |-- +zi-deploy-message - |-- +zi-message - `-- install.zsh/.zi-download-snippet - -Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ - -Called by: - - .zi-load-object - .zi-load - .zi-run-task - pmodload - additional.zsh/.zi-service - -.zi-main-message-formatter -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: +zi-message-formatter [[[ -____ - -Has 18 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -.zi-pack-ice -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-pack-ice. [[[ - Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for - second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin - or snippet) mentioned in the next command – for later use with e.g. `zi update ...'. -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - install.zsh/.zi-update-snippet - side.zsh/.zi-compute-ice - -.zi-parse-opts -~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: +zi-parse-opts. [[[ -____ - -Has 2 line(s). Doesn't call other functions. - -Called by: - - zi - autoload.zsh/.zi-delete - -.zi-prepare-home -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-prepare-home. [[[ - Creates all directories needed by ZI, first checks if they already exist. -____ - -Has 38 line(s). Calls functions: - - .zi-prepare-home - |-- autoload.zsh/.zi-clear-completions - `-- install.zsh/.zi-compinit - -Uses feature(s): _source_ - -Called by: - - Script-Body - -_Environment variables used:_ ZPFX - -.zi-register-plugin -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-register-plugin. [[[ - Adds the plugin to ZI_REGISTERED_PLUGINS array and to the - zsh_loaded_plugins array (managed according to the plugin standard: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard). -____ - -Has 20 line(s). Calls functions: - - .zi-register-plugin - `-- +zi-message - -Called by: - - .zi-load - -.zi-run -~~~~~~~ - -____ - - FUNCTION: .zi-run. [[[ - Run code inside plugin's folder - It uses the `correct' parameter from upper's scope zi(). -____ - -Has 24 line(s). Calls functions: - - .zi-run - `-- +zi-message - -Uses feature(s): _eval_, _setopt_ - -Called by: - - zi - -.zi-run-task -~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-run-task. [[[ - A backend, worker function of .zi-scheduler. It obtains the tasks - index and a few of its properties (like the type: plugin, snippet, - service plugin, service snippet) and executes it first checking for - additional conditions (like non-numeric wait'' ice). - - $1 - the pass number, either 1st or 2nd pass - $2 - the time assigned to the task - $3 - type: plugin, snippet, service plugin, service snippet - $4 - task's index in the ZI[WAIT_ICE_...] fields - $5 - mode: load or light - $6 - the plugin-spec or snippet URL or alias name (from id-as'') -____ - -Has 45 line(s). Calls functions: - - .zi-run-task - `-- autoload.zsh/.zi-unload - -Uses feature(s): _eval_, _source_, _zle_, _zpty_ - -Called by: - - @zi-scheduler - -.zi-set-m-func -~~~~~~~~~~~~~~ - -____ - - FUNCTION:.zi-set-m-func() [[[ - Sets and withdraws the temporary, atclone/atpull time function `m`. -____ - -Has 17 line(s). Calls functions: - - .zi-set-m-func - `-- +zi-message - -Uses feature(s): _setopt_ - -Called by: - - .zi-load-snippet - .zi-load - autoload.zsh/.zi-update-or-status - -.zi-setup-params -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-params. [[[ -____ - -Has 3 line(s). Doesn't call other functions. - -Called by: - - .zi-load-snippet - .zi-load - -.zi-submit-turbo -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-submit-turbo. [[[ - If `zi load`, `zi light` or `zi snippet` will be - preceded with `wait', `load', `unload' or `on-update-of`/`subscribe' - ice-mods then the plugin or snipped is to be loaded in turbo-mode, - and this function adds it to internal data structures, so that - @zi-scheduler can run (load, unload) this as a task. -____ - -Has 16 line(s). Doesn't call other functions. - -Called by: - - zi - -.zi-tmp-subst-off -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). -____ - -Has 17 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_, _unfunction_ - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-stop - -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. -____ - -Has 29 line(s). Doesn't call other functions. - -Uses feature(s): _source_ - -Called by: - - .zi-load-plugin - additional.zsh/.zi-debug-start - -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. -____ - -Has 8 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-any-to-pid - -_Environment variables used:_ ZPFX - -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 30 line(s). Calls functions: - - :zi-tmp-subst-alias - -Uses feature(s): _alias_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-autoload -~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-autoload. [[[ - Function defined to hijack plugin's calls to the `autoload' builtin. - - The hijacking is not only to gather report data, but also to. - run custom `autoload' function, that doesn't need FPATH. -____ - -Has 106 line(s). Calls functions: - - :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ - -Called by: - - .zi-load-plugin - @autoload - -:zi-tmp-subst-bindkey -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-bindkey. [[[ - Function defined to hijack plugin's calls to the `bindkey' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 107 line(s). Calls functions: - - :zi-tmp-subst-bindkey - `-- is-at-least - -Uses feature(s): _bindkey_, _is-at-least_, _setopt_, _zparseopts_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-compdef -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-compdef. [[[ - Function defined to hijack plugin's calls to the `compdef' function. - The hijacking is not only for reporting, but also to save compdef - calls so that `compinit' can be called after loading plugins. -____ - -Has 5 line(s). Calls functions: - - :zi-tmp-subst-compdef - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zle -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 33 line(s). Calls functions: - - :zi-tmp-subst-zle - -Uses feature(s): _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 19 line(s). Calls functions: - - :zi-tmp-subst-zstyle - -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@autoload -~~~~~~~~~ - -____ - - ]]] - FUNCTION: @autoload. [[[ -____ - -Has 3 line(s). Calls functions: - - @autoload - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-annex -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ - -Has 4 line(s). Doesn't call other functions. - -Called by: - - Script-Body - -@zi-scheduler -~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-substitute -~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-substitute. [[[ -____ - -Has 36 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - autoload.zsh/.zi-at-eval - install.zsh/.zi-at-eval - install.zsh/.zi-get-package - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX - -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-unload - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -pmodload -~~~~~~~~ - -____ - - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. -____ - -Has 15 line(s). Calls functions: - - pmodload - -Uses feature(s): _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zi -~~ - -____ - - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. -____ - -Has 547 line(s). Calls functions: - - zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- additional.zsh/.zi-clear-debug-report - |-- additional.zsh/.zi-debug-start - |-- additional.zsh/.zi-debug-stop - |-- additional.zsh/.zi-debug-unload - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ - -Called by: - - zi-turbo - -zi-turbo -~~~~~~~~ - -____ - - FUNCTION: zi-turbo. [[[ - With zi-turbo first argument is a wait time and suffix, i.e. "0a". - Anything that doesn't match will be passed as if it were an ice mod. - Default ices depth'3' and lucid, allowed values [0-9][a-d]. -____ - -Has 1 line(s). Calls functions: - - zi-turbo - `-- zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- additional.zsh/.zi-clear-debug-report - |-- additional.zsh/.zi-debug-start - |-- additional.zsh/.zi-debug-stop - |-- additional.zsh/.zi-debug-unload - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompdef -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. -____ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompinit -~~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. -____ - -Has 1 line(s). Calls functions: - - zicompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdclear -~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcdreplay -~~~~~~~~~~ - -____ - - ]]] - Compatibility functions. [[[ - zinit() { zi "$@"; } -____ - -Has 1 line(s). Calls functions: - - zpcdreplay - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompdef -~~~~~~~~~ - -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpcompinit -~~~~~~~~~~ - -Has 1 line(s). Calls functions: - - zpcompinit - `-- compinit - -Uses feature(s): _autoload_, _compinit_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -add-zsh-hook -~~~~~~~~~~~~ - -____ - - Add to HOOK the given FUNCTION. - HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, - zshexit, zsh_directory_name (the _functions subscript is not required). - - With -d, remove the function from the hook instead; delete the hook - variable if it is empty. - - -D behaves like -d, but pattern characters are active in the - function name, so any matching function will be deleted from the hook. - -____ - -Has 93 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _getopts_ - -Called by: - - @zi-scheduler - Script-Body - -compinit -~~~~~~~~ - -____ - - Initialisation for new style completion. This mainly contains some helper - functions and setup. Everything else is split into different files that - will automatically be made autoloaded (see the end of this file). The - names of the files that will be considered for autoloading are those that - begin with an underscores (like `_condition). - - The first line of each of these files is read and must indicate what - should be done with its contents: - - `#compdef ' -____ - -Has 549 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _bindkey_, _compdef_, _compdump_, _eval_, _read_, _setopt_, _unfunction_, _zle_, _zstyle_ - -Called by: - - zi - zicompinit - zpcompinit - -is-at-least -~~~~~~~~~~~ - -____ - - - Test whether $ZSH_VERSION (or some value of your choice, if a second argument - is provided) is greater than or equal to x.y.z-r (in argument one). In fact, - it'll accept any dot/dash-separated string of numbers as its second argument - and compare it to the dot/dash-separated first argument. Leading non-number - parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered - when the comparison is done; only the numbers matter. Any left-out segments - in the first argument that are present in the version string compared are - considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on. - -____ - -Has 56 line(s). Doesn't call other functions. - -Called by: - - :zi-tmp-subst-autoload - :zi-tmp-subst-bindkey - Script-Body - diff --git a/zsdoc/html/additional.zsh.html b/zsdoc/html/additional.zsh.html deleted file mode 100644 index f702ec4..0000000 --- a/zsdoc/html/additional.zsh.html +++ /dev/null @@ -1,2735 +0,0 @@ - - - - - - - - - additional.zsh(1) - - - - - -

    -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-clear-debug-report
    -.zi-debug-start
    -.zi-debug-stop
    -.zi-debug-unload
    -.zi-service
    -.zi-wrap-track-functions
    -:zi-tmp-subst-source
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-unload
    -zi.zsh/zi
    -
    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-start
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-stop
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-unload
    -|-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    -
    -
    -
    -
    -
    $1 - type "p" or "s" (plugin or snippet)
    -$2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    .zi-service
    -|-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-track-functions
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-wrap-track-functions [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -
    -
    - - - - diff --git a/zsdoc/html/autoload.zsh.html b/zsdoc/html/autoload.zsh.html deleted file mode 100644 index 361408a..0000000 --- a/zsdoc/html/autoload.zsh.html +++ /dev/null @@ -1,5041 +0,0 @@ - - - - - - - - - autoload.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    autoload.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-analytics-menu
    -.zi-any-to-uspl2
    -.zi-at-eval
    -.zi-build-module
    -.zi-cd
    -.zi-cdisable
    -.zi-cenable
    -.zi-changes
    -.zi-check-comp-consistency
    -.zi-check-which-completions-are-enabled
    -.zi-check-which-completions-are-installed
    -.zi-clear-completions
    -.zi-clear-report-for
    -.zi-compile-uncompile-all
    -.zi-compiled
    -.zi-confirm
    -.zi-control-menu
    -.zi-create
    -.zi-delete
    -.zi-diff-env-compute
    -.zi-diff-functions-compute
    -.zi-diff-options-compute
    -.zi-diff-parameter-compute
    -.zi-edit
    -.zi-exists-message
    -.zi-find-completions-of-plugin
    -.zi-format-env
    -.zi-format-functions
    -.zi-format-options
    -.zi-format-parameter
    -.zi-get-completion-owner
    -.zi-get-completion-owner-uspl2col
    -.zi-get-path
    -.zi-glance
    -.zi-help
    -.zi-list-bindkeys
    -.zi-list-compdef-replay
    -.zi-ls
    -.zi-module
    -.zi-pager
    -.zi-prepare-readlink
    -.zi-recall
    -.zi-recently
    -.zi-restore-extendedglob
    -.zi-run-delete-hooks
    -.zi-save-set-extendedglob
    -.zi-search-completions
    -.zi-self-update
    -.zi-show-all-reports
    -.zi-show-completions
    -.zi-show-debug-report
    -.zi-show-registered-plugins
    -.zi-show-report
    -.zi-show-times
    -.zi-show-zstatus
    -.zi-stress
    -.zi-uncompile-plugin
    -.zi-uninstall-completions
    -.zi-unload
    -.zi-unregister-plugin
    -.zi-update-all-parallel
    -.zi-update-or-status
    -.zi-update-or-status-all
    -.zi-update-or-status-snippet
    -.zi-wait-for-update-jobs
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-analytics-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-analytics-menu [[[
    -Shows ❮ ZI ❯ analytics.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-any-to-uspl2
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-uspl2 [[[
    -Converts given plugin-spec to format that's used in keys for hash tables.
    -So basically, creates string "user/plugin" (this format is called: uspl2).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-report-for
    -.zi-exists-message
    -
    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-build-module
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-build-module [[[
    -Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    -
    -
    -
    -
    -
    -

    Has 41 line(s). Calls functions:

    -
    -
    -
    -
    .zi-build-module
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    zi-cd
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cd [[[
    -Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cd
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-cdisable
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cdisable [[[
    -Enables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cdisable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-cenable
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-cenable [[[
    -Disables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cenable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-changes
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-changes [[[
    -Shows `git log` of given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-changes
    -|-- side.zsh/.zi-exists-physically-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-check-comp-consistency
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-comp-consistency [[[
    -❮ ZI ❯ creates symlink for each installed completion.
    -This function checks whether given completion (i.e.
    -file like "_mkdir") is indeed a symlink. Backup file
    -is a completion that is disabled - has the leading "_" removed.
    -
    -
    -
    -
    -
    $1 - path to completion within plugin's directory
    -$2 - path to backup file within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-check-which-completions-are-enabled
    -

    - ~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is disabled - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    Uninstalled completions will be reported as "0" - i.e. disabled
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-check-which-completions-are-installed
    -

    - ~~~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-check-which-completions-are-installed [[[
    -For each argument that each should be a path to completion
    -within a plugin's dir, it checks whether that completion
    -is installed - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-clear-completions
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-completions [[[
    -Delete stray and improper completions.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 35 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-clear-report-for
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-report-for [[[
    -Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -additional.zsh/.zi-clear-debug-report
    -
    -
    -
    -
    zi-compile-uncompile-all
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-uncompile-all [[[
    -Compiles or uncompiles all existing (on disk) plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -|-- install.zsh/.zi-compile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-compiled
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compiled [[[
    -Displays list of plugins that are compiled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compiled
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-confirm
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-confirm [[[
    -Prints given question, waits for "y" key, evals given expression if "y" obtained
    -
    -
    -
    -
    -
    $1 - question
    -$2 - expression
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, read

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-delete
    -
    -
    -
    -
    zi-control-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-control-menu [[[
    -Shows control options.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-create
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-create [[[
    -Creates a plugin, also on Github (if not "_local/name" plugin).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 103 line(s). Calls functions:

    -
    -
    -
    -
    .zi-create
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, vared

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-delete
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-delete [[[
    -Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Calls functions:

    -
    -
    -
    -
    .zi-delete
    -|-- side.zsh/.zi-compute-ice
    -|-- zi.zsh/+zi-prehelp-usage-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-parse-opts
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-diff-env-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env-compute [[[
    -Computes ZI_PATH, ZI_FPATH that hold (f)path components
    -added by plugin. Uses data gathered earlier by .zi-diff-env().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-functions-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions-compute [[[
    -Computes FUNCTIONS that holds new functions added by plugin.
    -Uses data gathered earlier by .zi-diff-functions().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-options-compute
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options-compute [[[
    -Computes OPTIONS that holds options changed by plugin.
    -Uses data gathered earlier by .zi-diff-options().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-parameter-compute
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter-compute [[[
    -Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    -parameters created or changed (their type) by plugin. Uses
    -data gathered earlier by .zi-diff-parameter().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-edit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-edit [[[
    -Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-edit
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-exists-message
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-message [[[
    -Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-message
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-find-completions-of-plugin
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-completions-of-plugin [[[
    -Searches for completions owned by given plugin.
    -Returns them in `reply' array.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-find-completions-of-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-env
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-env [[[
    -Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -$2 - if 1, then examine PATH, if 2, then examine FPATH
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-functions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-functions [[[
    -Creates a one or two columns text with functions created by given plugin.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-options [[[
    -Creates one-column text about options that changed when plugin "$1" was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-format-options
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-parameter
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-format-parameter [[[
    -Creates one column text that lists global parameters that changed when the given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-get-completion-owner
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner [[[
    -Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    -
    -
    -
    -
    -
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    -
    -
    -
    -
    -
    :A will read the link "twice" and give the final repository
    -directory, possibly without username in the uspl format; readlink will read the link "once"
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-clear-completions
    -.zi-get-completion-owner-uspl2col
    -.zi-show-completions
    -
    -
    -
    -
    zi-get-completion-owner-uspl2col
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    -For shortening of code - returns colorized plugin name
    -that owns given completion.
    -
    -
    -
    -
    -
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-completion-owner-uspl2col
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-get-path
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-path [[[
    -Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    -("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-path
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cd
    -.zi-uninstall-completions
    -
    -
    -
    -
    zi-glance
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-glance [[[
    -Shows colorized source code of plugin. Is able to use pygmentize,
    -highlight, GNU source-highlight.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 37 line(s). Calls functions:

    -
    -
    -
    -
    .zi-glance
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-help
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-help [[[
    -Shows usage information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-bindkeys
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-bindkeys [[[
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-list-bindkeys
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-compdef-replay
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-compdef-replay [[[
    -Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    -for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-ls
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ls [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-module
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-module [[[
    -Function that has sub-commands passed as long-options (with two dashes, --).
    -It's an attempt to plugin only this one function into `zi' function
    -defined in zi.zsh, to not make this file longer than it's needed.
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-build-module
    -zi.zsh/Script-Body
    -zi.zsh/zi
    -
    -
    -
    -
    zi-pager
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pager [[[
    -BusyBox less lacks the -X and -i options, so it can use more
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-glance
    -.zi-self-update
    -.zi-update-or-status
    -
    -
    -
    -
    zi-prepare-readlink
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-readlink [[[
    -Prepares readlink command, used for establishing completion's owner.
    -
    -
    -
    -
    -
    $REPLY = ":" or "readlink"
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-cdisable
    -.zi-cenable
    -.zi-clear-completions
    -.zi-show-completions
    -
    -
    -
    -
    zi-recall
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recall [[[
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recall
    -|-- side.zsh/.zi-compute-ice
    -`-- zi.zsh/+zi-deploy-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-recently
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recently [[[
    -Shows plugins that obtained commits in specified past time.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - time spec, e.g. "1 week"
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-recently
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-restore-extendedglob
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-restore-extendedglob [[[
    -Restores extendedglob-option from state saved earlier.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-run-delete-hooks
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-delete-hooks [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-delete-hooks
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-save-set-extendedglob
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-save-set-extendedglob [[[
    -Enables extendedglob-option first saving if it was already
    -enabled, for restoration of this state later.
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-search-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-search-completions [[[
    -While .zi-show-completions() shows what completions are
    -installed, this functions searches through all plugin dirs
    -showing what's available in general (for installation).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-search-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-self-update
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-self-update [[[
    -Updates ❮ ZI ❯ code (does a git pull).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 43 line(s). Calls functions:

    -
    -
    -
    -
    .zi-self-update
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-all-reports
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-all-reports [[[
    -Displays reports of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-all-reports
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-completions [[[
    -Display installed (enabled and disabled), completions. Detect
    -stray and improper ones.
    -
    -
    -
    -
    -
    Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-debug-report
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-debug-report [[[
    -Displays dtrace report (data recorded in interactive session).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-debug-report
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-registered-plugins
    -

    - ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-registered-plugins [[[
    -Lists loaded plugins (subcommands list, loaded).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-registered-plugins
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-report
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-report [[[
    -Displays report of the plugin given.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 66 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-report
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-all-reports
    -.zi-show-debug-report
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-times
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-times [[[
    -Shows loading times of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 51 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-times
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-zstatus
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-show-zstatus [[[
    -Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    -of available completions, etc.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 47 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-zstatus
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-stress
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-stress [[[
    -Compiles plugin with various options on and off to see how well the code is written. The options are:
    -
    -
    -
    -
    -
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Calls functions:

    -
    -
    -
    -
    .zi-stress
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-uncompile-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uncompile-plugin [[[
    -Uncompiles given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uncompile-plugin
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-uninstall-completions
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-uninstall-completions [[[
    -Removes all completions of given plugin from Zshell (i.e. from FPATH).
    -The FPATH is typically `~/.zi/completions/'.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    .zi-uninstall-completions
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-unload
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unload [[[
    -0. Call the Zsh Plugin's Standard *_plugin_unload function
    -0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    -1. Delete bindkeys (...)
    -2. Delete Zstyles
    -3. Restore options
    -4. Remove aliases
    -5. Restore Zle state
    -6. Unfunction functions (created by plugin)
    -7. Clean-up FPATH and PATH
    -8. Delete created variables
    -9. Forget the plugin
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 380 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unload
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): alias, bindkey, eval, setopt, - unalias, - unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    additional.zsh/.zi-debug-unload
    -zi.zsh/.zi-run-task
    -zi.zsh/zi
    -
    -
    -
    -
    zi-unregister-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-unregister-plugin [[[
    -Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    -zsh_loaded_plugins array (managed according to the plugin standard)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-unregister-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -
    -
    -
    -
    zi-update-all-parallel
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-in-parallel [[[
    -
    -
    -
    -
    -
    -

    Has 63 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-all-parallel
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -
    -
    -
    -
    zi-update-or-status
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status [[[
    -Updates (git pull) or does `git status' for given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - "status" for status, other for update
    -$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$3 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 263 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status
    -|-- install.zsh/.zi-get-latest-gh-r-url-part
    -|-- install.zsh/.zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-exists-physically
    -|-- side.zsh/.zi-exists-physically-message
    -|-- side.zsh/.zi-store-ices
    -|-- side.zsh/.zi-two-paths
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-set-m-func
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt, source, - trap, - wait -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-all
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-all [[[
    -Updates (git pull) or does `git status` for all existing plugins.
    -This includes also plugins that are not loaded into Zsh (but exist
    -on disk). Also updates (i.e. redownloads) snippets.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 96 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-all
    -|-- install.zsh/.zi-compinit
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-snippet
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-snippet [[[
    -
    -
    -
    -
    -
    Implements update or status operation for snippet given by URL.
    -
    -
    -
    -
    -
    $1 - "status" or "update"
    -$2 - snippet URL
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-or-status-snippet
    -|-- install.zsh/.zi-update-snippet
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -.zi-update-or-status-all
    -.zi-update-or-status
    -
    -
    -
    -
    zi-wait-for-update-jobs
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-wait-for-update-jobs [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-wait-for-update-jobs
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zsdoc/html/install.zsh.html b/zsdoc/html/install.zsh.html deleted file mode 100644 index 65bfcd5..0000000 --- a/zsdoc/html/install.zsh.html +++ /dev/null @@ -1,3648 +0,0 @@ - - - - - - - - - install.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    install.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-at-eval
    - .zi-compile-plugin
    - .zi-compinit
    - .zi-download-file-stdout
    - .zi-download-snippet
    - .zi-extract
    - .zi-forget-completion
    - .zi-get-cygwin-package
    - .zi-get-latest-gh-r-url-part
    - .zi-get-package
    - .zi-get-url-mtime
    - .zi-install-completions
    - .zi-mirror-using-svn
    - .zi-parse-json
    - .zi-setup-plugin-dir
    - .zi-update-snippet
    - zicp
    - ziextract
    - zimv
    - zpextract
    - ∞zi-atclone-hook
    - ∞zi-atpull-e-hook
    - ∞zi-atpull-hook
    - ∞zi-compile-plugin-hook
    - ∞zi-cp-hook
    - ∞zi-extract-hook
    - ∞zi-make-e-hook
    - ∞zi-make-ee-hook
    - ∞zi-make-hook
    - ∞zi-mv-hook
    - ∞zi-ps-on-update-hook
    - ∞zi-reset-hook
    -AUTOLOAD compinit
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -∞zi-atpull-hook
    -
    -
    -
    -
    zi-compile-plugin
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compile-plugin [[[
    -Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 84 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compile-plugin
    -|-- side.zsh/.zi-compute-ice
    -|-- side.zsh/.zi-first
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -autoload.zsh/.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-compinit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compinit [[[
    -User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    -After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    -
    -
    -
    -
    -
    No arguments.
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compinit
    -|-- compinit
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, setopt, unfunction -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-or-status-all
    -zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-download-file-stdout
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-file-stdout [[[
    -Downloads file to stdout. Supports following backend commands:
    -curl, wget, lftp, lynx. Used by snippet loading.
    -
    -
    -
    -
    -
    -

    Has 46 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-file-stdout
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-get-cygwin-package
    -.zi-get-package
    -.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-download-snippet
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-download-snippet [[[
    -Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    -with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    -to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    -
    -
    -
    -
    -
    -

    Has 309 line(s). Calls functions:

    -
    -
    -
    -
    .zi-download-snippet
    -|-- side.zsh/.zi-store-ices
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-snippet
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    zi-extract
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-extract() [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-extract
    -|-- zi.zsh/+zi-message
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-extract-hook
    -
    -
    -
    -
    zi-forget-completion
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-forget-completion [[[
    -Implements alternation of Zsh state so that already initialized
    -completion stops being visible to Zsh.
    -
    -
    -
    -
    -
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -.zi-install-completions
    -autoload.zsh/.zi-uninstall-completions
    -zi.zsh/zi
    -
    -
    -
    -
    zi-get-cygwin-package
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-cygwin-package [[[
    -
    -
    -
    -
    -
    -

    Has 70 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-cygwin-package
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -
    -
    -
    -
    zi-get-latest-gh-r-url-part
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-latest-gh-r-url-part [[[
    -Gets version string of latest release of given Github package.
    -Connects to Github releases page.
    -
    -
    -
    -
    -
    -

    Has 101 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-latest-gh-r-url-part
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-get-package
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-get-package [[[
    -
    -
    -
    -
    -
    -

    Has 194 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-package
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/@zi-substitute
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-load
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-get-url-mtime
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-url-mtime [[[
    -For the given URL returns the date in the Last-Modified header as a time stamp
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-install-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-install-completions [[[
    -Installs all completions of given plugin. After that they are
    -visible to `compinit'. Visible completions can be selectively
    -disabled and enabled. User can access completion data with
    -`clist' or `completions' subcommand.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$3 - if 1, then reinstall, otherwise only install completions that aren't there
    -
    -
    -
    -
    -
    -

    Has 61 line(s). Calls functions:

    -
    -
    -
    -
    .zi-install-completions
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -.zi-setup-plugin-dir
    -zi.zsh/zi
    -
    -
    -
    -
    zi-mirror-using-svn
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-mirror-using-svn [[[
    -Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    -in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    -compares remote and local revision and outputs true if update is needed.
    -
    -
    -
    -
    -
    $1 - URL
    -$2 - mode, "" - normal, "-u" - update, "-t" - test
    -$3 - subdirectory (not path) with working copy, needed for -t and -u
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-parse-json
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-parse-json [[[
    -Retrievies the ice-list from given profile from the JSON of the package.json.
    -
    -
    -
    -
    -
    -

    Has 102 line(s). Calls functions:

    -
    -
    -
    -
    .zi-parse-json
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-get-package
    -
    -
    -
    -
    zi-setup-plugin-dir
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-plugin-dir [[[
    -Clones given plugin into PLUGIN_DIR. Supports multiple
    -sites (respecting `from' and `proto' ice modifiers).
    -Invokes compilation of plugin's main file.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -
    -
    -
    -
    -
    -

    Has 189 line(s). Calls functions:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -|-- side.zsh/.zi-any-colorify-as-uspl2
    -|-- side.zsh/.zi-store-ices
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -zi.zsh/.zi-load
    -
    -
    -
    -
    zi-update-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: .zi-update-snippet [[[
    -
    -
    -
    -
    -
    -

    Has 72 line(s). Calls functions:

    -
    -
    -
    -
    .zi-update-snippet
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-get-object-path
    -`-- zi.zsh/.zi-pack-ice
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status-snippet
    -
    -
    -
    -
    -

    zicp

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zicp [[[
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zimv
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    -

    ziextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ziextract [[[
    -If the file is an archive, it is extracted by this function.
    -Next stage is scanning of files with the common utility `file',
    -to detect executables. They are given +x mode. There are also
    -messages to the user on performed actions.
    -
    -
    -
    -
    -
    $1 - url
    -$2 - file
    -
    -
    -
    -
    -
    -

    Has 274 line(s). Calls functions:

    -
    -
    -
    -
    ziextract
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, unfunction, zparseopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-extract
    -.zi-get-package
    -.zi-setup-plugin-dir
    -zpextract
    -
    -
    -
    -
    -

    zimv

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION zimv [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    zimv
    -`-- zicp
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpextract

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zpextract [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpextract
    -`-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atclone-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atclone-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atclone-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-e-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-hook [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-atpull-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-compile-plugin-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-compile-plugin-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-cp-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-cp-hook [[[
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-cp-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-extract-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-extract-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-extract-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-e-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-ee-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-ee-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-ee-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-hook [[[
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-make-hook
    -|-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-mv-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-mv-hook [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-mv-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-ps-on-update-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-ps-on-update-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-ps-on-update-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-reset-hook

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: ∞zi-reset-opt-hook [[[
    -
    -
    -
    -
    -
    -

    Has 79 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-reset-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zsdoc/html/side.zsh.html b/zsdoc/html/side.zsh.html deleted file mode 100644 index 76e3eab..0000000 --- a/zsdoc/html/side.zsh.html +++ /dev/null @@ -1,2932 +0,0 @@ - - - - - - - - - side.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    side.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     .zi-any-colorify-as-uspl2
    - .zi-compute-ice
    - .zi-countdown
    - .zi-exists-physically
    - .zi-exists-physically-message
    - .zi-first
    - .zi-store-ices
    - .zi-two-paths
    -AUTOLOAD zmv
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-any-colorify-as-uspl2
    -

    ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    -Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -$REPLY = ANSI-colorified "user/plugin" string
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-colorify-as-uspl2
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-clear-completions
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-exists-message
    -autoload.zsh/.zi-get-completion-owner-uspl2col
    -autoload.zsh/.zi-list-bindkeys
    -autoload.zsh/.zi-recently
    -autoload.zsh/.zi-search-completions
    -autoload.zsh/.zi-show-completions
    -autoload.zsh/.zi-show-registered-plugins
    -autoload.zsh/.zi-show-times
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -zi.zsh/.zi-formatter-pid
    -
    -
    -
    -
    zi-compute-ice
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compute-ice [[[
    -Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    -taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    -(only valid if ICE[svn] is not set).
    -
    -
    -
    -
    -
    Can also pack resulting ices into ZI_SICE (see $2).
    -
    -
    -
    -
    -
    $1 - URL (also plugin-spec)
    -$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    -wins with static ice; "pack-nf" means that disk-ices will
    -be ignored (no-file?)
    -$3 - name of output associative array, "ICE" is the default
    -$4 - name of output string parameter, to hold path to directory ("local_dir")
    -$5 - name of output string parameter, to hold filename ("filename")
    -$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    -
    -
    -
    -
    -
    -

    Has 116 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compute-ice
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-pack-ice
    -`-- zmv
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, zmv

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-delete
    -autoload.zsh/.zi-edit
    -autoload.zsh/.zi-recall
    -autoload.zsh/.zi-update-or-status-snippet
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-countdown
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-countdown [[[
    -Displays a countdown 5...4... etc. and returns 0 if it
    -sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    .zi-countdown
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-run-delete-hooks
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-atpull-e-hook
    -install.zsh/∞zi-atpull-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -
    -
    -
    -
    zi-exists-physically
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-exists-physically-message
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-exists-physically-message
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-exists-physically-message [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-exists-physically-message
    -|-- zi.zsh/+zi-message
    -|-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -
    -
    -
    -
    zi-first
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-first [[[
    -Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    -ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    -is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-first
    -|-- zi.zsh/.zi-any-to-pid
    -|-- zi.zsh/.zi-any-to-user-plugin
    -|-- zi.zsh/.zi-find-other-matches
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-two-paths
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-stress
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-store-ices
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-store-ices [[[
    -Saves ice mods in given hash onto disk.
    -
    -
    -
    -
    -
    $1 - directory where to create / delete files
    -$2 - name of hash that holds values
    -$3 - additional keys of hash to store, space separated
    -$4 - additional keys of hash to store, empty-meaningful ices, space separated
    -$5 - the URL, if applicable
    -$6 - the mode (1 - svn, 0 - single file), if applicable
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-two-paths
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-two-paths [[[
    -Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    -returns 2 possible paths for further examination
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-two-paths
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    -

    zmv

    -
    -
    -
    -
    -
    function zmv {
    -zmv, zcp, zln:
    -
    -
    -
    -
    -
    This is a multiple move based on zsh pattern matching.  To get the full
    -power of it, you need a postgraduate degree in zsh.  However, simple
    -tasks work OK, so if that's all you need, here are some basic examples:
    -zmv '(*).txt' '$1.lis'
    -Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    -gets replaced by the $1 (not the `*', as happens in mmv, and note the
    -`$', not `=', so that you need to quote both words).
    -
    -
    -
    -
    -
    -

    Has 299 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, getopts, read, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zsdoc/html/zi.zsh.html b/zsdoc/html/zi.zsh.html deleted file mode 100644 index ec9e442..0000000 --- a/zsdoc/html/zi.zsh.html +++ /dev/null @@ -1,4886 +0,0 @@ - - - - - - - - - zi.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    zi.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
     +zi-deploy-message
    - +zi-message
    - +zi-prehelp-usage-message
    - -zi_scheduler_add_sh
    - .zi-add-fpath
    - .zi-add-report
    - .zi-any-to-pid
    - .zi-any-to-user-plugin
    - .zi-compdef-clear
    - .zi-compdef-replay
    - .zi-diff
    - .zi-diff-env
    - .zi-diff-functions
    - .zi-diff-options
    - .zi-diff-parameter
    - .zi-find-other-matches
    - .zi-formatter-bar
    - .zi-formatter-bar-util
    - .zi-formatter-pid
    - .zi-formatter-th-bar
    - .zi-formatter-url
    - .zi-get-mtime-into
    - .zi-get-object-path
    - .zi-ice
    - .zi-load
    - .zi-load-ices
    - .zi-load-object
    - .zi-load-plugin
    - .zi-load-snippet
    - .zi-main-message-formatter
    - .zi-pack-ice
    - .zi-parse-opts
    - .zi-prepare-home
    - .zi-register-plugin
    - .zi-run
    - .zi-run-task
    - .zi-set-m-func
    - .zi-setup-params
    - .zi-submit-turbo
    - .zi-tmp-subst-off
    - .zi-tmp-subst-on
    - .zi-util-shands-path
    - :zi-reload-and-run
    - :zi-tmp-subst-alias
    - :zi-tmp-subst-autoload
    - :zi-tmp-subst-bindkey
    - :zi-tmp-subst-compdef
    - :zi-tmp-subst-zle
    - :zi-tmp-subst-zstyle
    - @autoload
    - @zi-register-annex
    - @zi-register-hook
    - @zi-substitute
    - @zsh-plugin-run-on-unload
    - @zsh-plugin-run-on-update
    - pmodload
    - zi
    - zi-turbo
    - zicdclear
    - zicdreplay
    - zicompdef
    - zicompinit
    - zpcdclear
    - zpcdreplay
    - zpcompdef
    - zpcompinit
    -AUTOLOAD add-zsh-hook
    -AUTOLOAD compinit
    -AUTOLOAD is-at-least
    -PRECMD-HOOK @zi-scheduler
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 202 line(s). Calls functions:

    -
    -
    -
    -
    Script-Body
    -|-- +zi-message
    -|-- @zi-register-hook
    -|-- add-zsh-hook
    -|-- autoload.zsh/.zi-module
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, alias, autoload, export, - is-at-least, setopt, source, zmodload, zstyle -

    -
    -
    -

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    -
    -
    -
    -

    +zi-deploy-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-deploy-message. [[[
    -Deploys a sub-prompt message to be displayed OR a `zle
    -.reset-prompt' call to be invoked
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-recall
    -
    -
    -
    -
    -

    +zi-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-message. [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -.zi-compdef-clear
    -.zi-compdef-replay
    -.zi-load-snippet
    -.zi-register-plugin
    -.zi-run
    -.zi-set-m-func
    -:zi-tmp-subst-autoload
    -Script-Body
    -zi
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-unload
    -additional.zsh/:zi-tmp-subst-source
    -autoload.zsh/.zi-build-module
    -autoload.zsh/.zi-cd
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-show-zstatus
    -autoload.zsh/.zi-uninstall-completions
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -autoload.zsh/.zi-wait-for-update-jobs
    -install.zsh/.zi-compile-plugin
    -install.zsh/.zi-compinit
    -install.zsh/.zi-download-file-stdout
    -install.zsh/.zi-download-snippet
    -install.zsh/.zi-extract
    -install.zsh/.zi-get-cygwin-package
    -install.zsh/.zi-get-latest-gh-r-url-part
    -install.zsh/.zi-get-package
    -install.zsh/.zi-install-completions
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -install.zsh/ziextract
    -install.zsh/∞zi-ps-on-update-hook
    -install.zsh/∞zi-reset-hook
    -side.zsh/.zi-countdown
    -side.zsh/.zi-exists-physically-message
    -
    -
    -
    -
    -

    +zi-prehelp-usage-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-prehelp-usage-message. [[[
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    +zi-prehelp-usage-message
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    -

    -zi_scheduler_add_sh

    -
    -
    -
    -
    -
    FUNCTION: -zi_scheduler_add_sh. [[[
    -Copies task into ZI_RUN array, called when a task timeouts.
    -A small function ran from pattern in /-substitution as a math
    -function.
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-add-fpath
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-fpath. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-add-fpath
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-add-report
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-report. [[[
    -Adds a report line for given plugin.
    -
    -
    -
    -
    -
    $1 - uspl2, i.e. user/plugin
    -$2, ... - the text
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -:zi-tmp-subst-alias
    -:zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -:zi-tmp-subst-compdef
    -:zi-tmp-subst-zle
    -:zi-tmp-subst-zstyle
    -
    -
    -
    -
    zi-any-to-pid
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-any-to-user-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-user-plugin. [[[
    -Allows elastic plugin-spec across the code.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    Returns user and plugin in $reply.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-add-fpath
    -.zi-get-object-path
    -.zi-load
    -.zi-run
    -:zi-tmp-subst-autoload
    -autoload.zsh/.zi-any-to-uspl2
    -autoload.zsh/.zi-changes
    -autoload.zsh/.zi-compile-uncompile-all
    -autoload.zsh/.zi-compiled
    -autoload.zsh/.zi-create
    -autoload.zsh/.zi-delete
    -autoload.zsh/.zi-find-completions-of-plugin
    -autoload.zsh/.zi-glance
    -autoload.zsh/.zi-show-report
    -autoload.zsh/.zi-stress
    -autoload.zsh/.zi-uncompile-plugin
    -autoload.zsh/.zi-unload
    -autoload.zsh/.zi-unregister-plugin
    -autoload.zsh/.zi-update-all-parallel
    -autoload.zsh/.zi-update-or-status-all
    -autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -side.zsh/.zi-any-colorify-as-uspl2
    -side.zsh/.zi-compute-ice
    -side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-exists-physically
    -side.zsh/.zi-first
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-compdef-clear
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-clear. [[[
    -Implements user-exposed functionality to clear gathered compdefs.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-clear
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdclear
    -zpcdclear
    -
    -
    -
    -
    zi-compdef-replay
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-compdef-replay. [[[
    -Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    .zi-compdef-replay
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): compdef

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicdreplay
    -zpcdreplay
    -
    -
    -
    -
    zi-diff
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff. [[[
    -Performs diff actions of all types
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-diff-env
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-env. [[[
    -Implements detection of change in PATH and FPATH.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -.zi-load-plugin
    -
    -
    -
    -
    zi-diff-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-functions. [[[
    -Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-options. [[[
    -Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-parameter
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-diff-parameter. [[[
    -Implements detection of change in any parameter's existence and type.
    -Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-find-other-matches
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-find-other-matches. [[[
    -Plugin's main source file is in general `name.plugin.zsh'. However,
    -there can be different conventions, if that file is not found, then
    -this functions examines other conventions in the most sane order.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -.zi-load-snippet
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-formatter-bar
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar-util
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar-util. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-bar
    -.zi-formatter-th-bar
    -
    -
    -
    -
    zi-formatter-pid
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-pid
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-th-bar
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-th-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-th-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-url
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-url. [[[
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-get-mtime-into
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-mtime-into. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-update-or-status-all
    -
    -
    -
    -
    zi-get-object-path
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-object-path. [[[
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-ices
    -.zi-load-snippet
    -.zi-run
    -zi
    -autoload.zsh/.zi-get-path
    -install.zsh/.zi-setup-plugin-dir
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-first
    -side.zsh/.zi-two-paths
    -
    -
    -
    -
    zi-ice
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ice. [[[
    -Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    -next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    -
    -
    -
    -
    -
    -

    Has 12 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load. [[[
    -Implements the exposed-to-user action of loading a plugin.
    -
    -
    -
    -
    -
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin name, if the third format is used
    -
    -
    -
    -
    -
    -

    Has 76 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load
    -|-- +zi-deploy-message
    -|-- install.zsh/.zi-get-package
    -`-- install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-run-task
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-load-ices
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-ices. [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-ices
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load-object
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-object. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-object
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-load-plugin
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-plugin. [[[
    -Lower-level function for loading a plugin.
    -
    -
    -
    -
    -
    $1 - user
    -$2 - plugin
    -$3 - mode (light or load)
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-plugin
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, unfunction, - zle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-load-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-snippet. [[[
    -Implements the exposed-to-user action of loading a snippet.
    -
    -
    -
    -
    -
    $1 - url (can be local, absolute path).
    -
    -
    -
    -
    -
    -

    Has 173 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-snippet
    -|-- +zi-deploy-message
    -|-- +zi-message
    -`-- install.zsh/.zi-download-snippet
    -
    -
    -
    -

    Uses feature(s): autoload, eval, setopt, source, - unfunction, zparseopts, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-object
    -.zi-load
    -.zi-run-task
    -pmodload
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-main-message-formatter
    -

    ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: +zi-message-formatter [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-pack-ice
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pack-ice. [[[
    -Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    -second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    -or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -@zsh-plugin-run-on-unload
    -@zsh-plugin-run-on-update
    -install.zsh/.zi-update-snippet
    -side.zsh/.zi-compute-ice
    -
    -
    -
    -
    zi-parse-opts
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: +zi-parse-opts. [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    zi-prepare-home
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-prepare-home. [[[
    -Creates all directories needed by ZI, first checks if they already exist.
    -
    -
    -
    -
    -
    -

    Has 38 line(s). Calls functions:

    -
    -
    -
    -
    .zi-prepare-home
    -|-- autoload.zsh/.zi-clear-completions
    -`-- install.zsh/.zi-compinit
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-register-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-register-plugin. [[[
    -Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    -zsh_loaded_plugins array (managed according to the plugin standard:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    .zi-register-plugin
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-run
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run. [[[
    -Run code inside plugin's folder
    -It uses the `correct' parameter from upper's scope zi().
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-run-task
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-task. [[[
    -A backend, worker function of .zi-scheduler. It obtains the tasks
    -index and a few of its properties (like the type: plugin, snippet,
    -service plugin, service snippet) and executes it first checking for
    -additional conditions (like non-numeric wait'' ice).
    -
    -
    -
    -
    -
    $1 - the pass number, either 1st or 2nd pass
    -$2 - the time assigned to the task
    -$3 - type: plugin, snippet, service plugin, service snippet
    -$4 - task's index in the ZI[WAIT_ICE_...] fields
    -$5 - mode: load or light
    -$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    .zi-run-task
    -`-- autoload.zsh/.zi-unload
    -
    -
    -
    -

    Uses feature(s): eval, source, zle, zpty

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -
    -
    -
    -
    zi-set-m-func
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION:.zi-set-m-func() [[[
    -Sets and withdraws the temporary, atclone/atpull time function `m`.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    .zi-set-m-func
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-setup-params
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-params. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-snippet
    -.zi-load
    -
    -
    -
    -
    zi-submit-turbo
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-submit-turbo. [[[
    -If `zi load`, `zi light` or `zi snippet`  will be
    -preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    -ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    -and this function adds it to internal data structures, so that
    -@zi-scheduler can run (load, unload) this as a task.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-tmp-subst-off
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-off. [[[
    -Turn off temporary substituting of functions completely for a given mode ("load", "light",
    -"light-b" (i.e. the `trackbinds' mode) or "compdef").
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-tmp-subst-on
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-tmp-subst-on. [[[
    -Turn on temporary substituting of functions of builtins and functions according to passed
    -mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    -to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -additional.zsh/.zi-debug-start
    -
    -
    -
    -
    zi-util-shands-path
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-util-shands-path. [[[
    -Replaces parts of path with %HOME, etc.
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    :zi-reload-and-run

    -
    -
    -
    -
    -
    FUNCTION: :zi-reload-and-run. [[[
    -Marks given function ($3) for autoloading, and executes it triggering the load.
    -$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    -because using that on older Zsh versions causes problems with traps.
    -
    -
    -
    -
    -
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    -
    -
    -
    -
    -
    $1 - FPATH dedicated to function
    -$2 - autoload options
    -$3 - function name (one that needs autoloading)
    -
    -
    -
    -
    -
    Author: Bart Schaefer
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, unfunction

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-alias

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-alias. [[[
    -Function defined to hijack plugin's calls to the `alias' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-alias
    -
    -
    -
    -

    Uses feature(s): alias, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-autoload

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-autoload. [[[
    -Function defined to hijack plugin's calls to the `autoload' builtin.
    -
    -
    -
    -
    -
    The hijacking is not only to gather report data, but also to.
    -run custom `autoload' function, that doesn't need FPATH.
    -
    -
    -
    -
    -
    -

    Has 106 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -|-- +zi-message
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): autoload, eval, is-at-least, setopt, - zparseopts -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load-plugin
    -@autoload
    -
    -
    -
    -
    -

    :zi-tmp-subst-bindkey

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    -Function defined to hijack plugin's calls to the `bindkey' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-bindkey
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts -

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-compdef

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-compdef. [[[
    -Function defined to hijack plugin's calls to the `compdef' function.
    -The hijacking is not only for reporting, but also to save compdef
    -calls so that `compinit' can be called after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-compdef
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zle. [[[.
    -Function defined to hijack plugin's calls to the `zle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zle
    -
    -
    -
    -

    Uses feature(s): setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zstyle

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    -Function defined to hijack plugin's calls to the `zstyle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zstyle
    -
    -
    -
    -

    Uses feature(s): setopt, zparseopts, zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @autoload

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: @autoload. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    @autoload
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-annex

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-annex. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-hook

    -
    -
    -
    -
    -
    FUNCTION: @zi-register-hook. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -
    -

    @zi-scheduler

    -
    -
    -
    -
    -
    FUNCTION: @zi-scheduler. [[[
    -Searches for timeout tasks, executes them. There's an array of tasks
    -waiting for execution, this scheduler manages them, detects which ones
    -should be run at current moment, decides to remove (or not) them from
    -the array after execution.
    -
    -
    -
    -
    -
    $1 - if "following", then it is non-first (second and more)
    -invocation of the scheduler; this results in chain of `sched'
    -invocations that results in repetitive @zi-scheduler activity.
    -
    -
    -
    -
    -
    if "burst", then all tasks are marked timeout and executed one
    -by one; this is handy if e.g. a docker image starts up and
    -needs to install all turbo-mode plugins without any hesitation
    -(delay), i.e. "burst" allows to run package installations from
    -script, not from prompt.
    -
    -
    -
    -
    -
    -

    Has 74 line(s). Is a precmd hook. Calls functions:

    -
    -
    -
    -
    @zi-scheduler
    -`-- add-zsh-hook
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-substitute

    -
    -
    -
    -
    -
    FUNCTION: @zi-substitute. [[[
    -
    -
    -
    -
    -
    -

    Has 36 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-at-eval
    -install.zsh/.zi-at-eval
    -install.zsh/.zi-get-package
    -install.zsh/∞zi-atclone-hook
    -install.zsh/∞zi-cp-hook
    -install.zsh/∞zi-extract-hook
    -install.zsh/∞zi-make-e-hook
    -install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -install.zsh/∞zi-mv-hook
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    @zsh-plugin-run-on-unload

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism, see:
    -https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zsh-plugin-run-on-update

    -
    -
    -
    -
    -
    FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-update
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    pmodload

    -
    -
    -
    -
    -
    FUNCTION: pmodload. [[[
    -Compatibility with Prezto. Calls can be recursive.
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    pmodload
    -
    -
    -
    -

    Uses feature(s): zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zi

    -
    -
    -
    -
    -
    FUNCTION: zi. [[[
    -Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    -
    -
    -
    -
    -
    -

    Has 547 line(s). Calls functions:

    -
    -
    -
    -
    zi
    -|-- +zi-message
    -|-- +zi-prehelp-usage-message
    -|   `-- +zi-message
    -|-- additional.zsh/.zi-clear-debug-report
    -|-- additional.zsh/.zi-debug-start
    -|-- additional.zsh/.zi-debug-stop
    -|-- additional.zsh/.zi-debug-unload
    -|-- autoload.zsh/.zi-analytics-menu
    -|-- autoload.zsh/.zi-cdisable
    -|-- autoload.zsh/.zi-cenable
    -|-- autoload.zsh/.zi-clear-completions
    -|-- autoload.zsh/.zi-compile-uncompile-all
    -|-- autoload.zsh/.zi-compiled
    -|-- autoload.zsh/.zi-control-menu
    -|-- autoload.zsh/.zi-help
    -|-- autoload.zsh/.zi-list-bindkeys
    -|-- autoload.zsh/.zi-list-compdef-replay
    -|-- autoload.zsh/.zi-ls
    -|-- autoload.zsh/.zi-module
    -|-- autoload.zsh/.zi-recently
    -|-- autoload.zsh/.zi-search-completions
    -|-- autoload.zsh/.zi-self-update
    -|-- autoload.zsh/.zi-show-all-reports
    -|-- autoload.zsh/.zi-show-completions
    -|-- autoload.zsh/.zi-show-debug-report
    -|-- autoload.zsh/.zi-show-registered-plugins
    -|-- autoload.zsh/.zi-show-report
    -|-- autoload.zsh/.zi-show-times
    -|-- autoload.zsh/.zi-show-zstatus
    -|-- autoload.zsh/.zi-uncompile-plugin
    -|-- autoload.zsh/.zi-uninstall-completions
    -|-- autoload.zsh/.zi-unload
    -|-- autoload.zsh/.zi-update-or-status
    -|-- autoload.zsh/.zi-update-or-status-all
    -|-- compinit
    -|-- install.zsh/.zi-compile-plugin
    -|-- install.zsh/.zi-compinit
    -|-- install.zsh/.zi-forget-completion
    -`-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, eval, setopt, - source -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi-turbo
    -
    -
    -
    -
    -

    zi-turbo

    -
    -
    -
    -
    -
    FUNCTION: zi-turbo. [[[
    -With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    -Anything that doesn't match will be passed as if it were an ice mod.
    -Default ices depth'3' and lucid, allowed values [0-9][a-d].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zi-turbo
    -`-- zi
    -    |-- +zi-message
    -    |-- +zi-prehelp-usage-message
    -    |   `-- +zi-message
    -    |-- additional.zsh/.zi-clear-debug-report
    -    |-- additional.zsh/.zi-debug-start
    -    |-- additional.zsh/.zi-debug-stop
    -    |-- additional.zsh/.zi-debug-unload
    -    |-- autoload.zsh/.zi-analytics-menu
    -    |-- autoload.zsh/.zi-cdisable
    -    |-- autoload.zsh/.zi-cenable
    -    |-- autoload.zsh/.zi-clear-completions
    -    |-- autoload.zsh/.zi-compile-uncompile-all
    -    |-- autoload.zsh/.zi-compiled
    -    |-- autoload.zsh/.zi-control-menu
    -    |-- autoload.zsh/.zi-help
    -    |-- autoload.zsh/.zi-list-bindkeys
    -    |-- autoload.zsh/.zi-list-compdef-replay
    -    |-- autoload.zsh/.zi-ls
    -    |-- autoload.zsh/.zi-module
    -    |-- autoload.zsh/.zi-recently
    -    |-- autoload.zsh/.zi-search-completions
    -    |-- autoload.zsh/.zi-self-update
    -    |-- autoload.zsh/.zi-show-all-reports
    -    |-- autoload.zsh/.zi-show-completions
    -    |-- autoload.zsh/.zi-show-debug-report
    -    |-- autoload.zsh/.zi-show-registered-plugins
    -    |-- autoload.zsh/.zi-show-report
    -    |-- autoload.zsh/.zi-show-times
    -    |-- autoload.zsh/.zi-show-zstatus
    -    |-- autoload.zsh/.zi-uncompile-plugin
    -    |-- autoload.zsh/.zi-uninstall-completions
    -    |-- autoload.zsh/.zi-unload
    -    |-- autoload.zsh/.zi-update-or-status
    -    |-- autoload.zsh/.zi-update-or-status-all
    -    |-- compinit
    -    |-- install.zsh/.zi-compile-plugin
    -    |-- install.zsh/.zi-compinit
    -    |-- install.zsh/.zi-forget-completion
    -    `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdclear

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicdclear. [[[
    -A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdreplay

    -
    -
    -
    -
    -
    FUNCTION: zicdreplay. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It works like `zi cdreplay', which cannot be invoked from such hook ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompdef

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompdef. [[[
    -Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit

    -
    -
    -
    -
    -
    ]]]
    -FUNCTION: zicompinit. [[[
    -A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It runs `autoload compinit; compinit' and respects
    -ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdclear

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdreplay

    -
    -
    -
    -
    -
    ]]]
    -Compatibility functions. [[[
    -zinit() { zi "$@"; }
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompdef

    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompinit

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    add-zsh-hook

    -
    -
    -
    -
    -
    Add to HOOK the given FUNCTION.
    -HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    -zshexit, zsh_directory_name (the _functions subscript is not required).
    -
    -
    -
    -
    -
    With -d, remove the function from the hook instead; delete the hook
    -variable if it is empty.
    -
    -
    -
    -
    -
    -D behaves like -d, but pattern characters are active in the
    -function name, so any matching function will be deleted from the hook.
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, getopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -Script-Body
    -
    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    Initialisation for new style completion. This mainly contains some helper
    -functions and setup. Everything else is split into different files that
    -will automatically be made autoloaded (see the end of this file).  The
    -names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, - zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -zicompinit
    -zpcompinit
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    -is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    -it'll accept any dot/dash-separated string of numbers as its second argument
    -and compare it to the dot/dash-separated first argument. Leading non-number
    -parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    -when the comparison is done; only the numbers matter. Any left-out segments
    -in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    :zi-tmp-subst-autoload
    -:zi-tmp-subst-bindkey
    -Script-Body
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/zsdoc/pdf/additional.zsh.pdf b/zsdoc/pdf/additional.zsh.pdf deleted file mode 100644 index 96e8b636b15f079643ad5b41703e38bf5c24f7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99114 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 diff --git a/zsdoc/pdf/autoload.zsh.pdf b/zsdoc/pdf/autoload.zsh.pdf deleted file mode 100644 index 01593312bc7fffd21537282e3755843cd7f5c552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440338 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
    +%SY2jqmhNfm*7C|eGkGW6gIHNZ**@_Q{ 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 GH2lAEiFech diff --git a/zsdoc/pdf/install.zsh.pdf b/zsdoc/pdf/install.zsh.pdf deleted file mode 100644 index b8ca33a5ceceb47a0dd7e6ac2c294f0e4f1dc97e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242957 zcmeFaiIbeibtlL}2iatZr$p)?Srl)P?5^*wqQDCPAs!$I0^kWkU?0^)g8&-rZt$i! z>#<|UWBFWp)}Hk!9OGTv>lyFN`k1vHvK=wDyc)?mJd!MrwYFztC%my&Ozi#z`}^g4 zFTeb%zAk(XR#g+x=>D$E$}jWf`!Zj?eDCGUTlVhUb$2wKPTlgK|M(C6F%`Ait>w9+ zQ`@$+W)3W^9qYAjUple6Hhb*Y^qZ?kUbsDa;f_0|W_GOfX4jTiTDL#AI={5EusqKI zGQ6ubH@n(fXf2;;?OmCD?F5qUU0Gf@HQ#HJ_P+b3dM6fGdK^OW#>rl5X2&dGSbhol z&A!xIZ6!#sZ)#@G>~RF5wuGKIwRUXj1S0aTL@@2{*}2}a)mB&EVASKw3&`=Q)t

    2S~(R8PKXlmx^rQU13mAxyy#okKq#5@WihITHk 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%0D5sBk2;{Vo96BZooCD+R1 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%0D%hi?ocX{p!Qu^Ro~m3slzCd^+QG_`>tfzs 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 diff --git a/zsdoc/pdf/zi.zsh.pdf b/zsdoc/pdf/zi.zsh.pdf deleted file mode 100644 index 17a6daf5a46ef3ff06ddf430b957f5c478219294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412082 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

    YKgSIj{KMZ)ouetQ@} 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 Av;Y7A diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - -

    -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/zsh/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/zsh/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/zsh/Zsh-Native-Scripting-Handbook.html deleted file mode 100644 index cbbdaf6..0000000 --- a/zsh/zsh/Zsh-Native-Scripting-Handbook.html +++ /dev/null @@ -1,1307 +0,0 @@ - - - - - - - - -Zsh Native Scripting Handbook - - - - - - -
    -
    -
    -
    -

    The handbook is also available as a PDF, HTML.

    -
    -
    -

    This document has been created after 3.5 years of creating software for Z shell -and receiving help from IRC channel #zsh. Avoiding forks was the main guideline -when creating the projects and this lead to multiple discoveries of Zsh constructs -that are fast, robust, and do not depend on external tools. Such code is more like -Ruby or Perl code, less like top-down shell scripts.

    -
    -
    -
    -
    -

    Information

    -
    -
    -

    @ is about keeping array form

    -
    -

    How to access all array elements in a shell? The standard answer: use @ -subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with -the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access -the whole array). Z shell is different: it is $array that refers to all -elements anyway. There is no need for the @ subscript.

    -
    -
    -

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not -join”. When is it activated? When the user quotes the array, i.e. invokes -"$array", he induces joining of all array elements (into a single string). -@ is to have elements still quoted (so empty elements are -preserved), but not joined.

    -
    -
    -

    Two forms are available, "$array[@]" and "${(@)array}". The first form has -an additional effect – when option KSH_ARRAYS is set, it indeed induces -referencing to the whole array instead of a first element only. It should then use -braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    -
    -
    -

    In practice, if you’ll use @ as a subscript – [@], not as a flag – -${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    -
    -
    -
    -

    extended_glob

    -
    -

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ -and ^ also require it. Extended-glob is one of the main features of Zsh.

    -
    -
    -
    -
    -
    -

    Constructs

    -
    -
    -

    Reading a file

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -
    -
    -
    -

    This preserves empty lines because of double-quoting (the outside one). -@-flag is used to obtain an array instead of a scalar. If you don’t want empty -lines preserved, you can also skip @-splitting, as is explained in -Information section:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    -
    -
    -
    -

    Note: $(<…​) construct strips trailing empty lines.

    -
    -
    -
    -

    Reading from stdin

    -
    -

    This topic is governed by the same principles a the previous paragraph -(Reading a file), with the single difference that instead of the substitution -"$(<file-path)" the substitution that should be used is "$(command arg1 -…​)", i.e.:

    -
    -
    -
    -
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    -
    -
    -
    -

    This will read the command’s output into the array lines. The version that -does @ splitting and retains any empty lines is:

    -
    -
    -
    -
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    -
    -
    -
    -

    Note that instead of four double-quotes ", an idiom that is justified (simply -suggested) by the Zsh documentation (and was used in the previous paragraph, in -the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are -being used. I’ve investigated this form with the main Zsh developers on the -zsh-workers@zsh.org mailing list and it was clearly stated that single, -outside quoting of ${(f@)…​} substitution works as if it was also separately -applied to $(command …​) (or to $(<file-path)) inner substitution, so the -second double-quoting isn’t needed.

    -
    -
    -
    -

    Skipping dirname basename

    -
    -

    dirname and basename can be skipped by:

    -
    -
    -
    -
    local dirname="${PWD:h}"
    -local basename="${PWD:t}"
    -
    -
    -
    -

    Read more about modifiers.

    -
    -
    -
    - -
    -

    Symbolic links can be turned into an absolute path with:

    -
    -
    -
    -
    local absolute_path="${PWD:A}"
    -
    -
    -
    -
    -

    Skipping grep

    -
    -
    -
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    -declare -a grepped; grepped=( ${(M)lines:#*query*} )
    -
    -
    -
    -

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob -flag (…​:#(#i)*query*}).

    -
    -
    -

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by -default filters-out elements ((M) flag induces the opposite behavior). When -used with string, not an array, it behaves similarly: returns empty string when -{input_string_var:#pattern} matches whole input string.

    -
    -
    -

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other -substitutions, to retain what’s matched by the pattern instead of removing that.

    -
    -
    -

    Multi-line matching like with grep

    -
    -

    Suppose you have a Subversion repository and want to check if it contains files -being not under version control. You could do this in Bash style like follows:

    -
    -
    -
    -
    local svn_status="$(svn status)"
    -if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    -    echo found
    -fi
    -
    -
    -
    -

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved -by the :# substitution and (M) flag described above in this section (just check -if the number of matched lines is greater than 0). However, there’s a more direct -approach:

    -
    -
    -
    -
    local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    This requires extendedglob. The (#s) means: "start of the string". So -((#s)|$nl) means "start of the string OR preceded by a new-line".

    -
    -
    -

    If the extendedglob option cannot be used for some reason, this can be -achieved also -without it, but essentially it means that alternative (i.e. |) of two -versions of the pattern will have to be matched:

    -
    -
    -
    -
    setopt localoptions noextendedglob
    -local svn_status="$(svn status)" nl=$'\n'
    -if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    -  echo found
    -fi
    -
    -
    -
    -

    In general, multi-line matching falls into the following idiom (`extended glob -version):

    -
    -
    -
    -
    local needle="?" required_preceding='[[:space:]]#'
    -[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    -
    -
    -
    -

    It does a single fork (calls svn status). The `${~variable} means (the ~ -init): "the variable is holding a pattern, interpret it". All in all, instead -of regular expressions we were using patterns (globs) (see -this section).

    -
    -
    -
    -
    -

    Pattern matching in AND-fashion

    -
    -
    -
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    -
    -
    -
    -

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. -The effect is: *ABC* but not those that don’t have *efg* which equals to: -*ABC* but those that have also *efg*. This is a regular pattern and it can -be used with :# above to search arrays, or with the R-subscript flag to search -hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael -Magnusson.

    -
    -
    -
    -

    Skipping tr

    -
    -
    -
    declare -A map; map=( a 1 b 2 );
    -text=( "ab" "ba" )
    -text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    -print $text ▶ 12 21
    -
    -
    -
    -

    #m flag enables the $MATCH parameter. At each // substitution, $map is -queried for character-replacement. You can substitute a text variable too, just -skip [@] and parentheses in the assignment.

    -
    -
    -
    -

    Ternary expressions with +,-,:+,:- substitutions

    -
    -
    -
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    -HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    -
    -
    -
    -

    Ternary expression is known from C language but exists also in Zsh, but -directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of -Zsh allows such expressions also in a normal context. Above is an example. :+ is -"if not empty, substitute …" :- is "if empty, substitute …". You can save -a great number of lines of code with those substitutions, it’s normally at least -4-lines if condition or lengthy &&/|| use.

    -
    -
    -
    -

    Ternary expressions with :# substitution

    -
    -
    -
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    -var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    -
    -
    -
    -

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring -code that makes a 10-line function a 20-line one.

    -
    -
    -
    -

    Using built-in regular expressions engine

    -
    -
    -
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    -
    -
    -
    -

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is -"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b -enables the $match parameters. There’s also #m but it has one parameter -$MATCH for whole matched text, not for any parenthesis.

    -
    -
    -

    Zsh patterns are a custom regular expressions engine. They are -slightly faster than the zsh/regex module (used for =~ operator) and don’t have -that dependency (regex module can be not present, e.g. in default static build -of Zsh). Also, they can be used in substitutions, for example in // -substitution.

    -
    -
    -
    -

    Skipping uniq

    -
    -
    -
    declare -aU array; array=( a a b ); print $array ▶ a b
    -declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    -
    -
    -
    -

    Enable -U flag for array so that it guards elements to be unique, or use -u-flag to make unique elements of an array.

    -
    -
    -
    -

    Skipping awk

    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    -
    -
    -
    -

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted -from multiple lines of text, something awk is often used for. Another method is -the use of s-flag. For a single line of text:

    -
    -
    -
    -
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    -
    -
    -
    -

    Thanks to in-substitution code-execution capabilities it’s possible to use -s-flag to apply it to multiple lines:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    -
    -
    -
    -

    There is a problem with the (s::) flag that can be solved if Zsh is version -5.4 or higher: if there will be single input column, e.g. list=( "column1" -"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" -)), then (s::) will return string instead of 1-element array. So the -index [4] in above snippet will index a string, and show its 4-th letter. -Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) -parameter flag forces array result even if…​), it is possible to force -array-kind of result even for a single column, by adding (A) flag, i.e.:

    -
    -
    -
    -
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    -print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    -print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    -
    -
    -
    -

    Side-note: (A) flag is often used together with ::= assignment-substitution -and (P) flag, to assign arrays and hashes by-name.

    -
    -
    -
    -

    Searching arrays

    -
    -
    -
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    -
    -
    -
    -

    [[:space:]] contains unicode spaces. This is often used in conditional -expression like [[ -z ${array[(r)…​]} ]].

    -
    -
    -

    Note that Skipping grep that uses :# substitution can also be -used to search arrays.

    -
    -
    -
    -

    Code execution in // substitution

    -
    -
    -
    append() { gathered+=( $array[$1] ); }
    -functions -M append 1 1 append
    -declare -a array; array=( "Value 1" "Other data" "Value 2" )
    -declare -a gathered; integer idx=0
    -: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    -print $gathered ▶ Value 1 Value 2
    -
    -
    -
    -

    Use of #b glob flag enables math-code execution (and not only) in / and // -substitutions. Implementation is very fast.

    -
    -
    -
    -

    Serializing data

    -
    -
    -
    declare -A hsh deserialized; hsh=( key value )
    -serialized="${(j: :)${(qkv@)hsh}}"
    -deserialized=( "${(Q@)${(z@)serialized}}" )
    -print ${(kv)deserialized} ▶ key value
    -
    -
    -
    -

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, -interleaving. Important q-flag means: quote. So what is obtained is each key -and value quoted, and put into a string separated by spaces.

    -
    -
    -

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") -which is then de-quoted with Q-flag. This yields original data, assigned to -hash deserialized. Use this to e.g. implement an array of hashes.

    -
    -
    -

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: -…​( "${(Q)${(z)serialized[@]}[@]}" )

    -
    -
    -

    Tip: serializing with Bash

    -
    -
    -
    array=( key1 key2 )
    -printf -v serialized "%q " "${array[@]}"
    -eval "deserialized=($serialized)"
    -
    -
    -
    -

    This method works also with Zsh. The drawback is the use of eval, however, it’s -impossible that any problem will occur unless someone compromises variable’s -value, but as always, eval should be avoided if possible.

    -
    -
    -
    -
    -
    -
    -

    Real world examples

    -
    -
    -

    Testing for Git subcommand

    -
    -

    Following code checks, if there is a git subcommand $mysub:

    -
    -
    -
    -
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    -
    -
    -
    -

    Those are 4 forks. The code can be replaced according to this guide:

    -
    -
    -
    -
    local -a lines_list
    -lines_list=( ${(f)"$(git help -a)"} )
    -lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    -if (( ${#lines_list} > 0 )); then
    -    …
    -fi
    -
    -
    -
    -

    The result is just 1 fork.

    -
    -
    -
    -

    Counting unquoted-only apostrophes

    -
    -

    A project was needing this to do some Zle line-continuation tricks (when you -put a backslash-\ at the end of the line and press enter – it is the -line-continuation that occurs at that moment).

    -
    -
    -

    The required functionality is: in the given string, count the number of -apostrophes, but only the unquoted ones. This means that only apostrophes -with null or an even number of preceding backslashes should be accepted into -the count:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -integer count=0
    -: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    -echo $count ▶ 3
    -
    -
    -
    -

    The answer (i.e. the output) to the above presentation and example is: 3 -(there are 3 unquoted apostrophes in total in the string kept in the variable -$buf).

    -
    -
    -

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    -
    -
    -
    -
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    -buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    -integer count=${#buf}
    -echo $count ▶ 3
    -
    -
    -
    -

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it -matches only unquoted following (\'\'#) characters (which are the apostrophes) and -a general strategy to replace anything-apostrope(s) (unquoted ones) with -the-apostrope(s) (and then count them with ${#buf}).

    -
    -
    -
    -
    -
    -

    Tips and Tricks

    -
    -
    -

    Parsing INI file

    -
    -

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not -result in a nested-arrays data structure (Zsh doesn’t support nested hashes), -but the hash keys like $DB_CONF[db1_<connection>_host] are actually really -intuitive.

    -
    -
    -

    The code should be placed in a file named read-ini-file, in $fpath, and -autoload read-ini-file should be invoked.

    -
    -
    -
    read-ini-file
    -
    -
    # Copyright (c) 2018 Sebastian Gniazdowski
    -#
    -# $1 - path to the ini file to parse
    -# $2 - the name of output hash
    -# $3 - prefix for keys in the hash
    -#
    -# Writes to given hash under keys built-in following way: ${3}<section>_field.
    -# Values are values from the ini file. Example invocation:
    -#
    -# read-ini-file ./database1-setup.ini DB_CONF db1_
    -# read-ini-file ./database2-setup.ini DB_CONF db2_
    -#
    -
    -setopt localoptions extendedglob
    -
    -local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    -local IFS='' __line __cur_section="void" __access_string
    -local -a match mbegin mend
    -
    -[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    -
    -while read -r -t 1 __line; do
    -    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    -        continue
    -    # Match "[Section]" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    -        __cur_section="${match[1]}"
    -    # Match "string = string" line
    -    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    -        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    -        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    -        : "${(P)__access_string::=${match[2]}}"
    -    fi
    -done < "$__ini_file"
    -
    -return 0
    -
    -
    -
    -
    -
    -
    -

    Appendix A: Revision history (history of updates to the document)

    -
    -
    -

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    -v1.18, 10/21/2018: Multi-line matching like with grep
    -v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    -v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    -v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    -v1.05, 10/21/2018: New section "Reading from stdin"
    -v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/zsh/zsh/Zsh-Plugin-Standard.html b/zsh/zsh/Zsh-Plugin-Standard.html deleted file mode 100644 index 134570c..0000000 --- a/zsh/zsh/Zsh-Plugin-Standard.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - - - - -Zsh Plugin Standard - - - - - - -
    -
    -
    -
    -

    The document is also available as a PDF, HTML.

    -
    -
    -
    -
    -

    What Is A Zsh Plugin?

    -
    -
    -

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a -way to package together files that extend or configure the shell’s functionality -in a particular way.

    -
    -
    -

    At a simple level, a plugin:

    -
    -
    -
      -
    1. -

      Has its directory added to $fpath -(Zsh documentation). -This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      -
    2. -
    3. -

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      -
    4. -
    -
    -
    -

    The first point allows plugins to provide completions and functions that are -loaded via Zsh’s autoload mechanism (a single function per file).

    -
    -
    -

    From a more broad perspective, a plugin consists of:

    -
    -
    -
      -
    1. -

      A directory containing various files (the main script, autoload functions, -completions, Makefiles, backend programs, documentation).

      -
    2. -
    3. -

      A sourceable script that obtains the path to its directory via $0 (see the -next section for a related enhancement proposal).

      -
    4. -
    5. -

      A Github (or another site) repository identified by two components -username/pluginname.

      -
    6. -
    7. -

      A software package containing any type of command line artifacts – when used -with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      -
    8. -
    -
    -
    -

    Below follow proposed enhancements and codifications of the definition of a "Zsh -the plugin" and the actions of plugin managers – the proposed standardization. They -cover the information on how to write a Zsh plugin.

    -
    -
    -
    -
    -

    1. Standardized $0 Handling

    -
    -
    -

    To get the plugin’s location, plugins should do:

    -
    -
    -
    -
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    -0="${${(M)0:#/*}:-$PWD/$0}"
    -
    -# Then ${0:h} to get plugin’s directory
    -
    -
    -
    -

    The one-line code above will:

    -
    -
    -
      -
    1. -

      Be backward-compatible with normal $0 setting and usage.

      -
    2. -
    3. -

      Use ZERO if it’s not empty,

      -
      -
        -
      • -

        the plugin manager will be easily able to alter effective $0 before -loading a plugin,

        -
      • -
      • -

        this allows e.g. eval "$(<plugin)", which can be faster -than source -(comparison -note that it’s not for a compiled script).

        -
      • -
      -
      -
    4. -
    5. -

      Use $0 if it doesn’t contain the path to the Zsh binary,

      -
      -
        -
      • -

        plugin manager will still be able to set $0, although more difficultly -(requires unsetopt function_argzero before sourcing plugin script, and -0=…​ assignment),

        -
      • -
      • -

        unsetopt function_argzero will be detected (it causes $0 not to -contain a plugin-script path, but the path to Zsh binary, if not overwritten -by a 0=…​ assignment),

        -
      • -
      • -

        setopt posix_argzero will be detected (as above).

        -
      • -
      -
      -
    6. -
    7. -

      Use %N prompt expansion flag, which always gives absolute path to script,

      -
      -
        -
      • -

        plugin manager cannot alter this (no advanced loading of plugin -is possible), but simple plugin-file sourcing (without a plugin -manager) will be saved from breaking caused by the mentioned -*_argzero options, so this is a very good last-resort -fallback.

        -
      • -
      -
      -
    8. -
    9. -

      Finally, in the second line, it will ensure that $0 contains an absolute -path by prepending it with $PWD if necessary.

      -
    10. -
    -
    -
    -

    The goal is flexibility, with essential motivation to support eval -"$(<plugin)" and definitely solve setopt no_function_argzero and setopt -posix_argzero cases.

    -
    -
    -

    A plugin manager will be even able to convert a plugin to a function (author -implemented such proof of concept functionality, it’s fully possible – also in -an automatic fashion), but performance differences of this are yet unclear. It -might however provide a use case.

    -
    -
    -

    The last, 5th point also allows using the $0 handling in scripts (i.e. -runnable with the hashbang #!…) to get the directory in which the script -file resides.

    -
    -
    -

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST -and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be -always working. When you’ll set e.g.: the zsh emulation in a function, you in -general don’t have to quote assignments.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    2. Functions Directory

    -
    -
    -

    Despite that, the current-standard plugins have their main directory added to -$fpath, a more clean approach is being proposed: that the plugins use a -subdirectory called functions to store their completions and autoload -functions. This will allow a much cleaner design of plugins.

    -
    -
    -

    The plugin manager should add such a directory to $fpath. The lack of support of -the current plugin managers can be easily resolved via the -indicator:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    or, via use of the PMSPEC parameter:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    The above snippet added to the plugin.zsh file will add the directory to the -$fpath with the compatibility with any new plugin managers preserved.

    -
    -
    -

    The existence of the functions subdirectory cancels the normal adding of the main -plugin directory to $fpath.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    3. Binaries Directory

    -
    -
    -

    Plugins sometimes provide a runnable script or program, either for their -internal use or for the end-user. It is proposed that for the latter, the plugin -shall use a bin/ subdirectory inside its main dir (it is recommended, that for -internal use, the runnable be called via the $0 value obtained as described -above). The runnable should be put into the directory with a +x access right -assigned.

    -
    -
    -

    The task of the plugin manager should be:

    -
    -
    -
      -
    1. -

      Before sourcing the plugin’s script it should test, if the bin/ directory -exists within the plugin directory.

      -
    2. -
    3. -

      If it does, it should add the directory to $PATH.

      -
    4. -
    5. -

      The plugin manager can also, instead of extending the $PATH, create a -shim (i.e.: a forwarder script) or a symbolic link inside a common -directory that’s already added to $PATH (to limit extending it).

      -
    6. -
    7. -

      The plugin manager is permitted to do optional things like ensuring +x -access rights on the directory contents.

      -
    8. -
    -
    -
    -

    The $PMSPEC code letter for the feature is b, and it allows for the plugin -to handle the $PATH extending itself, via, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *b* ]] {
    -    path+=( "${0:h}/bin" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      -
    2. -
    -
    -
    -
    -
    -
    -

    4. Unload Function

    -
    -
    -

    If a plugin is named e.g. kalc (and is available via an-user/kalc -plugin-ID), then it can provide a function, kalc_plugin_unload, that can be -called by a plugin manager to undo the effects of loading that plugin.

    -
    -
    -

    A plugin manager can implement its tracking of changes made by a plugin so -this is in general optional. However, to properly unload e.g. a prompt, -dedicated tracking (easy to do for the plugin creator) can provide better, -predictable results. Any special, uncommon effects of loading a plugin are -possible to undo only by a dedicated function.

    -
    -
    -

    However, an interesting compromise approach is available – to withdraw only the -special effects of loading a plugin via the dedicated, plugin-provided function -and leave the rest to the plugin manager. The value of such an approach is that -maintaining of such function (if it is to withdraw all plugin side-effects) -can be a daunting task requiring constant monitoring of it during the plugin -development process.

    -
    -
    -

    Note that the unload function should contain unfunction $0 (or better -unfunction kalc_plugin_unload etc., for compatibility with the *_argzero -options), to also delete the function itself.

    -
    -
    -

    Adoption Status

    -
    -
      -
    • -

      ZI, implements plugin unloading and calls the function.

      -
    • -
    • -

      romkatv/powerlevel10k, is -using -the function to execute a specific task: shutdown of the binary, background -gitstatus demon, with a very good -results,

      -
    • -
    • -

      agkozak/agkozak-zsh-prompt is -using -the function to completely unload the prompt,

      -
    • -
    • -

      agkozak/zsh-z is -using -the function to completly unload the plugin,

      -
    • -
    • -

      agkozak/zhooks is -using -the function to completely unload the plugin.

      -
    • -
    -
    -
    -
    -
    -
    -

    5. @zsh-plugin-run-on-unload Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-unload which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -unload of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, in the current shell.

    -
    -
    -

    The mechanism thus provides another way, side to the unload -function, for the plugin to participate in the process of unloading it.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    6. @zsh-plugin-run-on-update Call

    -
    -
    -

    The plugin manager can provide a function @zsh-plugin-run-on-update which -has the following call syntax:

    -
    -
    -
    -
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    -
    -
    -
    -

    The function registers pieces of code to be run by the plugin manager on -an update of the plugin. The execution of the code should be done by the eval -built-in in the same order as they are passed to the call.

    -
    -
    -

    The code should be executed in the plugin’s directory, possibly in a subshell -After downloading any new commits to the repository.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit.

      -
    2. -
    -
    -
    -
    -
    -
    -

    7. Plugin Manager Activity Indicator

    -
    -
    -

    Plugin managers should set the $zsh_loaded_plugins array to contain all -previously loaded plugins and the plugin currently being loaded (as the last -element). This will allow any plugin to:

    -
    -
    -
      -
    1. -

      Check which plugins are already loaded.

      -
    2. -
    3. -

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      -
    4. -
    -
    -
    -

    The first item allows a plugin to e.g. issue a notice about missing -dependencies. Instead of issuing a notice, it may be able to satisfy the -dependencies from resources it provides. For example, the pure prompt provides -a zsh-async dependency library within its source tree, which is normally a -separate project. Consequently, the prompt can decide to source its private copy -of zsh-async, having also reliable $0 defined by the previous section (note: -pure doesn’t normally do this).

    -
    -
    -

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin -manager will not handle this:

    -
    -
    -
    -
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    -    fpath+=( "${0:h}" )
    -}
    -
    -
    -
    -

    This will allow the user to reliably source the plugin without using a plugin -manager. The code uses the wrapping braces around variables (i.e.: e.g.: -${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting -around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      -
    2. -
    3. -

      Plugins: GitHub search

      -
    4. -
    -
    -
    -
    -
    -
    -

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    -
    -
    -

    Plugin managers may export the parameter $ZPFX which should contain a path to -a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, -$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris -(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by -default).

    -
    -
    -

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. -make PREFIX=$ZPFX install at clone & update of the plugin to install software -like e.g. tj/git-extras. This is a -the developing role of Zsh plugin managers as package managers, where .zshrc has a -similar role to Chef or Puppet configuration and allows to declare system -state, and have the same state on different accounts/machines.

    -
    -
    -

    No-narration facts-list related to $ZPFX:

    -
    -
    -
      -
    1. -

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      -
    2. -
    3. -

      make PREFIX=$ZPFX install

      -
    4. -
    5. -

      ./configure --prefix=$ZPFX

      -
    6. -
    7. -

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      -
    8. -
    9. -

      zi ice make"PREFIX=$ZPFX install"

      -
    10. -
    11. -

      zi … hook-build:"make PREFIX=$PFX install"

      -
    12. -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    9. Global Parameter holding the plugin manager’s capabilities

    -
    -
    -

    The above paragraphs of the standard spec each constitute a capability, a -feature of the plugin manager. It would make sense that the capabilities are -somehow discoverable. To address this, a global parameter called PMSPEC (from -plugin-manager specification) is proposed. It can hold the following Latin -letters each informing the plugin, that the plugin manager has support for a -given feature:

    -
    -
    -
      -
    • -

      0 – the plugin manager provides the ZERO parameter,

      -
    • -
    • -

      f - … supports the functions/ subdirectory,

      -
    • -
    • -

      b - … supports the bin/ subdirectory,

      -
    • -
    • -

      u - … the unload function,

      -
    • -
    • -

      U - … the @zsh-plugin-run-on-unload call,

      -
    • -
    • -

      p – … the @zsh-plugin-run-on-update call,

      -
    • -
    • -

      i – … the zsh_loaded_plugins activity indicator,

      -
    • -
    • -

      P – … the ZPFX global parameter,

      -
    • -
    • -

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      -
    • -
    -
    -
    -

    The contents of the parameter describing a fully-compliant plugin manager should -be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    -
    -
    -
    -
    if [[ $PMSPEC != *f* ]] {
    -    fpath+=( "${0:h}/functions" )
    -}
    -
    -
    -
    -

    Adoption Status

    -
    -
      -
    1. -

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      -
    2. -
    -
    -
    -
    -
    -
    -

    Zsh Plugin-Programming Best Practices

    -
    -
    -

    The document is to define a Zsh-plugin but also to serve as an information -source for plugin creators. Therefore, it covers also best practices -information in this section.

    -
    -
    -

    Use Of add-zsh-hook To Install Hooks

    -
    -

    Zsh ships with a function add-zsh-hook. It has the following invocation -syntax:

    -
    -
    -
    -
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    -
    -
    -
    -

    The command installs a function as one of the supported zsh hook entries. -which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, -zshexit, zsh_directory_name. For their meaning refer to the -Zsh -documentation.

    -
    -
    -
    -

    Use Of add-zle-hook-widget To Install Zle Hooks

    -
    -

    The zle editor is the part of the Zsh that is responsible for receiving the text -from the user. It can be said that it’s based on widgets, which are nothing more -than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle -editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s -automatically set by the Zle editor).

    -
    -
    -

    The syntax of the call is:

    -
    -
    -
    -
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    -
    -
    -
    -

    The call resembles the syntax of the add-zsh-hook function. The only -the difference is that it takes a widgetname, not a function name and that the -hook is being one of: isearch-exit, isearch-update, line-pre-redraw, -line-init, line-finish, history-line-set, or keymap-select. Their -meaning is explained in the -Zsh -documentation.

    -
    -
    -

    The use of this function is recommended because it allows -the installation multiple hooks per each hook entry. Before introducing the -add-zle-hook-widget function the "normal" way to install a hook was to define -a widget with the name of one of the special widgets. Now, after the function has -been introduced in Zsh 5.3 it should be used instead.

    -
    -
    -
    -

    Standard Parameter Naming

    -
    -

    There’s a convention already present in the Zsh world – to name array variables -lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and -the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The -requirement for the scalars to be uppercase should be, in my opinion, kept only -for the global parameters. I.e.: it’s fine to name local parameters inside a -function lowercase even when they are scalars, not only arrays.

    -
    -
    -

    An extension to the convention is being proposed: to name associative arrays -(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the -remaining letters lowercase. See the next section for an -example of such hash. In the case of the name consisting of multiple words each of -them should be capitalized, e.g.: typeset -A MyHash.

    -
    -
    -

    This convention will increase code readability and bring order to it.

    -
    -
    -
    -

    Standard Plugins Hash

    -
    -

    The plugin often has to declare global parameters that should live throughout a -Zsh session. Following the namespace pollution prevention the -plugin could use a hash to store the different values. Additionally, the plugins -could use a single hash parameter – called Plugins – to prevent the pollution -even more:

    -
    -
    -
    -
    …
    -typeset -gA Plugins
    -# An example value needed by the plugin
    -Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    -
    -
    -
    -

    This way all the data of all plugins will be kept in a single parameter, -available for easy examination and overview (via e.g.: varied Plugins) and also -not polluting the namespace.

    -
    -
    -
    -

    Standard Recommended Options

    -
    -

    The following code snippet is recommended to be included at the beginning of -each of the main functions provided by the plugin:

    -
    -
    -
    -
    emulate -L zsh
    -setopt extended_glob warn_create_global typeset_silent \
    -        no_short_loops rc_quotes no_auto_pushd
    -
    -
    -
    -

    It resets all the options to their default state according to the zsh -emulation mode, with the use of the local_options option – so the options will be -restored to their previous state when leaving the function.

    -
    -
    -

    It then alters the emulation by 6 different options:

    -
    -
    -
      -
    • -

      extended_glob – enables one of the main Zshell features – the advanced, -the built-in regex-like globing mechanism,

      -
    • -
    • -

      warn_create_global – enables warnings to be printed each time a (global) -the variable is defined without being explicitly defined by a typeset, local, -declare, etc. call; it allows to catch typos and missing localizations of -the variables and thus prevent from writing a bad code,

      -
    • -
    • -

      typeset_silent – it allows to call typeset, local, etc. multiple times on -the same variable; without it, the second call causes the variable contents to -be printed first; using this option allows to declare variables inside loops, -near the place of their use, which sometimes helps to write a more readable -code,

      -
    • -
    • -

      no_short_loops – disables the short-loops syntax; this is done because when -the syntax is enabled it limits the parser’s ability to detect errors (see -this zsh-workers post -for the details),

      -
    • -
    • -

      rc_quotes – adds useful ability to insert apostrophes into an -apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s -example' will yield the string a string’s example,

      -
    • -
    • -

      no_auto_pushd - disables the automatic push of the directory passed to cd -builtin onto the directory stack; this is useful because otherwise the -internal directory changes done by the plugin will pollute the global -directory stack.

      -
    • -
    -
    -
    -
    -

    Standard Recommended Variables

    -
    -

    It’s good to localize the following variables at the entry of the main function -of a plugin:

    -
    -
    -
    -
    local MATCH REPLY; integer MBEGIN MEND
    -local -a match mbegin mend reply
    -
    -
    -
    -

    The variables starting with m and M are being used by the substitutions -utilizing (#b) and (#m) flags, respectively. They should not leak to the -global scope. Also, their automatic creation would trigger the warning from the -warn_create_global option.

    -
    -
    -

    The reply and REPLY parameters are being normally used to return an array or -a scalar from a function, respectively – it’s the standard way of passing values -from functions. Their use is naturally limited to the functions called from the -the main function of a plugin – they should not be used to pass data around e.g.: in -between prompts, thus it’s natural to localize them in the main function.

    -
    -
    -
    -

    Standard Function Name-Space Prefixes

    -
    -

    The recommendation is the purely subjective opinion of the author. It can evolve – -if you have any remarks, don’t hesitate to -fill them.

    -
    -
    -
    -

    The Problems Solved By The Proposition

    -
    -

    However, when adopted, the proposition will solve the following issues:

    -
    -
    -
      -
    1. -

      Using the underscore _ to namespace functions – this isn’t the right thing -to do because the prefix is being already used by the completion functions, -so the namespace is already filled up greatly and the plugin functions get -lost in it.

      -
    2. -
    3. -

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace -(an example of such issue appearing).

      -
    4. -
    5. -

      It would allow to quickly discriminate between function types – e.g.: seeing -the : prefix informs the user that it’s a hook-type function while seeing -the @ prefix informs the user that it’s an API-like function, etc.

      -
    6. -
    7. -

      It also provides an improvement during programming, by allowing to quickly -limit the number of completions offered by the editor, e.g.: for Vim’s -Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the -functions are being completed (see below for the type of the functions). - Note: the editor has to be configured so that it accepts such special -characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all -of the proposed prefixes.

      -
    8. -
    -
    -
    -
    -

    The Proposed Function-Name Prefixes

    -
    -

    The proposition of the standard prefixes is as follows:

    -
    -
    -
      -
    1. -

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      -
    2. -
    3. -

      : for hook-like functions, so it should be used e.g.: for the -Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: -→prompt_zinc_precmd.

      -
      -
        -
      • -

        the previous version of the document recommended colon (:) for the prefix, -however, it was problematic, because Windows doesn’t allow colons in file -names, so it wasn’t possible to name an autoload function this way,

        -
      • -
      • -

        the arrow has a rationale behind it - it denotes the execution coming back -to the function at a later time, after it has been registered as a callback -or a handler,

        -
      • -
      • -

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; -in case of problems with typing the character can be always copied – -handler functions do occur in the code rarely,

        -
      • -
      • -

        Zsh supports any string as a function name, because absolutely -any string can be a file name – if there would be an exception in the -name of the callables, then how would it be possible to run a script called -"→abcd"? There are no exceptions, the function can be called even as a -the sequence of null bytes:

        -
        -
        -
        ❯ $'\0'() { print hello }
        -❯ $'\0'
        -hello
        -
        -
        -
      • -
      -
      -
    4. -
    5. -

      +: for output functions, i.e.: for functions that print to the standard -output and error or a log, etc. Example function name: -+prompt_zinc_output_segment.

      -
    6. -
    7. -

      /: for debugging functions, i.e: for functions that output debugs messages to -the screen or a log or e.g.: gather some debug data. Note: the slash - makes it impossible for such functions to be auto-loaded via the autoload - mechanism. It is somewhat risky to assume, that this will never be needed for - the functions, however, the limited number of available ASCII characters - justifies such allocation. Example function name: /prompt_zinc_dmsg.

      -
    8. -
    9. -

      @: for API-like functions, i.e: for functions that are on a boundary to a -subsystem and expose its functionality through a well-defined, in general -fixed interface. For example this plugin standard -defines the function @zsh-plugin-run-on-update, -which is exposing a plugin manager’s functionality in a well-defined way.

      -
    10. -
    -
    -
    -
    -

    Example Code Utilizing The Prefixes

    -
    -
    -
    .zinc_register_hooks() {
    -    add-zsh-hook precmd :zinc_precmd
    -    /zinc_dmsg "Installed precmd hook with result: $?"
    -    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    -    +zinc_print "Zinc initialization complete"
    -}
    -
    -
    -
    -
    -

    Preventing Function Pollution

    -
    -

    When writing a larger autoload function, it very often is the case that the -function contains definitions of other functions. When the main function -finishes executing, the functions are being left defined. This might be -undesired, e.g.: because of the command namespace pollution. The following -snippet of code, when added at the beginning of the main function will -automatically unset the sub-functions when leaving the main function:

    -
    -
    -
    -
    # Don't leak any functions
    -typeset -g prjef
    -prjef=( ${(k)functions} )
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    -trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    -
    -
    -
    -

    Replace the prj* prefix with your project name, e.g.: rustef for a -rust-related plugin. The *ef stands for "entry functions". The snippet works -as follows:

    -
    -
    -
      -
    1. -

      The line prjef=( ${(k)functions} ) remembers all the functions that are -currently defined – which means that the list excludes the functions that are -to be yet defined by the body of the main function.

      -
    2. -
    3. -

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction -of array contents – the :| substitution operator – of the functions that -are defined at the moment of leaving of the function (the trap-s invoke the -code in this moment) with the list of functions from the start of the main -function – the ones stored in the variables $prjef.

      -
    4. -
    5. -

      It then unsets the resulting list of the functions – being only the newly -defined functions in the main function – by passing it to unset -f ….

      -
    6. -
    -
    -
    -

    This way the functions defined by the body of the main (most often an autoload) -the function will be only set during the execution of the function.

    -
    -
    -
    -

    Preventing Parameter Pollution

    -
    -

    When writing a plugin one often needs to keep a state during the Zsh -session. To do this it is natural to use global parameters. However, -when the number of the parameters grows one might want to limit it.

    -
    -
    -

    With the following method, only a single global parameter per plugin can be -sufficient:

    -
    -
    -
    -
    typeset -A PlgMap
    -typeset -A SomeMap
    -typeset -a some_array
    -
    -# Use
    -PlgMap[state]=1
    -SomeMap[state]=1
    -some_array[1]=state
    -
    -
    -
    -

    can be converted into:

    -
    -
    -
    -
    typeset -A PlgMap
    -
    -# Use
    -PlgMap[state]=1
    -PlgMap[SomeMap__state]=1
    -PlgMap[some_array__1]=state
    -
    -
    -
    -

    The use of this method is very unproblematic. The author reduced the number of -global parameters in one of the projects by 21 by using an automatic conversion with -Vim substitution patterns with backreferences without any problems.

    -
    -
    -

    Following the Standard Plugins Hash section, the plugin could -even use a common hash name – Plugins – to lower the pollution even more.

    -
    -
    -
    -
    -
    -

    Appendix A: Revision History (History Of Updates To The Document)

    -
    -
    -

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    -v1.1.1, 21/02/2020: Added Binaries Directory section
    -v1.1, 21/02/2020: Changed the handler-function prefix character to
    -v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    -v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    -v1.08, 01/29/2020: Added the PMSPEC section
    -v1.07, 01/29/2020: Added the functions-directory section
    -v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    -v1.0, 11/22/2019: Removed quoting from the $0 assignments
    -v0.99, 10/26/2019: Added Adoption Status sub-sections
    -v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    -v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    -v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    -v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    -v0.97, 10/23/2019: Added Standard Recommended Options section
    -v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    -v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    -v0.94, 07/20/2019: Add initial version of the best practices section
    -v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    -v0.93, 07/20/2019: 2/ Reformat to 80 columns
    -v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    -v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    -v0.91, 06/02/2018: Fix the link to the PDF for Github.
    -v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    -
    -
    -

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    -
    -
    -
    -
    - - - \ No newline at end of file From d6c1ae2bb3233648fd156abfaac1f6cccda0fb2b Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 07:09:04 +0000 Subject: [PATCH 069/470] deploy: c13738516aa39c9638c97e120935927ca4c09003 --- code/html/additional.zsh.html | 2735 +++++++++++++ code/html/autoload.zsh.html | 5041 ++++++++++++++++++++++++ code/html/install.zsh.html | 3648 +++++++++++++++++ code/html/side.zsh.html | 2932 ++++++++++++++ code/html/zi.zsh.html | 4886 +++++++++++++++++++++++ zsh/Zsh-Native-Scripting-Handbook.html | 1307 ++++++ zsh/Zsh-Plugin-Standard.html | 1785 +++++++++ 7 files changed, 22334 insertions(+) create mode 100644 code/html/additional.zsh.html create mode 100644 code/html/autoload.zsh.html create mode 100644 code/html/install.zsh.html create mode 100644 code/html/side.zsh.html create mode 100644 code/html/zi.zsh.html create mode 100644 zsh/Zsh-Native-Scripting-Handbook.html create mode 100644 zsh/Zsh-Plugin-Standard.html diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html new file mode 100644 index 0000000..f702ec4 --- /dev/null +++ b/code/html/additional.zsh.html @@ -0,0 +1,2735 @@ + + + + + + + + + additional.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
    +.zi-debug-start
    +.zi-debug-stop
    +.zi-debug-unload
    +.zi-service
    +.zi-wrap-track-functions
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
    +|-- autoload.zsh/.zi-unload
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-service [[[
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
    +$2 - mode - for plugin (light or load)
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
    +|-- zi.zsh/.zi-load
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-track-functions
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html new file mode 100644 index 0000000..361408a --- /dev/null +++ b/code/html/autoload.zsh.html @@ -0,0 +1,5041 @@ + + + + + + + + + autoload.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-analytics-menu
    +.zi-any-to-uspl2
    +.zi-at-eval
    +.zi-build-module
    +.zi-cd
    +.zi-cdisable
    +.zi-cenable
    +.zi-changes
    +.zi-check-comp-consistency
    +.zi-check-which-completions-are-enabled
    +.zi-check-which-completions-are-installed
    +.zi-clear-completions
    +.zi-clear-report-for
    +.zi-compile-uncompile-all
    +.zi-compiled
    +.zi-confirm
    +.zi-control-menu
    +.zi-create
    +.zi-delete
    +.zi-diff-env-compute
    +.zi-diff-functions-compute
    +.zi-diff-options-compute
    +.zi-diff-parameter-compute
    +.zi-edit
    +.zi-exists-message
    +.zi-find-completions-of-plugin
    +.zi-format-env
    +.zi-format-functions
    +.zi-format-options
    +.zi-format-parameter
    +.zi-get-completion-owner
    +.zi-get-completion-owner-uspl2col
    +.zi-get-path
    +.zi-glance
    +.zi-help
    +.zi-list-bindkeys
    +.zi-list-compdef-replay
    +.zi-ls
    +.zi-module
    +.zi-pager
    +.zi-prepare-readlink
    +.zi-recall
    +.zi-recently
    +.zi-restore-extendedglob
    +.zi-run-delete-hooks
    +.zi-save-set-extendedglob
    +.zi-search-completions
    +.zi-self-update
    +.zi-show-all-reports
    +.zi-show-completions
    +.zi-show-debug-report
    +.zi-show-registered-plugins
    +.zi-show-report
    +.zi-show-times
    +.zi-show-zstatus
    +.zi-stress
    +.zi-uncompile-plugin
    +.zi-uninstall-completions
    +.zi-unload
    +.zi-unregister-plugin
    +.zi-update-all-parallel
    +.zi-update-or-status
    +.zi-update-or-status-all
    +.zi-update-or-status-snippet
    +.zi-wait-for-update-jobs
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Shows ❮ ZI ❯ analytics.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
    +Converts given plugin-spec to format that's used in keys for hash tables.
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 41 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
    +|-- side.zsh/.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
    +❮ ZI ❯ creates symlink for each installed completion.
    +This function checks whether given completion (i.e.
    +file like "_mkdir") is indeed a symlink. Backup file
    +is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    + ~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    + ~~~~~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
    +For each argument that each should be a path to completion
    +within a plugin's dir, it checks whether that completion
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +|-- install.zsh/.zi-compile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-control-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-control-menu [[[
    +Shows control options.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
    +|-- side.zsh/.zi-compute-ice
    +|-- zi.zsh/+zi-prehelp-usage-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
    +Computes ZI_PATH, ZI_FPATH that hold (f)path components
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
    +Computes FUNCTIONS that holds new functions added by plugin.
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
    +Computes OPTIONS that holds options changed by plugin.
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
    +Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
    +parameters created or changed (their type) by plugin. Uses
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
    +Searches for completions owned by given plugin.
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
    +.zi-get-completion-owner-uspl2col
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +For shortening of code - returns colorized plugin name
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
    +Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
    +Shows colorized source code of plugin. Is able to use pygmentize,
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
    +Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
    +Function that has sub-commands passed as long-options (with two dashes, --).
    +It's an attempt to plugin only this one function into `zi' function
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
    +zi.zsh/Script-Body
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +BusyBox less lacks the -X and -i options, so it can use more
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
    +.zi-self-update
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +.zi-clear-completions
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
    +|-- side.zsh/.zi-compute-ice
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
    +Enables extendedglob-option first saving if it was already
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
    +While .zi-show-completions() shows what completions are
    +installed, this functions searches through all plugin dirs
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
    +Display installed (enabled and disabled), completions. Detect
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    + ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
    +.zi-show-debug-report
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 51 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
    +Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 47 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
    +Removes all completions of given plugin from Zshell (i.e. from FPATH).
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
    +0. Call the Zsh Plugin's Standard *_plugin_unload function
    +0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
    +1. Delete bindkeys (...)
    +2. Delete Zstyles
    +3. Restore options
    +4. Remove aliases
    +5. Restore Zle state
    +6. Unfunction functions (created by plugin)
    +7. Clean-up FPATH and PATH
    +8. Delete created variables
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, + unalias, + unfunction, zle, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
    +zi.zsh/.zi-run-task
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
    +Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
    +$2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 263 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
    +|-- install.zsh/.zi-get-latest-gh-r-url-part
    +|-- install.zsh/.zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-exists-physically
    +|-- side.zsh/.zi-exists-physically-message
    +|-- side.zsh/.zi-store-ices
    +|-- side.zsh/.zi-two-paths
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt, source, + trap, + wait +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
    +Updates (git pull) or does `git status` for all existing plugins.
    +This includes also plugins that are not loaded into Zsh (but exist
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 96 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
    +|-- install.zsh/.zi-compinit
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-user-plugin
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    + ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
    +|-- install.zsh/.zi-update-snippet
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +.zi-update-or-status-all
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html new file mode 100644 index 0000000..65bfcd5 --- /dev/null +++ b/code/html/install.zsh.html @@ -0,0 +1,3648 @@ + + + + + + + + + install.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
    + .zi-compile-plugin
    + .zi-compinit
    + .zi-download-file-stdout
    + .zi-download-snippet
    + .zi-extract
    + .zi-forget-completion
    + .zi-get-cygwin-package
    + .zi-get-latest-gh-r-url-part
    + .zi-get-package
    + .zi-get-url-mtime
    + .zi-install-completions
    + .zi-mirror-using-svn
    + .zi-parse-json
    + .zi-setup-plugin-dir
    + .zi-update-snippet
    + zicp
    + ziextract
    + zimv
    + zpextract
    + ∞zi-atclone-hook
    + ∞zi-atpull-e-hook
    + ∞zi-atpull-hook
    + ∞zi-compile-plugin-hook
    + ∞zi-cp-hook
    + ∞zi-extract-hook
    + ∞zi-make-e-hook
    + ∞zi-make-ee-hook
    + ∞zi-make-hook
    + ∞zi-mv-hook
    + ∞zi-ps-on-update-hook
    + ∞zi-reset-hook
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 84 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
    +|-- side.zsh/.zi-compute-ice
    +|-- side.zsh/.zi-first
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +autoload.zsh/.zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
    +User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
    +|-- compinit
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-or-status-all
    +zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
    +Downloads file to stdout. Supports following backend commands:
    +curl, wget, lftp, lynx. Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-get-cygwin-package
    +.zi-get-package
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
    +Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
    +with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 309 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
    +|-- side.zsh/.zi-store-ices
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
    +|-- zi.zsh/+zi-message
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-forget-completion [[[
    +Implements alternation of Zsh state so that already initialized
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +.zi-install-completions
    +autoload.zsh/.zi-uninstall-completions
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-latest-gh-r-url-part [[[
    +Gets version string of latest release of given Github package.
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 101 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 194 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/@zi-substitute
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
    +Installs all completions of given plugin. After that they are
    +visible to `compinit'. Visible completions can be selectively
    +disabled and enabled. User can access completion data with
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 61 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +.zi-setup-plugin-dir
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
    +Used to clone subdirectories from Github. If in update mode (see $2), then invokes `svn update',
    +in normal mode invokes `svn checkout --non-interactive -q <URL>'. In test mode only
    +compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
    +$2 - mode, "" - normal, "-u" - update, "-t" - test
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
    +Clones given plugin into PLUGIN_DIR. Supports multiple
    +sites (respecting `from' and `proto' ice modifiers).
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 189 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +|-- side.zsh/.zi-any-colorify-as-uspl2
    +|-- side.zsh/.zi-store-ices
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 72 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-get-object-path
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ziextract [[[
    +If the file is an archive, it is extracted by this function.
    +Next stage is scanning of files with the common utility `file',
    +to detect executables. They are given +x mode. There are also
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    +
    +
    +
    +

    Has 274 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
    +.zi-get-package
    +.zi-setup-plugin-dir
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
    +`-- ziextract
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
    +|-- side.zsh/.zi-countdown
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 79 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html new file mode 100644 index 0000000..76e3eab --- /dev/null +++ b/code/html/side.zsh.html @@ -0,0 +1,2932 @@ + + + + + + + + + side.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
    + .zi-compute-ice
    + .zi-countdown
    + .zi-exists-physically
    + .zi-exists-physically-message
    + .zi-first
    + .zi-store-ices
    + .zi-two-paths
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, + etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-clear-completions
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-exists-message
    +autoload.zsh/.zi-get-completion-owner-uspl2col
    +autoload.zsh/.zi-list-bindkeys
    +autoload.zsh/.zi-recently
    +autoload.zsh/.zi-search-completions
    +autoload.zsh/.zi-show-completions
    +autoload.zsh/.zi-show-registered-plugins
    +autoload.zsh/.zi-show-times
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
    +Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
    +taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
    +$2 - "pack" or "nopack" or "pack-nf" - packing means ICE
    +wins with static ice; "pack-nf" means that disk-ices will
    +be ignored (no-file?)
    +$3 - name of output associative array, "ICE" is the default
    +$4 - name of output string parameter, to hold path to directory ("local_dir")
    +$5 - name of output string parameter, to hold filename ("filename")
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-pack-ice
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
    +autoload.zsh/.zi-edit
    +autoload.zsh/.zi-recall
    +autoload.zsh/.zi-update-or-status-snippet
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
    +Displays a countdown 5...4... etc. and returns 0 if it
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-atpull-e-hook
    +install.zsh/∞zi-atpull-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    + ~~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
    +|-- zi.zsh/+zi-message
    +|-- zi.zsh/.zi-any-to-pid
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
    +Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
    +ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
    +|-- zi.zsh/.zi-any-to-pid
    +|-- zi.zsh/.zi-any-to-user-plugin
    +|-- zi.zsh/.zi-find-other-matches
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-stress
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
    +$2 - name of hash that holds values
    +$3 - additional keys of hash to store, space separated
    +$4 - additional keys of hash to store, empty-meaningful ices, space separated
    +$5 - the URL, if applicable
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
    +Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
    +power of it, you need a postgraduate degree in zsh.  However, simple
    +tasks work OK, so if that's all you need, here are some basic examples:
    +zmv '(*).txt' '$1.lis'
    +Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
    +gets replaced by the $1 (not the `*', as happens in mmv, and note the
    +`$', not `=', so that you need to quote both words).
    +
    +
    +
    +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html new file mode 100644 index 0000000..ec9e442 --- /dev/null +++ b/code/html/zi.zsh.html @@ -0,0 +1,4886 @@ + + + + + + + + + zi.zsh(1) + + + + + + +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
    + +zi-message
    + +zi-prehelp-usage-message
    + -zi_scheduler_add_sh
    + .zi-add-fpath
    + .zi-add-report
    + .zi-any-to-pid
    + .zi-any-to-user-plugin
    + .zi-compdef-clear
    + .zi-compdef-replay
    + .zi-diff
    + .zi-diff-env
    + .zi-diff-functions
    + .zi-diff-options
    + .zi-diff-parameter
    + .zi-find-other-matches
    + .zi-formatter-bar
    + .zi-formatter-bar-util
    + .zi-formatter-pid
    + .zi-formatter-th-bar
    + .zi-formatter-url
    + .zi-get-mtime-into
    + .zi-get-object-path
    + .zi-ice
    + .zi-load
    + .zi-load-ices
    + .zi-load-object
    + .zi-load-plugin
    + .zi-load-snippet
    + .zi-main-message-formatter
    + .zi-pack-ice
    + .zi-parse-opts
    + .zi-prepare-home
    + .zi-register-plugin
    + .zi-run
    + .zi-run-task
    + .zi-set-m-func
    + .zi-setup-params
    + .zi-submit-turbo
    + .zi-tmp-subst-off
    + .zi-tmp-subst-on
    + .zi-util-shands-path
    + :zi-reload-and-run
    + :zi-tmp-subst-alias
    + :zi-tmp-subst-autoload
    + :zi-tmp-subst-bindkey
    + :zi-tmp-subst-compdef
    + :zi-tmp-subst-zle
    + :zi-tmp-subst-zstyle
    + @autoload
    + @zi-register-annex
    + @zi-register-hook
    + @zi-substitute
    + @zsh-plugin-run-on-unload
    + @zsh-plugin-run-on-update
    + pmodload
    + zi
    + zi-turbo
    + zicdclear
    + zicdreplay
    + zicompdef
    + zicompinit
    + zpcdclear
    + zpcdreplay
    + zpcompdef
    + zpcompinit
    +AUTOLOAD add-zsh-hook
    +AUTOLOAD compinit
    +AUTOLOAD is-at-least
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 202 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
    +|-- +zi-message
    +|-- @zi-register-hook
    +|-- add-zsh-hook
    +|-- autoload.zsh/.zi-module
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, + is-at-least, setopt, source, zmodload, zstyle +

    +
    +
    +

    Exports (environment): PMSPEC // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
    +Deploys a sub-prompt message to be displayed OR a `zle
    +.reset-prompt' call to be invoked
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +.zi-compdef-clear
    +.zi-compdef-replay
    +.zi-load-snippet
    +.zi-register-plugin
    +.zi-run
    +.zi-set-m-func
    +:zi-tmp-subst-autoload
    +Script-Body
    +zi
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-unload
    +additional.zsh/:zi-tmp-subst-source
    +autoload.zsh/.zi-build-module
    +autoload.zsh/.zi-cd
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-show-zstatus
    +autoload.zsh/.zi-uninstall-completions
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +autoload.zsh/.zi-wait-for-update-jobs
    +install.zsh/.zi-compile-plugin
    +install.zsh/.zi-compinit
    +install.zsh/.zi-download-file-stdout
    +install.zsh/.zi-download-snippet
    +install.zsh/.zi-extract
    +install.zsh/.zi-get-cygwin-package
    +install.zsh/.zi-get-latest-gh-r-url-part
    +install.zsh/.zi-get-package
    +install.zsh/.zi-install-completions
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +install.zsh/ziextract
    +install.zsh/∞zi-ps-on-update-hook
    +install.zsh/∞zi-reset-hook
    +side.zsh/.zi-countdown
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
    +Copies task into ZI_RUN array, called when a task timeouts.
    +A small function ran from pattern in /-substitution as a math
    +function.
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +:zi-tmp-subst-alias
    +:zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +:zi-tmp-subst-compdef
    +:zi-tmp-subst-zle
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
    +.zi-get-object-path
    +.zi-load
    +.zi-run
    +:zi-tmp-subst-autoload
    +autoload.zsh/.zi-any-to-uspl2
    +autoload.zsh/.zi-changes
    +autoload.zsh/.zi-compile-uncompile-all
    +autoload.zsh/.zi-compiled
    +autoload.zsh/.zi-create
    +autoload.zsh/.zi-delete
    +autoload.zsh/.zi-find-completions-of-plugin
    +autoload.zsh/.zi-glance
    +autoload.zsh/.zi-show-report
    +autoload.zsh/.zi-stress
    +autoload.zsh/.zi-uncompile-plugin
    +autoload.zsh/.zi-unload
    +autoload.zsh/.zi-unregister-plugin
    +autoload.zsh/.zi-update-all-parallel
    +autoload.zsh/.zi-update-or-status-all
    +autoload.zsh/.zi-update-or-status
    +install.zsh/.zi-install-completions
    +side.zsh/.zi-any-colorify-as-uspl2
    +side.zsh/.zi-compute-ice
    +side.zsh/.zi-exists-physically-message
    +side.zsh/.zi-exists-physically
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdclear
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicdreplay
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
    +Implements detection of change in any parameter's existence and type.
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
    +Plugin's main source file is in general `name.plugin.zsh'. However,
    +there can be different conventions, if that file is not found, then
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +.zi-load-snippet
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +autoload.zsh/.zi-self-update
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
    +.zi-load-snippet
    +.zi-run
    +zi
    +autoload.zsh/.zi-get-path
    +install.zsh/.zi-setup-plugin-dir
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-first
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
    +Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 76 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
    +|-- +zi-deploy-message
    +|-- install.zsh/.zi-get-package
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-run-task
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, + zle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
    +|-- +zi-deploy-message
    +|-- +zi-message
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, + unfunction, zparseopts, zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
    +.zi-load
    +.zi-run-task
    +pmodload
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
    +Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
    +second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +@zsh-plugin-run-on-unload
    +@zsh-plugin-run-on-update
    +install.zsh/.zi-update-snippet
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
    +|-- autoload.zsh/.zi-clear-completions
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
    +Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
    +zsh_loaded_plugins array (managed according to the plugin standard:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
    +Run code inside plugin's folder
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
    +A backend, worker function of .zi-scheduler. It obtains the tasks
    +index and a few of its properties (like the type: plugin, snippet,
    +service plugin, service snippet) and executes it first checking for
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
    +$2 - the time assigned to the task
    +$3 - type: plugin, snippet, service plugin, service snippet
    +$4 - task's index in the ZI[WAIT_ICE_...] fields
    +$5 - mode: load or light
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
    +If `zi load`, `zi light` or `zi snippet`  will be
    +preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
    +ice-mods then the plugin or snipped is to be loaded in turbo-mode,
    +and this function adds it to internal data structures, so that
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
    +Turn off temporary substituting of functions completely for a given mode ("load", "light",
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
    +Turn on temporary substituting of functions of builtins and functions according to passed
    +mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
    +Marks given function ($3) for autoloading, and executes it triggering the load.
    +$1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
    +$2 - autoload options
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +|-- +zi-message
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, + zparseopts +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts +

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
    +Function defined to hijack plugin's calls to the `compdef' function.
    +The hijacking is not only for reporting, but also to save compdef
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
    +`-- :zi-tmp-subst-autoload
    +    |-- +zi-message
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
    +Searches for timeout tasks, executes them. There's an array of tasks
    +waiting for execution, this scheduler manages them, detects which ones
    +should be run at current moment, decides to remove (or not) them from
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
    +invocation of the scheduler; this results in chain of `sched'
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
    +by one; this is handy if e.g. a docker image starts up and
    +needs to install all turbo-mode plugins without any hesitation
    +(delay), i.e. "burst" allows to run package installations from
    +script, not from prompt.
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
    +install.zsh/.zi-at-eval
    +install.zsh/.zi-get-package
    +install.zsh/∞zi-atclone-hook
    +install.zsh/∞zi-cp-hook
    +install.zsh/∞zi-extract-hook
    +install.zsh/∞zi-make-e-hook
    +install.zsh/∞zi-make-ee-hook
    +install.zsh/∞zi-make-hook
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism, see:
    +https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 547 line(s). Calls functions:

    +
    +
    +
    +
    zi
    +|-- +zi-message
    +|-- +zi-prehelp-usage-message
    +|   `-- +zi-message
    +|-- additional.zsh/.zi-clear-debug-report
    +|-- additional.zsh/.zi-debug-start
    +|-- additional.zsh/.zi-debug-stop
    +|-- additional.zsh/.zi-debug-unload
    +|-- autoload.zsh/.zi-analytics-menu
    +|-- autoload.zsh/.zi-cdisable
    +|-- autoload.zsh/.zi-cenable
    +|-- autoload.zsh/.zi-clear-completions
    +|-- autoload.zsh/.zi-compile-uncompile-all
    +|-- autoload.zsh/.zi-compiled
    +|-- autoload.zsh/.zi-control-menu
    +|-- autoload.zsh/.zi-help
    +|-- autoload.zsh/.zi-list-bindkeys
    +|-- autoload.zsh/.zi-list-compdef-replay
    +|-- autoload.zsh/.zi-ls
    +|-- autoload.zsh/.zi-module
    +|-- autoload.zsh/.zi-recently
    +|-- autoload.zsh/.zi-search-completions
    +|-- autoload.zsh/.zi-self-update
    +|-- autoload.zsh/.zi-show-all-reports
    +|-- autoload.zsh/.zi-show-completions
    +|-- autoload.zsh/.zi-show-debug-report
    +|-- autoload.zsh/.zi-show-registered-plugins
    +|-- autoload.zsh/.zi-show-report
    +|-- autoload.zsh/.zi-show-times
    +|-- autoload.zsh/.zi-show-zstatus
    +|-- autoload.zsh/.zi-uncompile-plugin
    +|-- autoload.zsh/.zi-uninstall-completions
    +|-- autoload.zsh/.zi-unload
    +|-- autoload.zsh/.zi-update-or-status
    +|-- autoload.zsh/.zi-update-or-status-all
    +|-- compinit
    +|-- install.zsh/.zi-compile-plugin
    +|-- install.zsh/.zi-compinit
    +|-- install.zsh/.zi-forget-completion
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, + source +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
    +With zi-turbo first argument is a wait time and suffix, i.e. "0a".
    +Anything that doesn't match will be passed as if it were an ice mod.
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
    +`-- zi
    +    |-- +zi-message
    +    |-- +zi-prehelp-usage-message
    +    |   `-- +zi-message
    +    |-- additional.zsh/.zi-clear-debug-report
    +    |-- additional.zsh/.zi-debug-start
    +    |-- additional.zsh/.zi-debug-stop
    +    |-- additional.zsh/.zi-debug-unload
    +    |-- autoload.zsh/.zi-analytics-menu
    +    |-- autoload.zsh/.zi-cdisable
    +    |-- autoload.zsh/.zi-cenable
    +    |-- autoload.zsh/.zi-clear-completions
    +    |-- autoload.zsh/.zi-compile-uncompile-all
    +    |-- autoload.zsh/.zi-compiled
    +    |-- autoload.zsh/.zi-control-menu
    +    |-- autoload.zsh/.zi-help
    +    |-- autoload.zsh/.zi-list-bindkeys
    +    |-- autoload.zsh/.zi-list-compdef-replay
    +    |-- autoload.zsh/.zi-ls
    +    |-- autoload.zsh/.zi-module
    +    |-- autoload.zsh/.zi-recently
    +    |-- autoload.zsh/.zi-search-completions
    +    |-- autoload.zsh/.zi-self-update
    +    |-- autoload.zsh/.zi-show-all-reports
    +    |-- autoload.zsh/.zi-show-completions
    +    |-- autoload.zsh/.zi-show-debug-report
    +    |-- autoload.zsh/.zi-show-registered-plugins
    +    |-- autoload.zsh/.zi-show-report
    +    |-- autoload.zsh/.zi-show-times
    +    |-- autoload.zsh/.zi-show-zstatus
    +    |-- autoload.zsh/.zi-uncompile-plugin
    +    |-- autoload.zsh/.zi-uninstall-completions
    +    |-- autoload.zsh/.zi-unload
    +    |-- autoload.zsh/.zi-update-or-status
    +    |-- autoload.zsh/.zi-update-or-status-all
    +    |-- compinit
    +    |-- install.zsh/.zi-compile-plugin
    +    |-- install.zsh/.zi-compinit
    +    |-- install.zsh/.zi-forget-completion
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicdclear. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompdef. [[[
    +Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zicompinit. [[[
    +A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    +It runs `autoload compinit; compinit' and respects
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +zinit() { zi "$@"; }
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
    +HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
    +functions and setup. Everything else is split into different files that
    +will automatically be made autoloaded (see the end of this file).  The
    +names of the files that will be considered for autoloading are those that
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    +
    +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, + eval, read, setopt, unfunction, zle, + zstyle +

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +zicompinit
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
    +it'll accept any dot/dash-separated string of numbers as its second argument
    +and compare it to the dot/dash-separated first argument. Leading non-number
    +parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
    +when the comparison is done; only the numbers matter. Any left-out segments
    +in the first argument that are present in the version string compared are
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    +
    +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
    +:zi-tmp-subst-bindkey
    +Script-Body
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html new file mode 100644 index 0000000..cbbdaf6 --- /dev/null +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -0,0 +1,1307 @@ + + + + + + + + +Zsh Native Scripting Handbook + + + + + + +
    +
    +
    +
    +

    The handbook is also available as a PDF, HTML.

    +
    +
    +

    This document has been created after 3.5 years of creating software for Z shell +and receiving help from IRC channel #zsh. Avoiding forks was the main guideline +when creating the projects and this lead to multiple discoveries of Zsh constructs +that are fast, robust, and do not depend on external tools. Such code is more like +Ruby or Perl code, less like top-down shell scripts.

    +
    +
    +
    +
    +

    Information

    +
    +
    +

    @ is about keeping array form

    +
    +

    How to access all array elements in a shell? The standard answer: use @ +subscript, i.e. ${array[@]}. However, this is the Bash & Ksh way (and with +the option KSH_ARRAYS, Zsh also works this way, i.e. needs @ to access +the whole array). Z shell is different: it is $array that refers to all +elements anyway. There is no need for the @ subscript.

    +
    +
    +

    So what use has @ in the Zsh-world? It is: “keep array form” or “do not +join”. When is it activated? When the user quotes the array, i.e. invokes +"$array", he induces joining of all array elements (into a single string). +@ is to have elements still quoted (so empty elements are +preserved), but not joined.

    +
    +
    +

    Two forms are available, "$array[@]" and "${(@)array}". The first form has +an additional effect – when option KSH_ARRAYS is set, it indeed induces +referencing to the whole array instead of a first element only. It should then use +braces, i.e. ${array[@]}, "${array[@]}" (KSH_ARRAYS requirement).

    +
    +
    +

    In practice, if you’ll use @ as a subscript – [@], not as a flag – +${(@)…​}, then you’ll make the code KSH_ARRAYS-compatible.

    +
    +
    +
    +

    extended_glob

    +
    +

    Glob-flags #b and #m require setopt extended_glob. Patterns utilizing ~ +and ^ also require it. Extended-glob is one of the main features of Zsh.

    +
    +
    +
    +
    +
    +

    Constructs

    +
    +
    +

    Reading a file

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +
    +
    +
    +

    This preserves empty lines because of double-quoting (the outside one). +@-flag is used to obtain an array instead of a scalar. If you don’t want empty +lines preserved, you can also skip @-splitting, as is explained in +Information section:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(<path/file)"} )
    +
    +
    +
    +

    Note: $(<…​) construct strips trailing empty lines.

    +
    +
    +
    +

    Reading from stdin

    +
    +

    This topic is governed by the same principles a the previous paragraph +(Reading a file), with the single difference that instead of the substitution +"$(<file-path)" the substitution that should be used is "$(command arg1 +…​)", i.e.:

    +
    +
    +
    +
    declare -a lines; lines=( ${(f)"$(command arg1 ...)"} )
    +
    +
    +
    +

    This will read the command’s output into the array lines. The version that +does @ splitting and retains any empty lines is:

    +
    +
    +
    +
    declare -a lines; lines=( "${(f@)$(command arg1 ...)}" )
    +
    +
    +
    +

    Note that instead of four double-quotes ", an idiom that is justified (simply +suggested) by the Zsh documentation (and was used in the previous paragraph, in +the snippet …​ "${(@f)"$(<path/file)"}" …​), only two double-quotes are +being used. I’ve investigated this form with the main Zsh developers on the +zsh-workers@zsh.org mailing list and it was clearly stated that single, +outside quoting of ${(f@)…​} substitution works as if it was also separately +applied to $(command …​) (or to $(<file-path)) inner substitution, so the +second double-quoting isn’t needed.

    +
    +
    +
    +

    Skipping dirname basename

    +
    +

    dirname and basename can be skipped by:

    +
    +
    +
    +
    local dirname="${PWD:h}"
    +local basename="${PWD:t}"
    +
    +
    +
    +

    Read more about modifiers.

    +
    +
    +
    + +
    +

    Symbolic links can be turned into an absolute path with:

    +
    +
    +
    +
    local absolute_path="${PWD:A}"
    +
    +
    +
    +
    +

    Skipping grep

    +
    +
    +
    declare -a lines; lines=( "${(@f)"$(<path/file)"}" )
    +declare -a grepped; grepped=( ${(M)lines:#*query*} )
    +
    +
    +
    +

    To have the grep -v effect, skip M-flag. To grep case-insensitively, use #i glob +flag (…​:#(#i)*query*}).

    +
    +
    +

    As it can be seen, ${…​:#…​} substitution is filtering of the array, which by +default filters-out elements ((M) flag induces the opposite behavior). When +used with string, not an array, it behaves similarly: returns empty string when +{input_string_var:#pattern} matches whole input string.

    +
    +
    +

    Side-note: (M) flag can be used also with ${(M)var#pattern} and other +substitutions, to retain what’s matched by the pattern instead of removing that.

    +
    +
    +

    Multi-line matching like with grep

    +
    +

    Suppose you have a Subversion repository and want to check if it contains files +being not under version control. You could do this in Bash style like follows:

    +
    +
    +
    +
    local svn_status="$(svn status)"
    +if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
    +    echo found
    +fi
    +
    +
    +
    +

    Those are 3 forks: for svn status, for echo, and for grep. This can be solved +by the :# substitution and (M) flag described above in this section (just check +if the number of matched lines is greater than 0). However, there’s a more direct +approach:

    +
    +
    +
    +
    local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = *((#s)|$nl)\?* ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    This requires extendedglob. The (#s) means: "start of the string". So +((#s)|$nl) means "start of the string OR preceded by a new-line".

    +
    +
    +

    If the extendedglob option cannot be used for some reason, this can be +achieved also +without it, but essentially it means that alternative (i.e. |) of two +versions of the pattern will have to be matched:

    +
    +
    +
    +
    setopt localoptions noextendedglob
    +local svn_status="$(svn status)" nl=$'\n'
    +if [[ "$svn_status" = (\?*|*$nl\?*) ]]; then
    +  echo found
    +fi
    +
    +
    +
    +

    In general, multi-line matching falls into the following idiom (`extended glob +version):

    +
    +
    +
    +
    local needle="?" required_preceding='[[:space:]]#'
    +[[ "$(svn status)" = *((#s)|$nl)${~required_preceding}${needle}* ]] && echo found
    +
    +
    +
    +

    It does a single fork (calls svn status). The `${~variable} means (the ~ +init): "the variable is holding a pattern, interpret it". All in all, instead +of regular expressions we were using patterns (globs) (see +this section).

    +
    +
    +
    +
    +

    Pattern matching in AND-fashion

    +
    +
    +
    [[ "abc xyz efg" = *abc*~^*efg* ]] && print Match found
    +
    +
    +
    +

    The ~ is a negation — match *abc* but not …​. Then, ^ is also a negation. +The effect is: *ABC* but not those that don’t have *efg* which equals to: +*ABC* but those that have also *efg*. This is a regular pattern and it can +be used with :# above to search arrays, or with the R-subscript flag to search +hashes (${hsh[(R)*pattern*]}), etc. The inventor of those patterns is Mikael +Magnusson.

    +
    +
    +
    +

    Skipping tr

    +
    +
    +
    declare -A map; map=( a 1 b 2 );
    +text=( "ab" "ba" )
    +text=( ${text[@]//(#m)?/${map[$MATCH]}} )
    +print $text ▶ 12 21
    +
    +
    +
    +

    #m flag enables the $MATCH parameter. At each // substitution, $map is +queried for character-replacement. You can substitute a text variable too, just +skip [@] and parentheses in the assignment.

    +
    +
    +
    +

    Ternary expressions with +,-,:+,:- substitutions

    +
    +
    +
    HELP="yes"; print ${${HELP:+help enabled}:-help disabled} ▶ help enabled
    +HELP=""; print ${${HELP:+help enabled}:-help disabled} ▶ help disabled
    +
    +
    +
    +

    Ternary expression is known from C language but exists also in Zsh, but +directly only in math context, i.e. (( a = a > 0 ? b : c )). Flexibility of +Zsh allows such expressions also in a normal context. Above is an example. :+ is +"if not empty, substitute …" :- is "if empty, substitute …". You can save +a great number of lines of code with those substitutions, it’s normally at least +4-lines if condition or lengthy &&/|| use.

    +
    +
    +
    +

    Ternary expressions with :# substitution

    +
    +
    +
    var=abc; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ is abc
    +var=abcd; print ${${${(M)var:#abc}:+is abc}:-not abc} ▶ not abc
    +
    +
    +
    +

    A one-line "if var = x, then …, else …". Again, can spare a great amount of boring +code that makes a 10-line function a 20-line one.

    +
    +
    +
    +

    Using built-in regular expressions engine

    +
    +
    +
    [[ "aabbb" = (#b)(a##)*(b(#c2,2)) ]] && print ${match[1]}-${match[2]} ▶ aa-bb
    +
    +
    +
    +

    ## is: "1 or more". (#c2,2) is: "exactly 2". A few other constructs: # is +"0 or more", ? is "any character", (a|b|) is "a or b or empty match". #b +enables the $match parameters. There’s also #m but it has one parameter +$MATCH for whole matched text, not for any parenthesis.

    +
    +
    +

    Zsh patterns are a custom regular expressions engine. They are +slightly faster than the zsh/regex module (used for =~ operator) and don’t have +that dependency (regex module can be not present, e.g. in default static build +of Zsh). Also, they can be used in substitutions, for example in // +substitution.

    +
    +
    +
    +

    Skipping uniq

    +
    +
    +
    declare -aU array; array=( a a b ); print $array ▶ a b
    +declare -a array; array=( a a b ); print ${(u)array} ▶ a b
    +
    +
    +
    +

    Enable -U flag for array so that it guards elements to be unique, or use +u-flag to make unique elements of an array.

    +
    +
    +
    +

    Skipping awk

    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#b)([^,]##,)(#c3,3)([^,]##)*/${match[2]}}" ▶ 1 2
    +
    +
    +
    +

    The pattern specifies 3 blocks of [^,]##, so 3 "not-comma multiple times, then comma", then the single block of "not-comma multiple times" in second parentheses — and then replaces this with second parentheses. The result is the 4th column extracted +from multiple lines of text, something awk is often used for. Another method is +the use of s-flag. For a single line of text:

    +
    +
    +
    +
    text="a,b,c,1,e"; print ${${(s:,:)text}[4]} ▶ 1
    +
    +
    +
    +

    Thanks to in-substitution code-execution capabilities it’s possible to use +s-flag to apply it to multiple lines:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" );
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2
    +
    +
    +
    +

    There is a problem with the (s::) flag that can be solved if Zsh is version +5.4 or higher: if there will be single input column, e.g. list=( "column1" +"a,b") instead of two or more columns (i.e. list=( "column1,column2" "a,b" +)), then (s::) will return string instead of 1-element array. So the +index [4] in above snippet will index a string, and show its 4-th letter. +Starting with Zsh 5.4, thanks to a patch by Bart Schaefer (40640: the (A) +parameter flag forces array result even if…​), it is possible to force +array-kind of result even for a single column, by adding (A) flag, i.e.:

    +
    +
    +
    +
    declare -a list; list=( "a,b,c,1,e" "p,q,r,2,t" "column1" );
    +print "${list[@]/(#m)*/${${(As:,:)MATCH}[4]}}" ▶ 1 2
    +print "${list[@]/(#m)*/${${(s:,:)MATCH}[4]}}" ▶ 1 2 u
    +
    +
    +
    +

    Side-note: (A) flag is often used together with ::= assignment-substitution +and (P) flag, to assign arrays and hashes by-name.

    +
    +
    +
    +

    Searching arrays

    +
    +
    +
    declare -a array; array=( a b " c1" d ); print ${array[(r)[[:space:]][[:alpha:]]*]} ▶ c1
    +
    +
    +
    +

    [[:space:]] contains unicode spaces. This is often used in conditional +expression like [[ -z ${array[(r)…​]} ]].

    +
    +
    +

    Note that Skipping grep that uses :# substitution can also be +used to search arrays.

    +
    +
    +
    +

    Code execution in // substitution

    +
    +
    +
    append() { gathered+=( $array[$1] ); }
    +functions -M append 1 1 append
    +declare -a array; array=( "Value 1" "Other data" "Value 2" )
    +declare -a gathered; integer idx=0
    +: ${array[@]/(#b)(Value ([[:digit:]]##)|*)/$(( ${#match[2]} > 0 ? append(++idx) : ++idx ))}
    +print $gathered ▶ Value 1 Value 2
    +
    +
    +
    +

    Use of #b glob flag enables math-code execution (and not only) in / and // +substitutions. Implementation is very fast.

    +
    +
    +
    +

    Serializing data

    +
    +
    +
    declare -A hsh deserialized; hsh=( key value )
    +serialized="${(j: :)${(qkv@)hsh}}"
    +deserialized=( "${(Q@)${(z@)serialized}}" )
    +print ${(kv)deserialized} ▶ key value
    +
    +
    +
    +

    j-flag means join — by spaces, in this case. Flags kv mean: keys and values, +interleaving. Important q-flag means: quote. So what is obtained is each key +and value quoted, and put into a string separated by spaces.

    +
    +
    +

    z-flag means: split as if Zsh parser would split. So quoting (with backslashes, double quoting, and others) is recognized. Obtained is array ( "key" "value") +which is then de-quoted with Q-flag. This yields original data, assigned to +hash deserialized. Use this to e.g. implement an array of hashes.

    +
    +
    +

    Note: to be compatible with setopt ksharrays, use [@] instead of (@), e.g.: +…​( "${(Q)${(z)serialized[@]}[@]}" )

    +
    +
    +

    Tip: serializing with Bash

    +
    +
    +
    array=( key1 key2 )
    +printf -v serialized "%q " "${array[@]}"
    +eval "deserialized=($serialized)"
    +
    +
    +
    +

    This method works also with Zsh. The drawback is the use of eval, however, it’s +impossible that any problem will occur unless someone compromises variable’s +value, but as always, eval should be avoided if possible.

    +
    +
    +
    +
    +
    +
    +

    Real world examples

    +
    +
    +

    Testing for Git subcommand

    +
    +

    Following code checks, if there is a git subcommand $mysub:

    +
    +
    +
    +
    if git help -a | grep "^  [a-z]" | tr ' ' '\n' | grep -x $mysub > /dev/null > /dev/null; then
    +
    +
    +
    +

    Those are 4 forks. The code can be replaced according to this guide:

    +
    +
    +
    +
    local -a lines_list
    +lines_list=( ${(f)"$(git help -a)"} )
    +lines_list=( ${(M)${(s: :)${(M)lines_list:#   [a-z]*}}:#$mysub} )
    +if (( ${#lines_list} > 0 )); then
    +    …
    +fi
    +
    +
    +
    +

    The result is just 1 fork.

    +
    +
    +
    +

    Counting unquoted-only apostrophes

    +
    +

    A project was needing this to do some Zle line-continuation tricks (when you +put a backslash-\ at the end of the line and press enter – it is the +line-continuation that occurs at that moment).

    +
    +
    +

    The required functionality is: in the given string, count the number of +apostrophes, but only the unquoted ones. This means that only apostrophes +with null or an even number of preceding backslashes should be accepted into +the count:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +integer count=0
    +: ${buf//(#b)((#s)|[^\\])([\\][\\])#(\'\'#)/$(( count += ${#match[3]} ))}
    +echo $count ▶ 3
    +
    +
    +
    +

    The answer (i.e. the output) to the above presentation and example is: 3 +(there are 3 unquoted apostrophes in total in the string kept in the variable +$buf).

    +
    +
    +

    Below follows a variation of the above snippet that doesn’t use math-code execution:

    +
    +
    +
    +
    buf="word'continue\'after\\\'afterSecnd\\''afterPair"
    +buf="${(S)buf//(#b)*((#s)|[^\\])([\\][\\])#(\'\'#)*/${match[3]}}"; buf=${buf%%[^\']##}
    +integer count=${#buf}
    +echo $count ▶ 3
    +
    +
    +
    +

    This is possible thanks to (S) flag – non-greedy matching, ([\\][\\]) trick – it +matches only unquoted following (\'\'#) characters (which are the apostrophes) and +a general strategy to replace anything-apostrope(s) (unquoted ones) with +the-apostrope(s) (and then count them with ${#buf}).

    +
    +
    +
    +
    +
    +

    Tips and Tricks

    +
    +
    +

    Parsing INI file

    +
    +

    With Zshell’s extended_glob parsing an ini file is an easy task. It will not +result in a nested-arrays data structure (Zsh doesn’t support nested hashes), +but the hash keys like $DB_CONF[db1_<connection>_host] are actually really +intuitive.

    +
    +
    +

    The code should be placed in a file named read-ini-file, in $fpath, and +autoload read-ini-file should be invoked.

    +
    +
    +
    read-ini-file
    +
    +
    # Copyright (c) 2018 Sebastian Gniazdowski
    +#
    +# $1 - path to the ini file to parse
    +# $2 - the name of output hash
    +# $3 - prefix for keys in the hash
    +#
    +# Writes to given hash under keys built-in following way: ${3}<section>_field.
    +# Values are values from the ini file. Example invocation:
    +#
    +# read-ini-file ./database1-setup.ini DB_CONF db1_
    +# read-ini-file ./database2-setup.ini DB_CONF db2_
    +#
    +
    +setopt localoptions extendedglob
    +
    +local __ini_file="$1" __out_hash="$2" __key_prefix="$3"
    +local IFS='' __line __cur_section="void" __access_string
    +local -a match mbegin mend
    +
    +[[ ! -r "$__ini_file" ]] && { builtin print -r "read-ini-file: an ini file is unreadable ($__ini_file)"; return 1; }
    +
    +while read -r -t 1 __line; do
    +    if [[ "$__line" = [[:blank:]]#\;* ]]; then
    +        continue
    +    # Match "[Section]" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then
    +        __cur_section="${match[1]}"
    +    # Match "string = string" line
    +    elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then
    +        match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # severe trick - remove trailing whitespace
    +        __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]"
    +        : "${(P)__access_string::=${match[2]}}"
    +    fi
    +done < "$__ini_file"
    +
    +return 0
    +
    +
    +
    +
    +
    +
    +

    Appendix A: Revision history (history of updates to the document)

    +
    +
    +

    v1.19, 11/05/2018: Less abstract but more true function of @ (flag, subscript)
    +v1.18, 10/21/2018: Multi-line matching like with grep
    +v1.16, 10/21/2018: Count apostrophes example – additional version without math-code
    +v1.15, 10/21/2018: Inform about potential (s::)-flag problems ("Skipping awk")
    +v1.1, 10/21/2018: Elaborate on (M)-flag in "Skipping grep" section
    +v1.05, 10/21/2018: New section "Reading from stdin"
    +v1.0, 09/29/2018: New real world examples (git help -a and "Counting apostrophes")

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html new file mode 100644 index 0000000..134570c --- /dev/null +++ b/zsh/Zsh-Plugin-Standard.html @@ -0,0 +1,1785 @@ + + + + + + + + +Zsh Plugin Standard + + + + + + +
    +
    +
    +
    +

    The document is also available as a PDF, HTML.

    +
    +
    +
    +
    +

    What Is A Zsh Plugin?

    +
    +
    +

    Historically, Zsh plugins were first defined by Oh My Zsh. They provide for a +way to package together files that extend or configure the shell’s functionality +in a particular way.

    +
    +
    +

    At a simple level, a plugin:

    +
    +
    +
      +
    1. +

      Has its directory added to $fpath +(Zsh documentation). +This is being done either by a plugin manager or by the plugin itself (see 5th section for more information).

      +
    2. +
    3. +

      Has it’s first *.plugin.zsh file sourced (or *.zsh, init.zsh, *.sh, these are non-standard).

      +
    4. +
    +
    +
    +

    The first point allows plugins to provide completions and functions that are +loaded via Zsh’s autoload mechanism (a single function per file).

    +
    +
    +

    From a more broad perspective, a plugin consists of:

    +
    +
    +
      +
    1. +

      A directory containing various files (the main script, autoload functions, +completions, Makefiles, backend programs, documentation).

      +
    2. +
    3. +

      A sourceable script that obtains the path to its directory via $0 (see the +next section for a related enhancement proposal).

      +
    4. +
    5. +

      A Github (or another site) repository identified by two components +username/pluginname.

      +
    6. +
    7. +

      A software package containing any type of command line artifacts – when used +with advanced plugin managers that have hooks, can run Makefiles, add directories to $PATH.

      +
    8. +
    +
    +
    +

    Below follow proposed enhancements and codifications of the definition of a "Zsh +the plugin" and the actions of plugin managers – the proposed standardization. They +cover the information on how to write a Zsh plugin.

    +
    +
    +
    +
    +

    1. Standardized $0 Handling

    +
    +
    +

    To get the plugin’s location, plugins should do:

    +
    +
    +
    +
    0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
    +0="${${(M)0:#/*}:-$PWD/$0}"
    +
    +# Then ${0:h} to get plugin’s directory
    +
    +
    +
    +

    The one-line code above will:

    +
    +
    +
      +
    1. +

      Be backward-compatible with normal $0 setting and usage.

      +
    2. +
    3. +

      Use ZERO if it’s not empty,

      +
      +
        +
      • +

        the plugin manager will be easily able to alter effective $0 before +loading a plugin,

        +
      • +
      • +

        this allows e.g. eval "$(<plugin)", which can be faster +than source +(comparison +note that it’s not for a compiled script).

        +
      • +
      +
      +
    4. +
    5. +

      Use $0 if it doesn’t contain the path to the Zsh binary,

      +
      +
        +
      • +

        plugin manager will still be able to set $0, although more difficultly +(requires unsetopt function_argzero before sourcing plugin script, and +0=…​ assignment),

        +
      • +
      • +

        unsetopt function_argzero will be detected (it causes $0 not to +contain a plugin-script path, but the path to Zsh binary, if not overwritten +by a 0=…​ assignment),

        +
      • +
      • +

        setopt posix_argzero will be detected (as above).

        +
      • +
      +
      +
    6. +
    7. +

      Use %N prompt expansion flag, which always gives absolute path to script,

      +
      +
        +
      • +

        plugin manager cannot alter this (no advanced loading of plugin +is possible), but simple plugin-file sourcing (without a plugin +manager) will be saved from breaking caused by the mentioned +*_argzero options, so this is a very good last-resort +fallback.

        +
      • +
      +
      +
    8. +
    9. +

      Finally, in the second line, it will ensure that $0 contains an absolute +path by prepending it with $PWD if necessary.

      +
    10. +
    +
    +
    +

    The goal is flexibility, with essential motivation to support eval +"$(<plugin)" and definitely solve setopt no_function_argzero and setopt +posix_argzero cases.

    +
    +
    +

    A plugin manager will be even able to convert a plugin to a function (author +implemented such proof of concept functionality, it’s fully possible – also in +an automatic fashion), but performance differences of this are yet unclear. It +might however provide a use case.

    +
    +
    +

    The last, 5th point also allows using the $0 handling in scripts (i.e. +runnable with the hashbang #!…) to get the directory in which the script +file resides.

    +
    +
    +

    The assignment uses quoting to make it resilient to the combination of GLOB_SUBST +and GLOB_ASSIGN options. It’s a standard snippet of code, so it has to be +always working. When you’ll set e.g.: the zsh emulation in a function, you in +general don’t have to quote assignments.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    2. Functions Directory

    +
    +
    +

    Despite that, the current-standard plugins have their main directory added to +$fpath, a more clean approach is being proposed: that the plugins use a +subdirectory called functions to store their completions and autoload +functions. This will allow a much cleaner design of plugins.

    +
    +
    +

    The plugin manager should add such a directory to $fpath. The lack of support of +the current plugin managers can be easily resolved via the +indicator:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}/functions]} ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    or, via use of the PMSPEC parameter:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    The above snippet added to the plugin.zsh file will add the directory to the +$fpath with the compatibility with any new plugin managers preserved.

    +
    +
    +

    The existence of the functions subdirectory cancels the normal adding of the main +plugin directory to $fpath.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, ZI, Zinit, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    3. Binaries Directory

    +
    +
    +

    Plugins sometimes provide a runnable script or program, either for their +internal use or for the end-user. It is proposed that for the latter, the plugin +shall use a bin/ subdirectory inside its main dir (it is recommended, that for +internal use, the runnable be called via the $0 value obtained as described +above). The runnable should be put into the directory with a +x access right +assigned.

    +
    +
    +

    The task of the plugin manager should be:

    +
    +
    +
      +
    1. +

      Before sourcing the plugin’s script it should test, if the bin/ directory +exists within the plugin directory.

      +
    2. +
    3. +

      If it does, it should add the directory to $PATH.

      +
    4. +
    5. +

      The plugin manager can also, instead of extending the $PATH, create a +shim (i.e.: a forwarder script) or a symbolic link inside a common +directory that’s already added to $PATH (to limit extending it).

      +
    6. +
    7. +

      The plugin manager is permitted to do optional things like ensuring +x +access rights on the directory contents.

      +
    8. +
    +
    +
    +

    The $PMSPEC code letter for the feature is b, and it allows for the plugin +to handle the $PATH extending itself, via, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *b* ]] {
    +    path+=( "${0:h}/bin" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: Zpm, Zgenom (when you set ZGENOM_AUTO_ADD_BIN=1).

      +
    2. +
    +
    +
    +
    +
    +
    +

    4. Unload Function

    +
    +
    +

    If a plugin is named e.g. kalc (and is available via an-user/kalc +plugin-ID), then it can provide a function, kalc_plugin_unload, that can be +called by a plugin manager to undo the effects of loading that plugin.

    +
    +
    +

    A plugin manager can implement its tracking of changes made by a plugin so +this is in general optional. However, to properly unload e.g. a prompt, +dedicated tracking (easy to do for the plugin creator) can provide better, +predictable results. Any special, uncommon effects of loading a plugin are +possible to undo only by a dedicated function.

    +
    +
    +

    However, an interesting compromise approach is available – to withdraw only the +special effects of loading a plugin via the dedicated, plugin-provided function +and leave the rest to the plugin manager. The value of such an approach is that +maintaining of such function (if it is to withdraw all plugin side-effects) +can be a daunting task requiring constant monitoring of it during the plugin +development process.

    +
    +
    +

    Note that the unload function should contain unfunction $0 (or better +unfunction kalc_plugin_unload etc., for compatibility with the *_argzero +options), to also delete the function itself.

    +
    +
    +

    Adoption Status

    +
    +
      +
    • +

      ZI, implements plugin unloading and calls the function.

      +
    • +
    • +

      romkatv/powerlevel10k, is +using +the function to execute a specific task: shutdown of the binary, background +gitstatus demon, with a very good +results,

      +
    • +
    • +

      agkozak/agkozak-zsh-prompt is +using +the function to completely unload the prompt,

      +
    • +
    • +

      agkozak/zsh-z is +using +the function to completly unload the plugin,

      +
    • +
    • +

      agkozak/zhooks is +using +the function to completely unload the plugin.

      +
    • +
    +
    +
    +
    +
    +
    +

    5. @zsh-plugin-run-on-unload Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-unload which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +unload of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, in the current shell.

    +
    +
    +

    The mechanism thus provides another way, side to the unload +function, for the plugin to participate in the process of unloading it.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    6. @zsh-plugin-run-on-update Call

    +
    +
    +

    The plugin manager can provide a function @zsh-plugin-run-on-update which +has the following call syntax:

    +
    +
    +
    +
    @zsh-plugin-run-on-update "{code-snippet-1}" "{code-snippet-2}"
    +
    +
    +
    +

    The function registers pieces of code to be run by the plugin manager on +an update of the plugin. The execution of the code should be done by the eval +built-in in the same order as they are passed to the call.

    +
    +
    +

    The code should be executed in the plugin’s directory, possibly in a subshell +After downloading any new commits to the repository.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit.

      +
    2. +
    +
    +
    +
    +
    +
    +

    7. Plugin Manager Activity Indicator

    +
    +
    +

    Plugin managers should set the $zsh_loaded_plugins array to contain all +previously loaded plugins and the plugin currently being loaded (as the last +element). This will allow any plugin to:

    +
    +
    +
      +
    1. +

      Check which plugins are already loaded.

      +
    2. +
    3. +

      Check if it is being loaded by a plugin manager (i.e. not just sourced).

      +
    4. +
    +
    +
    +

    The first item allows a plugin to e.g. issue a notice about missing +dependencies. Instead of issuing a notice, it may be able to satisfy the +dependencies from resources it provides. For example, the pure prompt provides +a zsh-async dependency library within its source tree, which is normally a +separate project. Consequently, the prompt can decide to source its private copy +of zsh-async, having also reliable $0 defined by the previous section (note: +pure doesn’t normally do this).

    +
    +
    +

    The second item allows a plugin to e.g. set up $fpath, knowing that plugin +manager will not handle this:

    +
    +
    +
    +
    if [[ ${zsh_loaded_plugins[-1]} != */kalc && -z ${fpath[(r)${0:h}]} ]] {
    +    fpath+=( "${0:h}" )
    +}
    +
    +
    +
    +

    This will allow the user to reliably source the plugin without using a plugin +manager. The code uses the wrapping braces around variables (i.e.: e.g.: +${fpath…}) to make it compatible with the KSH_ARRAYS option and the quoting +around ${0:h} to make it compatible with the SH_WORD_SPLIT option.

    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom, Zgen (after and if the PR will be merged).

      +
    2. +
    3. +

      Plugins: GitHub search

      +
    4. +
    +
    +
    +
    +
    +
    +

    8. Global Parameter With PREFIX For Make, Configure, Etc.

    +
    +
    +

    Plugin managers may export the parameter $ZPFX which should contain a path to +a directory dedicated for user-land software, i.e. for directories $ZPFX/bin, +$ZPFX/lib, $ZPFX/share, etc. The suggested name of the directory is polaris +(e.g.: ZI uses this name and places this directory at ~/.zi/polaris by +default).

    +
    +
    +

    Users can then configure hooks (a feature of e.g. zplug and ZI) to invoke e.g. +make PREFIX=$ZPFX install at clone & update of the plugin to install software +like e.g. tj/git-extras. This is a +the developing role of Zsh plugin managers as package managers, where .zshrc has a +similar role to Chef or Puppet configuration and allows to declare system +state, and have the same state on different accounts/machines.

    +
    +
    +

    No-narration facts-list related to $ZPFX:

    +
    +
    +
      +
    1. +

      export ZPFX="$HOME/polaris" (or e.g. $HOME/.zi/polaris)

      +
    2. +
    3. +

      make PREFIX=$ZPFX install

      +
    4. +
    5. +

      ./configure --prefix=$ZPFX

      +
    6. +
    7. +

      cmake -DCMAKE_INSTALL_PREFIX=$ZPFX .

      +
    8. +
    9. +

      zi ice make"PREFIX=$ZPFX install"

      +
    10. +
    11. +

      zi … hook-build:"make PREFIX=$PFX install"

      +
    12. +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    9. Global Parameter holding the plugin manager’s capabilities

    +
    +
    +

    The above paragraphs of the standard spec each constitute a capability, a +feature of the plugin manager. It would make sense that the capabilities are +somehow discoverable. To address this, a global parameter called PMSPEC (from +plugin-manager specification) is proposed. It can hold the following Latin +letters each informing the plugin, that the plugin manager has support for a +given feature:

    +
    +
    +
      +
    • +

      0 – the plugin manager provides the ZERO parameter,

      +
    • +
    • +

      f - … supports the functions/ subdirectory,

      +
    • +
    • +

      b - … supports the bin/ subdirectory,

      +
    • +
    • +

      u - … the unload function,

      +
    • +
    • +

      U - … the @zsh-plugin-run-on-unload call,

      +
    • +
    • +

      p – … the @zsh-plugin-run-on-update call,

      +
    • +
    • +

      i – … the zsh_loaded_plugins activity indicator,

      +
    • +
    • +

      P – … the ZPFX global parameter,

      +
    • +
    • +

      s – … the PMSPEC global parameter itself (i.e.: should be always present).

      +
    • +
    +
    +
    +

    The contents of the parameter describing a fully-compliant plugin manager should +be: 0fuUpiPs. The plugin can then verify the support by, e.g.:

    +
    +
    +
    +
    if [[ $PMSPEC != *f* ]] {
    +    fpath+=( "${0:h}/functions" )
    +}
    +
    +
    +
    +

    Adoption Status

    +
    +
      +
    1. +

      Plugin managers: ZI, Zinit, Zpm, Zgenom.

      +
    2. +
    +
    +
    +
    +
    +
    +

    Zsh Plugin-Programming Best Practices

    +
    +
    +

    The document is to define a Zsh-plugin but also to serve as an information +source for plugin creators. Therefore, it covers also best practices +information in this section.

    +
    +
    +

    Use Of add-zsh-hook To Install Hooks

    +
    +

    Zsh ships with a function add-zsh-hook. It has the following invocation +syntax:

    +
    +
    +
    +
    add-zsh-hook [ -L | -dD ] [ -Uzk ] hook function
    +
    +
    +
    +

    The command installs a function as one of the supported zsh hook entries. +which are one of: chpwd, periodic, precmd, preexec, zshaddhistory, +zshexit, zsh_directory_name. For their meaning refer to the +Zsh +documentation.

    +
    +
    +
    +

    Use Of add-zle-hook-widget To Install Zle Hooks

    +
    +

    The zle editor is the part of the Zsh that is responsible for receiving the text +from the user. It can be said that it’s based on widgets, which are nothing more +than Zsh functions that are allowed to be run in Zle context, i.e. from the Zle +editor (plus a few minor differences, like e.g.: the $WIDGET parameter that’s +automatically set by the Zle editor).

    +
    +
    +

    The syntax of the call is:

    +
    +
    +
    +
    add-zle-hook-widget [ -L | -dD ] [ -Uzk ] hook widgetname
    +
    +
    +
    +

    The call resembles the syntax of the add-zsh-hook function. The only +the difference is that it takes a widgetname, not a function name and that the +hook is being one of: isearch-exit, isearch-update, line-pre-redraw, +line-init, line-finish, history-line-set, or keymap-select. Their +meaning is explained in the +Zsh +documentation.

    +
    +
    +

    The use of this function is recommended because it allows +the installation multiple hooks per each hook entry. Before introducing the +add-zle-hook-widget function the "normal" way to install a hook was to define +a widget with the name of one of the special widgets. Now, after the function has +been introduced in Zsh 5.3 it should be used instead.

    +
    +
    +
    +

    Standard Parameter Naming

    +
    +

    There’s a convention already present in the Zsh world – to name array variables +lowercase and scalars uppercase. It’s being followed by e.g.: the Zsh manual and +the Z shell itself (e.g.: REPLY scalar and reply array, etc.). The +requirement for the scalars to be uppercase should be, in my opinion, kept only +for the global parameters. I.e.: it’s fine to name local parameters inside a +function lowercase even when they are scalars, not only arrays.

    +
    +
    +

    An extension to the convention is being proposed: to name associative arrays +(i.e.: hashes) capitalized, i.e.: with only first letter uppercase and the +remaining letters lowercase. See the next section for an +example of such hash. In the case of the name consisting of multiple words each of +them should be capitalized, e.g.: typeset -A MyHash.

    +
    +
    +

    This convention will increase code readability and bring order to it.

    +
    +
    +
    +

    Standard Plugins Hash

    +
    +

    The plugin often has to declare global parameters that should live throughout a +Zsh session. Following the namespace pollution prevention the +plugin could use a hash to store the different values. Additionally, the plugins +could use a single hash parameter – called Plugins – to prevent the pollution +even more:

    +
    +
    +
    +
    …
    +typeset -gA Plugins
    +# An example value needed by the plugin
    +Plugins[MY_PLUGIN_REPO_DIR]="${0:h}"
    +
    +
    +
    +

    This way all the data of all plugins will be kept in a single parameter, +available for easy examination and overview (via e.g.: varied Plugins) and also +not polluting the namespace.

    +
    +
    +
    +

    Standard Recommended Options

    +
    +

    The following code snippet is recommended to be included at the beginning of +each of the main functions provided by the plugin:

    +
    +
    +
    +
    emulate -L zsh
    +setopt extended_glob warn_create_global typeset_silent \
    +        no_short_loops rc_quotes no_auto_pushd
    +
    +
    +
    +

    It resets all the options to their default state according to the zsh +emulation mode, with the use of the local_options option – so the options will be +restored to their previous state when leaving the function.

    +
    +
    +

    It then alters the emulation by 6 different options:

    +
    +
    +
      +
    • +

      extended_glob – enables one of the main Zshell features – the advanced, +the built-in regex-like globing mechanism,

      +
    • +
    • +

      warn_create_global – enables warnings to be printed each time a (global) +the variable is defined without being explicitly defined by a typeset, local, +declare, etc. call; it allows to catch typos and missing localizations of +the variables and thus prevent from writing a bad code,

      +
    • +
    • +

      typeset_silent – it allows to call typeset, local, etc. multiple times on +the same variable; without it, the second call causes the variable contents to +be printed first; using this option allows to declare variables inside loops, +near the place of their use, which sometimes helps to write a more readable +code,

      +
    • +
    • +

      no_short_loops – disables the short-loops syntax; this is done because when +the syntax is enabled it limits the parser’s ability to detect errors (see +this zsh-workers post +for the details),

      +
    • +
    • +

      rc_quotes – adds useful ability to insert apostrophes into an +apostrophe-quoted string, by use of '' inside it, e.g.: 'a string’s +example' will yield the string a string’s example,

      +
    • +
    • +

      no_auto_pushd - disables the automatic push of the directory passed to cd +builtin onto the directory stack; this is useful because otherwise the +internal directory changes done by the plugin will pollute the global +directory stack.

      +
    • +
    +
    +
    +
    +

    Standard Recommended Variables

    +
    +

    It’s good to localize the following variables at the entry of the main function +of a plugin:

    +
    +
    +
    +
    local MATCH REPLY; integer MBEGIN MEND
    +local -a match mbegin mend reply
    +
    +
    +
    +

    The variables starting with m and M are being used by the substitutions +utilizing (#b) and (#m) flags, respectively. They should not leak to the +global scope. Also, their automatic creation would trigger the warning from the +warn_create_global option.

    +
    +
    +

    The reply and REPLY parameters are being normally used to return an array or +a scalar from a function, respectively – it’s the standard way of passing values +from functions. Their use is naturally limited to the functions called from the +the main function of a plugin – they should not be used to pass data around e.g.: in +between prompts, thus it’s natural to localize them in the main function.

    +
    +
    +
    +

    Standard Function Name-Space Prefixes

    +
    +

    The recommendation is the purely subjective opinion of the author. It can evolve – +if you have any remarks, don’t hesitate to +fill them.

    +
    +
    +
    +

    The Problems Solved By The Proposition

    +
    +

    However, when adopted, the proposition will solve the following issues:

    +
    +
    +
      +
    1. +

      Using the underscore _ to namespace functions – this isn’t the right thing +to do because the prefix is being already used by the completion functions, +so the namespace is already filled up greatly and the plugin functions get +lost in it.

      +
    2. +
    3. +

      Not using a prefix at all – this is also an unwanted practice as it pollutes the command namespace +(an example of such issue appearing).

      +
    4. +
    5. +

      It would allow to quickly discriminate between function types – e.g.: seeing +the : prefix informs the user that it’s a hook-type function while seeing +the @ prefix informs the user that it’s an API-like function, etc.

      +
    6. +
    7. +

      It also provides an improvement during programming, by allowing to quickly +limit the number of completions offered by the editor, e.g.: for Vim’s +Ctrl-P completing, when entering +<Ctrl-P>, then only a subset of the +functions are being completed (see below for the type of the functions). + Note: the editor has to be configured so that it accepts such special +characters as part of keywords, for Vim it’s: :set isk+=@-@,.,+,/,: for all +of the proposed prefixes.

      +
    8. +
    +
    +
    +
    +

    The Proposed Function-Name Prefixes

    +
    +

    The proposition of the standard prefixes is as follows:

    +
    +
    +
      +
    1. +

      .: for regular private functions. Example function: .prompt_zinc_get_value.

      +
    2. +
    3. +

      : for hook-like functions, so it should be used e.g.: for the +Zsh hooks and the Zle hooks, but also for any other, custom hook-like mechanism in the plugin. Example function name: +→prompt_zinc_precmd.

      +
      +
        +
      • +

        the previous version of the document recommended colon (:) for the prefix, +however, it was problematic, because Windows doesn’t allow colons in file +names, so it wasn’t possible to name an autoload function this way,

        +
      • +
      • +

        the arrow has a rationale behind it - it denotes the execution coming back +to the function at a later time, after it has been registered as a callback +or a handler,

        +
      • +
      • +

        the arrow is easy to type on most keyboard layouts – it is Right-Alt+I; +in case of problems with typing the character can be always copied – +handler functions do occur in the code rarely,

        +
      • +
      • +

        Zsh supports any string as a function name, because absolutely +any string can be a file name – if there would be an exception in the +name of the callables, then how would it be possible to run a script called +"→abcd"? There are no exceptions, the function can be called even as a +the sequence of null bytes:

        +
        +
        +
        ❯ $'\0'() { print hello }
        +❯ $'\0'
        +hello
        +
        +
        +
      • +
      +
      +
    4. +
    5. +

      +: for output functions, i.e.: for functions that print to the standard +output and error or a log, etc. Example function name: ++prompt_zinc_output_segment.

      +
    6. +
    7. +

      /: for debugging functions, i.e: for functions that output debugs messages to +the screen or a log or e.g.: gather some debug data. Note: the slash + makes it impossible for such functions to be auto-loaded via the autoload + mechanism. It is somewhat risky to assume, that this will never be needed for + the functions, however, the limited number of available ASCII characters + justifies such allocation. Example function name: /prompt_zinc_dmsg.

      +
    8. +
    9. +

      @: for API-like functions, i.e: for functions that are on a boundary to a +subsystem and expose its functionality through a well-defined, in general +fixed interface. For example this plugin standard +defines the function @zsh-plugin-run-on-update, +which is exposing a plugin manager’s functionality in a well-defined way.

      +
    10. +
    +
    +
    +
    +

    Example Code Utilizing The Prefixes

    +
    +
    +
    .zinc_register_hooks() {
    +    add-zsh-hook precmd :zinc_precmd
    +    /zinc_dmsg "Installed precmd hook with result: $?"
    +    @zsh-plugin-run-on-unload "add-zsh-hook -d precmd :zinc_precmd"
    +    +zinc_print "Zinc initialization complete"
    +}
    +
    +
    +
    +
    +

    Preventing Function Pollution

    +
    +

    When writing a larger autoload function, it very often is the case that the +function contains definitions of other functions. When the main function +finishes executing, the functions are being left defined. This might be +undesired, e.g.: because of the command namespace pollution. The following +snippet of code, when added at the beginning of the main function will +automatically unset the sub-functions when leaving the main function:

    +
    +
    +
    +
    # Don't leak any functions
    +typeset -g prjef
    +prjef=( ${(k)functions} )
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef" EXIT
    +trap "unset -f -- \"\${(k)functions[@]:|prjef}\" &>/dev/null; unset prjef; return 1" INT
    +
    +
    +
    +

    Replace the prj* prefix with your project name, e.g.: rustef for a +rust-related plugin. The *ef stands for "entry functions". The snippet works +as follows:

    +
    +
    +
      +
    1. +

      The line prjef=( ${(k)functions} ) remembers all the functions that are +currently defined – which means that the list excludes the functions that are +to be yet defined by the body of the main function.

      +
    2. +
    3. +

      The code unset -f — "${(k)functions[@]:|prjef}" first does an subtraction +of array contents – the :| substitution operator – of the functions that +are defined at the moment of leaving of the function (the trap-s invoke the +code in this moment) with the list of functions from the start of the main +function – the ones stored in the variables $prjef.

      +
    4. +
    5. +

      It then unsets the resulting list of the functions – being only the newly +defined functions in the main function – by passing it to unset -f ….

      +
    6. +
    +
    +
    +

    This way the functions defined by the body of the main (most often an autoload) +the function will be only set during the execution of the function.

    +
    +
    +
    +

    Preventing Parameter Pollution

    +
    +

    When writing a plugin one often needs to keep a state during the Zsh +session. To do this it is natural to use global parameters. However, +when the number of the parameters grows one might want to limit it.

    +
    +
    +

    With the following method, only a single global parameter per plugin can be +sufficient:

    +
    +
    +
    +
    typeset -A PlgMap
    +typeset -A SomeMap
    +typeset -a some_array
    +
    +# Use
    +PlgMap[state]=1
    +SomeMap[state]=1
    +some_array[1]=state
    +
    +
    +
    +

    can be converted into:

    +
    +
    +
    +
    typeset -A PlgMap
    +
    +# Use
    +PlgMap[state]=1
    +PlgMap[SomeMap__state]=1
    +PlgMap[some_array__1]=state
    +
    +
    +
    +

    The use of this method is very unproblematic. The author reduced the number of +global parameters in one of the projects by 21 by using an automatic conversion with +Vim substitution patterns with backreferences without any problems.

    +
    +
    +

    Following the Standard Plugins Hash section, the plugin could +even use a common hash name – Plugins – to lower the pollution even more.

    +
    +
    +
    +
    +
    +

    Appendix A: Revision History (History Of Updates To The Document)

    +
    +
    +

    v1.1.5, 06/11/2020: Changed the $0=… assignment to a more straightforward one
    +v1.1.1, 21/02/2020: Added Binaries Directory section
    +v1.1, 21/02/2020: Changed the handler-function prefix character to
    +v1.09, 01/29/2020: 1/ Added Standard Parameter Naming section
    +v1.09, 01/29/2020: 2/ Added Standard Plugins Hash section
    +v1.08, 01/29/2020: Added the PMSPEC section
    +v1.07, 01/29/2020: Added the functions-directory section
    +v1.05, 11/22/2019: Restored the quoting to the $0 assignments + justification
    +v1.0, 11/22/2019: Removed quoting from the $0 assignments
    +v0.99, 10/26/2019: Added Adoption Status sub-sections
    +v0.98, 10/25/2019: 1/ Added Standard Recommended Variables section
    +v0.98, 10/25/2019: 2/ Added Standard Function Name-Space Prefixes section
    +v0.98, 10/25/2019: 3/ Added Preventing Function Pollution section
    +v0.98, 10/25/2019: 4/ Added Preventing Parameter Pollution section
    +v0.97, 10/23/2019: Added Standard Recommended Options section
    +v0.96, 10/23/2019: Added @zsh-plugin-run-on-unload and @zsh-plugin-run-on-update calls
    +v0.95, 07/31/2019: Plugin unload function *_unload_plugin -→ *_plugin_unload
    +v0.94, 07/20/2019: Add initial version of the best practices section
    +v0.93, 07/20/2019: 1/ Add the second line to the $0 handling.
    +v0.93, 07/20/2019: 2/ Reformat to 80 columns
    +v0.92, 07/14/2019: 1/ Rename LOADED_PLUGINS to zsh_loaded_plugins.
    +v0.92, 07/14/2019: 2/ Suggest that $ZPFX is optional.
    +v0.91, 06/02/2018: Fix the link to the PDF for Github.
    +v0.9, 12/12/2017: Remove ZERO references (wrong design), add TOC.

    +
    +
    +

    Reminder: The date format that uses slashes is MM/DD/YYYY.

    +
    +
    +
    +
    + + + \ No newline at end of file From 3b46e40d0b062c0095d3913d8dc8b1e103b01b8f Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 07:16:09 +0000 Subject: [PATCH 070/470] deploy: 9dfe27d24fad3a0434068d55d428e0beb8ae97dd From 6ea8e6b18bbd0390cdc9b0fa9ebd1861c23f5cbc Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 07:29:42 +0000 Subject: [PATCH 071/470] deploy: c507f513f4d582afa4324e90ee79384ec9792dca --- zsh/Zsh-Native-Scripting-Handbook.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html index cbbdaf6..8475896 100644 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -707,7 +707,7 @@

    Zsh Native Scripting Handbook

    -

    The handbook is also available as a PDF, HTML.

    +

    The handbook is also available as a PDF, HTML, Edit this page.

    This document has been created after 3.5 years of creating software for Z shell From 6fe885e1b5178a9023ba51430b4c1870d1f6c8a0 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 07:36:05 +0000 Subject: [PATCH 072/470] deploy: 8147465d2a8bb6689dd2d4837a7361fcb3d1927b --- zsh/Zsh-Native-Scripting-Handbook.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zsh/Zsh-Native-Scripting-Handbook.html b/zsh/Zsh-Native-Scripting-Handbook.html index 8475896..1c2d245 100644 --- a/zsh/Zsh-Native-Scripting-Handbook.html +++ b/zsh/Zsh-Native-Scripting-Handbook.html @@ -707,8 +707,9 @@

    Zsh Native Scripting Handbook

    -

    The handbook is also available as a PDF, HTML, Edit this page.

    +

    The handbook is also available as: PDF, HTML | Edit this page

    +

    This document has been created after 3.5 years of creating software for Z shell and receiving help from IRC channel #zsh. Avoiding forks was the main guideline From 87b02d0446a108c68cdf3a05d9a851a79ed24001 Mon Sep 17 00:00:00 2001 From: ss-o Date: Mon, 3 Jan 2022 07:38:25 +0000 Subject: [PATCH 073/470] deploy: 7f4d53774cb7204681890536ad7e828b9a287447 --- zsh/Zsh-Plugin-Standard.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zsh/Zsh-Plugin-Standard.html b/zsh/Zsh-Plugin-Standard.html index 134570c..97dec6d 100644 --- a/zsh/Zsh-Plugin-Standard.html +++ b/zsh/Zsh-Plugin-Standard.html @@ -733,7 +733,7 @@

    Zsh Plugin Standard

    -

    The document is also available as a PDF, HTML.

    +

    The document is also available as a PDF, HTML | Edit this page

    From d922f193ea8f0cdaa65ecbc3ebda6e05cc226886 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 6 Jan 2022 04:50:32 +0000 Subject: [PATCH 074/470] deploy: e0cce19d51e536af795c07de7b8180b8ff3b98ee From 4ddc4af78737f66f826908cfa15011931e70bd4b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 13 Jan 2022 04:50:53 +0000 Subject: [PATCH 075/470] deploy: 7acc255665e7c564004154c3fdc366e1d7fab426 From 0292573c02f09ea3811d7b1569388f895ca221a4 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 20 Jan 2022 04:44:41 +0000 Subject: [PATCH 076/470] deploy: 5743b5673358a16fb1a061f58d6cd5e98f0f77dd From 9963cb292fe0e9b0aabe4ecd80d91768b2ae4a9b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 27 Jan 2022 04:45:20 +0000 Subject: [PATCH 077/470] deploy: 00de3d9108550a26ed51e9b9538eb2b2451312e8 From 846a65da65eaafd660d6cd95760bfe07631015a7 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 3 Feb 2022 04:44:59 +0000 Subject: [PATCH 078/470] deploy: e566f68e807a53f8f07143e723397353e1ebadff From 6c9c5a86386e83637f6cf5ce2914b1f3a3e2876b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 10 Feb 2022 04:44:03 +0000 Subject: [PATCH 079/470] deploy: 1908e5ac50778c8ebe5f43b76815f0215ef278ed From 75278931c37a296e6a037c1023b4cfa8e285a4d9 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 17 Feb 2022 04:45:26 +0000 Subject: [PATCH 080/470] deploy: b43bfd18570da560f2ed62abb9a8c48f7a81ecee From 95b1230c06bb2cd59908dfcaebe04858152faa8b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 24 Feb 2022 04:44:35 +0000 Subject: [PATCH 081/470] deploy: f2d96f530608643de9c4ebe1a0a8f80be0b17546 From ec3b109a6fc04570976d971d0d4df6eb63458edf Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 3 Mar 2022 04:45:48 +0000 Subject: [PATCH 082/470] deploy: 8215f637cc2d42a52ff889d8e28ac36bc5805fd7 From f237312361417b03c6877d14698d9083563630e4 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 10 Mar 2022 04:45:33 +0000 Subject: [PATCH 083/470] deploy: ba0a4103af64660e11ffa0c2b5af8171f24087dc From abe9241f91117ac113165f44cf7b556fbb2d7976 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 17 Mar 2022 04:45:50 +0000 Subject: [PATCH 084/470] deploy: 16aa25655ff65afca62df4302567591d69c024ac From 71b8db7bf0b6deb21fc6a514f9f5f281bd7db150 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 24 Mar 2022 04:46:36 +0000 Subject: [PATCH 085/470] deploy: 419282e5b3f206a2ba6706f4ec4067729aa7700d From 2c70a67155373394aa589cdd6235cfb4e1eb3a0b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 31 Mar 2022 04:46:52 +0000 Subject: [PATCH 086/470] deploy: 8af184335e8e3011d3b54ea6969e9fc00d169988 From 79947d8099c83f66cff5ab58cf40427e7e76505e Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 7 Apr 2022 04:46:20 +0000 Subject: [PATCH 087/470] deploy: 21f14e2bffa0b8c3dbcd3b252368267745a4f7c1 From 188ce1e3cf460c1fcd445b96d1301be03e96c31b Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 14 Apr 2022 04:46:00 +0000 Subject: [PATCH 088/470] deploy: fe19462908ae6f2c0aff3349c625e283631b183d From e57a48a17b7ec9d19364080c44a09a1acf784453 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 21 Apr 2022 05:11:36 +0000 Subject: [PATCH 089/470] deploy: 7cf28fa500943c9a02abf93a41fa214f5e63b321 From 3b0f9b982c941ba89b7c777d42f5354e02780ac3 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 28 Apr 2022 05:25:28 +0000 Subject: [PATCH 090/470] deploy: a95a8e4e725626fef2945e10d7d48bb3aa87dec0 From b00bbbbf10246dbf4006b90e939bbd3a75128efe Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 5 May 2022 04:58:44 +0000 Subject: [PATCH 091/470] deploy: c43bec7e03376f8de224a5cb4493f6764b64d8dc From 0084dcab65af96af51d80cbe42292f574baa4743 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 12 May 2022 04:59:40 +0000 Subject: [PATCH 092/470] deploy: d8d930126c75747adb1f67055c4a2ff4ba268e17 From 63d523c44644194a467ba183ed09cf242c140211 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 19 May 2022 04:57:54 +0000 Subject: [PATCH 093/470] deploy: 757d66f56dcd619b459c907151d65cac9af915d6 From dfe06843546b5cf62896316cd87802b3dd06b9f7 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 26 May 2022 04:56:46 +0000 Subject: [PATCH 094/470] deploy: cd7a2b857306daadb8c70fce307f60dbb7085509 From cdac259363605de489b10fa5d04d81bedcb60122 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 2 Jun 2022 05:08:22 +0000 Subject: [PATCH 095/470] deploy: 20ab6ea260fbb47cb394fc7f58cc9df11d6883f9 From 9f3058375c1bc60f6c4fb83b557c5fe96482286e Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 9 Jun 2022 04:52:14 +0000 Subject: [PATCH 096/470] deploy: 742dd2dac4d3fe7d54ed047d90c024a7cca1b5a8 From de85a8bec63394a701d6ce41698abda0364358e9 Mon Sep 17 00:00:00 2001 From: ss-o Date: Thu, 9 Jun 2022 11:59:33 +0000 Subject: [PATCH 097/470] deploy: 7244a61f0fa78590098673670017eaa12c853f79 --- code/html/additional.zsh.html | 4908 ++++++++--------- code/html/autoload.zsh.html | 9678 +++++++++++++++++---------------- code/html/install.zsh.html | 6602 +++++++++++----------- code/html/side.zsh.html | 5162 ++++++++---------- code/html/zi.zsh.html | 8749 ++++++++++++++--------------- 5 files changed, 17398 insertions(+), 17701 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index f702ec4..0454040 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -1,2735 +1,2371 @@ - - - - - - - additional.zsh(1) - - - - - - -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    + .olive { + color: #606000; + } + .olive-background { + background: #7d7d00; + } + .purple { + color: #600060; + } + .purple-background { + background: #7d007d; + } + .red { + color: #bf0000; + } + .red-background { + background: #fa0000; + } + .silver { + color: #909090; + } + .silver-background { + background: #bcbcbc; + } + .teal { + color: #006060; + } + .teal-background { + background: #007d7d; + } + .white { + color: #bfbfbf; + } + .white-background { + background: #fafafa; + } + .yellow { + color: #bfbf00; + } + .yellow-background { + background: #fafa00; + } + span.icon > .fa { + cursor: default; + } + a span.icon > .fa { + cursor: inherit; + } + .admonitionblock td.icon [class^="fa icon-"] { + font-size: 2.5em; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + cursor: default; + } + .admonitionblock td.icon .icon-note::before { + content: "\f05a"; + color: #19407c; + } + .admonitionblock td.icon .icon-tip::before { + content: "\f0eb"; + text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); + color: #111; + } + .admonitionblock td.icon .icon-warning::before { + content: "\f071"; + color: #bf6900; + } + .admonitionblock td.icon .icon-caution::before { + content: "\f06d"; + color: #bf3400; + } + .admonitionblock td.icon .icon-important::before { + content: "\f06a"; + color: #bf0000; + } + .conum[data-value] { + display: inline-block; + color: #fff !important; + background: rgba(0, 0, 0, 0.8); + border-radius: 50%; + text-align: center; + font-size: 0.75em; + width: 1.67em; + height: 1.67em; + line-height: 1.67em; + font-family: "Open Sans", "DejaVu Sans", sans-serif; + font-style: normal; + font-weight: bold; + } + .conum[data-value] * { + color: #fff !important; + } + .conum[data-value] + b { + display: none; + } + .conum[data-value]::after { + content: attr(data-value); + } + pre .conum[data-value] { + position: relative; + top: -0.125em; + } + b.conum * { + color: inherit !important; + } + .conum:not([data-value]):empty { + display: none; + } + dt, + th.tableblock, + td.content, + div.footnote { + text-rendering: optimizeLegibility; + } + h1, + h2, + p, + td.content, + span.alt, + summary { + letter-spacing: -0.01em; + } + p strong, + td.content strong, + div.footnote strong { + letter-spacing: -0.005em; + } + p, + blockquote, + dt, + td.content, + span.alt, + summary { + font-size: 1.0625rem; + } + p { + margin-bottom: 1.25rem; + } + .sidebarblock p, + .sidebarblock dt, + .sidebarblock td.content, + p.tableblock { + font-size: 1em; + } + .exampleblock > .content { + background: #fffef7; + border-color: #e0e0dc; + box-shadow: 0 1px 4px #e0e0dc; + } + .print-only { + display: none !important; + } + @page { + margin: 1.25cm 0.75cm; + } + @media print { + * { + box-shadow: none !important; + text-shadow: none !important; + } + html { + font-size: 80%; + } + a { + color: inherit !important; + text-decoration: underline !important; + } + a.bare, + a[href^="#"], + a[href^="mailto:"] { + text-decoration: none !important; + } + a[href^="http:"]:not(.bare)::after, + a[href^="https:"]:not(.bare)::after { + content: "(" attr(href) ")"; + display: inline-block; + font-size: 0.875em; + padding-left: 0.25em; + } + abbr[title] { + border-bottom: 1px dotted; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre, + blockquote, + tr, + img, + object, + svg { + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + svg { + max-width: 100%; + } + p, + blockquote, + dt, + td.content { + font-size: 1em; + orphans: 3; + widows: 3; + } + h2, + h3, + #toctitle, + .sidebarblock > .content > .title { + page-break-after: avoid; + } + #header, + #content, + #footnotes, + #footer { + max-width: none; + } + #toc, + .sidebarblock, + .exampleblock > .content { + background: none !important; + } + #toc { + border-bottom: 1px solid #dddddf !important; + padding-bottom: 0 !important; + } + body.book #header { + text-align: center; + } + body.book #header > h1:first-child { + border: 0 !important; + margin: 2.5em 0 1em; + } + body.book #header .details { + border: 0 !important; + display: block; + padding: 0 !important; + } + body.book #header .details span:first-child { + margin-left: 0 !important; + } + body.book #header .details br { + display: block; + } + body.book #header .details br + span::before { + content: none !important; + } + body.book #toc { + border: 0 !important; + text-align: left !important; + padding: 0 !important; + margin: 0 !important; + } + body.book #toc, + body.book #preamble, + body.book h1.sect0, + body.book .sect1 > h2 { + page-break-before: always; + } + .listingblock code[data-lang]::before { + display: block; + } + #footer { + padding: 0 0.9375em; + } + .hide-on-print { + display: none !important; + } + .print-only { + display: block !important; + } + .hide-for-print { + display: none !important; + } + .show-for-print { + display: inherit !important; + } + } + @media amzn-kf8, print { + #header > h1:first-child { + margin-top: 1.25rem; + } + .sect1 { + padding: 0 !important; + } + .sect1 + .sect1 { + border: 0; + } + #footer { + background: none; + } + #footer-text { + color: rgba(0, 0, 0, 0.6); + font-size: 0.9em; + } + } + @media amzn-kf8 { + #header, + #content, + #footnotes, + #footer { + padding: 0; + } + } + + + + +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    +
    +

    SYNOPSIS

    +
    +
    +

    + Documentation automatically generated with `zsdoc' +

    +
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    .zi-clear-debug-report
    +			
    +

    FUNCTIONS

    +
    +
    +
    +
    +.zi-clear-debug-report
     .zi-debug-start
     .zi-debug-stop
     .zi-debug-unload
     .zi-service
     .zi-wrap-track-functions
    -:zi-tmp-subst-source
    +:zi-tmp-subst-source
    +
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, - etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    + Has 1 line(s). No functions are called (may set + up e.g. a hook, a Zle widget bound to a key, + etc.). +

    +
    +
    +
    zi-clear-debug-report
    +

    + ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    +FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-unload
    -zi.zsh/zi
    +
    +

    Called by:

    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    +
    +
    +
    +autoload.zsh/.zi-unload
    +zi.zsh/zi
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-start
    +						
    +
    +
    zi-debug-start
    +

    + ~~~~~ +

    +
    +
    +
    +
    +
    +
    +FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-debug-start
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    +`-- zi.zsh/.zi-tmp-subst-on

    +
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    +
    +

    Called by:

    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    +
    +
    +
    zi.zsh/zi
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-stop
    -|-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    +
    +
    zi-debug-stop
    +

    + ~~~~~~ +

    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-debug-stop
    +|-- zi.zsh/.zi-diff
    +`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    .zi-debug-unload
    +						
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    + ~~~~~~ +

    +
    +
    +
    +
    +
    +
    +FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-debug-unload
     |-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    +`-- zi.zsh/+zi-message +
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    +
    +

    Uses feature(s): source

    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    ]]]
    +						
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    +]]]
     FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    -
    -
    -
    -
    $1 - type "p" or "s" (plugin or snippet)
    +								
    +
    +
    +$1 - type "p" or "s" (plugin or snippet)
     $2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    -
    - -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    .zi-service
    +							
    +						
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-service
     |-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    +`-- zi.zsh/.zi-load-snippet +
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-track-functions
    -

    ~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +

    + Uses feature(s): kill, read, + setopt +

    +
    +
    +

    + Not called by script or any function (may be + e.g. a hook, a Zle widget, etc.). +

    +
    +
    +
    zi-wrap-track-functions
    +

    + ~~~~~~~~ +

    +
    +
    +
    +
    +
    +
    +FUNCTION: .zi-wrap-track-functions [[[
    +
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    + +
    +
    +

    + Has 19 line(s). Doesn’t call other + functions. +

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    + Not called by script or any function (may be + e.g. a hook, a Zle widget, etc.). +

    +
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    +FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    +:zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +

    Uses feature(s): eval

    +
    +
    +

    + Not called by script or any function (may be + e.g. a hook, a Zle widget, etc.). +

    +
    - - diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index f1ba097..a54f38c 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4808,7 +4808,7 @@

    is-at-least

    From 230f1d8fa97e3411f6d31154aa76a511c447b1b1 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 21 Jul 2022 05:08:49 +0000 Subject: [PATCH 105/470] deploy: ff491c0e9fd8a0c3710fd0a24011f01bc88629a7 --- code/html/additional.zsh.html | 26 ++++++++++++---- code/html/autoload.zsh.html | 13 +++----- code/html/install.zsh.html | 14 +++++++-- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 58 ++++++++++++++++++++++++++++++----- 5 files changed, 87 insertions(+), 26 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 8c7c2cd..4bbc791 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2056,7 +2056,7 @@

    FUNCTIONS

    .zi-debug-stop .zi-debug-unload .zi-service -.zi-wrap-track-functions +.zi-wrap-functions :zi-tmp-subst-source @@ -2266,14 +2266,20 @@

    Script Body

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    zi-wrap-track-functions
    -

    ~~~~~~~~

    +
    zi-wrap-functions
    +

    ~~~~~~

    -
    FUNCTION: .zi-wrap-track-functions [[[
    +
    +FUNCTION: .zi-wrap-functions [[[
    +Handles the wrap'…' ice-modifier which allows to extend the tracking (e.g: gathering of report and unload data) of a plugin
    +beyond the moment of sourcing it's main file(s). It works by wrapping the given functions with a tracking-enabling
    +and disabling snippet of code.This is useful especially with prompts, as they very often do their
    +initialization in the first call to their precmd hook function.
    @@ -2285,7 +2291,15 @@

    Script Body

    Uses feature(s): eval

    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +

    Called by:

    +
    +
    +
    +
    +zi.zsh/.zi-load-plugin
    +zi.zsh/.zi-load-snippet
    +
    @@ -2321,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 5daf8ca..2c0fb43 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -2835,7 +2835,7 @@

    Script Body

    -

    Has 103 line(s). Calls functions:

    +

    Has 99 line(s). Calls functions:

    @@ -2883,7 +2883,7 @@

    Script Body

    -

    Has 94 line(s). Calls functions:

    +

    Has 93 line(s). Calls functions:

    @@ -4780,7 +4780,7 @@

    Script Body

    -

    Has 280 line(s). Calls functions:

    +

    Has 279 line(s). Calls functions:

    @@ -4801,10 +4801,7 @@

    Script Body

    -

    - Uses feature(s): kill, read, setopt, source, trap, - wait -

    +

    Uses feature(s): kill, setopt, source, trap, wait

    Called by:

    @@ -4998,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index ceba012..9cca35e 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -2653,7 +2653,15 @@

    Script Body

    -

    Has 27 line(s). Doesn’t call other functions.

    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    +.zi-mirror-using-svn
    +`-- zi.zsh/+zi-message
    +

    Uses feature(s): setopt

    @@ -2857,7 +2865,7 @@

    ziextract

    -

    Has 269 line(s). Calls functions:

    +

    Has 265 line(s). Calls functions:

    @@ -3336,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 27d8256..0e04b73 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index a54f38c..8d43391 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -2114,6 +2114,7 @@

    FUNCTIONS

    zicdreplay zicompdef zicompinit + zicompinit_fast zpcdclear zpcdreplay zpcompdef @@ -2134,7 +2135,7 @@

    DETAILS

    Script Body

    -

    Has 211 line(s). Calls functions:

    +

    Has 219 line(s). Calls functions:

    @@ -2257,6 +2258,7 @@

    +zi-message

    install.zsh/.zi-get-latest-gh-r-url-part install.zsh/.zi-get-package install.zsh/.zi-install-completions +install.zsh/.zi-mirror-using-svn install.zsh/.zi-setup-plugin-dir install.zsh/.zi-update-snippet install.zsh/ziextract @@ -2831,7 +2833,7 @@

    -zi_scheduler_add_sh

    -

    Has 34 line(s). Calls functions:

    +

    Has 36 line(s). Calls functions:

    @@ -2839,7 +2841,7 @@

    -zi_scheduler_add_sh

    -

    Uses feature(s): type

    +

    Uses feature(s): setopt, type

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    @@ -3224,9 +3226,10 @@

    -zi_scheduler_add_sh

     .zi-load-plugin
    -`-- :zi-tmp-subst-autoload
    -    |-- +zi-message
    -    `-- is-at-least
    @@ -3271,6 +3274,7 @@

    -zi_scheduler_add_sh

    .zi-load-snippet |-- +zi-deploy-message |-- +zi-message +|-- additional.zsh/.zi-wrap-functions `-- install.zsh/.zi-download-snippet
    @@ -4493,7 +4497,8 @@

    zicompdef

     ]]]
     FUNCTION: zicompdef. [[[
    -Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case.
    @@ -4541,6 +4546,42 @@

    zicompinit

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +

    zicompinit_fast

    +
    +
    +
    +
    +
    +]]]
    +FUNCTION: zicompinit_fast. [[[
    +Checking the cached .zcompdump file to see if it must be regenerated adds a noticable delay to zsh startup.
    +This restricts checking it once a day, determines when to regenerate, as compinit doesn't always need to
    +modify the compdump and compiles mapped to share (total mem reduction) run in background in multiple shells.
    +A function that can be invoked from within `atinit', `atload'
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Calls functions:

    +
    +
    +
    +
    +zicompinit_fast
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +

    zpcdclear

    @@ -4763,6 +4804,7 @@

    compinit

     zi
     zicompinit
    +zicompinit_fast
     zpcompinit
    @@ -4808,7 +4850,7 @@

    is-at-least

    From 81d872183f12616cc500525d60a67b4b02af428a Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 28 Jul 2022 05:05:14 +0000 Subject: [PATCH 106/470] deploy: f7f673af3d0e4e96517bc98d6c8be38b21073eb5 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 4bbc791..41a42a9 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 2c0fb43..2c1b63b 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 9cca35e..1a66ab2 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 0e04b73..a787a1d 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 8d43391..00eb410 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From ff1938e2b6f8f66d487c29602f8c13689f6b975e Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 4 Aug 2022 05:09:03 +0000 Subject: [PATCH 107/470] deploy: 95031446ebdded6f3a6e142a460e58c9dc462f35 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 41a42a9..b9febad 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 2c1b63b..afdf4a3 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 1a66ab2..32e6f34 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index a787a1d..320989a 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 00eb410..141abc8 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From 3f07478fe1d18599debf3b93b08fc8e634e4b51f Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 11 Aug 2022 04:51:34 +0000 Subject: [PATCH 108/470] deploy: d21d961f6477c113a544baba4f5d20974f4bdc29 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index b9febad..04f960d 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index afdf4a3..7ef2926 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 32e6f34..4475892 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 320989a..83203a6 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 141abc8..676d5f1 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From dca21688d272b7a37db549f24a1753af5c07e758 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Sun, 14 Aug 2022 03:53:30 +0000 Subject: [PATCH 109/470] deploy: d3012aace64647d46c25c3d4b66c3cd0205a32ba --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 04f960d..ccdf869 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 7ef2926..2e868b3 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 4475892..4f86414 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 83203a6..27d221f 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 676d5f1..0081b7d 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From aa693611083ae849444aec9fc92bc7a2324b6117 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 18 Aug 2022 05:18:01 +0000 Subject: [PATCH 110/470] deploy: 41bbdef6d8ceb78ac7cd541483f3446fd2391c45 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index ccdf869..73862de 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 2e868b3..55455bc 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 4f86414..c6f3bb6 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 27d221f..894f3d9 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 0081b7d..5fc0037 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From 5016e6dde390d49953004e9cd9f4de3e3481b11c Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 25 Aug 2022 05:44:30 +0000 Subject: [PATCH 111/470] deploy: 1cba7d3c20663079d627a87b1cb4646790628c83 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 73862de..d7b974d 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 55455bc..fd2ec4d 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index c6f3bb6..830b746 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 894f3d9..0a47103 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 5fc0037..62f4493 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From eabc8a8fc5c2f7fa03cb3ee7369eb2caf908d642 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 1 Sep 2022 05:41:02 +0000 Subject: [PATCH 112/470] deploy: 01a93f886fe2e54d91f748467800014f468aa10d --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index d7b974d..8e30259 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index fd2ec4d..e9cd371 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 830b746..7c6e54f 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 0a47103..bf14cf1 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 62f4493..e3edd54 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From 9291385c3617b0a111ae9f9332aa045bf6b4f0d9 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 8 Sep 2022 05:46:57 +0000 Subject: [PATCH 113/470] deploy: a3d84117ed69994f35f34b9ce48c24423a9aa71d --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 8e30259..73ea20a 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index e9cd371..a0cf58c 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 7c6e54f..2e94c37 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index bf14cf1..7c96681 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index e3edd54..7ef5dfa 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From 14fd8b8700db6ac1592cfba15735ce4f17541010 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 15 Sep 2022 05:47:42 +0000 Subject: [PATCH 114/470] deploy: d6290660a045ce23822abf8bb84c714bcf574740 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 73ea20a..916332d 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index a0cf58c..cdb6916 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 2e94c37..8a01841 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 7c96681..f97274b 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 7ef5dfa..a15ed83 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4850,7 +4850,7 @@

    is-at-least

    From 6342d5c17701f52b0444821cefb361f726669563 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 22 Sep 2022 05:50:59 +0000 Subject: [PATCH 115/470] deploy: 9f37adddc0a009d28117c4d5cb248916fa9c8b4c --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 4 ++-- code/html/install.zsh.html | 6 +++--- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 19 +++++++------------ 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 916332d..c412692 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index cdb6916..abb8906 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -3555,7 +3555,7 @@

    Script Body

    -

    Has 29 line(s). Calls functions:

    +

    Has 30 line(s). Calls functions:

    @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 8a01841..da86846 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -2469,7 +2469,7 @@

    Script Body

    -

    Has 106 line(s). Calls functions:

    +

    Has 113 line(s). Calls functions:

    @@ -2736,7 +2736,7 @@

    Script Body

    -

    Has 202 line(s). Calls functions:

    +

    Has 208 line(s). Calls functions:

    @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index f97274b..3871a0b 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index a15ed83..0122b7f 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -2818,22 +2818,17 @@

    -zi_scheduler_add_sh

     FUNCTION: .zi-formatter-auto[[[
     The automatic message formatting tool automatically detects,
    -formats, and colorizes the following pieces of text:
    - - -
    -
    -
    -[URLs], [plugin IDs + word- after a check to the disk], [ice modifiers],
    -[zi commands], single char bits and quoted strings: [ `...', "..." ].
    -

    Has 36 line(s). Calls functions:

    +

    Has 46 line(s). Calls functions:

    @@ -2841,7 +2836,7 @@

    -zi_scheduler_add_sh

    -

    Uses feature(s): setopt, type

    +

    Uses feature(s): setopt

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    @@ -4850,7 +4845,7 @@

    is-at-least

    From a5661a748f33e648f47f148e2bc959e9982551cc Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 05:53:14 +0000 Subject: [PATCH 116/470] deploy: 2805a4cb457d21799dfa218bde3349b9740c5049 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index c412692..0a359fb 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index abb8906..8aa16ca 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index da86846..99aaee9 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 3871a0b..39528d7 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 0122b7f..b32f310 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4845,7 +4845,7 @@

    is-at-least

    From 2244ea38e4225bb4e43b6b00af73679fbef32e06 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 07:44:28 +0000 Subject: [PATCH 117/470] deploy: 9fb2dd8d26ee3c1fa66ffb87da2e546f9fabfd16 From 60330855d6db70b30206adbf0082d6f046fcd518 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 08:43:28 +0000 Subject: [PATCH 118/470] deploy: 17360e819d2696ba56d0a8b6c7c5a2b4382281d8 From d0c8d107dd4e29e062cf132f6de094b329ad5046 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 08:48:29 +0000 Subject: [PATCH 119/470] deploy: 559c67da25575b4f9dab977937ddfd1ddeee8902 From 914e01ae7147c4c76c806ee94209693720991af2 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 08:52:18 +0000 Subject: [PATCH 120/470] deploy: 27ff5898ce30993898bd393db7fe4084ea21172f From a156fd7f36a35f58881ead13a079130a9575d449 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 08:53:47 +0000 Subject: [PATCH 121/470] deploy: 27ff5898ce30993898bd393db7fe4084ea21172f From fc733c8433cf2b37e0b0910a900fdbf34fe07e95 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 29 Sep 2022 08:59:41 +0000 Subject: [PATCH 122/470] deploy: b9db1b6abd93d6775843ba15dc5b75ccb50abc94 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 0a359fb..3c2ea61 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 8aa16ca..5a3262b 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 99aaee9..30bd91f 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 39528d7..b30b5da 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index b32f310..76c58b0 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4845,7 +4845,7 @@

    is-at-least

    From f22c3b9c6a513d25d63c2f1a0a8dd83f555038a3 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 6 Oct 2022 05:15:00 +0000 Subject: [PATCH 123/470] deploy: 7216acf28f03ca28bf8439b45a0f8ef04de53370 From f0f6d16f925f5074f4718b6bd0222a1665e82422 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 6 Oct 2022 07:37:51 +0000 Subject: [PATCH 124/470] deploy: 7216acf28f03ca28bf8439b45a0f8ef04de53370 From 95c89f919a14847f0ef36250a88daf8d8daa714c Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Mon, 10 Oct 2022 14:31:58 +0000 Subject: [PATCH 125/470] deploy: 3df94092691d7586381ecb88647ad550b90ecc5c --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 3c2ea61..8b23856 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -2335,7 +2335,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 5a3262b..177f68b 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -4995,7 +4995,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 30bd91f..cb07baa 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -3344,7 +3344,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index b30b5da..ccc092f 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -2555,7 +2555,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 76c58b0..3362537 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -4845,7 +4845,7 @@

    is-at-least

    From c56cdf407b2dc490ba0e1905ef7973d48f1b5c72 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 07:32:37 +0000 Subject: [PATCH 126/470] deploy: 3df94092691d7586381ecb88647ad550b90ecc5c From 802ba56996b559728ab9e7aed69aa8c296e6530d Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 12:24:06 +0000 Subject: [PATCH 127/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 6fac94e26be0defb0aaea343de0fc483ce1ae5d4 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 12:24:21 +0000 Subject: [PATCH 128/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 153852f5f39ad87490ebc097263065ac5ca9680a Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 12:29:32 +0000 Subject: [PATCH 129/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 2a701e3108a4b0c875e9c345dbf8fa0da1a51f5e Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 12:33:24 +0000 Subject: [PATCH 130/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From ec94b2ed89fde6708c29b58a64e9a0abe8c946af Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 12:38:14 +0000 Subject: [PATCH 131/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 99d2006917a79cdaae2f4ad759d388b09001ce8e Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 15:01:14 +0000 Subject: [PATCH 132/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 15bb043db861193d213689b0463730db248aebca Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 15:22:31 +0000 Subject: [PATCH 133/470] deploy: 01b5bc18702c49b86a431487ede1fa2ad1c94fa4 From 5e30148d05f2bce6bbcd3149c8a0e3863edd75e1 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 15:26:14 +0000 Subject: [PATCH 134/470] deploy: 8c5ea8d752f5ece901de4f1c3a380189cb0be9a8 From 6c191d9a54508d3cbd42ecc1c0873b26537f7341 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 15:49:57 +0000 Subject: [PATCH 135/470] deploy: 45fdb52eb44c5d288b6efcabe87c9a9240b77a29 From 2e21ec8b706b8be1d09b641668583095b34b9ac5 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 16:36:41 +0000 Subject: [PATCH 136/470] deploy: 7901acb5ff11e00b3bacacc231dffd5f8e63d8df From ccbb5e0fe8583f412d903816c7035712313b4dc3 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 16:41:34 +0000 Subject: [PATCH 137/470] deploy: a5358d12ed25d487631af3b3859eef594d3f758f From 320418066d80d34d4ee288d7c46bc4c8c577f8e3 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Tue, 11 Oct 2022 16:57:29 +0000 Subject: [PATCH 138/470] deploy: 1824b49c92c7ce0ab2a276161a2abc5dd15286c7 --- code/html/additional.zsh.html | 3030 +++---------- code/html/autoload.zsh.html | 7759 +++++++++++++-------------------- code/html/install.zsh.html | 4790 +++++++------------- code/html/side.zsh.html | 3319 ++++---------- code/html/zi.zsh.html | 7076 +++++++++++------------------- 5 files changed, 8612 insertions(+), 17362 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 8b23856..8dd2d0f 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -1,2341 +1,723 @@ - - - - - - additional.zsh(1) - - - - - -
    -
    -

    NAME

    -
    -
    -

    additional.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    -.zi-clear-debug-report
    +
    +
    +
    +
    +
    +additional.zsh(1)
    +
    +
    +
    +
    +
    +
    +
    +

    NAME

    +
    +
    +

    additional.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
    .zi-clear-debug-report
     .zi-debug-start
     .zi-debug-stop
     .zi-debug-unload
     .zi-service
     .zi-wrap-functions
    -:zi-tmp-subst-source
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    -
    -
    -
    zi-clear-debug-report
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-clear-debug-report [[[
    -Forgets dtrace repport gathered up to this moment.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-clear-debug-report
    -`-- autoload.zsh/.zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-unload
    -zi.zsh/zi
    -
    -
    -
    -
    zi-debug-start
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-debug-start [[[
    -Starts Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-debug-start
    +:zi-tmp-subst-source
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    +
    +
    +
    zi-clear-debug-report
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-debug-report [[[
    +Forgets dtrace repport gathered up to this moment.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-debug-report
    +`-- autoload.zsh/.zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-unload
    +zi.zsh/zi
    +
    +
    +
    +
    zi-debug-start
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-start [[[
    +Starts Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 9 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-start
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-on
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-stop
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-debug-stop [[[
    -Stops Dtrace, i.e. session tracking for changes in Zsh state.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-debug-stop
    +`-- zi.zsh/.zi-tmp-subst-on
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-stop
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-stop [[[
    +Stops Dtrace, i.e. session tracking for changes in Zsh state.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-stop
     |-- zi.zsh/.zi-diff
    -`-- zi.zsh/.zi-tmp-subst-off
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-debug-unload
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-debug-unload [[[
    -Reverts changes detected by dtrace run.
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-debug-unload
    +`-- zi.zsh/.zi-tmp-subst-off
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-debug-unload
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-debug-unload [[[
    +Reverts changes detected by dtrace run.
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-debug-unload
     |-- autoload.zsh/.zi-unload
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-service
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-service
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
     FUNCTION: .zi-service [[[
    -Handles given service, i.e. obtains lock, runs it, or waits if no lock
    -
    -
    -
    -
    -
    -$1 - type "p" or "s" (plugin or snippet)
    +Handles given service, i.e. obtains lock, runs it, or waits if no lock
    +
    +
    +
    +
    +
    $1 - type "p" or "s" (plugin or snippet)
     $2 - mode - for plugin (light or load)
    -$3 - id - URL or plugin ID or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-service
    +$3 - id - URL or plugin ID or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Calls functions:

    +
    +
    +
    +
    .zi-service
     |-- zi.zsh/.zi-load
    -`-- zi.zsh/.zi-load-snippet
    -
    -
    -
    -

    Uses feature(s): kill, read, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-wrap-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-wrap-functions [[[
    +`-- zi.zsh/.zi-load-snippet
    +
    +
    +
    +

    Uses feature(s): kill, read, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-wrap-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-wrap-functions [[[
     Handles the wrap'…' ice-modifier which allows to extend the tracking (e.g: gathering of report and unload data) of a plugin
     beyond the moment of sourcing it's main file(s). It works by wrapping the given functions with a tracking-enabling
     and disabling snippet of code.This is useful especially with prompts, as they very often do their
    -initialization in the first call to their precmd hook function.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi.zsh/.zi-load-plugin
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    -

    :zi-tmp-subst-source

    -
    -
    -
    -
    -
    FUNCTION: :zi-tmp-subst-source [[[
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    -:zi-tmp-subst-source
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -
    -
    - - - +initialization in the first call to their precmd hook function.
    +
    +
    + +
    +
    +

    Has 19 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load-plugin
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    +

    :zi-tmp-subst-source

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-source [[[
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-source
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index 177f68b..d662b6a 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -1,2057 +1,468 @@ - - - - - - autoload.zsh(1) - - - - - -
    -
    -

    NAME

    -
    -
    -

    autoload.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    - .zi-analytics-menu
    +
    +
    +
    +
    +
    +autoload.zsh(1)
    +
    +
    +
    +
    +
    +
    +
    +

    NAME

    +
    +
    +

    autoload.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-analytics-menu
      .zi-any-to-uspl2
      .zi-at-eval
      .zi-build-module
    @@ -2117,2504 +528,2223 @@ 

    FUNCTIONS

    .zi-update-or-status-all .zi-update-or-status-snippet .zi-wait-for-update-jobs -AUTOLOAD is-at-least
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-analytics-menu
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-analytics-menu [[[
    -Statistics, benchmarks and information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-analytics-menu
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-any-to-uspl2
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-any-to-uspl2 [[[
    +AUTOLOAD is-at-least
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 4 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-analytics-menu
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-analytics-menu [[[
    +Statistics, benchmarks and information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    .zi-analytics-menu
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-any-to-uspl2
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-uspl2 [[[
     Converts given plugin-spec to format that's used in keys for hash tables.
    -So basically, creates string "user/plugin" (this format is called: uspl2).
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-any-to-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-clear-report-for
    -.zi-exists-message
    -
    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-build-module
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-build-module [[[
    -Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    -
    -
    -
    -
    -
    -

    Has 40 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-build-module
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    zi-cd
    -

    ~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-cd [[[
    -Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-cd
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-cdisable
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-cdisable [[[
    -Enables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cdisable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-cenable
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-cenable [[[
    -Disables given installed completion.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - e.g. "_mkdir" or "mkdir"
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    .zi-cenable
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-changes
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-changes [[[
    -Shows `git log` of given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-changes
    +So basically, creates string "user/plugin" (this format is called: uspl2).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    + +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-uspl2
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-report-for
    +.zi-exists-message
    +
    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-build-module
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-build-module [[[
    +Performs ./configure && make on the module and displays information how to load the module in .zshrc.
    +
    +
    +
    +
    +
    +

    Has 40 line(s). Calls functions:

    +
    +
    +
    +
    .zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    zi-cd
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cd [[[
    +Jumps to plugin's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cd
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-cdisable
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cdisable [[[
    +Enables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cdisable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-cenable
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-cenable [[[
    +Disables given installed completion.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - e.g. "_mkdir" or "mkdir"
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    .zi-cenable
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-changes
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-changes [[[
    +Shows `git log` of given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-changes
     |-- side.zsh/.zi-exists-physically-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-check-comp-consistency
    -

    ~~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-check-comp-consistency [[[
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-check-comp-consistency
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-comp-consistency [[[
     ❮ ZI ❯ creates symlink for each installed completion.
     This function checks whether given completion (i.e. file like "_mkdir") is indeed a symlink.
    -Backup file is a completion that is disabled - has the leading "_" removed.
    -
    -
    -
    -
    -
    -$1 - path to completion within plugin's directory
    -$2 - path to backup file within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-check-which-completions-are-enabled
    -

    - ~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-check-which-completions-are-enabled [[[
    +Backup file is a completion that is disabled - has the leading "_" removed.
    +
    +
    +
    +
    +
    $1 - path to completion within plugin's directory
    +$2 - path to backup file within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-check-which-completions-are-enabled
    +

    ~~~~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-enabled [[[
     For each argument that each should be a path to completion
     within a plugin's dir, it checks whether that completion
    -is disabled - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    Uninstalled completions will be reported as "0" - i.e. disabled
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-check-which-completions-are-installed
    -

    - ~~~~~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-check-which-completions-are-installed [[[
    +is disabled - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    Uninstalled completions will be reported as "0" - i.e. disabled
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-check-which-completions-are-installed
    +

    ~~~~~~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-check-which-completions-are-installed [[[
     For each argument that each should be a path to completion
     within a plugin's dir, it checks whether that completion
    -is installed - returns 0 or 1 on corresponding positions in reply.
    -
    -
    -
    -
    -
    $1, ... - path to completion within plugin's directory
    -
    -
    -
    -
    -
    -

    Has 11 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-clear-completions
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-clear-completions [[[
    -Delete stray and improper completions.
    -
    -
    -
    -
    -
    -Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 35 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-clear-completions
    +is installed - returns 0 or 1 on corresponding positions in reply.
    +
    +
    +
    +
    +
    $1, ... - path to completion within plugin's directory
    +
    +
    +
    +
    +
    +

    Has 11 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-clear-completions
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-completions [[[
    +Delete stray and improper completions.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 35 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-completions
     |-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-clear-report-for
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-clear-report-for [[[
    -Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-clear-report-for
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-unload
    -additional.zsh/.zi-clear-debug-report
    -
    -
    -
    -
    zi-compile-uncompile-all
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compile-uncompile-all [[[
    -Compiles or uncompiles all existing (on disk) plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compile-uncompile-all
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-prepare-home
    +zi.zsh/zi
    +
    +
    +
    +
    zi-clear-report-for
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-clear-report-for [[[
    +Clears all report data for given user/plugin. This is done by resetting all related global ZI_* hashes.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-clear-report-for
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +additional.zsh/.zi-clear-debug-report
    +
    +
    +
    +
    zi-compile-uncompile-all
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-uncompile-all [[[
    +Compiles or uncompiles all existing (on disk) plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-uncompile-all
     |-- install.zsh/.zi-compile-plugin
     |-- side.zsh/.zi-any-colorify-as-uspl2
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-compiled
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compiled [[[
    -Displays list of plugins that are compiled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compiled
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-compiled
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compiled [[[
    +Displays list of plugins that are compiled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compiled
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-confirm
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-confirm [[[
    -Prints given question, waits for "y" key, evals given expression if "y" obtained
    -
    -
    -
    -
    -
    -$1 - question
    -$2 - expression
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, read

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-delete
    -
    -
    -
    -
    zi-create
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-create [[[
    -Creates a plugin, also on Github (if not "_local/name" plugin).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 99 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-create
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-confirm
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-confirm [[[
    +Prints given question, waits for "y" key, evals given expression if "y" obtained
    +
    +
    +
    +
    +
    $1 - question
    +$2 - expression
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, read

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-delete
    +
    +
    +
    +
    zi-create
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-create [[[
    +Creates a plugin, also on Github (if not "_local/name" plugin).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - (optional) plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 99 line(s). Calls functions:

    +
    +
    +
    +
    .zi-create
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- side.zsh/.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, vared

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-delete
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-delete [[[
    -Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-delete
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, vared

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-delete
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-delete [[[
    +Deletes plugin's or snippet's directory (in ❮ ZI ❯ home directory).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - snippet URL or plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Calls functions:

    +
    +
    +
    +
    .zi-delete
     |-- side.zsh/.zi-compute-ice
     |-- zi.zsh/+zi-prehelp-usage-message
     |-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-parse-opts
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-diff-env-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-env-compute [[[
    +`-- zi.zsh/.zi-parse-opts
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-diff-env-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env-compute [[[
     Computes ZI_PATH, ZI_FPATH that hold (f)path components
    -added by plugin. Uses data gathered earlier by .zi-diff-env().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-functions-compute
    -

    ~~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-functions-compute [[[
    +added by plugin. Uses data gathered earlier by .zi-diff-env().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-functions-compute
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions-compute [[[
     Computes FUNCTIONS that holds new functions added by plugin.
    -Uses data gathered earlier by .zi-diff-functions().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-options-compute
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-options-compute [[[
    +Uses data gathered earlier by .zi-diff-functions().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-options-compute
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options-compute [[[
     Computes OPTIONS that holds options changed by plugin.
    -Uses data gathered earlier by .zi-diff-options().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-diff-parameter-compute
    -

    ~~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-parameter-compute [[[
    +Uses data gathered earlier by .zi-diff-options().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-diff-parameter-compute
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter-compute [[[
     Computes ZI_PARAMETERS_PRE, ZI_PARAMETERS_POST that hold
     parameters created or changed (their type) by plugin. Uses
    -data gathered earlier by .zi-diff-parameter().
    -
    -
    -
    -
    -
    $1 - user/plugin
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-edit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-edit [[[
    -Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-edit
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-exists-message
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-exists-message [[[
    -Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - (optional) plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-exists-message
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-report
    -.zi-unload
    -
    -
    -
    -
    zi-find-completions-of-plugin
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-find-completions-of-plugin [[[
    +data gathered earlier by .zi-diff-parameter().
    +
    +
    +
    +
    +
    $1 - user/plugin
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-edit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-edit [[[
    +Runs $EDITOR on source of given plugin. If the variable is not set then defaults to `code'.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-edit
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-exists-message
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-message [[[
    +Checks if plugin is loaded. Testable. Also outputs error message if plugin is not loaded.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - (optional) plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-message
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +.zi-unload
    +
    +
    +
    +
    zi-find-completions-of-plugin
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-completions-of-plugin [[[
     Searches for completions owned by given plugin.
    -Returns them in `reply' array.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-find-completions-of-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-env
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-format-env [[[
    -Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    -
    -
    -
    -
    -
    -$1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -$2 - if 1, then examine PATH, if 2, then examine FPATH
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-functions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-format-functions [[[
    -Creates a one or two columns text with functions created by given plugin.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-format-options [[[
    -Creates one-column text about options that changed when plugin "$1" was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    .zi-format-options
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-format-parameter
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-format-parameter [[[
    -Creates one column text that lists global parameters that changed when the given plugin was loaded.
    -
    -
    -
    -
    -
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-show-report
    -
    -
    -
    -
    zi-get-completion-owner
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-get-completion-owner [[[
    -Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    -
    -
    -
    -
    -
    -Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    -
    -
    -
    -
    -
    -:A will read the link "twice" and give the final repository
    -directory, possibly without username in the uspl format; readlink will read the link "once"
    -
    -
    -
    -
    -
    -$1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-clear-completions
    +Returns them in `reply' array.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-find-completions-of-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-env
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-env [[[
    +Creates one-column text about FPATH or PATH elements added when given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +$2 - if 1, then examine PATH, if 2, then examine FPATH
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-functions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-functions [[[
    +Creates a one or two columns text with functions created by given plugin.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-options [[[
    +Creates one-column text about options that changed when plugin "$1" was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-format-options
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-format-parameter
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-format-parameter [[[
    +Creates one column text that lists global parameters that changed when the given plugin was loaded.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format of plugin-spec)
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-report
    +
    +
    +
    +
    zi-get-completion-owner
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner [[[
    +Returns "user---plugin" string (uspl1 format) of plugin that owns given completion.
    +
    +
    +
    +
    +
    Both :A and readlink will be used, then readlink's output if results differ. Readlink might not be available.
    +
    +
    +
    +
    +
    :A will read the link "twice" and give the final repository
    +directory, possibly without username in the uspl format; readlink will read the link "once"
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-clear-completions
     .zi-get-completion-owner-uspl2col
    -.zi-show-completions
    -
    -
    -
    -
    zi-get-completion-owner-uspl2col
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-get-completion-owner-uspl2col [[[
    +.zi-show-completions
    +
    +
    +
    +
    zi-get-completion-owner-uspl2col
    +

    ~~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-completion-owner-uspl2col [[[
     For shortening of code - returns colorized plugin name
    -that owns given completion.
    -
    -
    -
    -
    -
    -$1 - absolute path to completion file (in COMPLETIONS_DIR)
    -$2 - readlink command (":" or "readlink")
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-get-completion-owner-uspl2col
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-cdisable
    -.zi-cenable
    -
    -
    -
    -
    zi-get-path
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-get-path [[[
    +that owns given completion.
    +
    +
    +
    +
    +
    $1 - absolute path to completion file (in COMPLETIONS_DIR)
    +$2 - readlink command (":" or "readlink")
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-completion-owner-uspl2col
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
    +.zi-cenable
    +
    +
    +
    +
    zi-get-path
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-path [[[
     Returns path of given ID-string, which may be a plugin-spec (like "user/plugin" or "user" "plugin"), an absolute path
    -("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-get-path
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-cd
    -.zi-uninstall-completions
    -
    -
    -
    -
    zi-glance
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-glance [[[
    +("%" "/home/..." and also "%SNIPPETS/..." etc.), or a plugin nickname (i.e. id-as'' ice-mod), or a snippet nickname.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-path
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cd
    +.zi-uninstall-completions
    +
    +
    +
    +
    zi-glance
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-glance [[[
     Shows colorized source code of plugin. Is able to use pygmentize,
    -highlight, GNU source-highlight.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 37 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-glance
    +highlight, GNU source-highlight.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 37 line(s). Calls functions:

    +
    +
    +
    +
    .zi-glance
     |-- side.zsh/.zi-exists-physically-message
     |-- side.zsh/.zi-first
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-help
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-help [[[
    -Shows usage information.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-help
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-bindkeys
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-list-bindkeys [[[
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-list-bindkeys
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-list-compdef-replay
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-list-compdef-replay [[[
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-help
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-help [[[
    +Shows usage information.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    .zi-help
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-bindkeys
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-bindkeys [[[
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-list-bindkeys
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-list-compdef-replay
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-list-compdef-replay [[[
     Shows recorded compdefs (called by plugins loaded earlier). Plugins often call `compdef' hoping
    -for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-ls
    -

    ~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-ls [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-module
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-module [[[
    +for `compinit' being already ran. ❮ ZI ❯ solves this by recording compdefs.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-ls
    +

    ~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ls [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-module
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-module [[[
     Function that has sub-commands passed as long-options (with two dashes, --).
     It's an attempt to plugin only this one function into `zi' function
    -defined in zi.zsh, to not make this file longer than it's needed.
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-module
    +defined in zi.zsh, to not make this file longer than it's needed.
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    .zi-module
     |-- is-at-least
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, is-at-least

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-build-module
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, is-at-least

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-build-module
     zi.zsh/Script-Body
    -zi.zsh/zi
    -
    -
    -
    -
    zi-pager
    -

    ~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-pager [[[
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-glance
    +zi.zsh/zi
    +
    +
    +
    +
    zi-pager
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pager [[[
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-glance
     .zi-self-update
    -.zi-update-or-status
    -
    -
    -
    -
    zi-prepare-readlink
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-prepare-readlink [[[
    -Prepares readlink command, used for establishing completion's owner.
    -
    -
    -
    -
    -
    $REPLY = ":" or "readlink"
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-cdisable
    +.zi-update-or-status
    +
    +
    +
    +
    zi-prepare-readlink
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-readlink [[[
    +Prepares readlink command, used for establishing completion's owner.
    +
    +
    +
    +
    +
    $REPLY = ":" or "readlink"
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-cdisable
     .zi-cenable
     .zi-clear-completions
    -.zi-show-completions
    -
    -
    -
    -
    zi-recall
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-recall [[[
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-recall
    +.zi-show-completions
    +
    +
    +
    +
    zi-recall
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recall [[[
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recall
     |-- side.zsh/.zi-compute-ice
    -`-- zi.zsh/+zi-deploy-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-recently
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-recently [[[
    -Shows plugins that obtained commits in specified past time.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    $1 - time spec, e.g. "1 week"
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-recently
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-registered-ice-mods
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-registered-ice-mods [[[
    +`-- zi.zsh/+zi-deploy-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-recently
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-recently [[[
    +Shows plugins that obtained commits in specified past time.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - time spec, e.g. "1 week"
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-recently
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-registered-ice-mods
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-registered-ice-mods [[[
     Shows all registerted ice-modifiers.
    -Internal and registered by annex.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-registered-ice-mods
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-registered-subcommands
    -

    ~~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-registered-subcommands [[[
    -Shows subcommands registered by annex.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-registered-subcommands
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-restore-extendedglob
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-restore-extendedglob [[[
    -Restores extendedglob-option from state saved earlier.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-run-delete-hooks
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-run-delete-hooks [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-run-delete-hooks
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-save-set-extendedglob
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-save-set-extendedglob [[[
    +Internal and registered by annex.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-registered-ice-mods
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-registered-subcommands
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-registered-subcommands [[[
    +Shows subcommands registered by annex.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Calls functions:

    +
    +
    +
    +
    .zi-registered-subcommands
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-restore-extendedglob
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-restore-extendedglob [[[
    +Restores extendedglob-option from state saved earlier.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-run-delete-hooks
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-delete-hooks [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-delete-hooks
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-save-set-extendedglob
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-save-set-extendedglob [[[
     Enables extendedglob-option first saving if it was already
    -enabled, for restoration of this state later.
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-format-options
    -.zi-unload
    -
    -
    -
    -
    zi-search-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-search-completions [[[
    +enabled, for restoration of this state later.
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-format-options
    +.zi-unload
    +
    +
    +
    +
    zi-search-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-search-completions [[[
     While .zi-show-completions() shows what completions are
     installed, this functions searches through all plugin dirs
    -showing what's available in general (for installation).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-search-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-self-update
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-self-update [[[
    -Updates ❮ ZI ❯ code (does a git pull).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 43 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-self-update
    +showing what's available in general (for installation).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-search-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-self-update
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-self-update [[[
    +Updates ❮ ZI ❯ code (does a git pull).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 43 line(s). Calls functions:

    +
    +
    +
    +
    .zi-self-update
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-all-reports
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-all-reports [[[
    -Displays reports of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-all-reports
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-completions
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-completions [[[
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-all-reports
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-all-reports [[[
    +Displays reports of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-all-reports
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-completions
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-completions [[[
     Display installed (enabled and disabled), completions. Detect
    -stray and improper ones.
    -
    -
    -
    -
    -
    -Completions live even when plugin isn't loaded - if they are
    -installed and enabled.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 62 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-show-completions
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-debug-report
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-debug-report [[[
    -Displays dtrace report (data recorded in interactive session).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-show-debug-report
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-registered-plugins
    -

    - ~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-registered-plugins [[[
    -Lists loaded plugins (subcommands list, loaded).
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-show-registered-plugins
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-report
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-report [[[
    -Displays report of the plugin given.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 66 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-show-report
    +stray and improper ones.
    +
    +
    +
    +
    +
    Completions live even when plugin isn't loaded - if they are
    +installed and enabled.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 62 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-completions
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-debug-report
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-debug-report [[[
    +Displays dtrace report (data recorded in interactive session).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-debug-report
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-registered-plugins
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-registered-plugins [[[
    +Lists loaded plugins (subcommands list, loaded).
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-registered-plugins
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-report
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-report [[[
    +Displays report of the plugin given.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 66 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-report
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-show-all-reports
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-show-all-reports
     .zi-show-debug-report
    -zi.zsh/zi
    -
    -
    -
    -
    zi-show-times
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-times [[[
    -Shows loading times of all loaded plugins.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 55 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-show-times
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-show-zstatus
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-show-zstatus [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-show-times
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-times [[[
    +Shows loading times of all loaded plugins.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 55 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-times
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-show-zstatus
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-show-zstatus [[[
     Shows ❮ ZI ❯ status, i.e. number of loaded plugins,
    -of available completions, etc.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 48 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-show-zstatus
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-stress
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-stress [[[
    -Compiles plugin with various options on and off to see how well the code is written. The options are:
    -
    -
    -
    -
    -
    -NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 31 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-stress
    +of available completions, etc.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 48 line(s). Calls functions:

    +
    +
    +
    +
    .zi-show-zstatus
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-stress
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-stress [[[
    +Compiles plugin with various options on and off to see how well the code is written. The options are:
    +
    +
    +
    +
    +
    NO_SHORT_LOOPS, IGNORE_BRACES, IGNORE_CLOSE_BRACES, SH_GLOB, CSH_JUNKIE_QUOTES, NO_MULTI_FUNC_DEF.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 31 line(s). Calls functions:

    +
    +
    +
    +
    .zi-stress
     |-- side.zsh/.zi-exists-physically-message
     |-- side.zsh/.zi-first
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-uncompile-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-uncompile-plugin [[[
    -Uncompiles given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-uncompile-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-uncompile-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uncompile-plugin [[[
    +Uncompiles given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uncompile-plugin
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-uninstall-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-uninstall-completions [[[
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compile-uncompile-all
    +zi.zsh/zi
    +
    +
    +
    +
    zi-uninstall-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-uninstall-completions [[[
     Removes all completions of given plugin from Zshell (i.e. from FPATH).
    -The FPATH is typically `~/.zi/completions/'.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 39 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-uninstall-completions
    +The FPATH is typically `~/.zi/completions/'.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 39 line(s). Calls functions:

    +
    +
    +
    +
    .zi-uninstall-completions
     |-- install.zsh/.zi-compinit
     |-- install.zsh/.zi-forget-completion
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-unload
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-unload [[[
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-unload
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unload [[[
     0. Call the Zsh Plugin's Standard *_plugin_unload function
     0. Call the code provided by the Zsh Plugin's Standard @zsh-plugin-run-at-update
     1. Delete bindkeys (...)
    @@ -4625,167 +2755,146 @@ 

    Script Body

    6. Unfunction functions (created by plugin) 7. Clean-up FPATH and PATH 8. Delete created variables -9. Forget the plugin
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 380 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-unload
    +9. Forget the plugin
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 380 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unload
     |-- additional.zsh/.zi-clear-debug-report
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    - Uses feature(s): alias, bindkey, eval, setopt, unalias, - unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -additional.zsh/.zi-debug-unload
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): alias, bindkey, eval, setopt, unalias, unfunction, zle, zstyle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    additional.zsh/.zi-debug-unload
     zi.zsh/.zi-run-task
    -zi.zsh/zi
    -
    -
    -
    -
    zi-unregister-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-unregister-plugin [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-unregister-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-unregister-plugin [[[
     Removes the plugin from ZI_REGISTERED_PLUGINS array and from the
    -zsh_loaded_plugins array (managed according to the plugin standard)
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-unregister-plugin
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-unload
    -
    -
    -
    -
    zi-update-all-parallel
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-in-parallel [[[
    -
    -
    -
    -
    -
    -

    Has 63 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-update-all-parallel
    +zsh_loaded_plugins array (managed according to the plugin standard)
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    .zi-unregister-plugin
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-unload
    +
    +
    +
    +
    zi-update-all-parallel
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-in-parallel [[[
    +
    +
    +
    +
    +
    +

    Has 63 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-all-parallel
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-or-status-all
    -
    -
    -
    -
    zi-update-or-status
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-update-or-status [[[
    -Updates (git pull) or does `git status' for given plugin.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -$1 - "status" for status, other for update
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-or-status-all
    +
    +
    +
    +
    zi-update-or-status
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status [[[
    +Updates (git pull) or does `git status' for given plugin.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    $1 - "status" for status, other for update
     $2 - plugin spec (4 formats: user---plugin, user/plugin, user (+ plugin in $2), plugin)
    -$3 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 279 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-update-or-status
    +$3 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 279 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status
     |-- install.zsh/.zi-get-latest-gh-r-url-part
     |-- install.zsh/.zi-setup-plugin-dir
     |-- side.zsh/.zi-any-colorify-as-uspl2
    @@ -4796,206 +2905,186 @@ 

    Script Body

    |-- side.zsh/.zi-two-paths |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin -`-- zi.zsh/.zi-set-m-func
    -
    -
    -
    -

    Uses feature(s): kill, setopt, source, trap, wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-update-all-parallel
    +`-- zi.zsh/.zi-set-m-func
    +
    +
    +
    +

    Uses feature(s): kill, setopt, source, trap, wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
     .zi-update-or-status-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-all
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-update-or-status-all [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-all
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-all [[[
     Updates (git pull) or does `git status` for all existing plugins.
     This includes also plugins that are not loaded into Zsh (but exist
    -on disk). Also updates (i.e. redownloads) snippets.
    -
    -
    -
    -
    -
    User-action entry point.
    -
    -
    -
    -
    -
    -

    Has 103 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-update-or-status-all
    +on disk). Also updates (i.e. redownloads) snippets.
    +
    +
    +
    +
    +
    User-action entry point.
    +
    +
    +
    +
    +
    +

    Has 103 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-all
     |-- install.zsh/.zi-compinit
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-any-to-user-plugin
    -`-- zi.zsh/.zi-get-mtime-into
    -
    -
    -
    -

    Uses feature(s): setopt, source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/zi
    -
    -
    -
    -
    zi-update-or-status-snippet
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-update-or-status-snippet [[[
    -
    -
    -
    -
    -
    Implements update or status operation for snippet given by URL.
    -
    -
    -
    -
    -
    -$1 - "status" or "update"
    -$2 - snippet URL
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-update-or-status-snippet
    +`-- zi.zsh/.zi-get-mtime-into
    +
    +
    +
    +

    Uses feature(s): setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/zi
    +
    +
    +
    +
    zi-update-or-status-snippet
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-update-or-status-snippet [[[
    +
    +
    +
    +
    +
    Implements update or status operation for snippet given by URL.
    +
    +
    +
    +
    +
    $1 - "status" or "update"
    +$2 - snippet URL
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-or-status-snippet
     |-- install.zsh/.zi-update-snippet
    -`-- side.zsh/.zi-compute-ice
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-update-all-parallel
    +`-- side.zsh/.zi-compute-ice
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
     .zi-update-or-status-all
    -.zi-update-or-status
    -
    -
    -
    -
    zi-wait-for-update-jobs
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: .zi-wait-for-update-jobs [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-wait-for-update-jobs
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): wait

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-update-all-parallel
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    -Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +.zi-update-or-status
    +
    +
    +
    +
    zi-wait-for-update-jobs
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-wait-for-update-jobs [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-wait-for-update-jobs
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): wait

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-all-parallel
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
     is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
     it'll accept any dot/dash-separated string of numbers as its second argument
     and compare it to the dot/dash-separated first argument. Leading non-number
     parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
     when the comparison is done; only the numbers matter. Any left-out segments
     in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-module
    -
    -
    -
    -
    -
    -
    - - - +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    + +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-module
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index cb07baa..1fcb2ac 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -1,2057 +1,468 @@ - - - - - - install.zsh(1) - - - - - -
    -
    -

    NAME

    -
    -
    -

    install.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    - .zi-at-eval
    +
    +
    +
    +
    +
    +install.zsh(1)
    +
    +
    +
    +
    +
    +
    +
    +

    NAME

    +
    +
    +

    install.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-at-eval
      .zi-compile-plugin
      .zi-compinit
      .zi-download-file-stdout
    @@ -2083,1268 +494,1137 @@ 

    FUNCTIONS

    ∞zi-mv-hook ∞zi-ps-on-update-hook ∞zi-reset-hook -AUTOLOAD compinit
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    -
    -
    -

    Uses feature(s): source

    -
    -
    -
    zi-at-eval
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: .zi-at-eval [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-at-eval
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -∞zi-atpull-e-hook
    -∞zi-atpull-hook
    -
    -
    -
    -
    zi-compile-plugin
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compile-plugin [[[
    -Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 81 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compile-plugin
    +AUTOLOAD compinit
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    +
    +
    +

    Uses feature(s): source

    +
    +
    +
    zi-at-eval
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-at-eval [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    .zi-at-eval
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +∞zi-atpull-hook
    +
    +
    +
    +
    zi-compile-plugin
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compile-plugin [[[
    +Compiles given plugin (its main source file, and also an additional "....zsh" file if it exists).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 81 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compile-plugin
     |-- side.zsh/.zi-compute-ice
     |-- side.zsh/.zi-first
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -∞zi-compile-plugin-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
     autoload.zsh/.zi-compile-uncompile-all
    -zi.zsh/zi
    -
    -
    -
    -
    zi-compinit
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compinit [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-compinit
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compinit [[[
     User-exposed `compinit' frontend which first ensures that all completions managed by ❮ ZI ❯ are forgotten by Z-shell.
    -After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    -
    -
    -
    -
    -
    No arguments.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compinit
    +After that it runs normal `compinit', which should more easily detect ❮ ZI ❯ completions.
    +
    +
    +
    +
    +
    No arguments.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compinit
     |-- compinit
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-install-completions
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-install-completions
     autoload.zsh/.zi-uninstall-completions
     autoload.zsh/.zi-update-or-status-all
     zi.zsh/.zi-prepare-home
    -zi.zsh/zi
    -
    -
    -
    -
    zi-download-file-stdout
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-download-file-stdout [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-download-file-stdout
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-file-stdout [[[
     Downloads file to stdout.
     Supports following backend commands: curl, wget, lftp, lynx.
    -Used by snippet loading.
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-download-file-stdout
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-download-snippet
    +Used by snippet loading.
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-file-stdout
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
     .zi-get-cygwin-package
     .zi-get-package
    -.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-download-snippet
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-download-snippet [[[
    +.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-download-snippet
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-download-snippet [[[
     Downloads snippet – either a file – with curl, wget, lftp or lynx, or a directory,
     with Subversion – when svn-ICE is active. Github supports Subversion protocol and allows
    -to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    -
    -
    -
    -
    -
    -

    Has 344 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-download-snippet
    +to clone subdirectories. This is used to provide a layer of support for Oh-My-Zsh and Prezto.
    +
    +
    +
    +
    +
    +

    Has 344 line(s). Calls functions:

    +
    +
    +
    +
    .zi-download-snippet
     |-- side.zsh/.zi-store-ices
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap, zcompile

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-update-snippet
    -zi.zsh/.zi-load-snippet
    -
    -
    -
    -
    zi-extract
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-extract() [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-extract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap, zcompile

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-update-snippet
    +zi.zsh/.zi-load-snippet
    +
    +
    +
    +
    zi-extract
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-extract() [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-extract
     |-- zi.zsh/+zi-message
     `-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    ∞zi-extract-hook
    -
    -
    -
    -
    zi-forget-completion
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    ∞zi-extract-hook
    +
    +
    +
    +
    zi-forget-completion
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
     FUNCTION: .zi-forget-completion [[[
     Implements alternation of Zsh state so that already initialized
    -completion stops being visible to Zsh.
    -
    -
    -
    -
    -
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-compinit
    +completion stops being visible to Zsh.
    +
    +
    +
    +
    +
    $1 - completion function name, e.g. "_cp"; can also be "cp"
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
     .zi-install-completions
     autoload.zsh/.zi-uninstall-completions
    -zi.zsh/zi
    -
    -
    -
    -
    zi-get-cygwin-package
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-cygwin-package [[[
    -
    -
    -
    -
    -
    -

    Has 70 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-get-cygwin-package
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-setup-plugin-dir
    -
    -
    -
    -
    zi-get-latest-gh-r-url-part
    -

    - ~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -]]]
    +zi.zsh/zi
    +
    +
    +
    +
    zi-get-cygwin-package
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-cygwin-package [[[
    +
    +
    +
    +
    +
    +

    Has 70 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-cygwin-package
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +
    +
    +
    +
    zi-get-latest-gh-r-url-part
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
     FUNCTION: .zi-get-latest-gh-r-url-part [[[
     Gets version string of latest release of given Github package.
    -Connects to Github releases page.
    -
    -
    -
    -
    -
    -

    Has 113 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-get-latest-gh-r-url-part
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-setup-plugin-dir
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-get-package
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: .zi-get-package [[[
    -
    -
    -
    -
    -
    -

    Has 155 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-get-package
    +Connects to Github releases page.
    +
    +
    +
    +
    +
    +

    Has 113 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-latest-gh-r-url-part
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-setup-plugin-dir
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-get-package
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-get-package [[[
    +
    +
    +
    +
    +
    +

    Has 155 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-package
     |-- zi.zsh/+zi-message
     |-- zi.zsh/@zi-substitute
     `-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi.zsh/.zi-load
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    zi-get-url-mtime
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-get-url-mtime [[[
    -For the given URL returns the date in the Last-Modified header as a time stamp
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, setopt, trap, type

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-install-completions
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-install-completions [[[
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi.zsh/.zi-load
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    zi-get-url-mtime
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-url-mtime [[[
    +For the given URL returns the date in the Last-Modified header as a time stamp
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, setopt, trap, type

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-install-completions
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-install-completions [[[
     Installs all completions of given plugin. After that they are
     visible to `compinit'. Visible completions can be selectively
     disabled and enabled. User can access completion data with
    -`clist' or `completions' subcommand.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +`clist' or `completions' subcommand.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
     $2 - plugin (only when $1 - i.e. user - given)
    -$3 - if 1, then reinstall, otherwise only install completions that aren't there
    -
    -
    -
    -
    -
    -

    Has 59 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-install-completions
    +$3 - if 1, then reinstall, otherwise only install completions that aren't there
    +
    +
    +
    +
    +
    +

    Has 59 line(s). Calls functions:

    +
    +
    +
    +
    .zi-install-completions
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- side.zsh/.zi-exists-physically-message
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-download-snippet
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
     .zi-setup-plugin-dir
    -zi.zsh/zi
    -
    -
    -
    -
    zi-mirror-using-svn
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-mirror-using-svn [[[
    +zi.zsh/zi
    +
    +
    +
    +
    zi-mirror-using-svn
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-mirror-using-svn [[[
     Used to clone subdirectories from Github.
     If in update mode (see $2), then invokes `svn update',
     in normal mode invokes `svn checkout --non-interactive -q <URL>'.
    -In test mode only compares remote and local revision and outputs true if update is needed.
    -
    -
    -
    -
    -
    -$1 - URL
    +In test mode only compares remote and local revision and outputs true if update is needed.
    +
    +
    +
    +
    +
    $1 - URL
     $2 - mode, "" - normal, "-u" - update, "-t" - test
    -$3 - subdirectory (not path) with working copy, needed for -t and -u
    -
    -
    -
    -
    -
    -

    Has 27 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-mirror-using-svn
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-download-snippet
    -
    -
    -
    -
    zi-parse-json
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-parse-json [[[
    -Retrievies the ice-list from given profile from the JSON of the package.json.
    -
    -
    -
    -
    -
    -

    Has 102 line(s). Calls functions:

    -
    -
    -
    -
    .zi-parse-json
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-get-package
    -
    -
    -
    -
    zi-setup-plugin-dir
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-setup-plugin-dir [[[
    +$3 - subdirectory (not path) with working copy, needed for -t and -u
    +
    +
    +
    +
    +
    +

    Has 27 line(s). Calls functions:

    +
    +
    +
    +
    .zi-mirror-using-svn
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-download-snippet
    +
    +
    +
    +
    zi-parse-json
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-parse-json [[[
    +Retrievies the ice-list from given profile from the JSON of the package.json.
    +
    +
    +
    +
    +
    +

    Has 102 line(s). Calls functions:

    +
    +
    +
    +
    .zi-parse-json
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-get-package
    +
    +
    +
    +
    zi-setup-plugin-dir
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-plugin-dir [[[
     Clones given plugin into PLUGIN_DIR.
     Supports multiple sites (respecting `from' and `proto' ice modifiers).
    -Invokes compilation of plugin's main file.
    -
    -
    -
    -
    -
    -$1 - user
    -$2 - plugin
    -
    -
    -
    -
    -
    -

    Has 208 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-setup-plugin-dir
    +Invokes compilation of plugin's main file.
    +
    +
    +
    +
    +
    $1 - user
    +$2 - plugin
    +
    +
    +
    +
    +
    +

    Has 208 line(s). Calls functions:

    +
    +
    +
    +
    .zi-setup-plugin-dir
     |-- side.zsh/.zi-any-colorify-as-uspl2
     |-- side.zsh/.zi-store-ices
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-get-object-path
     `-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-update-or-status
    -zi.zsh/.zi-load
    -
    -
    -
    -
    zi-update-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: .zi-update-snippet [[[
    -
    -
    -
    -
    -
    -

    Has 71 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-update-snippet
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
    +zi.zsh/.zi-load
    +
    +
    +
    +
    zi-update-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: .zi-update-snippet [[[
    +
    +
    +
    +
    +
    +

    Has 71 line(s). Calls functions:

    +
    +
    +
    +
    .zi-update-snippet
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-get-object-path
    -`-- zi.zsh/.zi-pack-ice
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    autoload.zsh/.zi-update-or-status-snippet
    -
    -
    -
    -
    -

    zicp

    -
    -
    -
    -
    -
    -]]]
    -FUNCTION zicp [[[
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zimv
    -
    -
    -
    -

    Environment variables used: zi.zsh → ZPFX

    -
    -
    -
    -

    ziextract

    -
    -
    -
    -
    -
    -]]]
    +`-- zi.zsh/.zi-pack-ice
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status-snippet
    +
    +
    +
    +
    +

    zicp

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zicp [[[
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zimv
    +
    +
    +
    +

    Environment variables used: zi.zsh → ZPFX

    +
    +
    +
    +

    ziextract

    +
    +
    +
    +
    +
    ]]]
     FUNCTION: ziextract [[[
     If the file is an archive, it is extracted by this function.
     Next stage is scanning of files with the common utility `file',
     to detect executables. They are given +x mode. There are also
    -messages to the user on performed actions.
    -
    -
    -
    -
    -
    -$1 - url
    -$2 - file
    -
    -
    -
    -
    -
    -

    Has 265 line(s). Calls functions:

    -
    -
    -
    -
    -ziextract
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): setopt, unfunction, zparseopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-extract
    +messages to the user on performed actions.
    +
    +
    +
    +
    +
    $1 - url
    +$2 - file
    +
    +
    + +
    +
    +

    Has 265 line(s). Calls functions:

    +
    +
    +
    +
    ziextract
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): setopt, unfunction, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-extract
     .zi-get-package
     .zi-setup-plugin-dir
    -zpextract
    -
    -
    -
    -
    -

    zimv

    -
    -
    -
    -
    -
    -]]]
    -FUNCTION zimv [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    -zimv
    -`-- zicp
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpextract

    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: zpextract [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -zpextract
    +zpextract
    +
    +
    +
    +
    +

    zimv

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION zimv [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    zimv
    +`-- zicp
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpextract

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: zpextract [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpextract
     `-- ziextract
    -    `-- zi.zsh/+zi-message
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atclone-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atclone-hook [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-atclone-hook
    +    `-- zi.zsh/+zi-message
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atclone-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atclone-hook [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atclone-hook
     |-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-atpull-e-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-atpull-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-atpull-hook [[[
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-atpull-hook
    -`-- side.zsh/.zi-countdown
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-compile-plugin-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-compile-plugin-hook [[[
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    ∞zi-compile-plugin-hook
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-cp-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-cp-hook [[[
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-cp-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-extract-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-extract-hook [[[
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-extract-hook
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-e-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-e-hook [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-make-e-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-e-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-atpull-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-atpull-hook [[[
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-atpull-hook
    +`-- side.zsh/.zi-countdown
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-compile-plugin-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-compile-plugin-hook [[[
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-compile-plugin-hook
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-cp-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-cp-hook [[[
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-cp-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-extract-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-extract-hook [[[
    +
    +
    +
    +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-extract-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-e-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-e-hook [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-e-hook
     |-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-ee-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-ee-hook [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-make-ee-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-ee-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-ee-hook [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-ee-hook
     |-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-make-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-make-hook [[[
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-make-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-make-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-make-hook [[[
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-make-hook
     |-- side.zsh/.zi-countdown
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-mv-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-mv-hook [[[
    -
    -
    -
    -
    -
    -

    Has 26 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-mv-hook
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-mv-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-mv-hook [[[
    +
    +
    +
    +
    +
    +

    Has 26 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-mv-hook
     |-- zi.zsh/+zi-message
    -`-- zi.zsh/@zi-substitute
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-ps-on-update-hook

    -
    -
    -
    -
    -
    FUNCTION: ∞zi-ps-on-update-hook [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-ps-on-update-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    ∞zi-reset-hook

    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: ∞zi-reset-opt-hook [[[
    -
    -
    -
    -
    -
    -

    Has 74 line(s). Calls functions:

    -
    -
    -
    -
    -∞zi-reset-hook
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): eval

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    -Initialisation for new style completion. This mainly contains some helper
    +`-- zi.zsh/@zi-substitute
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-ps-on-update-hook

    +
    +
    +
    +
    +
    FUNCTION: ∞zi-ps-on-update-hook [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-ps-on-update-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    ∞zi-reset-hook

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: ∞zi-reset-opt-hook [[[
    +
    +
    +
    +
    +
    +

    Has 74 line(s). Calls functions:

    +
    +
    +
    +
    ∞zi-reset-hook
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): eval

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
     functions and setup. Everything else is split into different files that
     will automatically be made autoloaded (see the end of this file).  The
     names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    -The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    - Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compinit
    -
    -
    -
    -
    -
    -
    - - - +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    + +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compinit
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index ccc092f..68725cf 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -1,2057 +1,468 @@ - - - - - - side.zsh(1) - - - - - -
    -
    -

    NAME

    -
    -
    -

    side.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    - .zi-any-colorify-as-uspl2
    +
    +
    +
    +
    +
    +side.zsh(1)
    +
    +
    +
    +
    +
    +
    +
    +

    NAME

    +
    +
    +

    side.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     .zi-any-colorify-as-uspl2
      .zi-compute-ice
      .zi-countdown
      .zi-exists-physically
    @@ -2059,64 +470,56 @@ 

    FUNCTIONS

    .zi-first .zi-store-ices .zi-two-paths -AUTOLOAD zmv
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    -
    -
    -
    zi-any-colorify-as-uspl2
    -

    ~~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-any-colorify-as-uspl2 [[[
    -Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +AUTOLOAD zmv
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.).

    +
    +
    +
    zi-any-colorify-as-uspl2
    +

    ~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-colorify-as-uspl2 [[[
    +Returns ANSI-colorified "user/plugin" string, from any supported plugin spec (user---plugin, user/plugin, user plugin, plugin).
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
     $2 - plugin (only when $1 - i.e. user - given)
    -$REPLY = ANSI-colorified "user/plugin" string
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-any-colorify-as-uspl2
    +$REPLY = ANSI-colorified "user/plugin" string
    +
    +
    + +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-colorify-as-uspl2
     |-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-exists-physically-message
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
     autoload.zsh/.zi-clear-completions
     autoload.zsh/.zi-compile-uncompile-all
     autoload.zsh/.zi-compiled
    @@ -2136,426 +539,370 @@ 

    Script Body

    autoload.zsh/.zi-update-or-status install.zsh/.zi-install-completions install.zsh/.zi-setup-plugin-dir -zi.zsh/.zi-formatter-pid
    -
    -
    -
    -
    zi-compute-ice
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compute-ice [[[
    +zi.zsh/.zi-formatter-pid
    +
    +
    +
    +
    zi-compute-ice
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compute-ice [[[
     Computes ICE array (default, it can be specified via $3) from a) input ICE, b) static ice, c) saved ice,
     taking priorities into account. Also returns path to snippet directory and optional name of snippet file
    -(only valid if ICE[svn] is not set).
    -
    -
    -
    -
    -
    Can also pack resulting ices into ZI_SICE (see $2).
    -
    -
    -
    -
    -
    -$1 - URL (also plugin-spec)
    +(only valid if ICE[svn] is not set).
    +
    +
    +
    +
    +
    Can also pack resulting ices into ZI_SICE (see $2).
    +
    +
    +
    +
    +
    $1 - URL (also plugin-spec)
     $2 - "pack" or "nopack" or "pack-nf" - packing means ICE
     wins with static ice; "pack-nf" means that disk-ices will
     be ignored (no-file?)
     $3 - name of output associative array, "ICE" is the default
     $4 - name of output string parameter, to hold path to directory ("local_dir")
     $5 - name of output string parameter, to hold filename ("filename")
    -$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    -
    -
    -
    -
    -
    -

    Has 116 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compute-ice
    +$6 - name of output string parameter, to hold is-snippet 0/1-bool ("is_snippet")
    +
    +
    +
    +
    +
    +

    Has 116 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compute-ice
     |-- zi.zsh/.zi-any-to-user-plugin
     |-- zi.zsh/.zi-pack-ice
    -`-- zmv
    -
    -
    -
    -

    Uses feature(s): autoload, setopt, zmv

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-delete
    +`-- zmv
    +
    +
    +
    +

    Uses feature(s): autoload, setopt, zmv

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-delete
     autoload.zsh/.zi-edit
     autoload.zsh/.zi-recall
     autoload.zsh/.zi-update-or-status-snippet
     autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-countdown
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-countdown [[[
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-countdown
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-countdown [[[
     Displays a countdown 5...4... etc. and returns 0 if it
    -sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-countdown
    -`-- zi.zsh/+zi-message
    -
    -
    -
    -

    Uses feature(s): trap

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-run-delete-hooks
    +sucessfully reaches 0, or 1 if Ctrl-C will be pressed.
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Calls functions:

    +
    +
    +
    +
    .zi-countdown
    +`-- zi.zsh/+zi-message
    +
    +
    +
    +

    Uses feature(s): trap

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-run-delete-hooks
     install.zsh/∞zi-atclone-hook
     install.zsh/∞zi-atpull-e-hook
     install.zsh/∞zi-atpull-hook
     install.zsh/∞zi-make-e-hook
     install.zsh/∞zi-make-ee-hook
    -install.zsh/∞zi-make-hook
    -
    -
    -
    -
    zi-exists-physically
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-exists-physically [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-exists-physically
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-exists-physically-message
    +install.zsh/∞zi-make-hook
    +
    +
    +
    +
    zi-exists-physically
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-exists-physically-message
     autoload.zsh/.zi-create
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-exists-physically-message
    -

    - ~~~~~~~~~~~ -

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-exists-physically-message [[[
    -Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    -
    -
    -
    -
    -
    Testable.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-exists-physically-message
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-exists-physically-message
    +

    ~~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-exists-physically-message [[[
    +Checks if directory of given plugin exists in PLUGIN_DIR, and outputs error message if it doesn't.
    +
    +
    +
    +
    +
    Testable.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-exists-physically-message
     |-- zi.zsh/+zi-message
     |-- zi.zsh/.zi-any-to-pid
    -`-- zi.zsh/.zi-any-to-user-plugin
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-compute-ice
    +`-- zi.zsh/.zi-any-to-user-plugin
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
     autoload.zsh/.zi-changes
     autoload.zsh/.zi-glance
     autoload.zsh/.zi-stress
     autoload.zsh/.zi-update-or-status
    -install.zsh/.zi-install-completions
    -
    -
    -
    -
    zi-first
    -

    ~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-first [[[
    +install.zsh/.zi-install-completions
    +
    +
    +
    +
    zi-first
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-first [[[
     Finds the main file of plugin. There are multiple file name formats, they are ordered in order starting from more correct
     ones, and matched. .zi-load-plugin() has similar code parts and doesn't call .zi-first() – for performance. Obscure matching
    -is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-first
    +is done in .zi-find-other-matches, here and in .zi-load(). Obscure = non-standard main-file naming convention.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    .zi-first
     |-- zi.zsh/.zi-any-to-pid
     |-- zi.zsh/.zi-any-to-user-plugin
     |-- zi.zsh/.zi-find-other-matches
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-two-paths
     autoload.zsh/.zi-glance
     autoload.zsh/.zi-stress
    -install.zsh/.zi-compile-plugin
    -
    -
    -
    -
    zi-store-ices
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-store-ices [[[
    -Saves ice mods in given hash onto disk.
    -
    -
    -
    -
    -
    -$1 - directory where to create / delete files
    +install.zsh/.zi-compile-plugin
    +
    +
    +
    +
    zi-store-ices
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-store-ices [[[
    +Saves ice mods in given hash onto disk.
    +
    +
    +
    +
    +
    $1 - directory where to create / delete files
     $2 - name of hash that holds values
     $3 - additional keys of hash to store, space separated
     $4 - additional keys of hash to store, empty-meaningful ices, space separated
     $5 - the URL, if applicable
    -$6 - the mode (1 - svn, 0 - single file), if applicable
    -
    -
    -
    -
    -
    -

    Has 28 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-update-or-status
    +$6 - the mode (1 - svn, 0 - single file), if applicable
    +
    +
    +
    +
    +
    +

    Has 28 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-update-or-status
     install.zsh/.zi-download-snippet
    -install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -
    zi-two-paths
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-two-paths [[[
    +install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +
    zi-two-paths
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-two-paths [[[
     Obtains a snippet URL without specification if it is an SVN URL (points to directory) or regular URL (points to file),
    -returns 2 possible paths for further examination
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-two-paths
    -`-- zi.zsh/.zi-get-object-path
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-compute-ice
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    -

    zmv

    -
    -
    -
    -
    -
    -function zmv {
    -zmv, zcp, zln:
    -
    -
    -
    -
    -
    -This is a multiple move based on zsh pattern matching.  To get the full
    +returns 2 possible paths for further examination
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-two-paths
    +`-- zi.zsh/.zi-get-object-path
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    +

    zmv

    +
    +
    +
    +
    +
    function zmv {
    +zmv, zcp, zln:
    +
    +
    +
    +
    +
    This is a multiple move based on zsh pattern matching.  To get the full
     power of it, you need a postgraduate degree in zsh.  However, simple
     tasks work OK, so if that's all you need, here are some basic examples:
     zmv '(*).txt' '$1.lis'
     Rename foo.txt to foo.lis, etc.  The parenthesis is the thing that
     gets replaced by the $1 (not the `*', as happens in mmv, and note the
    -`$', not `=', so that you need to quote both words).
    -
    -
    -
    -
    -
    -

    Has 299 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): eval, getopts, read, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-compute-ice
    -
    -
    -
    -
    -
    -
    - - - +`$', not `=', so that you need to quote both words).
    +
    +
    + +
    +
    +

    Has 299 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): eval, getopts, read, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-compute-ice
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 3362537..8740a7b 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -1,2057 +1,468 @@ - - - - - - zi.zsh(1) - - - - - -
    -
    -

    NAME

    -
    -
    -

    zi.zsh - a shell script

    -
    -
    -
    -
    -

    SYNOPSIS

    -
    -
    -

    Documentation automatically generated with `zsdoc'

    -
    -
    -
    -
    -

    FUNCTIONS

    -
    -
    -
    -
    - +zi-deploy-message
    +
    +
    +
    +
    +
    +zi.zsh(1)
    +
    +
    +
    +
    +
    +
    +
    +

    NAME

    +
    +
    +

    zi.zsh - a shell script

    +
    +
    +
    +
    +

    SYNOPSIS

    +
    +
    +

    Documentation automatically generated with `zsdoc'

    +
    +
    +
    +
    +

    FUNCTIONS

    +
    +
    +
    +
     +zi-deploy-message
      +zi-message
      +zi-prehelp-usage-message
      -zi_scheduler_add_sh
    @@ -2123,100 +534,86 @@ 

    FUNCTIONS

    AUTOLOAD add-zsh-hook AUTOLOAD compinit AUTOLOAD is-at-least -PRECMD-HOOK @zi-scheduler
    -
    -
    -
    -
    -
    -

    DETAILS

    -
    -
    -

    Script Body

    -
    -

    Has 219 line(s). Calls functions:

    -
    -
    -
    -
    -Script-Body
    +PRECMD-HOOK @zi-scheduler
    +
    +
    +
    +
    +
    +

    DETAILS

    +
    +
    +

    Script Body

    +
    +

    Has 219 line(s). Calls functions:

    +
    +
    +
    +
    Script-Body
     |-- +zi-message
     |-- @zi-register-hook
     |-- add-zsh-hook
     |-- autoload.zsh/.zi-module
    -`-- is-at-least
    -
    -
    -
    -

    - Uses feature(s): add-zsh-hook, alias, autoload, export, - is-at-least, setopt, source, zmodload, zstyle -

    -
    -
    -

    - Exports (environment): PMSPEC // ZCDR - // ZPFX // ZSH_CACHE_DIR -

    -
    -
    -
    -

    +zi-deploy-message

    -
    -
    -
    -
    -
    -FUNCTION: +zi-deploy-message. [[[
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, alias, autoload, export, is-at-least, setopt, source, zmodload, zstyle

    +
    +
    +

    Exports (environment): PMSPEC // ZCDR // ZPFX // ZSH_CACHE_DIR

    +
    +
    +
    +

    +zi-deploy-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-deploy-message. [[[
     Deploys a sub-prompt message to be displayed OR a `zle
    -.reset-prompt' call to be invoked
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): read, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-snippet
    +.reset-prompt' call to be invoked
    +
    +
    + +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): read, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
     .zi-load
    -autoload.zsh/.zi-recall
    -
    -
    -
    -
    -

    +zi-message

    -
    -
    -
    -
    -
    FUNCTION: +zi-message. [[[
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -+zi-prehelp-usage-message
    +autoload.zsh/.zi-recall
    +
    +
    +
    +
    +

    +zi-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-message. [[[
    +
    +
    +
    +
    +
    +

    Has 13 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    +zi-prehelp-usage-message
     .zi-compdef-clear
     .zi-compdef-replay
     .zi-load-snippet
    @@ -2266,221 +663,199 @@ 

    +zi-message

    install.zsh/∞zi-ps-on-update-hook install.zsh/∞zi-reset-hook side.zsh/.zi-countdown -side.zsh/.zi-exists-physically-message
    -
    -
    -
    -
    -

    +zi-prehelp-usage-message

    -
    -
    -
    -
    -
    -FUNCTION: +zi-prehelp-usage-message. [[[
    -Prints the usage message.
    -
    -
    -
    -
    -
    -

    Has 34 line(s). Calls functions:

    -
    -
    -
    -
    -+zi-prehelp-usage-message
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    -

    -zi_scheduler_add_sh

    -
    -
    -
    -
    -
    -FUNCTION: -zi_scheduler_add_sh. [[[
    +side.zsh/.zi-exists-physically-message
    +
    +
    +
    +
    +

    +zi-prehelp-usage-message

    +
    +
    +
    +
    +
    FUNCTION: +zi-prehelp-usage-message. [[[
    +Prints the usage message.
    +
    +
    +
    +
    +
    +

    Has 34 line(s). Calls functions:

    +
    +
    +
    +
    +zi-prehelp-usage-message
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    +

    -zi_scheduler_add_sh

    +
    +
    +
    +
    +
    FUNCTION: -zi_scheduler_add_sh. [[[
     Copies task into ZI_RUN array, called when a task timeouts.
     A small function ran from pattern in /-substitution as a math
    -function.
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-add-fpath
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-add-fpath. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-add-fpath
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-add-report
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-add-report. [[[
    -Adds a report line for given plugin.
    -
    -
    -
    -
    -
    -$1 - uspl2, i.e. user/plugin
    -$2, ... - the text
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    +function.
    +
    +
    + +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-add-fpath
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-fpath. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-add-fpath
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-add-report
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-add-report. [[[
    +Adds a report line for given plugin.
    +
    +
    +
    +
    +
    $1 - uspl2, i.e. user/plugin
    +$2, ... - the text
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
     .zi-load-snippet
     :zi-tmp-subst-alias
     :zi-tmp-subst-autoload
     :zi-tmp-subst-bindkey
     :zi-tmp-subst-compdef
     :zi-tmp-subst-zle
    -:zi-tmp-subst-zstyle
    -
    -
    -
    -
    zi-any-to-pid
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-any-to-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 21 line(s). Calls functions:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -side.zsh/.zi-any-colorify-as-uspl2
    +:zi-tmp-subst-zstyle
    +
    +
    +
    +
    zi-any-to-pid
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 21 line(s). Calls functions:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    side.zsh/.zi-any-colorify-as-uspl2
     side.zsh/.zi-exists-physically-message
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-any-to-user-plugin
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-any-to-user-plugin. [[[
    -Allows elastic plugin-spec across the code.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin (only when $1 - i.e. user - given)
    -
    -
    -
    -
    -
    Returns user and plugin in $reply.
    -
    -
    -
    -
    -
    -

    Has 25 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-add-fpath
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-any-to-user-plugin
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-any-to-user-plugin. [[[
    +Allows elastic plugin-spec across the code.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin (only when $1 - i.e. user - given)
    +
    +
    +
    +
    +
    Returns user and plugin in $reply.
    +
    +
    +
    +
    +
    +

    Has 25 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-add-fpath
     .zi-get-object-path
     .zi-load
     .zi-run
    @@ -2506,531 +881,483 @@ 

    -zi_scheduler_add_sh

    side.zsh/.zi-compute-ice side.zsh/.zi-exists-physically-message side.zsh/.zi-exists-physically -side.zsh/.zi-first
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-compdef-clear
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compdef-clear. [[[
    -Implements user-exposed functionality to clear gathered compdefs.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compdef-clear
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi
    +side.zsh/.zi-first
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-compdef-clear
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-clear. [[[
    +Implements user-exposed functionality to clear gathered compdefs.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-clear
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
     zicdclear
    -zpcdclear
    -
    -
    -
    -
    zi-compdef-replay
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-compdef-replay. [[[
    -Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-compdef-replay
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): compdef

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi
    +zpcdclear
    +
    +
    +
    +
    zi-compdef-replay
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-compdef-replay. [[[
    +Runs gathered compdef calls. This allows to run `compinit' after loading plugins.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Calls functions:

    +
    +
    +
    +
    .zi-compdef-replay
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): compdef

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
     zicdreplay
    -zpcdreplay
    -
    -
    -
    -
    zi-diff
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff. [[[
    -Performs diff actions of all types
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Calls functions:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    +zpcdreplay
    +
    +
    +
    +
    zi-diff
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff. [[[
    +Performs diff actions of all types
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Calls functions:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
     additional.zsh/.zi-debug-start
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-diff-env
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-env. [[[
    -Implements detection of change in PATH and FPATH.
    -
    -
    -
    -
    -
    -$1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-diff
    -.zi-load-plugin
    -
    -
    -
    -
    zi-diff-functions
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-functions. [[[
    -Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    -$1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-options
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-options. [[[
    -Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    -$1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-diff-parameter
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-diff-parameter. [[[
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-diff-env
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-env. [[[
    +Implements detection of change in PATH and FPATH.
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +.zi-load-plugin
    +
    +
    +
    +
    zi-diff-functions
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-functions. [[[
    +Implements detection of newly created functions. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-options
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-options. [[[
    +Implements detection of change in option state. Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-diff-parameter
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-diff-parameter. [[[
     Implements detection of change in any parameter's existence and type.
    -Performs data gathering, computation is done in *-compute().
    -
    -
    -
    -
    -
    -$1 - user/plugin (i.e. uspl2 format)
    -$2 - command, can be "begin" or "end"
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-diff
    -
    -
    -
    -
    zi-find-other-matches
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-find-other-matches. [[[
    +Performs data gathering, computation is done in *-compute().
    +
    +
    +
    +
    +
    $1 - user/plugin (i.e. uspl2 format)
    +$2 - command, can be "begin" or "end"
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-diff
    +
    +
    +
    +
    zi-find-other-matches
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-find-other-matches. [[[
     Plugin's main source file is in general `name.plugin.zsh'. However,
     there can be different conventions, if that file is not found, then
    -this functions examines other conventions in the most sane order.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    +this functions examines other conventions in the most sane order.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
     .zi-load-snippet
    -side.zsh/.zi-first
    -
    -
    -
    -
    zi-formatter-auto
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-formatter-auto[[[
    +side.zsh/.zi-first
    +
    +
    +
    +
    zi-formatter-auto
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-auto[[[
     The automatic message formatting tool automatically detects,
     formats, and colorizes the following pieces of text:
     [URLs], [plugin IDs (user/repo) if exists on the disk], [numbers], [time], [single-word id-as plugins],
     [single word commands], [single word functions], [zi commands], [ice modifiers (e.g: mv'a -> b')],
    -[single-char bits and quoted strings (`...', ,'...', "...")].
    -
    -
    -
    -
    -
    -

    Has 46 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-auto
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-bar-util
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-bar-util. [[[
    -
    -
    -
    -
    -
    -

    Has 6 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-formatter-bar
    -.zi-formatter-th-bar
    -
    -
    -
    -
    zi-formatter-pid
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-pid. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-formatter-pid
    -`-- side.zsh/.zi-any-colorify-as-uspl2
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-auto
    -
    -
    -
    -
    zi-formatter-th-bar
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-th-bar. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    .zi-formatter-th-bar
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-formatter-url
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-formatter-url. [[[
    -
    -
    -
    -
    -
    -

    Has 14 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-formatter-auto
    -
    -
    -
    -
    zi-get-mtime-into
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-mtime-into. [[[
    -
    -
    -
    -
    -
    -

    Has 7 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -Script-Body
    +[single-char bits and quoted strings (`...', ,'...', "...")].
    +
    +
    +
    +
    +
    +

    Has 46 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-auto
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-bar-util
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-bar-util. [[[
    +
    +
    +
    +
    +
    +

    Has 6 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-bar
    +.zi-formatter-th-bar
    +
    +
    +
    +
    zi-formatter-pid
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-pid. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-pid
    +`-- side.zsh/.zi-any-colorify-as-uspl2
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-auto
    +
    +
    +
    +
    zi-formatter-th-bar
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-th-bar. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    .zi-formatter-th-bar
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-formatter-url
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-formatter-url. [[[
    +
    +
    +
    +
    +
    +

    Has 14 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-formatter-auto
    +
    +
    +
    +
    zi-get-mtime-into
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-mtime-into. [[[
    +
    +
    +
    +
    +
    +

    Has 7 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
     autoload.zsh/.zi-self-update
    -autoload.zsh/.zi-update-or-status-all
    -
    -
    -
    -
    zi-get-object-path
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-get-object-path. [[[
    -
    -
    -
    -
    -
    -

    Has 23 line(s). Calls functions:

    -
    -
    -
    -
    .zi-get-object-path
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-ices
    +autoload.zsh/.zi-update-or-status-all
    +
    +
    +
    +
    zi-get-object-path
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-get-object-path. [[[
    +
    +
    +
    +
    +
    +

    Has 23 line(s). Calls functions:

    +
    +
    +
    +
    .zi-get-object-path
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-ices
     .zi-load-snippet
     .zi-run
     zi
    @@ -3038,1147 +1365,1029 @@ 

    -zi_scheduler_add_sh

    install.zsh/.zi-setup-plugin-dir install.zsh/.zi-update-snippet side.zsh/.zi-first -side.zsh/.zi-two-paths
    -
    -
    -
    -
    zi-ice
    -

    ~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-ice. [[[
    +side.zsh/.zi-two-paths
    +
    +
    +
    +
    zi-ice
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-ice. [[[
     Parses ICE specification, puts the result into ICE global hash. The ice-spec is valid for
    -next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    -
    -
    -
    -
    -
    -

    Has 12 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-load. [[[
    -Implements the exposed-to-user action of loading a plugin.
    -
    -
    -
    -
    -
    -$1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    -$2 - plugin name, if the third format is used
    -
    -
    -
    -
    -
    -

    Has 78 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-load
    +next command only (i.e. it "melts"), but it can then stick to plugin and activate e.g. at update.
    +
    +
    +
    +
    +
    +

    Has 12 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load. [[[
    +Implements the exposed-to-user action of loading a plugin.
    +
    +
    +
    +
    +
    $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
    +$2 - plugin name, if the third format is used
    +
    +
    +
    +
    +
    +

    Has 78 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load
     |-- +zi-deploy-message
     |-- install.zsh/.zi-get-package
    -`-- install.zsh/.zi-setup-plugin-dir
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-object
    +`-- install.zsh/.zi-setup-plugin-dir
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
     .zi-run-task
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-load-ices
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-ices. [[[
    -
    -
    -
    -
    -
    -

    Has 22 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-ices
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-load-object
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-load-object. [[[
    -
    -
    -
    -
    -
    -

    Has 10 line(s). Calls functions:

    -
    -
    -
    -
    .zi-load-object
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-load-plugin
    -

    ~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-load-plugin. [[[
    -Lower-level function for loading a plugin.
    -
    -
    -
    -
    -
    -$1 - user
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-load-ices
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-ices. [[[
    +
    +
    +
    +
    +
    +

    Has 22 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-ices
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-load-object
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-object. [[[
    +
    +
    +
    +
    +
    +

    Has 10 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-object
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-load-plugin
    +

    ~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-plugin. [[[
    +Lower-level function for loading a plugin.
    +
    +
    +
    +
    +
    $1 - user
     $2 - plugin
    -$3 - mode (light or load)
    -
    -
    -
    -
    -
    -

    Has 107 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-load-plugin
    +$3 - mode (light or load)
    +
    +
    +
    +
    +
    +

    Has 107 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-plugin
     |-- :zi-tmp-subst-autoload
     |   |-- +zi-message
     |   `-- is-at-least
    -`-- additional.zsh/.zi-wrap-functions
    -
    -
    -
    -

    Uses feature(s): eval, setopt, source, unfunction, zle

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-load-snippet
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-load-snippet. [[[
    -Implements the exposed-to-user action of loading a snippet.
    -
    -
    -
    -
    -
    $1 - url (can be local, absolute path).
    -
    -
    -
    -
    -
    -

    Has 173 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-load-snippet
    +`-- additional.zsh/.zi-wrap-functions
    +
    +
    +
    +

    Uses feature(s): eval, setopt, source, unfunction, zle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-load-snippet
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-load-snippet. [[[
    +Implements the exposed-to-user action of loading a snippet.
    +
    +
    +
    +
    +
    $1 - url (can be local, absolute path).
    +
    +
    +
    +
    +
    +

    Has 173 line(s). Calls functions:

    +
    +
    +
    +
    .zi-load-snippet
     |-- +zi-deploy-message
     |-- +zi-message
     |-- additional.zsh/.zi-wrap-functions
    -`-- install.zsh/.zi-download-snippet
    -
    -
    -
    -

    - Uses feature(s): autoload, eval, setopt, source, - unfunction, zparseopts, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-object
    +`-- install.zsh/.zi-download-snippet
    +
    +
    +
    +

    Uses feature(s): autoload, eval, setopt, source, unfunction, zparseopts, zstyle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-object
     .zi-load
     .zi-run-task
     pmodload
    -additional.zsh/.zi-service
    -
    -
    -
    -
    zi-main-message-formatter
    -

    ~~~~~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: +zi-message-formatter [[[
    -
    -
    -
    -
    -
    -

    Has 18 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    zi-pack-ice
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-pack-ice. [[[
    +additional.zsh/.zi-service
    +
    +
    +
    +
    zi-main-message-formatter
    +

    ~~~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: +zi-message-formatter [[[
    +
    +
    +
    +
    +
    +

    Has 18 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    zi-pack-ice
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-pack-ice. [[[
     Remembers all ice-mods, assigns them to concrete plugin. Ice spec is in general forgotten for
     second-next command (that's why it's called "ice" - it melts), however they glue to the object (plugin
    -or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-snippet
    +or snippet) mentioned in the next command – for later use with e.g. `zi update ...'.
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
     .zi-load
     @zsh-plugin-run-on-unload
     @zsh-plugin-run-on-update
     install.zsh/.zi-update-snippet
    -side.zsh/.zi-compute-ice
    -
    -
    -
    -
    zi-parse-opts
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: +zi-parse-opts. [[[
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi
    -autoload.zsh/.zi-delete
    -
    -
    -
    -
    zi-prepare-home
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-prepare-home. [[[
    -Creates all directories needed by ZI, first checks if they already exist.
    -
    -
    -
    -
    -
    -

    Has 38 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-prepare-home
    +side.zsh/.zi-compute-ice
    +
    +
    +
    +
    zi-parse-opts
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: +zi-parse-opts. [[[
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +autoload.zsh/.zi-delete
    +
    +
    +
    +
    zi-prepare-home
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-prepare-home. [[[
    +Creates all directories needed by ZI, first checks if they already exist.
    +
    +
    +
    +
    +
    +

    Has 38 line(s). Calls functions:

    +
    +
    +
    +
    .zi-prepare-home
     |-- autoload.zsh/.zi-clear-completions
    -`-- install.zsh/.zi-compinit
    -
    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    zi-register-plugin
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-register-plugin. [[[
    +`-- install.zsh/.zi-compinit
    +
    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    zi-register-plugin
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-register-plugin. [[[
     Adds the plugin to ZI_REGISTERED_PLUGINS array and to the
     zsh_loaded_plugins array (managed according to the plugin standard:
    -https://z.digitalclouds.dev/community/zsh_plugin_standard).
    -
    -
    -
    -
    -
    -

    Has 20 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-register-plugin
    -`-- +zi-message
    -
    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-load
    -
    -
    -
    -
    zi-run
    -

    ~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-run. [[[
    +https://z.digitalclouds.dev/community/zsh_plugin_standard).
    +
    +
    +
    +
    +
    +

    Has 20 line(s). Calls functions:

    +
    +
    +
    +
    .zi-register-plugin
    +`-- +zi-message
    +
    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load
    +
    +
    +
    +
    zi-run
    +

    ~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run. [[[
     Run code inside plugin's folder
    -It uses the `correct' parameter from upper's scope zi().
    -
    -
    -
    -
    -
    -

    Has 24 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-run
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): eval, setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-run-task
    -

    ~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-run-task. [[[
    +It uses the `correct' parameter from upper's scope zi().
    +
    +
    +
    +
    +
    +

    Has 24 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): eval, setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-run-task
    +

    ~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-run-task. [[[
     A backend, worker function of .zi-scheduler. It obtains the tasks
     index and a few of its properties (like the type: plugin, snippet,
     service plugin, service snippet) and executes it first checking for
    -additional conditions (like non-numeric wait'' ice).
    -
    -
    -
    -
    -
    -$1 - the pass number, either 1st or 2nd pass
    +additional conditions (like non-numeric wait'' ice).
    +
    +
    +
    +
    +
    $1 - the pass number, either 1st or 2nd pass
     $2 - the time assigned to the task
     $3 - type: plugin, snippet, service plugin, service snippet
     $4 - task's index in the ZI[WAIT_ICE_...] fields
     $5 - mode: load or light
    -$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    -
    -
    -
    -
    -
    -

    Has 45 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-run-task
    -`-- autoload.zsh/.zi-unload
    -
    -
    -
    -

    Uses feature(s): eval, source, zle, zpty

    -
    -
    -

    Called by:

    -
    -
    -
    -
    @zi-scheduler
    -
    -
    -
    -
    zi-set-m-func
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION:.zi-set-m-func() [[[
    -Sets and withdraws the temporary, atclone/atpull time function `m`.
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Calls functions:

    -
    -
    -
    -
    -.zi-set-m-func
    -`-- +zi-message
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-snippet
    +$6 - the plugin-spec or snippet URL or alias name (from id-as'')
    +
    +
    +
    +
    +
    +

    Has 45 line(s). Calls functions:

    +
    +
    +
    +
    .zi-run-task
    +`-- autoload.zsh/.zi-unload
    +
    +
    +
    +

    Uses feature(s): eval, source, zle, zpty

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +
    +
    +
    +
    zi-set-m-func
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION:.zi-set-m-func() [[[
    +Sets and withdraws the temporary, atclone/atpull time function `m`.
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Calls functions:

    +
    +
    +
    +
    .zi-set-m-func
    +`-- +zi-message
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
     .zi-load
    -autoload.zsh/.zi-update-or-status
    -
    -
    -
    -
    zi-setup-params
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    FUNCTION: .zi-setup-params. [[[
    -
    -
    -
    -
    -
    -

    Has 3 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-snippet
    -.zi-load
    -
    -
    -
    -
    zi-submit-turbo
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-submit-turbo. [[[
    +autoload.zsh/.zi-update-or-status
    +
    +
    +
    +
    zi-setup-params
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-setup-params. [[[
    +
    +
    +
    +
    +
    +

    Has 3 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-snippet
    +.zi-load
    +
    +
    +
    +
    zi-submit-turbo
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-submit-turbo. [[[
     If `zi load`, `zi light` or `zi snippet`  will be
     preceded with `wait', `load', `unload' or `on-update-of`/`subscribe'
     ice-mods then the plugin or snipped is to be loaded in turbo-mode,
     and this function adds it to internal data structures, so that
    -@zi-scheduler can run (load, unload) this as a task.
    -
    -
    -
    -
    -
    -

    Has 16 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    zi
    -
    -
    -
    -
    zi-tmp-subst-off
    -

    ~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-tmp-subst-off. [[[
    +@zi-scheduler can run (load, unload) this as a task.
    +
    +
    +
    +
    +
    +

    Has 16 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
    +
    +
    +
    +
    zi-tmp-subst-off
    +

    ~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-off. [[[
     Turn off temporary substituting of functions completely for a given mode ("load", "light",
    -"light-b" (i.e. the `trackbinds' mode) or "compdef").
    -
    -
    -
    -
    -
    -

    Has 17 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt, unfunction

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    -additional.zsh/.zi-debug-stop
    -
    -
    -
    -
    zi-tmp-subst-on
    -

    ~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-tmp-subst-on. [[[
    +"light-b" (i.e. the `trackbinds' mode) or "compdef").
    +
    +
    +
    +
    +
    +

    Has 17 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt, unfunction

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-stop
    +
    +
    +
    +
    zi-tmp-subst-on
    +

    ~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-tmp-subst-on. [[[
     Turn on temporary substituting of functions of builtins and functions according to passed
     mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
    -to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    -
    -
    -
    -
    -
    -

    Has 29 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): source

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    -additional.zsh/.zi-debug-start
    -
    -
    -
    -
    zi-util-shands-path
    -

    ~~~~~~~~

    -
    -
    -
    -
    -
    -
    -FUNCTION: .zi-util-shands-path. [[[
    -Replaces parts of path with %HOME, etc.
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    .zi-any-to-pid
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    :zi-reload-and-run

    -
    -
    -
    -
    -
    -FUNCTION: :zi-reload-and-run. [[[
    +to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls.
    +
    +
    +
    +
    +
    +

    Has 29 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +additional.zsh/.zi-debug-start
    +
    +
    +
    +
    zi-util-shands-path
    +

    ~~~~~~~~

    +
    +
    +
    +
    +
    +
    FUNCTION: .zi-util-shands-path. [[[
    +Replaces parts of path with %HOME, etc.
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-any-to-pid
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    :zi-reload-and-run

    +
    +
    +
    +
    +
    FUNCTION: :zi-reload-and-run. [[[
     Marks given function ($3) for autoloading, and executes it triggering the load.
     $1 is the fpath dedicated  to the function, $2 are autoload options. This function replaces "autoload -X",
    -because using that on older Zsh versions causes problems with traps.
    -
    -
    -
    -
    -
    -So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    -
    -
    -
    -
    -
    -$1 - FPATH dedicated to function
    +because using that on older Zsh versions causes problems with traps.
    +
    +
    +
    +
    +
    So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X".
    +
    +
    +
    +
    +
    $1 - FPATH dedicated to function
     $2 - autoload options
    -$3 - function name (one that needs autoloading)
    -
    -
    -
    -
    -
    Author: Bart Schaefer
    -
    -
    -
    -
    -
    -

    Has 9 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, unfunction

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-alias

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-alias. [[[
    -Function defined to hijack plugin's calls to the `alias' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 30 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-alias
    -
    -
    -
    -

    Uses feature(s): alias, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-autoload

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-autoload. [[[
    -Function defined to hijack plugin's calls to the `autoload' builtin.
    -
    -
    -
    -
    -
    -The hijacking is not only to gather report data, but also to.
    -run custom `autoload' function, that doesn't need FPATH.
    -
    -
    -
    -
    -
    -

    Has 105 line(s). Calls functions:

    -
    -
    -
    -
    -:zi-tmp-subst-autoload
    +$3 - function name (one that needs autoloading)
    +
    +
    +
    +
    +
    Author: Bart Schaefer
    +
    +
    + +
    +
    +

    Has 9 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, unfunction

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-alias

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-alias. [[[
    +Function defined to hijack plugin's calls to the `alias' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 30 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-alias
    +
    +
    +
    +

    Uses feature(s): alias, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-autoload

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-autoload. [[[
    +Function defined to hijack plugin's calls to the `autoload' builtin.
    +
    +
    +
    +
    +
    The hijacking is not only to gather report data, but also to.
    +run custom `autoload' function, that doesn't need FPATH.
    +
    +
    +
    +
    +
    +

    Has 105 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
     |-- +zi-message
    -`-- is-at-least
    -
    -
    -
    -

    - Uses feature(s): autoload, eval, is-at-least, setopt, - zparseopts -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -.zi-load-plugin
    -@autoload
    -
    -
    -
    -
    -

    :zi-tmp-subst-bindkey

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-bindkey. [[[
    -Function defined to hijack plugin's calls to the `bindkey' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 106 line(s). Calls functions:

    -
    -
    -
    -
    -:zi-tmp-subst-bindkey
    -`-- is-at-least
    -
    -
    -
    -

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-compdef

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-compdef. [[[
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): autoload, eval, is-at-least, setopt, zparseopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    .zi-load-plugin
    +@autoload
    +
    +
    +
    +
    +

    :zi-tmp-subst-bindkey

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-bindkey. [[[
    +Function defined to hijack plugin's calls to the `bindkey' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 106 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-bindkey
    +`-- is-at-least
    +
    +
    +
    +

    Uses feature(s): bindkey, is-at-least, setopt, zparseopts

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-compdef

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-compdef. [[[
     Function defined to hijack plugin's calls to the `compdef' function.
     The hijacking is not only for reporting, but also to save compdef
    -calls so that `compinit' can be called after loading plugins.
    -
    -
    -
    -
    -
    -

    Has 5 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-compdef
    -
    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zle

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-zle. [[[.
    -Function defined to hijack plugin's calls to the `zle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 33 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zle
    -
    -
    -
    -

    Uses feature(s): setopt, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    :zi-tmp-subst-zstyle

    -
    -
    -
    -
    -
    -FUNCTION: :zi-tmp-subst-zstyle. [[[
    -Function defined to hijack plugin's calls to the `zstyle' builtin.
    -
    -
    -
    -
    -
    The hijacking is to gather report data (which is used in unload).
    -
    -
    -
    -
    -
    -

    Has 19 line(s). Calls functions:

    -
    -
    -
    -
    :zi-tmp-subst-zstyle
    -
    -
    -
    -

    Uses feature(s): setopt, zparseopts, zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @autoload

    -
    -
    -
    -
    -
    -]]]
    -FUNCTION: @autoload. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -@autoload
    +calls so that `compinit' can be called after loading plugins.
    +
    +
    + +
    +
    +

    Has 5 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-compdef
    +
    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zle. [[[.
    +Function defined to hijack plugin's calls to the `zle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 33 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zle
    +
    +
    +
    +

    Uses feature(s): setopt, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    :zi-tmp-subst-zstyle

    +
    +
    +
    +
    +
    FUNCTION: :zi-tmp-subst-zstyle. [[[
    +Function defined to hijack plugin's calls to the `zstyle' builtin.
    +
    +
    +
    +
    +
    The hijacking is to gather report data (which is used in unload).
    +
    +
    +
    +
    +
    +

    Has 19 line(s). Calls functions:

    +
    +
    +
    +
    :zi-tmp-subst-zstyle
    +
    +
    +
    +

    Uses feature(s): setopt, zparseopts, zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @autoload

    +
    +
    +
    +
    +
    ]]]
    +FUNCTION: @autoload. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    @autoload
     `-- :zi-tmp-subst-autoload
         |-- +zi-message
    -    `-- is-at-least
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-annex

    -
    -
    -
    -
    -
    -FUNCTION: @zi-register-annex. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 8 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-register-hook

    -
    -
    -
    -
    -
    -FUNCTION: @zi-register-hook. [[[
    -Registers the z-annex inside ZI – i.e. an ZI extension
    -
    -
    -
    -
    -
    -

    Has 4 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    Script-Body
    -
    -
    -
    -
    -

    @zi-scheduler

    -
    -
    -
    -
    -
    -FUNCTION: @zi-scheduler. [[[
    +    `-- is-at-least
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-annex

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-annex. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 8 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-register-hook

    +
    +
    +
    +
    +
    FUNCTION: @zi-register-hook. [[[
    +Registers the z-annex inside ZI – i.e. an ZI extension
    +
    +
    +
    +
    +
    +

    Has 4 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    Script-Body
    +
    +
    +
    +
    +

    @zi-scheduler

    +
    +
    +
    +
    +
    FUNCTION: @zi-scheduler. [[[
     Searches for timeout tasks, executes them. There's an array of tasks
     waiting for execution, this scheduler manages them, detects which ones
     should be run at current moment, decides to remove (or not) them from
    -the array after execution.
    -
    -
    -
    -
    -
    -$1 - if "following", then it is non-first (second and more)
    +the array after execution.
    +
    +
    +
    +
    +
    $1 - if "following", then it is non-first (second and more)
     invocation of the scheduler; this results in chain of `sched'
    -invocations that results in repetitive @zi-scheduler activity.
    -
    -
    -
    -
    -
    -if "burst", then all tasks are marked timeout and executed one
    +invocations that results in repetitive @zi-scheduler activity.
    +
    +
    +
    +
    +
    if "burst", then all tasks are marked timeout and executed one
     by one; this is handy if e.g. a docker image starts up and
     needs to install all turbo-mode plugins without any hesitation
     (delay), i.e. "burst" allows to run package installations from
    -script, not from prompt.
    -
    -
    -
    -
    -
    -

    Has 72 line(s). Is a precmd hook. Calls functions:

    -
    -
    -
    -
    -@zi-scheduler
    -`-- add-zsh-hook
    -
    -
    -
    -

    Uses feature(s): add-zsh-hook, sched, zle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zi-substitute

    -
    -
    -
    -
    -
    FUNCTION: @zi-substitute. [[[
    -
    -
    -
    -
    -
    -

    Has 36 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): setopt

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -autoload.zsh/.zi-at-eval
    +script, not from prompt.
    +
    +
    + +
    +
    +

    Has 72 line(s). Is a precmd hook. Calls functions:

    +
    +
    +
    +
    @zi-scheduler
    +`-- add-zsh-hook
    +
    +
    +
    +

    Uses feature(s): add-zsh-hook, sched, zle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zi-substitute

    +
    +
    +
    +
    +
    FUNCTION: @zi-substitute. [[[
    +
    +
    +
    +
    +
    +

    Has 36 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): setopt

    +
    +
    +

    Called by:

    +
    +
    +
    +
    autoload.zsh/.zi-at-eval
     install.zsh/.zi-at-eval
     install.zsh/.zi-get-package
     install.zsh/∞zi-atclone-hook
    @@ -4187,117 +2396,107 @@ 

    @zi-substitute

    install.zsh/∞zi-make-e-hook install.zsh/∞zi-make-ee-hook install.zsh/∞zi-make-hook -install.zsh/∞zi-mv-hook
    -
    -
    -
    -

    Environment variables used: ZPFX

    -
    -
    -
    -

    @zsh-plugin-run-on-unload

    -
    -
    -
    -
    -
    -FUNCTION: @zsh-plugin-run-on-update. [[[
    +install.zsh/∞zi-mv-hook
    +
    +
    +
    +

    Environment variables used: ZPFX

    +
    +
    +
    +

    @zsh-plugin-run-on-unload

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
     The Plugin Standard required mechanism, see:
    -https://z.digitalclouds.dev/community/zsh_plugin_standard
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-unload
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    @zsh-plugin-run-on-update

    -
    -
    -
    -
    -
    -FUNCTION: @zsh-plugin-run-on-update. [[[
    -The Plugin Standard required mechanism
    -
    -
    -
    -
    -
    -

    Has 2 line(s). Calls functions:

    -
    -
    -
    -
    @zsh-plugin-run-on-update
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    pmodload

    -
    -
    -
    -
    -
    -FUNCTION: pmodload. [[[
    -Compatibility with Prezto. Calls can be recursive.
    -
    -
    -
    -
    -
    -

    Has 15 line(s). Calls functions:

    -
    -
    -
    -
    pmodload
    -
    -
    -
    -

    Uses feature(s): zstyle

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zi

    -
    -
    -
    -
    -
    -FUNCTION: zi. [[[
    -Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    -
    -
    -
    -
    -
    -

    Has 550 line(s). Calls functions:

    -
    -
    -
    -
    -zi
    +https://z.digitalclouds.dev/community/zsh_plugin_standard
    +
    +
    + +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-unload
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    @zsh-plugin-run-on-update

    +
    +
    +
    +
    +
    FUNCTION: @zsh-plugin-run-on-update. [[[
    +The Plugin Standard required mechanism
    +
    +
    +
    +
    +
    +

    Has 2 line(s). Calls functions:

    +
    +
    +
    +
    @zsh-plugin-run-on-update
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    pmodload

    +
    +
    +
    +
    +
    FUNCTION: pmodload. [[[
    +Compatibility with Prezto. Calls can be recursive.
    +
    +
    +
    +
    +
    +

    Has 15 line(s). Calls functions:

    +
    +
    +
    +
    pmodload
    +
    +
    +
    +

    Uses feature(s): zstyle

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zi

    +
    +
    +
    +
    +
    FUNCTION: zi. [[[
    +Main function directly exposed to user, obtains subcommand and its arguments, has completion.
    +
    +
    +
    +
    +
    +

    Has 550 line(s). Calls functions:

    +
    +
    +
    +
    zi
     |-- +zi-message
     |-- +zi-prehelp-usage-message
     |   `-- +zi-message
    @@ -4337,50 +2536,42 @@ 

    zi

    |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion -`-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    - Uses feature(s): autoload, compinit, eval, setopt, source -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi-turbo
    -❮▼❯
    -
    -
    -
    -
    -

    zi-turbo

    -
    -
    -
    -
    -
    -FUNCTION: zi-turbo. [[[
    +`-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, eval, setopt, source

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi-turbo
    +❮▼❯
    +
    +
    +
    +
    +

    zi-turbo

    +
    +
    +
    +
    +
    FUNCTION: zi-turbo. [[[
     With zi-turbo first argument is a wait time and suffix, i.e. "0a".
     Anything that doesn't match will be passed as if it were an ice mod.
    -Default ices depth'3' and lucid, allowed values [0-9][a-d].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -zi-turbo
    +Default ices depth'3' and lucid, allowed values [0-9][a-d].
    +
    +
    + +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zi-turbo
     `-- zi
         |-- +zi-message
         |-- +zi-prehelp-usage-message
    @@ -4421,240 +2612,221 @@ 

    zi-turbo

    |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdclear

    -
    -
    -
    -
    -
    -]]]
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdclear

    +
    +
    +
    +
    +
    ]]]
     FUNCTION: zicdclear. [[[
    -A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicdreplay

    -
    -
    -
    -
    -
    -FUNCTION: zicdreplay. [[[
    +A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicdreplay

    +
    +
    +
    +
    +
    FUNCTION: zicdreplay. [[[
     A function that can be invoked from within `atinit', `atload', etc. ice-mod.
    -It works like `zi cdreplay', which cannot be invoked from such hook ices.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zicdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompdef

    -
    -
    -
    -
    -
    -]]]
    +It works like `zi cdreplay', which cannot be invoked from such hook ices.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompdef

    +
    +
    +
    +
    +
    ]]]
     FUNCTION: zicompdef. [[[
     Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode).
    -An utility function of an undefined use case.
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit

    -
    -
    -
    -
    -
    -]]]
    +An utility function of an undefined use case.
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit

    +
    +
    +
    +
    +
    ]]]
     FUNCTION: zicompinit. [[[
     A function that can be invoked from within `atinit', `atload', etc. ice-mod.
     It runs `autoload compinit; compinit' and respects
    -ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -zicompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zicompinit_fast

    -
    -
    -
    -
    -
    -]]]
    +ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS].
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zicompinit_fast

    +
    +
    +
    +
    +
    ]]]
     FUNCTION: zicompinit_fast. [[[
     Checking the cached .zcompdump file to see if it must be regenerated adds a noticable delay to zsh startup.
     This restricts checking it once a day, determines when to regenerate, as compinit doesn't always need to
     modify the compdump and compiles mapped to share (total mem reduction) run in background in multiple shells.
    -A function that can be invoked from within `atinit', `atload'
    -
    -
    -
    -
    -
    -

    Has 13 line(s). Calls functions:

    -
    -
    -
    -
    -zicompinit_fast
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit, zcompile

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdclear

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdclear
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcdreplay

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    zpcdreplay
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompdef

    -
    -

    Has 1 line(s). Doesn’t call other functions.

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    zpcompinit

    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -zpcompinit
    -`-- compinit
    -
    -
    -
    -

    Uses feature(s): autoload, compinit

    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -

    ❮▼❯ ~

    -
    -
    -
    -
    -
    -
    -]]]
    -Compatibility functions. [[[
    -
    -
    -
    -
    -
    -

    Has 1 line(s). Calls functions:

    -
    -
    -
    -
    -❮▼❯
    +A function that can be invoked from within `atinit', `atload'
    +
    +
    + +
    +
    +

    Has 13 line(s). Calls functions:

    +
    +
    +
    +
    zicompinit_fast
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit, zcompile

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdclear

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdclear
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcdreplay

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcdreplay
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompdef

    +
    +

    Has 1 line(s). Doesn’t call other functions.

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    zpcompinit

    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    zpcompinit
    +`-- compinit
    +
    +
    +
    +

    Uses feature(s): autoload, compinit

    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +

    ❮▼❯ +~

    +
    +
    +
    +
    +
    +
    ]]]
    +Compatibility functions. [[[
    +
    +
    +
    +
    +
    +

    Has 1 line(s). Calls functions:

    +
    +
    +
    +
    ❮▼❯
     `-- zi
         |-- +zi-message
         |-- +zi-prehelp-usage-message
    @@ -4695,157 +2867,137 @@ 

    zpcompinit

    |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions
    -
    -
    -
    -

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    -
    -
    -
    -

    add-zsh-hook

    -
    -
    -
    -
    -
    -Add to HOOK the given FUNCTION.
    +    `-- install.zsh/.zi-install-completions
    +
    +
    +
    +

    Not called by script or any function (may be e.g. a hook, a Zle widget, etc.).

    +
    +
    +
    +

    add-zsh-hook

    +
    +
    +
    +
    +
    Add to HOOK the given FUNCTION.
     HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
    -zshexit, zsh_directory_name (the _functions subscript is not required).
    -
    -
    -
    -
    -
    -With -d, remove the function from the hook instead; delete the hook
    -variable if it is empty.
    -
    -
    -
    -
    -
    --D behaves like -d, but pattern characters are active in the
    -function name, so any matching function will be deleted from the hook.
    -
    -
    -
    -
    -
    -

    Has 93 line(s). Doesn’t call other functions.

    -
    -
    -

    Uses feature(s): autoload, getopts

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -@zi-scheduler
    -Script-Body
    -
    -
    -
    -
    -

    compinit

    -
    -
    -
    -
    -
    -Initialisation for new style completion. This mainly contains some helper
    +zshexit, zsh_directory_name (the _functions subscript is not required).
    +
    +
    +
    +
    +
    With -d, remove the function from the hook instead; delete the hook
    +variable if it is empty.
    +
    +
    +
    +
    +
    -D behaves like -d, but pattern characters are active in the
    +function name, so any matching function will be deleted from the hook.
    +
    +
    +
    +
    +
    +

    Has 93 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, getopts

    +
    +
    +

    Called by:

    +
    +
    +
    +
    @zi-scheduler
    +Script-Body
    +
    +
    +
    +
    +

    compinit

    +
    +
    +
    +
    +
    Initialisation for new style completion. This mainly contains some helper
     functions and setup. Everything else is split into different files that
     will automatically be made autoloaded (see the end of this file).  The
     names of the files that will be considered for autoloading are those that
    -begin with an underscores (like `_condition).
    -
    -
    -
    -
    -
    -The first line of each of these files is read and must indicate what
    -should be done with its contents:
    -
    -
    -
    -
    -
    `#compdef <names ...>'
    -
    -
    -
    -
    -
    -

    Has 549 line(s). Doesn’t call other functions.

    -
    -
    -

    - Uses feature(s): autoload, bindkey, compdef, compdump, - eval, read, setopt, unfunction, zle, zstyle -

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -zi
    +begin with an underscores (like `_condition).
    +
    +
    +
    +
    +
    The first line of each of these files is read and must indicate what
    +should be done with its contents:
    +
    +
    +
    +
    +
    `#compdef <names ...>'
    +
    +
    + +
    +
    +

    Has 549 line(s). Doesn’t call other functions.

    +
    +
    +

    Uses feature(s): autoload, bindkey, compdef, compdump, eval, read, setopt, unfunction, zle, zstyle

    +
    +
    +

    Called by:

    +
    +
    +
    +
    zi
     zicompinit
     zicompinit_fast
    -zpcompinit
    -
    -
    -
    -
    -

    is-at-least

    -
    -
    -
    -
    -
    -Test whether $ZSH_VERSION (or some value of your choice, if a second argument
    +zpcompinit
    +
    +
    +
    +
    +

    is-at-least

    +
    +
    +
    +
    +
    Test whether $ZSH_VERSION (or some value of your choice, if a second argument
     is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
     it'll accept any dot/dash-separated string of numbers as its second argument
     and compare it to the dot/dash-separated first argument. Leading non-number
     parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
     when the comparison is done; only the numbers matter. Any left-out segments
     in the first argument that are present in the version string compared are
    -considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    -
    -
    -
    -
    -
    -

    Has 56 line(s). Doesn’t call other functions.

    -
    -
    -

    Called by:

    -
    -
    -
    -
    -:zi-tmp-subst-autoload
    +considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
    +
    +
    + +
    +
    +

    Has 56 line(s). Doesn’t call other functions.

    +
    +
    +

    Called by:

    +
    +
    +
    +
    :zi-tmp-subst-autoload
     :zi-tmp-subst-bindkey
    -Script-Body
    -
    -
    -
    -
    -
    -
    - - - +Script-Body
    +
    +
    +
    +
    +
    + + + + \ No newline at end of file From f9752b387fa96091d2a63f10a5bb114366aa6c62 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Thu, 13 Oct 2022 05:49:22 +0000 Subject: [PATCH 139/470] deploy: 2b62e67f7e700cbb8f5a1595b198a1b461cb1551 --- code/html/additional.zsh.html | 2 +- code/html/autoload.zsh.html | 2 +- code/html/install.zsh.html | 2 +- code/html/side.zsh.html | 2 +- code/html/zi.zsh.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index 8dd2d0f..c089a58 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -716,7 +716,7 @@

    :zi-tmp-subst-source

    diff --git a/code/html/autoload.zsh.html b/code/html/autoload.zsh.html index d662b6a..5935939 100644 --- a/code/html/autoload.zsh.html +++ b/code/html/autoload.zsh.html @@ -3083,7 +3083,7 @@

    is-at-least

    diff --git a/code/html/install.zsh.html b/code/html/install.zsh.html index 1fcb2ac..b12c92b 100644 --- a/code/html/install.zsh.html +++ b/code/html/install.zsh.html @@ -1623,7 +1623,7 @@

    compinit

    diff --git a/code/html/side.zsh.html b/code/html/side.zsh.html index 68725cf..a08eabb 100644 --- a/code/html/side.zsh.html +++ b/code/html/side.zsh.html @@ -901,7 +901,7 @@

    zmv

    diff --git a/code/html/zi.zsh.html b/code/html/zi.zsh.html index 8740a7b..e243362 100644 --- a/code/html/zi.zsh.html +++ b/code/html/zi.zsh.html @@ -2996,7 +2996,7 @@

    is-at-least

    From 3a8b12b84402714938a11aac512974f9a820e7c2 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Mon, 17 Oct 2022 07:25:19 +0000 Subject: [PATCH 140/470] deploy: 2b62e67f7e700cbb8f5a1595b198a1b461cb1551 From ab6f7b449ddad393876e10e070cfe546d80f88b1 Mon Sep 17 00:00:00 2001 From: "digital-teams[bot]" Date: Mon, 17 Oct 2022 08:32:06 +0000 Subject: [PATCH 141/470] deploy: 612a71ccdecc5f48687487775e11fc4c0b822e0a --- code/html/additional.zsh.html | 8 ++++---- code/html/autoload.zsh.html | 8 ++++---- code/html/install.zsh.html | 8 ++++---- code/html/side.zsh.html | 8 ++++---- code/html/zi.zsh.html | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/code/html/additional.zsh.html b/code/html/additional.zsh.html index c089a58..7472049 100644 --- a/code/html/additional.zsh.html +++ b/code/html/additional.zsh.html @@ -4,7 +4,7 @@ - + additional.zsh(1)

    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�PC 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 Z(YCVr?fr}%IB2u6z`TDiC?y2*{{YmPf{g$G diff --git a/docs/code/pdf/side.zsh.pdf b/docs/code/pdf/side.zsh.pdf deleted file mode 100644 index 896a6eea0e18f171c94ebd0892d3d44a52f64107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109159 zcmeEP2S8N2(zak>!QT5?v9W9~hy_#>6&t81qQbH?Dbf^sZ>ZR?_b&DZHo&gfKx|k6 zk)mQjL`4z!C+8$*cV)%(K9=|HfA6~wAvxzHlSwj}%zT-&9@xXun8y*aS{K6qSUfhD z?c?OZGBabF*t!RJD%frP-JKPjN&apl+ww-XYsWI_?x%1J@bP1}HTRdhyF2^HQ36Wo z$aZq{S2(kMyx9Z&94C0gs{{RfoCDvk^v-u*5 z5*wzE%ZKKE0l$3K-N!os2!!rL zykMCOR`~k_`jOs%p(eLc1hDN*U?{@aRRjgFO{~12$1U*h?)bMA#Xn^)iB7f|!E>{fhWxqxi>P?#)tp+TBL&sZIC(ES7~Wi_aHwWL!R5B9U;o zA|cz>nPp5EAk*E^Drw9-#ggl|MP^610xm=D^DyG}a1B!WEj!1K> zxqN3nSIpyc5f8*7v0N;t{uW61VwnW!)&Y4?4M$RxBlcz@K^Hb3xW$u+*k&RbaL7f( z6$ykgc;LXc?Nh=%Bj!suB28?vHxmlQE@FX1Bz6X36%wJC2R|~%Qy^|hM38cUXLPPW z%tL&W$l#d-y)PC?_$n=-UK5Fhz*q?|RS1KPE9O$ej;e+)(M9V-QUOO;l*?u?=0(6+ zfk-Hn30;H=#B?nOy)O)VnV2hunW6d%jeijzjdhV&%mFd##S#ex94?dggfvJqp^Qh~ z5D8&cqUS=6P=vBc8j2CI%%Gdo+1Y) z;d2;N0{9GP&=XV0!-bI~RhOJaCq-h46i+5eD8)tLrmD4D&T?b90FMxZ=pR~iNJQ)j z|8j`#SvQsqYmiprQzWB?6pSPxj0sA9!=PgGc$6fQJ0i&~mhoX0!VE>f1u!S&VizR2 z#9}IkClThwJzZ2U0qNMQsB_*_unLCk|30R@Z?ZgSsYEz$oFuf`Ak=G32U5p#Ha9!0E~q=c6;9!D(Z z$-pL1igk)OTq$&Xsn#h);;nS+6!SPTzC=>0?G%eRu#FU#Zk3BB(E5htJ`1Ww5U#MZy9@y@D$xNjZzA ziljYRu%i{BttQEVZ6r|56iAYEh44A`m=D#WM#1MejVUIjkrt`*pxFJU`m6u4O9o~I z?Khv$-Dt4!#4xt8?xnK%{Mm*ga0I>KkGG?sDmbD4N>pjYgmb}=PK-Y)go{Ao0mT{Y zQ?LsJ6$n&DFaQaQ?4Ch$p_L&%+C9TJe7+0XLxTo`v>FAUk8~m^3GKC!E`)R+_=UE* zNVB1KWYT&nX=7W!&E^X@V&W1~Z#IavqRoaKAsGH?13zr)kedXyeo7{R z5fbef~M%6*Cf z4wjU#z*SM!5?GnhYv9^8u^Zszp^(!h;JyXB3VsSNDBa(vXmw_zs#zu$0Op{GFp;~! z#?iS$f1dy!8-<^{i?M}|CmJ$=P5~6C!4`lIw(u9w2VeG3_{;s=$01M%SWIcM-TnLn zy1P00u?2jVNk2!NfbAK}WSF~ifE)PqDVzh##MWnsx4Rr+G{C%v$;G$@)Hp;a!D!eG z9|1WM5v&>#ws)YXrvpKdP?!+)Hc?;^>Pjp+eYgN4o@iQ{WMlM}s!nj`jv@3M46x!z(mLMmza9 zPlQ~mGg0nDZ=Z4g?&v!T(g0bLyvDZ!CZUp5Q65x5TDH9?=;Y`Al<_1^Qogc3wdzWG zXaO+hw_Pd1Xd7i$iV%c^8ke{$srD9a54f%XobXd$61a+bw~N8k3RWBSZdXNepaBUu zo}Y#?-$mr)B<?x?aW`UtK&*zl@m0mvP{Ft_ToYN{>HI!`^~;=y4AA;7hr{ zLz&X!FGU+wv^B@iCE)HAOOzge39NfUv8u;k0tO&>1AF{&ig^5S5~{~;dYnP43QS=n zN!3L>{+JZv@mErciy{r7panQVZ%uwiBLU-o<^RXu!9ImXNZ|B8iC;*)Q{mWOLU+*~ zZwWwLz8t9XX_E=B0{zaa3Se} zIPhzTH28VNXyc+Sal}xfW?>x8PH!)cX?i*v9b6N8mSRnUn6Ztz-!8ZZ43IIf;NF6jKdSE3OWGfp*OIg zz$qf=a8fDga0bmWrZAGE>LP*;lR^ZYl2R<_NJA(=hZDuxVE*M0)w9}LmuU$hM$pva z#Mf_eGNk}W5rZX9lNbZ%Ir2?Yh%2!73N?r_0rG<*Cp*SwQE~#=pFyaBK}9Ek4L~1g z7Hry(OX0MDIOM(u*cieKAcHm~g{eFmCs3jy4i5zZAN=q|S2C@*tU{tr77H;?%He4M z!DvGqLRi3iVEoqw*SLV-)G&dxAWUs)=^WK1k^)LlgD#*2p)`Di1~>jRfnZuuAU?`H zqXKiJfsi`jH!S#oEB{NQ6ks{XUj!u69wVXH3CM;#U62WLiuac$6E#|4L{Sh)0Ceku zI3eH=|I%baemEE~VEzLDxyAvZ8*cJpzx9_U84wJXbBUxhi3R(p>@Q6;C9%{XK&E>H z7DJv=DNVx_TTm5FLi>7m^aWGMs+>d8B`?z3L{;U)Wz%UD}lRrwA=+ zD-7P3gDxPGYDC`>@U89-k6=>Z91A%00o09vz{u&PdvL9wH0uOE2Wnoa)``KjrCBEd z*OpYB$S$VzW&e?Ho3E{JTSy)B`h{m(dy$~ovrV1xCQc99MTL%p|BVh`Q*Ik@gZ&4m zuT^~8YA$Rw=QcwB7w6CBvxT%nj&^3N_?3|Nl&~24m3Ukk_?qDz=2*PejwKrWrF4|g zFkhvkgg|m}4hFR;-8D3XSLs-y)5wkqD=ZjHNg7abl)aUdhs>hz21fYe6hXb=q!RUp zGiaO}EM0VABuUjpU~i0LiGIpZN>FdOA!_aZ1ILoucMJgTAIPtga4gZ#s$V&lKp{{& zJFSNM)wopa5aSC-G>w*7@QF|sLCQXhlx!{>3ljh+j5_cH`&k}3(FCA2Xbm9vz%UBX zHX$D&c;Rq5{EK`l=xh^cP2i@&2wm7%!ofpoFU$o{n+%9G^aAlEw29SyXUeu{us*x1QposD)Y#wSbepaH&CngRMmYVFkXbS`u zFyIq_rUCH?y#h9I^e;RCE>p+T5Et=DG3XQMRkV)=oY zL&6j4TX;(Wr6N=%)gQE;4gH9=VF;Iv`VacMgg3jm`4EIdqvaT|)l@?ft`eF8B%t45 zxq!c1z~unL?kBR*kOLdMF8YWo(`ZFjgMGq0f$Cu!Kn)ilkRI0}Cm3d8u|fnsQ{XZh zXmH#RjeBSS;&+LH!Nn+~0~KC@UK4Q|t!en=3(g^HoD`0+QQ;NvnkT{Q5_yh*m^_s= z5%vNigfdi?Cj@LbIyeKGf{+bk2c?)bkxr_tiF5{D1W92yN!LZzL^z*MFUR;Pp_HtN zxFPh~h7-m5Al2SvR>6NDhqOh{(lb;Hr-wCpCMd@`S_G7W2K_C7W3IHwLBUaA*?=iQ zi7@z$20SfkvDgwhLgW?~bi9OKe$bg*5Iiu)Vc~$qpd`;phy_A4G?g7sr&Xs0okNB` zINW4BghRqp1I{;7LmQ`s;J%lroRNUTgWy+Gof^<8^ah?9I7OxgPAaDc&Y(v-Qy587 zbum+eCWRc5fYpnpl$jcIL-2s76WUA-`pthbhyHMCfKg79w@V59hZq2SAuL|7Qm9T7 z<tVIxbWXk07;pi9qr6HfmbA~rSTZ4BI z6bQe`%ybkI2_5ia6iXef$s#b?Y4Va$XX>e{(O)2bAe53OMNa@?N~Q5kgOG|rh(})| zT?rV2Y>!B^;ovN&X;e*Mbk#-U#BjP(gGG{7xPi|Qm<9C}kP5`X;6f1$oGJAiG$4VC zZUz&8cr@^~2tbCKiUuSi%@gbSz)2Jr1)^p_1CRzv9eqIy2)MXBtlVKhUa3Fv?%G!Onl zfgR9!Avx+hG=P&N_7&p_|M|4P>TOfUB$IQpc?hX+hR z%d$?GKnAXoy;PI2LeJ#tsKIbZN|PTD8VpLjjv9;xHi&*`n##rt0+_hKu{s2RK;c5D zWdnL1-W9q0^zNUqLaU=z*cb$BKXuXy0e9s`#LD7Zy zI;ucT1l3XlYC?n_c!K~n=@bLhq?1rRMpvSEKJYfpQiKAf3L{CXE&|lVq!6H{l2Tk0 zX$S?>#ED`xK^mxu--OXXW6*K>pTr?;2R@C?gKfO#rGwzi)hupAizv}G3=;xQ5>4X! zk1*x1OQY5+H3zH?h(#xBG>P8gi6!c$4!J0RP;eR{7-&5}8n4bmc_FB`rhubnBDz!1 z_8A=*2BiUXD`bDA!dM|QbBT5k4@EwOv$g_Nf++tF2^0$?fO1FaF(r?L;eiN*pe*Xu zQ@$utJyNDhw#5>(e}~h8ziu)$Es#wV)VLC@8#)!Dy9m^))@^h7)L}h{l~qi0bvDX* zU{C#TAJ-57G+3x|E)Azu);OF)j$gnzG;k3zS^yup3sugg@etreMGN48^+#O`fVfL4 zS^!QFEdVE#S^&P){Uiryf@ z*1DvvFPJa^NMlV{yWe&rtcbrsGpg_7bkWs(*tvlm`Z=hP7F_)e@wy-u);*1S7IJJ- zC{WbJ8b&2nr@_`jow@<8GbYs%B@>HV2)Qf%EeenJy~1=U`MAlL4EQAgV_In<@OY(J zCr03vYMmH?SDJMa1Rf7<_~9Z022e>(t^P@@(qfLK(*7TaaK-^2zS8kUGCJEtEy4a81PX#lw^k*B3)6aea}NsJFdXWk>y0#`{G|`iHSeTe}BsE#|>4LZ~57 z7N{}B!l2Y;r4AubDB7Hc2v~4?2bfjSvH|NN&d`B5)i4Ey&M;OsKGUQn9I# zLjgJYATSv+uL6Crdxo}xkA(_}P0=c(-4_si0DSL^cMIM_Rt6e@M3;=5PJa@>P>V=k zWU>+aGw7?dfI-9YKR_6lRP-$E4(BBPXOh>BvuVajP>|eypg3D!!VvKok zjgA_|_&*IRLTh3Y*xQ2-R>R88gp`934O6FRtoc&&a!4cqEEFrf95}6F-@rN8zCm4s zC05!u;Ql4_J>%t&z*-K+BhdF?e1Kc4kjY!3>g518E_ws|3~-9rH*gX@$3_X9ff-5) z!%4a>V&A}|5c`IbQc@J%RNB6QTUG3mul6S6<@g73NZZw(-WbD*qKu?S9TT8$+CdvM z>Ykk<>t~5>#xN1+tRc~wRfzaSU>YY(8g=Fsmc^34mIV)4WMkuL5()n$%e_REAXUpf zT-yLJ1(gdMKn3Dz9|uR9b9FRJKm*}`(os}OmTFWU7&TJ9QVasx6{S_gAkM*JO$@OM zxqPJ<1Vt9T&xk=0fJDSXr5J?kO~7=oDh2`0h~B_r5T}S3#7U(X#2GZln8HYss*8w0 zObQW$N=mU9Bn_dX^3d(nLJZ>17%}({mj5x4xT|%*MTl3UadAd?G)=ZtrlV1y00_0Bdk%`>2!f_*^9Ka#x|2cf z0%Z5kN1~F4y69lM8i1_@E=ef%CMLC@MPS~Lsx0$GuF%su^quxgJ_50Wk)Tu$iI-}f z*hF2bbz&2BY1T%=!Ol~kR-wZ_9GL!eH=1YzvVOb+OT#2(M&k+UY? zSmwg1L~<4dE;gh~0kx90zym}X?ysWv=OhPidJ;gyZe^)pJg43vCsIh780JBbC4~@s zI+KMDqJU?BDwHH~t;9ah5Jn92LP9xHAYlM)c4t~ztfKnUyZ`bItlB~Vh~lw?c&Duj zOB;}du*;Fjq*zX?=v>7b?u)E0KQAddG~~lwmY~OKqL?ykgQ^M#Es?>UGP`R)(Sst3 z4D!kwHxTxo@fyPu)z+bMz`##kkpUY+5DyBG3y>fa@&Cy5t$q!*N^ERAq9JY~H6xWH zn&hZT1CmGPI@~!0=Zcil05G3aDU37_Kp-wLS5+Da;9w|R+LTkSzeXAzXu_I`)BA)H`JClQc8-NruYUCs}x~lR|Nl)Jn!aLl_zR4CQ3(Gfkt% zK9kg9>@)BF%R6f9GyM1qV;`MJmuMLKaQ^52^A%SRmjhHv&Fxm6>r`1E)q)-9`i?8D z&MYzd56lAU)RF+gz~iZ}tvW<+t-;>Qfve_Jwyg{lhjHlrmk%w0<&aSo=tDV74hTAO zaEZyo)@-;19;*tp(~b|gdZH@e9B|r6#k9C2IUrI&@`D8%u4{#pU~E2|38db^Hf<(N ztlCTlkb;fTOcv%aT$4@}N|Lx%V%ug2Bi3yt<)lEu0NQ!Sw6s`p`O~{FQ2yl|Tv|$4 z`6uF%_P+6fqZ(BO#s{dXMxz5n(w{d8TB{J+n4K_HaDT5xA^r=eAn{kCL+Ws|DLTdi z|AMLm>JAD(s5r!)lO_U%$xsRuCJQr>6pE9iRw7Us!iYdo zQjP_RvT2mVj7e%CP?&fBfXZkVegE-k1s#Y!a1TJ-9NNEvFbS|RLq0VZ7Jw3H2uYFUqZkiHk&f4a zM*|cn9-pUjpQi4k-j-&S*q>3FRbqEWDOO3m8Kqezc4m}jmDrb2id6zSAC4&k7O?at z3BnZd;NHj5tWpL$WeHRXhr+pJ$Eg#$|PHwqAf>?#UAfcQ(&eT0q=z$L%10ms6HPJ_LGfGF@A*a;*710ITN9Z;=`;d7I|rh;Atx(|oGSzWt$;bxNT-OyNK7Y{?joE)iz}uu zlBDV)t|CkdaTGC>GIEh_8kU-LqF5t^+MEAm4ryzOzylm^p4JqKTbEu?F`zbKP%)i^ z(<;Ll=ip(CZUp5Cl*3qzlv07pFoxNnc8LKTtoi8@0~kOmml)6~W*E~+m0?V0;BiX| z!%4a>GK?`PWEeA)l3|P+LJv-y&|(2V>i^FjnqoK?1orzP*j;G$ z-^8D()XynzrWiuwQ&U;n?x!u`Vz?y`oR%~n)OM+iE0d2n^4~n0C<5ODy?E2^IGk4T zJK!AbQ$WFf>BXD&F+iMcym;d@oFIVM+~|AiY@&z@fEFrDJ#k@*;4~DxK@R26DdKIw z58-p{8o(JeLz%)zlB$dN889it%b=u`6h$|cc0}S<6)W}B-UO-lkL8fI!=AR#!vS}V zi}(MO8vzYZO}AbABH*F!&n{x#0Tx7)===p)n!Tq8GO4{~NqgU}2z-T_?jQJ{bnOb^ z(h6|&Xb`^trBk441gV|^HKUx}x(H@Si%B6w_W~?#QBIVmj~hZb1FlDT_!Fm9))}0G z*9{6qPhE#XuOpy3pzj&qHbC&z))@h4$Li~h0JfRRbq1%%I)jtSbp~h99AgS2NvbZg z&R|l=I-{f%uQQ|}ls^_Hv{+~Go6I_c)Bhw6{nbR7jmsYj-n615c3>j}bzYuZR_;VhScT8c=6B6 zI=MtUm#&_VPGg|6Sxlfe-D3z!wN4BoD5*MsdvpM7+#IP47|Ixhm>gKRh`pA{!=^I? zG37yM2Xcsx4`Ju1QWzUB4|Em@kH*5%E-fD1JPU__RE`etKr^7;!FFdRO-yJ^hSG?} zWYKmrrcj(DwGu-bLl`loF_aTi8q+k|n8qZFUGRT;_g~&oM+ek+r>!bL+l%?gTp%WZ z0BsM^F_K1yzA8S9Ubx>`)A2qeq{TwyEP{OsIIh4DgbuG$$KA+1ERaWEv8aNBMe**y z5RM|qQSsnlWukurZkE304WVYK^6S-p9MwzH1^6NyR2Fr&Br2&yR7>XJJKvgM>&?f_LB_;0n6`#+mvaaSp{hf&qlwe6JregaIWGl>>TF)fq@)b|7~obq6T3@S-RlJjhc+Hp3k|i2LYNG5 z3=Oml1=NL}rQ3#hgd+c;98iDI@k-)&RQK!AH^QPY99&YT4*Cc&3^{L`o$GN^eV{%0ZOg% z%qq#`sAw2W9@a2;pnAyQY9^v#P}p3gPcRyWR0`Kxs45szh^WR_)i1zYOud2C3z8(- z1xYKF3z9=C6Qn$x!qpMYf+2`#77WEivtXL^6CbqDESOLKNd3K zUj(R@RJ>j7)xlptR3$3GU~MOkQ?O0`ZV*+BAswvn_X+fqEBx6AZ9CA|x0^u~h^GuuZJI99J$w+6U!utsU}EBsIRU?snR ze*O`0x<6ivISCP3HF+O?LoBjd{AQ1(i*5&yk4BG#@}@!9s!1GSqblXQFe4FpZm8`b z1m}08%@5S(p1Mo8M9HM37wjxKa22i6f=%Khl%_XVECFPb%Dt^Pt>UZ1Ie2jp!;})M z+}jG15PRz2b@8347|v6VI)b_ zMHUB43i0MDDaDHeX$ZAA;6$-oFnT$_Z-Nd=FP}L5PvVfa+BPjKz!Iv_iAp9KSiK}v zYye~f1Ivp}oPThch(>`0Ridj#&`sgA`A(A@(51Unj6xp$wY$W?dW7tvU`5h}yA@?|~GRW}Vmr zS*ms7bIhe#CppLrju<#cuhN}lIfk3V{_rH~FScW}`A-A^LB*KKuHd5 z^<)YpNxDK}1SJ#^8z@6Dv4N5nsq>)N2Z#W~E&ap0#5BoI z9r{&;pfU0^Tqg$iHt>)$f^v~jVjK)~;H;q?t!QHbX_d&Mw9^eVdgN$D4h$Fgi@K6b z>{OC&3?W2IL=%Y_kR(H8K$0vnJt3f?kgJ@(;9#PPVCJttj4Ti;^H%_|WJPMX{|Vp( z3VH?4Uy>yAm!y^Rm*mhBmMIV?afM|55{k(D1t%pI^t@K?`LmYd{DbG3Bu|dCPyq0((s07Rbe=wWa7tww2?l>XA9-}a^G|Ue`$-WwkPBBnpwrYEn*lsmk*x4Gq)<7?bB>S# z2y=+=A81bmSc4KZIN)Z%DJGtV#Q^#N_*+uV0^$J@0b3Oa0tfOMU6QDv%s?Q_5v&E6 zgOzd$vQpYiKw+GP8kQSi0`vo70yX5|Z@9FAFO*Yg5IO)hTOdk{2{lZssG>w?gGGRH zsx$PSi#jWyQAbxfhlezPqK-TUT;q(ad@A4?75E1NB*9%m2zUfMLs|q} zNm`;^jGF=2SuVMpN7Wx$nwCF^JxlZ$+OS13R4iL03mgCVfQz8@7}~f8XeXk_;0y== zAcMUPDuOyR$VWG)i_x}&nE&`F#xuNvt!X4l41gpJC1A51$)Q=t6iAYEg~SF(C?ZBc zCB>vP+-lmkN7`4c9;5y$4B>y-^#>pf+9t>cjaQQ%1FPL{%yIA>sqxgRNMW^5EKxK; zAqSr6!V<=Zv8730L2{I?8sv*yg9ia*45(fTcuJsw5TpY@@Mzh9W|pWV!F&aafhJAm zccfDK2I3zq5ok>Vu?N!>Vbo}SvP4Oxrz#JwjTXb*;K!m1dp9Y{!G(9f0;zcBhKjPU}(p+tU$LL{+ZJ;RuqUvgs#T z1h@z@RLDc;7V)tMghGNMm`y(d846XdRDi`4g2$sBJ`RopHazqKK`qiLvf;-MmHU01 zLGSNLSvW=4L^k_8ObOZSLzH%!QnJ}6EulC2BvtGpss1Xn*(cxr!`P&)R!i^80L=<_ zJmYYvDu8s@2a1FW*q6W^IYJkqLf{A*Jw7O2R95QHL>fU9*1}&6TsUF}Ya*DjK=D?#RfeKMn+e2Pcg!zDU2kky2v*F?}-Eb`|%5j*3!X&7S(687E;j^pU|CX`S8zKsdIL=ubZ0G{BJ&C-mGcT`&=ZL%j3lYLn0ZB$!pti|DKoF= zhTz#kC$yPY^qc==4*l7@5<-{DG^}4#R2ABCi0y}9q$(O!1;u^fxEt^aQSlv6 z+yfZ?kVXI`gvx>2%E811W-?R?W#B>)A}Ck|iunK*Ng8fQ?-UpW2@QA=>%ycb1f`M> z$7p`WR8jUjLEMn&@(5DgO4R0xKF8;Z=ew7m~ddeA%oHNn0c+3(PM@Gq4M zZ$k<>2MJTCCWE~Uc{@cEMw3s~K!rPj5_JQNK}bS~8(g%>$QO*Sst1A)^4|$XA`v=a zq7d4RvM58tXfT-s$6cYKs}x}jFbm#8{f!!qFj?>$Y58;+L>I43XVJEHI-Fi@q?+Ynj@e$ZXZ$QO+!fJAF4{s&}%+d`8P z3s`UjqCw_h#6O4<15jK-8k!rZKX5K44{;o+x&XJqvkCZ54Ni*t6r30J2n;Z)=cs?F z-b8PqUZv+E{WlC?T{IV*AR1L=YSJUJ&_JOE0tM=$LZ9S;Ko5uz+XiK4=@D10q$bN2t22#C_Io$&tT-wfdQ>`KWgPdP%8E`3Js1E zQu>3oYYx2)L6^>JG)kDMxDaH&h$jIpr^d13e*uODh6t&~sP_M*z{)5HCPR>#oe6kG zL4LI!588+^6haUL2V1RLRXCm*8sH^cCAgosLRiGq>QrwkB~M^tfZQlycoPpoCBdD0 zYIW zd1`OMChs51A#E32+FA+`1vMH^O2}G@>=u8~A74_TnY35WHGAX*JQa8G-!e24KvXg^LRp z_NH9e;lhs)e&Fr|z5?CZy7|R8tCY!fJ!O4pe~vOF3Y4pihBhsCPhIH z1yEp*0)8=#lfqq4fKH?v2mB&bsa;&FN|g|(5JIg&XZR8Qwq_hjYoMQEJi`bLWJth^ z&hS`;4AskBZB@yDvnSw<0}>E9z%1Yo0LkEQ$P)>EOBTfg;2K5Nuen3H(n!~hWK0(4WyyZH4Y~sA_YjJNJ1Tm z$dVUF5}z5tbks9?1Pc*}1%?<+AZDZn0tMjLfs?I8MwS}PNR@Y}`^4}Ab`EOXOQ1_7 zKr|$|u;B!g7W_b3qB`C&x75cwAyE@m09WA_WgGQ{Mz*0DCx)>Ot|;X!`?*${7nnT9yfQ!3z?@+mqo%Y*1`Ty`J$@nG3IK%LGkw5)@xV}dGxg%14& zW?2;dP30FV0_)I77eJ~Rb$khc7+lc*kh(I6g?Qi};HPl(Vz^OMw*Qm4p}IcNeavI? zAUv*^>2lc9Qj48ufWi;rEn0dy1}J(c>25pR*WDsQkVAcD?jKvv zV*J$f?$K7AjL0y3-aMK*qn2Aap}tgKe~$BrwPl($ zb8frIDnwwo*4<}jf0J9AItjUk-M3k{yVsztaliWS=e}qYF(skPiY;^8_ax=Nmp#ci z5dP)K*u(jU!<${xzgT%&?Et;_n0xVZNshFtdkhMODf+vewf|5|Dj2d%4Y?7%f>GXPEG8di>mF zIjt;?9k$FL)$H@#=p6&U>W5|zs@{8SPqRm{<-7O@t4F^yacNcSe4%lc>($xa6Aut+QFml^!M}l*r5K)!}^UTSRFa>Ii z1~;&9f6aB;X%|0mAHVvITjlyJIp#m`(7c`_dRKk_bwWX5n%}94&!$Foe(tcT$-Ac! z5nk?I?%sZ~MvdMy`EusT`ZxP-+^&ufWrU%<}=d9elyOmL!%Y9QW zx0tt^+djb8y6I|3P|(%$;V0JW$4xX(c4(QE)p5c4hnZOidJU8(j5Y1%A2fS+%YCoy z;x7-5sQ6&5!SH(5vJZEXjc@wlm0$U(H?CJX@?%fADC?~aW}k0We#Zj~gNLhlZ=5H- zb#$0=Z)W`PHP`gNq}Qy~@U-RhS*NStZr!Tfy2`b;#97C__+i?yx^47+j}VI$&UcLm zWIBv$mh?DnyzIe=8mhN4aM4FBv3l?q#zw|t*rAltJ@Qe(f@^A7nZ4vt?qarvkl zM~{zY*RT5ZwNYm4#I-#RteG~m@?*WM*jTZz=e+~24?CR;a9$?g_3Z7)!FS*8G^lR5 z$=gkIE+@h0{*-&y%Z_@};L4Dr7sP=lKfZS8^xSNhk5jKG_RKAt?s*R#t0;fdbW@V; zk}{QNl;=M1xPE@Xtxk8?+#kz16GC0%w|-~&*;$u2OKUDNF-d6qz4z_qY3o;|H?6w; z@xzy!(;7_Oztq3%Rinrs%gtlhGH&1d3o)?{PyVJ&Q z(#WIrPp1bTxN|XcX7weqxmh2FdaqdHU!}vxR^F$tPI_js(oQfcG3L_ldSkEHJM_OR z$Xwt0^ym4O*_C@_zh7B?NA)Y>LpSqV95c@MI21aha95R8+shj94tUOKEIj4%Jlb*8 z%RzZ#hE_f99lm;k;f#f4W8XDnTj{&i{lOY}kCph*R(|;G!TDn|pS(zH>~A{4{1$Ig zLPfzw`zE6Dudnybsrk@4>~-0Jp|fUqm76to?@Xg+d)9PYZZS@;omJ+%h7XrKa2wv} zS+arMnxqEzTK+KI(PG7mqN`-9TTz+fBbZ2j>qd z?_7IrjUIYm4QI8_O#kt$jO0dkNPkI#Ml*XY=xu1&yvxy3Uk<%|IHLl$xv{N@K(Al) z^_`;(I7uC|I(Xik_vT@m$M~Ta!$04u`EukfcDXpkz!6_(#dTh`Y_t84ZcR-ikFv(E z9{c&WU+4D?!;?Kv=5aoo-yPP_tCul&+bh{%NDQpj}Bl5^w_J=n|Z$4ZF#GhRyX;J z=cR}3?RTc*j&4_bD5{!Uauy7}+IEcL*r-LHm*+l{aZNKDuw@~kT(?}urv8Ct$_Ni>1n!U7Es&DV|b7y^VTDEX&mGV9#_U<^Gd}B>!mGk*5*4(#Q zQ$}v>GTW#@x6tX$SWE28BM$i2xe?gbFjjAJgE7M@`0Q$V?n8$YJCBY^^52v_CD`YQ zcTSYg*@s{IHhP|M+Bfy;x<)^iNW6c%x#}uONnbN++Ive2zk7{7FO)ViJlD!>QS$4V z7B4)n)!d!O8GR{aY;L`r6<0sb%9z{IWaGq{(_b8~cX|Gnb3cCM#ofDm?&94Hv$#zY z-=}4)bsa1ah1C<)J6P|v!P0Wy+_K{LFTERDpD;`(*tuD7lOwoLueG5_x4{jOoL$8#Up1SO|FvTFa$Io9gUgURFS z#=g4QZ}i>EyuJ;2L7(o%JXrp<*Q@Q0*T!XVZyUcS_aKdp; zz4Bwmq=w}H7WNEkx@BGFJKnk{=`UB0 z*&mYm?E1^RpsCd+nw}Y-m68{9|D=4+1`y&{($s5wVk zZjR8k|H6h9Ew&AO)M{k?nCdKJo94Caw3w+spu7Hn0UxTqc;2I3kI=0*TK%Z()1sBx z#X+K#`Zv7IE#7CHXeaD!JTPlUt>bo8U0;pQT`_Q*d;F*E2?<+9tTS$Fu*uSG;gsVC zCt9Ws`d;{;^|#KSA1xR)|7rQJ5{Jyk@-7gZ%n*T)pT)O2XxYy=V7!8##Pqtz*gUKi3Zop7MD|qet`luG=EmGEfn^ zeA4Pk3irahTVEw?H>uaO?yYt&4w=t>)ij`jAgI!`a)q-754I1Ry)~~+)VeOc&)rJp zN8OU&%Gh2r-YPz6(eR_ae%zB zrTk43-hL~{Nb>S7c%PA!1Je&2 zA9~ijz39=w)uyxix$JHEF0X9))317^-g_|Ar9;?`8_w;7?o|#wI%-`}e(-8=!shFI z=hh7zLPl8cUTB>lJ$c&8wLmm#$oVc!ddG%0Xs~bZ)Z>=R&kZ*k^!jGbWS`Z?TAL0p z!=1OVP2KWWE9`B2W>Mb@!FziiyfeJQ!<3Pe<{Ebp+3~!#Eom3f_~4bU`&P&79RB1) z!IdP%zT1|ZDuvZuQ@Rd#(9l4Tv*@g;&EtOVD^8`2+}>x`vdgY}A6N-;c|Xc-dAzn= zob`apdMi#0shfU!gMGhMPeQw~yL2A5+5hqS&^yFCNbZCBdNb-)l z!v~5M`mpNkiP=@hZ+Dq%+?m{U6F$dw9&-EM)Q2&Xmyhlk@^###wtw(q>VJWf2ehu_`drLUJ`!;J+G@1B?=%!}>xq~Lvc zw<+V@o9B<8Y23;8$LS68{Tf|+`gE4@#0hCnrdnH{-OrzE_Uv5F!rmRfZ;1(Bwzo?i7@3qlaZhUaKoIT7aC*)o0dEZ-v-%j$%oc4Cd z{ALAdkB9Q7SN0xO=48k0di4zj8(y5q{MgGebN@7u(sq&73`$%+1y9^m$N;ncMIYvOuzDR?@j_M$EIYP()pTJ2WP=reOZOTW6@ z`?9A?MZ>M5(>uJXH|fFH3!Kz;QQKYy#JXK*+|PCH>U~$1y0IPyEYF#Ff5WEyKHWoX z*Lw~8EXZrUr&cS`mzXUts-WvyI%yX4=zc=v7Y#~5E9dsn?C7Du~W zx04-{blkA|;O(>r(G57ww_R%bZLHI<)te5RMYdf!zOUsiy;^IZY&*32io~_WsJqte zCu#F9+O@p4W9lG-J8N75`(N$XVa~FvXAUmD*!!wQzV*4gz1?;k>&klGwTE@BNf%n& zi4XK_aMtI zF~a21EZLN?TT?!MFU#|}`PgY_!v>}`UJtA<$!Ohk?T}}C$3I)NVXx(~%F`}%Yu&)5 z^U5hUu~Uw*3mUF4Xgt+xWc_HF>68nSqxw@i=p{v8XdPL$%DmCJ-Bx?q=9ob)qVR}`g%>m9MH=B%2H(u91 z`Cj&Ri|_UFr(}$DejUf@ zn_f3sHY3pa_K0gE{WpHga|pa~_{LIcUeB#FuZJ*E+-{ z9yjK18NIRH@JhXJ7Z|k&pZ9+9_`tY;`g2EyIeee-PJK&v!?k&HK9Px#P1*p3|lj+T`^Sed#=Y zi2H!R3#(b;v+ok)kIw(P_DQoz4x^rQ9y$1-)AF-RtF8?cIXt|}S=0G&R>Vi2@OK5V zL3M^_Wxwe-eD}8K+YNf&u6ys{!-v+po3xz&WZvd3ci6d{N?Sh1f9`g!Y1b5a`}DhW zMGM4^PdMywyAE5wgzk!68@uyX8@_@5*FF5#S50r)Y&qPf+P#hmYci|8v{`<~(c$zc zPR_2mkrV5EZ(qKRc=Yy8Ka3yF4dm61%53v(_|$}@OPfs2+~#$xanwcYe7l(8HW|(< z{hgk+30rop!FJ<|w%pb?z%p2x?I{iv7*EZZ` z^U8Qu^nyBmyV`fIxBtzNCJBy@9uC{M*uKBy+3V)L7RJQeitLx|-_7w241aBvPMMipkO;9{WvijhH;h zd)=NZ&JCjiJ~ZljTbSS%7U3y(om%$R$>-HO$)F0)Zy@%X`TQ>#|C>kjQpOb`2*|2jH2IBKckkmnDF?&|GWzu!GOuS4-xANMR8 z{cwDpn`u`Z!Xt(rcgmX;=Qh&Py=U+;W+?%WrW!?WUMG_a|%*6L2183T<%?#&Y9G@R~#M7*Xh*M_xh;`jU( zW@}vz+>Xo$m-o-;Tvc1`R*yGax!X6~$K*}!!|{vy4ZE>0 z%&3v&`kY-)yMKvU944IK@5-~=b$6fIYG>SF>B!h5#fjQOMQ$&RH~a6XF?CSuG3^iR zN;V3#8d)Y&_O|WoM*Wj=CQ0P6pFH+E#L0sF{DK>AO!OWyV87??jcdosb`MruO*!!@ z(pO-#(s#p>dABFJyHDKU({Y7+Z|myQ%NfM=7-n!jY{rjF_T{jQuP=AjWDnjaW>>gv zIM)7oL)qM;BaN=ExvyW&GjGeCJ?#~d`w6vW*4c%6{ciMnwS4}*jT7}9 zI$ig#viAPUq%QJz&xSS8Kj75YFH5@Ec!<>3YWeD&%_7f#TXMFQzghN&<%RyQjJ}>s zvF#|!k$gSL*=HN^{>>ZChQUD-*0c?q6_dAoy8EeSd5dfBt3614&^)RPfY#KPHxt)kuQRt@ zeCKMl)ppP7`1yK<%bm9EP8{{Nj{lGiw(-ebhAv~9csz68vhK`>*q~KBqr<`ht8TTe zqBvb;rk?eX8V|e<#Vo02=IA@zcB;eKUVw#b_o==8h(`PtOV@Qc_HxZv|LaWQ}e$iUf)#y$%x~o z_qrrz8h*Chw}*4%Q)6#?tAm_)-ZRgE4ZR+p;qR9T_C&jG*`GINSaig*>!(M|``UMS zhyBLkb<>>hkI&7_3whVR;&kie!z1s{^1FW0R`zY#Qty2u8;nbIT&Ju3CPR4`_H>fTnyBJ;EF?o@q~V;6SlMM2ERJukdDwILt+N$a2ir)Dv-_uhs=Q^b{KV_M-SZnxJ(gS0 zZ|bbJ#>T6^sj|MrHb z!|o%MTEt`;U8uIeU}*KO$)8Mn>gDT?P9C&$d)2hNsYa)ItX#~IZ@zC=<$&;T)Q;|3 zGTh#8`ChB*$qzr=x^gC zK6F?3W2w(Mky*gB?N>s_PY%nlt2b5HYfYQ=`fj)QWA|PEkhID5#M6GPxwrSNNv>4u z{^Q{vhxX5E6#d~<<=lh8(=si)emXM#+mv1B?`JezX<1{7aOIJK{oVyf9=sd2YN6G9 z{_Cuil}2~7-=)us2^%%Z=U9Z34KMM{s9f)y0fS{h-xrJzl~fRGGFj=KhL!6@H>-vrZwD; zIHyfFNp+Gh?tj(mQJoz&1M3D>G`nE9&i!ndt6aFTySvrm-OJ|0hQtf~?oQ;bH$R=@ zwz%##!|!&BL&|Tu<|KTZlhgIutDw-hR##r>omkXvN&LdSA;Z5k*MGq6x+MPk{fUDt z7WX&bqf=^`AC23|XA__~F9l2KHUM#ExINulmz>)xPbinmcv% zmod_qFS&cJ&TBO5Wwh6Yg=2zTYUY$rTz+(6jfb}mwLj8BUjFHaEvzLKj2=1l9rW$a zxSqc2;(7@6Dtrnquv_r?*o$_D0HSa~^L_9+x}*L+F;pj#E5iy4IN0WslL6f_7rFH?EUMoIKWK zWx>L|*$?+xG(XGgdvtD8I4{Yrt(izHt+K<>{9dOEZ{AFP^ss4@rvsDjJ+X=L_Ic;^ z`c~Xj^~e`Jbe;hb!093q%P+p!Xr8v3@@yIN^s@-hqW8C z=UaG=3vOc2FJx(ry_0?v_A97cwbLHq2IVk!J8`ft^P18Vcwa>^Y7fb|HxVDtiNQ5{Vbc7 z4?}hz+*_kUe5>{5Hg1MXwhpRo+3{^b&m${Wmw8|qZoX`3%dX=Na-Ys0lX&b%NXVtz z+uyGm+I;4xOHZpsR6T#M()xFIObzGGt+jsiD|!9?bn`oFewC(s-OMH=Mn2=ek!J>*6>P|Me86CL#67Oc+ z<`#~3!e)Jb9_(Gu+raH$$gOhG70nY^k<9`Q@@|@M^?q)8WZTyv2F;gQ&o_!zk=(!j6X?*oXXT2YDmi2Vrc&}UDoVF|C7qiZEp7C~Q(1glS{SO?E z4BRx=V%f9ym4YkS7IxVDZO#O{m?P#{?HhkG@wnH)ERfq_(wtLY%UB;fGAb*)SC+if zz^J_yBHz!JyvTHn4!Cr@N$$|pnoq{hm@`-Qxa{CPceW4Nx+Bo~;;pg0%4d1cZn(X> zXWoVVZB1>;O{l~cw05@Wo#or7ey=h+^-*z3iOa+VhYdHVWZ^X7c(CA8`o zbACEuIqhj^*mtwA+r|;LMywLZ?G{S zJ2}Utn`LOV(MEH}v_7-@$(a1GZW{(wdE_~7id*@co2q|q8nb9xOmNu~2G8qunrT%% z{KTABg$7#_A`WWshN>Y!uqW6%0G!-%KlgC~K7RD&Y5g6&;O02Fi-ad~?$F;Sz{f`6 z=k8)`;p6E{zhLR^ser&37z=~$Tccgc#(W;1Z44Jgvv~qQIl?6xQgk1ir=zPs8(fSw z0Sd37Yyh%Y1vq-T%gw!A0U!fObALI)y8tj!id?~T${4VHfPHZs*IVK4>IP4R;EXo0 zBPp&-s_OJs#g-7~HD3b70ja<7WGWJFdOx+SKkr4M zxHi6BKBN=uGf&?8rYL+7Hz4k5W`;>Z=IH$JEg$k;zW?Z(^!-uA@3PU;uOFT|J^94a z0bY4O0;U(9+Vm-|#`MV1d5PIi`t^%CQ84~?cvAMaT_2i;T)Q@(*K|Vuvw}~{Wlb~M zDelL86Ibi(-F2zGd)p;_`nnG>?X%~u&7@T``Fj_K4pMCI*S_A3o@sqf@4FQ`T(PZV z`wogBkK1mz(f{#~syB?|XI~hbDhgT>S@H1lgk({6!$`|fvlC**W;L8xWmL<<#Xh_; zHZ45pU}W9Hs}fSevqwY@9knRo#@LS|CK`|GaJblqmoifWgEmE0J-jmEMPRmRWdBj~ z6Ru}wnNDmn%II*h53gmWeGZC>YxuIRmDZ>#0423fVR+P8z9fWfBi{=@@kOqDfGv<1gO5xissffR`A1IjB>um+x5TQr`86 zqr@Tu!5OlWYVd`i8vJQ#OF9lDid^)9x#i5}2PVfU+Gs}Lc?suhAa&i-X>g}-^ zu^T_u?GritxFT}+yv33ZQ>t#fS~h5rVFMqVU`X0u-Jposkg$GY!^G{i8~6;(%T5np zZD9QJ;NnFmU(aZ9IIUpt?qN&Xuf8X=^9_B|ech-&-|gG(sG59eRL$AEixEAA9ByqKWT0rdY?ih>(CB>!EY}qx#*fe*8HnMz-$W`=+HN{lT7v*KVA(2DM zRO*AMClHWa?R#|4l`0R`K{1@EK!1z)uv7v)LO9<{*M;9f&rq0U0A6WB!@uvS@ctM5 z^#6!Q3_KZzof6Q;fVSZ1j1sgZ6$k{{s5-kQ8`#<>9DN0#E&Y#$!Ate-)~M8c+V>gN zr|Xxs_)*xqazAdl%hxK-S$<@RL#4A}@(q`*yqg$>t;{%Oos#*~rM2Js%qQ+ceZE`y zOwP;BjvVz|?0)a^{w)udK1~gGA2zI9%I(CO^=oBBe2s3o#oxsxZgc0!E??e0c6FRn z!@~DfTc>!pVOye8$ECckF(*qnu-CPWX9g~VZdA9pHM?8ihDjeX@~v$~&!{@F+y1p9 z*RJnWaQoi5?hB%34D9hS^y$eNEt2Oi7QbpH5S=yq#{ZseHK%6u?1A4W-)s6+PZ0H$ zed777vz`qre>|6-Sn;uJMn=E5Z`BIod|EFkTi7%?Y2D|Lvjd{P+=<&(*fzPA|NGen zw=U&&ar3FTam$3biT$7Fy_#G(t?QzJ&grufGBP&TojPaW^|5yfPS5QbcQML!L}2Bf z`PBp7c6UA`opws`{Z-4eFUJ$Rx92-;J`TJ^dD2X@UOk9?~n{X7s5(+oE31 z%8jGW>G@Bozir9X8vWb5=MCxC?#inQp)*GHY!SSx`H{wL1d1{lkG3TD+FD^@?83#} zhRsQQTWGm5cYvYO_MV1DDfQ<)ZQei>7$|DqAtipvvZ^cYEnZaZr0>D)9WK`_(_DCc z=Zt4QJ6fj)PD+^l-6fsNzc_iWy`@p|=6QK#o|Su+m)xb?SN^k>JD0fktamzTd+YeX z`|ZYGFz&T!`>^FJCf5n~%lO#tef{-w#*6aG=HwecyY1HOQ}gy2rprf#&boi=Qt!B^ zG9NDWuDW_(?X(?z-kYVZI)1oiqrBP;T@JOZlJ(}wISa!Hjjc`zQ|BCw>M_jY^)iLL zOzjURE*l*_(x`sj-6l1=CtJ1Hv0d);5};j@;VV|WSZ-nNzFi zw?)T}7|Tnr9X4cW=$duGRVHnUXggr#{@5DFhTO;ry*wxP)T38>dt1%1yL{BpvgeXn zQ$wqzhEzN?a@*qW4vN(QQVh75V))m+9K)ac(Es!Sk}yv+p%bIpOV_q8DB9 zf!m^7%bC?89c$(8588XJLYDgmZcL?uZZE2`{7=_jSfR(RSxu+Nzn@rAEqPEhZ%k6x zs3%g7@)OtW*wJuK#Q~ual^sHYD{>od?Y8;IxCR-+xfRw%Ufp-oaK+^nj^z)WiSJzF z)q7vjlhpPPwnpr2UES!BTP=^REy}0N>!w%ddR+Af@#TM{ZBH25EOPyftCj}xHgoj9 z9_euY%(f5hpPo81sl_t8`Z4u9Xa4AZuHXE1lgss-b&xl(_s)pV-b?O{pWM4~^{`rc z(>|M2-re%Yi-((PPgvVxsL_uKHSSbRcW?+dh@2W2@L+1-%U5g98&%%FM(#AUUc(C) z_dcxEpP|xTZ_?UtAgfHKM|b$>UF#Tl^$;z}cDQ3Oyfmz1Qp+33V&1 zH|T!o!-NV4#AOb=KeDu;Nu!)QmpZdJ>yHllS|R761-s|oq->)>`+axE^*lT0Y=yxM z%N-dsZ*qm4C1O55=~N%5%x0fc2W6!mtyF2xg+*Q#OEVkty(1@_4qY?-!Gb>VTbESs z?=_?TEw7P**8M7m?#R}+TeUK>?;)05CG*Q$ld}z1Y}Ff^ey-BKu)X8U?%tO4;Gxlp z&xWVlU+go#;R0#@=cl?aPF^wpa<`z0tvvKUIHkU2bK8`ed9pnFe!_V{^=+%qZz>bJ z&9>&l&!R|!oAGTVduzmGH0m7jf9$!+U4NTctQ?vFS-BXUPXo;azKsn~0;MUUTig+NJ|w>;ZPAtNmx zJ3mXU23sze(j4k%%F9iEABzCaY{yz>If}(^#1BJ)*inL9aZB4r1Oqki)w_B@=ty*! zhX;ur@IrRJ{J~XgGYrH;fXZw~IG76PndjAE4=jVSC79vL++xjoSAmpQWtRkj-VcOm zzKO(7yk3PG=8#SyJ_zB$76>^A6P3C+p-L5ohJ^E0KFe4~dEaJ9&SsoJbSq?BNxTre z_Hx!F68m&Y2mNF`V?xEd!nWU@3^3F;=CdpXV~Qnu22OXxpK*o-{|Z&a7$_MEvI8kd z`~XCl_jYTg8W=sN8jVEG>w`)pnP5FfkJU3CXbzdd3}&t!YFfnX;FmI2(l;D?hW!k= zn==C=TN4czk0Dm3kN6YxvCY`|8`OqfLC+)fC&NIX)x$<9VU95n{Gu2_}^&jG|= zy;Ruj2EgDQ%eWh7>^``BozXGXd+k`ESGLpziYBvMh=BO|H`jygc(v^Ny$rp`GVb{X zIN99xD6@nVX2hC)uimX1vjRXkH|#*>h{rOm8Yqw|a%^aRIB=WP7X#gaRC*Qj0Kf6p zVakJ!=22b%vN7BTo;toa&=cm_+;&1fzJ7NM9m4#^fJ!mc~sc!5IpVA#NbcMBL|F%BLx!G5_XLcTZ`*3AU9^(UhXC=0b zaW)^v@Eclg_lYb?jxlZ|r+1o+H0ReRNCcjoo7c`wL5$t+XW3xb}=O@G^8EEJhI zaKD#Na0T|QQOJN`hmLsQc@#c0h_@9Qa!f5XdXPe%*R|h*2zDA=P1tT-qsXC3-Y}s7 zk>kSJ6HLkf6F=ydjBbqdTIT+0G|WfJfGk~D>X;X*roeT(1>R@h1Nj}uJEwW30Qoy@ z05n;zrH=pB?=u-EU>TdS)sXD>#2v9%bREIvpI6sHT8)soGzELd%$X9)0icm2=EE>( zvlg71l=A?Lh;x@HpiUs~)$>PFHn26l>7Ue6`#Ay0vk#p6wbrpq!Dv4`!sgIs0Zumw z?y--hjv-bfUKC_f70KG`f0M`CcE;!m>WQiiEa*B>!{~_F)hnR9@c#Ot4SbAui&O%_ zC+IngcnI{UhG?jW5ymb;jr!T~G%|@ej7<<-D}d5D%{`L|-t}$E5ZiWt^T3vYlr-m= z(b3sxYdG~-Egv3{!>cIQdI5&l4dwn7&A1B63+^*;%mj`hrXGfCkaxU$s>lIa`^T$z zB2|5OHi9=fYp7g!4>}?;Vk~{U#~8<$Ra{YAPLvl(cuabz2g|9dlf?Z|fiG?X$~;yB zK-zaC*}0={oEk3=1PV!|swCy4D|5~~Og$g&Ka*lKM_Ty=bhQobwq?gd;-e~S?~_f0 zok&WFs|BU{Vp3ntGY2A3q|=p0=!@rwp=ncw>snb>Jd6+TA63iCRl8k14ntYeIGm4T z*mRqtm9^c#E2?z{#&dXd7_8q<;XlQV7X!W?P?d_f1q>9a#1>GX!x?#uP~$S zE$uJ5u@7mSlxHD&O>k=5?+x2iR?GfZ-Hv&NgD>x(^Ik+rTbLjjG4|M#jpFaKCPr8v@&CpYN}dujj&G9qFxCW z!FL>KJrX1=jEY`&>l|3+<|cb`PZ*KF;D@)0&_aPy2HXT%Bb9{^9&OTe;zj+BkOO^NDe;m?yqKUf*@@VL_Id(<4dHh7&PHpjO)G_cX1gK@wDrPR>d|8dR(6 zw5FhJlIokwW}Zg98M8D}zl%~-z-X7{H3(YJCKr~;obuqKW0fZ=$P#*D8Gj1i13M6p z41%eH-U?7wFd9HZ9|ExKVNjG>LRCzIIaMcRZ;QMoSCgt?5!j1X@kC~I>1GfP{8BN+ zCznvvf^{f3sXMb zW|oh)J*{Z&==YHE*FAdF2-gA6aL9VcT@+LpDg2agI=bs<`fZuF$&>6%Y`b{MN2{ZyqO{btZfrq8CsA8_h8zDNvG(W5v)62i0__FX=XjS4ER|Xc z+DyBHc29|`iKXG&$;+r3b3Plu@X1>ydX--;}&&T(G;$o7HIn4## zX{8Pvz%9}rcF^*urRh_(Xf7F~scuQoh=V}KQ%GH?y^5xkQzp}yT=-cAwl0a0+;uJG z9$QRI33QdrW-4uP+^qZBCo@-<;sf5|~lm{oGevgz0d)@SCxg_3`DVIanFq z&*}|(R_f3Amuj@U$7Q2sCzCbJ$uJ9L%XAVdL356FHJUxQ;}Phgum-N%bG^Z_Ju2!+ zxG_P-Nho`JPv~bo*)f4X%qg5Z>SangpOPZYIHyV^G@+TM#{o3M+F(Kk!F-E@md zX`T+pCSDB=ubZBC+iG-DCSsz-wx_3XraZ>z_Wbg+4LCf#kHEUO=oU#v^We$#4X zt(^{ZS$FewIEk#&)Fdovh9>EHQ4@1M;$RgE)pd96ami~>?-jloT6rrX){f5pJ=TsT zXRpFsq>3VBowDO8o02RH268ge^`_pW|-AU<%wI#kuuex_l5Vx66mHTc#QNgx! zVybj~ar<+waGL&o$lHcjEr6O~k=fJ!2D;}Nf8%}TUF9CQZ%(h0u}leu$i`!Y=_-fo zVZto99;RvKXPcyqocGSTtNm$@_8`SpR>|F!u(-cQ@$?P&*+UMI*N}4Mz=;u|B%+LLS&ADVM z!mLX*fBed>dDkxl)V87ar#)vKU?f$vzrBIjI*wdYE6=M<6kU;v-xAji0-dLbEYprL zIUR40OqGv&vj~;h^jMRr!1Vo=ZC?4#qyO6lHKuA}e;R6Ot}8g=fzvAk&Cq{!*%CEo9k2}K4ByBD%*oal!C`0qRO}5tyXN{F;0gV zI8rXEJy9M;w`txi3#7G=4hi?dKqH4X4?m!Wi^pOcYCth%&BkPQ@_!3^zlouNVmBTl z41e%5|7H+#`VKnt;2;2HKu*NKJJdB)9Hv5!h9EFvDJ=?`F9N`%PA%8pK7J%Bk5f)kmx;A1OtkyUSQBdB*5sGWmPO#yxw5L%I0u-O zCk~pN(xo@B)YN#7O3VHT2UrF7V@nJ-dwz@(idjTJ&k^!-`k{{MTKvFu#+EM!X$|aA z%;mJzhLWqoBxKXTB&Lc?O2FYWZA6OQ%I$!Cb0om)?= zh1?pfd!67H<%m;3RMej$M8fBxWrHXTi7&&mV4*D}kogQP+TBMKau4QW&X(4)*OovU zu!E71ZfSl}@v4iwntSe+a_+V5o;518HEU}|Yc|u9%pI6h1$^$c0;Z)i9SD@Knq>h2 zWI;NhUiD?#JqK}V)X*=aP;%dqIZ)6YBX>*MjeYZfq(dT6qS zkv6x_Gt8`bA7(AiCUcyfR08wznq6zjcXBfqKH{Nr6j)Ezk{4sxF?_Gn@2HqXI>p75 z0S&S`%$^4eYka5GQDYM*=cswwuzLH<3k90 z#9%p6NrfsQ)Jm#ojQTQ`FcXZ-SjaaH^gW(-xT#jnB?b$bZJ(q~Q!3urP2*`Y6GRl+2xk!w^@GBJL%is?V1r1jrH zWXknEJ;p}g-#6}H!(pm4a4V=6QB;lwja066;(uoDSO={q48TXDNjXYAPxe>3nKaQd zbr@9Iu5?9<%Mv|A^QQKvwJLot&k_mgkCP2S6|=T+l;5h&J9V|{DLP9+6E#^IFKE2x z{M8HwHI^?9SLI6n$xmw*o^)UqzGtGSArPLsc;T^~jS(bBDlryEMr?L=(1XdlT2S5b z83pchKj2?%P{14`SGO90^?(`tQ*8az)Y0C{OIO0VS+OEiuOn8MX@%qSyKnRQg2kJU zft<~ypWjXVaQ^;Bm_2xj^rA7zaG{iuks)-7_Qi;(G)4nErA}N%a-KNKiO2874m>P6 zF5h<3(R6goGIDaIG;rv6OHa|L0Ql%6QL>T|Qgh|9Fpcz>`KBz?&UPQQv`y;4A@s(E zf=66M^>x^a94z!1s%Zw%b zDdb11^LbN>##0RBhK4A?IBp}ulrR~rP`ytq#(awU7_ngJ*aTf?KDdn7JY9!SwI+h% zjB4NWEs7N~S&q+I(7SKg7ta%t2gFs#BPdySub8t=O{YN~e{*L2eAZ#rZuuUS46`=X z^1EZw4=4b#q=E`c`KI2j#L-Y~w8WuynY?MaM17)>qZ($OsonbhY>mX%iO3j+@M{kR zf^0v-uVYY5)9v$@*A|cHB@%PNncY}Wxj!=&VXG`&QKK_E42cl#;rNU%^XhS>JwUJeLJ2-S+p5oKNxWGllTrE?ivC(*~4>`zn3rKG%SrX1@D9 zv2SA~Y}ws6qr1>jEG$xV)U>=;73H@)a>EHiwmQK#@e(A>4eYHtN`=J~zo@;INop+^ z4i9iafq0u$G{wJd?yR<<7`rKYboA@{wl}CkG~3xGlIl44$R_V|t=>|%GnT`y<5@0P z?Fa@uErMkXiKIfGt35y2N)`vZP>){QYyaw-OnaEvU4yGy5-vhX4Y7uHRMc@S%Oh|@uF~KS;sH(O2#ZwOHV?@;*Y_L^*6fB|Atg>a@P;UCFp@XAH z=7a~IwR!`ME2a(BCYq6`d0LzJs75(QIilH-yy`eXhL2^gVLo$V?r=^S1cVrAeRk7w zpnSoRK}dH+F+q1^G$ERPdoUFB+;$L*q+4p`%J$1l%K>$Gcs)G0Z0J5e9Y>}}AR|p@ zi^KGS_g4b=izTZqgC5e#7#kmpvd-Lh0T3-7eKc*`#JMh>B!zMsFKYpN4UZ$ihU-KR zdM$Ekj6Q}wcwE{rH*p+f3dJTo2ZotP%E0xs>ZYQH=`@Denvm2F)Md%D&@7eZ-(Jok zBdrdnaofuTMvV{fDfjDV3&CFdNobE6)|Z-~9BBg6zA42M5h_#9H|=#~rq@?x5ld6X z&X{0uO}i1nmM@_3Pr-hUdvyHhiaTTjalH_CQlwjkjxEvLi0b+*>b;z-(nvx(DQJeK z6A3G9TcL3!C82|H?&A^?PC`aF-GoXgkl|0;TiNgOxNpxX{`kYA^${qBZ*l9^VQ4X; zMWke*gZYEZ8t1Un%^xC71vM(B++5LGCW~RD0rQwd>XBA6Ov`eWI)-w+)1c4nCB#2t z(K-uVU>hflqjb6~P3ac(fX*J+kL9{8gPNj{{jv+8IxB|PibrtKsh~hb6t7=7R6Vz{ z7j-1&W2TynL1IS6l!J0FY3hb>5TDgE6|={~3Rvou;^JUg8J15Yr|M8@c(^`(>3RzI zuQ7TKk5ykkGtSQGOQX#Bn+0}fo2LC%r}AMJ5+eoi@NZi&6PRh7ZRyJ@;iNFFK0Hnu zLsXb9ZTk9u+_rKrqO@S%lQuwJ&e0oRNK<*)p6ELFo&%EV27!LJq9XWo$Al#_kejc8 zU2&p`W0Z%mlf8%5ZDWWw8G^F1G11giFi_BxQMnhe7ah9%ZJp7?$kX(#hhI|z&6S<7 z;TBIcA+91xk|mt@v;N_@P$k(cwz!lD8J-R)(x=7D`^o9pEBrI>>Nnx#Jnwn|HFxs^ zTZl*FbBG;=2q2n2CJJDO5`?J&T79qqoZBVj03k|1aepla$u~WWX#SPsZhC3~#d~dx zXkm)uBzl}6r(@rs9dq?7D=pu$lHOZ-oQSpSVmN#8VJ|r5KAbUYqRD6aNCl_{v|vn> z5z;^dG?lt=`pG<$CDdRM@~kY_0mRW^+wsI)px>Sb>_`W7zEA@S=BWu^V;b-L4%xv_ z9_YdeHcA_5h4254LmAcD)7Mek$A+z|ORCmZq8ROy}Zu)b()yddzr~ot~Dn+w^9Wy%sy)aGY^7eK*7@ zq+w$JtS%x!V9`0nvbVR<>HCvsC(V)W@}MhWP33v;n=671-qz#-_tusD%*whC8y^qT z6}ZZP(+mh-^Q0YvTwv;ZZ)L{sSM>7x7hrI>}Lc=&(OTk z9-BBrTwhlMWG3Fv-N|1_lfmG!kK8#r%OfrKCU+0c-Zb7KZ~RiejwuB>_@!qTRcGgR z7Uz2%9?!wmvRYEUQfg%SF5T6Rv36D`ji@)-nDS>ya_iAa87ZfOk0=Hy!UNIk%UO)YHhW zG@dDF&m^%Rwhz9B_u1gEd^lvBGBfTH2Ik7J@cb6Zp!{J zwN%Lf3m{dxxif_D`ZVTvQ3IL>dBLec_%R+W9?#^5el6g}7a>O=-(3Xl_|~~k3+^$Q zCEAK-k?viAi-0wcD3%$I5wT3*G>d<@;$?Hs^?S2%xE63w>;tEY9~hu@LokwkSv@XeQKr06q-vW_5chqn%d{=Cf|%dWMV= zGx`?M6R{u0Mf^Gt@4P_fvt8y-T`dNFEC;ULVpa^S)74u6z7E{^Qfo}d?|Q}4VsyWT zPNY=PGX7BP56@e~AV>v{3$uIz@WCCbwq^(|8;506pe3Z^l{~zyX&fXu9 z2Mpj;Y$~@2coU>1;MY}<8QC^XY25D%ASn2XTIf>N)qcGmJ>2DPyN3$AYOf=r-Ld3*Di=ifU!^7EeFHJKG(3 zp7@P+S3uL-oRnKM+!8os1-R4tb91LuR?2P{ar~W5g>i=YP`j@y=#xHde z26|?;|2MeQFC^?gV>iAr{Dn*X3zzyAF7+>5>R-6j{{vhq%b)Cef5WAIQ6GN$SLG{@ z@Qa!93zzv-{yhIjI>HyV=C?oWpKX8OQvY4~QUUmf|9>+dD+ANFFO}W@XIrM&QEzp$iV9HmSQ zU&nv+{nF9>%kf4VpSzrCLSflK{@KL7K(4Z}C~FDBdn;1c}OM*qU7{`(A^EDmU8 zCA0L;PcmW!1PO>-|D9lHK$2b(0!XMpgv}jPA%0!|I1qn9eh6O8s+hEwTubLwhsu(M ztcz7utrD3gCM&ZNSu3tJj_N&o&gct+i^};Mw|1M66BkZgv4i?8->abdjjRSU^tY>b z{H@3Lt=Cst!bpU0k&ZZ+Dm%+*CJi6fxCjKeep{=nSi61R=M~hzQMKBVlMN(OaZ6<; z!EpRucj+zh&)MDOJ6&P%YM@m9p08vmQ!w&8WxC9Y7x0$Ht~cZ%(7;3%h%zOAz#P8Q z#}6p>SDauL2<&i!Oo+yLgDgB8C_B$n(cQILA866O?e8^LR}neBNS9o|M>8v!1? ze-)Jp@kB&?M&_I3^uo0_ZdB%8l`X||^RK3vJQY*N+{Qp4`2xt<9&QQZV%+~|d@AO* z_>c>zo&UiZ%MVG<5Gi~Q`)ycnr+^$Pnsijoz+2o4xXMdf8Cu+F0Z4HF8s0m@iFM!` zxZx~`#mjO(#Iv^4BaABhluqa-nAqF0XErtma zOj0$}FepX{F@{HRkU_#B4ZVl{zW5RDT$T?co0O)S!~kjENudJSPq;q%zF$;7s}eR@ zEfyr)oRPMM?%Wn78fE6%Wb%))#U_|zt}@-tmO-Eu8$yG_{K|IMus*N&7E-sDZpnib zoAeEwCi8y{*;~qRI|qZ*Iv{EKC(}yFYE(;!MB)|IosbX2rZoZOC9Q}i1~}ZcdL^{= z8aAO;Yw9R#8`3!^a!gQBR+L*=>NtPCK75AcynK@Bf?yJnchlC-ZJ^oPSj2p5c9IZ| z+fbdOJ-@Ivs}}k0bs3)t!OExcN398b(^yeY~q5404>wLcO%G?RSyb4jV%H9i!tydW{-8 zxoiYgJbMv3ZE^?n6r2+9@SmcG-U68zL<#5$rmjs4(kxmBYom<}AFzawP%WXGFltQ5 z(htH(FN}jtNHOdHNc#oYh+;oz0mxKa%l2Q8x_HytcmXW|3N^QjMRsNAe$cSi zPdcACBwJKi$u5a~_gn*kP@a&jofN(RIV*r5gz`QR-Yvys?rlkj;wMYDgQOSGtF+sD zd5)J~a3g|XsLLszIxr(kL>%5w&3r@4G>)pq5Ddm!AA@Y7m7o}VAK1-R5O zW9+0q1DWFDwlO1MOM2v-F$5c+>c1CF22(V>lB5^aN52P(!MSd@b36PA!5eu>Na?y} zg@JG3TNSQJgajU4{LpLc`sy&Nsix&AoDnrUxg5)&VhnXM=EA?+eY#UWe3$v ze9IWyIQ(c%Tuzc+{8sE%+*X7ph6=_aZWG(7^1@6SXyRy5gyU250c&Sr4kV=XJJwa)Q0Vtx)J7)s*A6|+Pe3plFrSdR{m?-Y!KbFW!$-MTMY+t0kh7M! zva^)P>JbF<@u`K=L&-oDD~7V-(vtMXlt_(b>ZVO7#=Gr;mtHc}Ly3B$4~@(FW+vyy zS}pvG%VOOFTY8&{FLI2ZqKk|zyl7S_9T!y_AAm`#MT_ICuE)l297D}`Xo`3Xh?#WP zVY_|DmMjY`#co{*k_oroc*5)#wKrL~G_DCR30cckcS zoLM}rTDmiD-v_4$uM&XXiIz%ontAi}v>pfWmjG?ij9({+u|b9oqj~oO z$PR?xIv_s6x}gBlW-2W9)VVq+{+h{nM(BaghI)mjkGSc0J8Nq7ljhkLaQj7*{fw1E z)-r2Yie3g`ABKd4O59iN7`*| zK+u+S>AgEZ)_JmP7|=bqdz}u=;vbeBJF(8 z=9a>X$+r=U-k@xn%|!7HL_BLOw?eoKnPea#)@Fz~3~~{!kA<_f=Es0@6%HyjGu-d4 zmQ6HKs!9h~)3UZr%lM`yV>6qf(KRyKZ`R&L4V}Y^t@W$~$-@$8+Af&;>JV5$nDIP& z1jP%L)PQ=nH=CbIDJhxn@JAIjoHspp5^k|Mh2Co5*N;%!GzC6XP=mz+tq|OPE=ks% zynfzE#wZ`XZ0Z-Kv<_%BddbCATA_EoF?v5YKBi-~|B;q`Dx$>kt`7GPX$_e8jEhh$Bk$(8`9fjxFZ zGSUih&ayxQt(+TAlkiWgS4NWDW8qvaF_lRnC-l?soOxw+O(@2voH_C2!CRlzuOuEM zA8e3hbwRxY8BX6lGN-U?XJR#NNcK(+6;5zf);AGXAESer^AJV6D%{ zandGJ+Rj^;vCefpEoh7g4it07He+2u5>5ivl6WcGUC{DZrY0N0o~#L$T5ed#-*jL(LwX{>8$ls;AmwXw#w_5#fqkN=aA4 z`6TY{)VCw1>&Bek<9-pMc{{U;{)24P{7EA=KvKXl63bAmN{;>g`AF}MZCK3HkPnbQhodx;qZfbC8^~N27E=mVyKL`1zo1OO zxbx&>M!QNcH*N7Z5~+4YUZ-s0g6?+ zfW=8hdV(SwpJZ)~N4u7#_jI?eCvumY89yV?=RJThM6U!$dkm6mU=L1sPM|ZetVF=b z@v^cu^(a~c(oG@W zHs#q_CbW+5@b8t|>y;Gi&nW48tQ=83!5vhvSC>{Xrt~6RlspnY&-m%^%9)D5-RV&q z(%RUuBb@3I?Gv92Eetkq=avYg7AFBOwr=npbgD-hl*AP+W)$Nudp-;_c#jXulle^S z+^97xnHt=|EkV(4C6Q=86e)q>r%@{S9*}XYs8|l+J$+X+G}cgAlbmWGo!A!D;*KP# zNzDvDikF}{vg2`^(-V_2PPIIoYzq+d1SjRfHp0!{D&+ROR4;*>IfktogO<>UIZz(x7bL#p8eFV}WVi_cF=O3O)48 zyaBJn3QhBgk>(l76`slg}LciP~O2PBeCg&2of(MkA4-7-^ z@2!N}=y(KbQ-0EKlrKg$W&oTVN@HqlChMyr^}3fgAUMAw!CI%$lJLf9m|Y^?y)2L3 zwb2l6xbh4sT6au0|MvN_lhU-Bkm5ZwO@(3!M%?~`YKOI&GGXU&F`tDd*t4uPHn1dV$wDCbSt@5bSo-sEGktEs0gqT zUp0jvYb~QMuK|6D^+hpwgLM%Ua;yTIT>4VEi3as$ekk(eC~wNrHel2=_`phct@onltD z+h%kzETc*PNDVsdtl4pH9}_(Y_hg`O;-;fVoQrERd&p1dM6=o2^JH zTA?ylX(VdZF}1RUc$$4%(7t;cP=3aozFmv{XdcpJzB?AujHb6(L%PMQ%QIiKkkm^$n{Q7p!xq1z3@wVEz z*CbC!%$qiU!prbP@1Edl&PYQVbMC^d%U1Ws9Ub0`Nq+l?ulo^P+dzsJac_#m4OCqc z!SOG{;WFf&tf#6C+3dQR8Dy+-nJ&%A!SnSDN|o9cEPQeCpH|o>16}2H-=Co>CL&`@ zNh_Y`R+jNsilk^@-$E1lf?o3T7W=6Wp93}eM|fDySUuNG#eA?nm@Ae>@JIUcJB@#K zlU{d3{CK?JR041oeO)Np+?47<=Bix6Rn1=+^6j)jU%L66y^#!8x|I=a`<_*gx79il|CC5L_+%uhCcD>G3r z+;ADReE6N`gTJ;Qx`!h0_W+x%l`D^raf@yG09#G*ZXJdKJVD;_G6V;`fHEa-n|Hzy z#LvW{+o-2viTbKpHmgAoqU4O{tUKQ_Ht3fI>UWl|tj$wWvoISIg_4SfuDoVMJu73F z2qjCn#gp-s%5&)g4~>V@a4Z{*xpmh84N3*>hah*z;FqAGx0D7mXKh`V>czABSDq&- zE?>tc1BK`QdbG|tAAv|jzu<69u!t4oX3~{wP5RSf(U!VEqp)zf$?_F`EyNCnxI?=i zJrHh$WZq~=C&hozgB@URn(UJP#WUm(D3Le z%WG!j8ZjIjtFE-6UwP1IO*N;Igj>d_T$D+e&fg_GGFEC@ly__`6x=_<8qE#R6t^PA zI7mMW*0%r5emWW=`9=R&a?Q;AYGxmaQj2ud_+cvHhUv?4?luxIo=m5CAwI(UGn;_f!^ zB9k|lJDH375dOdx=LQUX7^8h)_R;)XZzSwvP|J%baGSK0`FDNuZ#dUXM1DW>{1|rd z0KPH?gN|+8QZezNG17EnCr6(IeTMny(eQA8(c{6<0~-)EIDf-24i*b~y#DgS`VD^% zd;ikUKRODc&qfdROGwD?=O*CR_O=TY4i?vkT5~{SO227 z9gU!Ld7|5V)6|YQa8+7m$S2(sZhTmQ@`oQvzYFY{L%sMLph`o2kb1}T`|#&xKqq20 zdPLWUQe39SVjkoIVKh9>gjj$=6_~@g;iA#sf@-Sv-avMS2qZ5eaJmEV0C7hGTf?0u zv|<1s8@Rm~Bt@_S1)|r2>4&5R7#uDYd`CZUg^_*PHm>-l06>rV1Oo^70N82*APdAF z2WXktLIC)Q4JTsx{(TquIHJ~o-2~(kXcVGBcMQr&c85GtuNM|Nc?F=>zz^F4KWLS5 z(x1K{{oRy@nxCYz9j$Woe`O4> z^Iq2Vmj4FTF7@p*%7Ks(eUrw1**9$tX{AL;!BFH>DMA>fIMd6E2HH#f_6O zR~q6B)tp4z3MA>UZ;^SH8iA8l8A3ocQZg2oBNiDbJ-r-C1zOZuKus6kmDS>|R_c zpOr4P92I5}?C^v?s}#CQXrmO|=)leV$KE)*=8CB)!n0gOB6Y`qjoE)uZv0~p`0rvv ze?;B?HK7!vDT|>YJC)6MYiCCW8(SI&6EkOPga64n^><3CzwIe2{ymugr#cZ0;}_}1 zm&Vl}AB-&j5w~alw|r9UtY6$x|3N3k!2DJF2c6X4PX5UzMgPB0NwNG_jhw$i_J2`H z{Y5497nRgsR8s#(R8n7xzkh!?X#Ej3X8I$f{7?4Jw*Q;3@*iXTS^ga7&vE}d`={SO z+duvPX#Zc2|5g3ZzJK`rcfSAJ{%4>67xvHV`pf>~{`hxm@#pXS@BIFMcK#nB`~OOl z$?%Qi>)q-fA$wMa|1J5yCJtyPfOtrQKCJHTnuQHy2Y&?}%?5pQBJx2fEUaliKnOOxt5A z<$`ov4eaR~8Ct`>GY)y9YUcSiH=`hpLb!ak?7P69eYHlbof0j{sgmeGYbcMh9tXW7 z0vqM8Q%;@gtAHAmNscJfS*)}&PY`Xn5P^asC0bQ`55rHrjpK>K2gf8{CuacgGC7*y z4eq>$4fB;01yizJOpnvPS8i=y8u-BN@y$?Z0m10#fTLRUhB6F<-|XjEBwXiusOfj$ z9q9GD(P>>#mzPez^GVthBy^aV?{;~r!y(PRU1~`|nvl~xuwFC4cC};*RIikb^lY;T zv#)I)#N;9JxXWlhFq`EkYi%Wm-Ii*G(m=uu=O{CE1C^ot& z?DYFT-`zSm)*nqyPo|O-p3N&dL7qOfmNEQP%2$>I9bv>U$p{RG)15p=Xp_z>rwrNl z2Zo4-41|jVR~$0Ni@VCTelwm%+CJ|NXdv#_V4MzHd{b;>Cd*)h>~vcqzb0yJ8iTuz zRWRQfszA{dFrZB!R08~YW&mm@X^-uW=z2|BXPD(VyI=s~KEUwvK(LL9lMEYHYy-$6qDc=N8w&5h^uY=pk6f?7Z^^_el0Fg zT^bm;kzu$O83cm`^AHuH9pnzhp>Q!RVdoHR^s#AG=H>9!;@1np1ckm1Tz)^_A%7o* za^5_X$da40Vnh(2en5uBv#`AmQAv5SZ@WvRo*+jGW~YeC@hOXhjJU>!O?7F)RB0=m ztW4dVLO-mR(k}uCQxq;xq!IRX;Owo)7UnJEp#*4#H>4M#1JXf!>~*0J4*JS1OG405 z(-6?qS?mFop)?pvi^bQcM)xc!$w#GUuOmPag!WTGltSL@vbaD&t~pi=RaA)|&^pu& zL2?HPjz*ce>EKn_IlqbE5y|AFl0AuJ$+Kq5877YzHP4gWGAgLi_D@Lbk{qT*3NzVZ zozsg-f2$89eYH1+(8HNNQqp6{^;$3_o|HI{S4%4v=xETAJ`;BqEOEa3t=y$P2Lx%0 zcwUXBXpWHAhAxnmZHbcR5Ye?ny};VEiar)BOd85gJKz+8(U*;d2uwmIY9f5&LYia) zD9VEH1O*USUql~X9!cK1i11yKq)4+lv1L!0c^K9-)X_a*g8UBAD_$OyqU5%m!9vpC zKl8R+**k*Q;lP-Qerh7zKm-NSa`6{R1|S#UECzy*1aUG&;h}rSHj*X?8(lKfdwBtTuNfBu1i8QE=qY;fd5K&qQd}OJ;wuJzEpsv zeN_=P88&M}y#e5rH5P3j*HqQ-Jxe!=tHxh3^r;kA?yQjR)U6uk#7Yc7U&ocPR7yK zN9*Ib=f-Ca*FKnI*um^+7*xU;fd$nquv^;T4BZsCJ(6#7hDV4oV5!917Fb)rb;Ac1 z`_Cd_FvtS9u;|~=8{)vL^9x!4ckCM)kdelejzjfdghCzeg-HE5vEWyd>h5Vjkih-{xvp0u1Kr27rgmI$UpH?b z?wrn=S-jhCA*uf10FMXRqndvfovj&nIPS=Bmq{`WEUOyAg3xzDa@Jp_S|wnl@`Dp@ zVYor-mlZWeLaHLejH;nkW8Kga*cr!J$dZ++NWnpS5aQI+6qdFMW)_-CSb}{%%UGRBsM-%O2$eV zww;}@x*|Tr4X`zX)=Tku#AoKww_DJB_BjJ+`)!0aMq`@A&T+(Yr;xvG?!4y^y@1@UhA|0@(l*!uPo@Um4>{W(NOOFy~APi#?E4nDoK`<440J z!+X&)mL-6Gh2VeHCw0gQc2wmQuK?xy?FYJlTaZ+G1D8kk^Uj<}lSv_CcTsCgG;D`2 zkLVZyt8Jpd^+wH_IY?K`?06ndmoVP$qyhrkRjH4jQ?zVSep)SCwR^(aShXU#)DndZ z)s8+S4c%NC*&dVC9=&yo33Sr>kX{m^239Y@DO?UkPmw_4Is-J$4Jm67hqhn$jrDw7 z)Rg6pDcPVwgRUdRJELptz|m%Xew_=dh%f~NvQki+Ss7QVJG1Ep#G7EfreU!qx-HG` zCvLb}Pr1EgPf?yI(=|ykX7|mv^i{zwORyQ@)0-miSO}bM00-vqmRXpm51PRVdjX%~ z*y&>QeL7}pamfV+%1XW3S`2J;0%$$XrW((Kq<*q)x4ows-|tf6Blw9eGf@pJJ)to; z-AyeUWL-@(*K`86!d}~rhZr_=)~w)>L&Tq zwYl^f6h9fhtw@z76YnZ)(i$8A4PW?^%!onOqn{L6-}g9f{I zb3A((EOaj;feuICT8N7j-MhxDd7BiS6qgg<+rUfp0P@D>zUK|8qh8!S#YfxIF_EvR zdOPvSuZi)teL8S;{k_^)-VS<55Om8RLs20XC}A;fR{A3!&+ct>K1$7E7Gq~nhfOX- zPtGzZy0zx_*p8*l_!kDx57krj6y()ixGW>SvawsEoR!A+h2oIrz7QWb;W>M=R{UIQ z;{8|g825_EAj*xHB(M-{V!9aY*ZAniX8|L@E=gZ1LoV$z^XZsB~ zCLf5;b-1UK@$d~z6h+J(DV|Wha%C)C4u^mKBGozB;%PKEUSZpPtQ>wR;5#(s{@Gka zT2pvY>lCJ?Xb>tZ{dvFOjUcRpX!b4%_5$^pqAku%KoJ0k43ra($;m))f^dsXj zyZ`6vh(r?e^teGq?d9GaFdJ+2>7*9cZF3Xu>!Zv8@LXC~L5@9}CJQdB#Zlitqi9QD z4gJ)(F>{b9)!d9cPJ$G&HN^sw*0omOt%yLvy&Ts0T9T=@;f$NLn2wfhz?b^hir#8% zbG~M~KK8?<1u^PzQ{@ZIX0BW#qTZuF9@$g6@ME&)7;j16TJ<=i)vBXz`b+CBvGQGl zjIe6WlzrGDwbWVcUUB%YYMx=>y}wiQ~&PT?|YL~=Us~7!593d zgDCVWur`0VOgoEGdh&ZX^J#}`4)NsW#`U|>fa^@>^W2*D+N+(^a^ZM{ojxw_?-cB( zu$gO^F;68zI%rZaV2>IgA_bq&z zokB0w_ZmI!k_+Ce8}25!TOBXkr+SccmKlOpQa~-$JCO-uMHTU^HPSsRoCR5FI#F`o z4l*wfj>OrukePtk@qPXsQ2HFC1}5|AYctrY{4k#^0ugFvB&_)A-mx@px>*0Cy)%!8 zYVYHCF_x@tC?bhelG)E3VMwT+YiY4X%N}XeZB7M`J?mKna_NG=Xd6JzQ5m@ne+XA-*?qMo;RKx z-Y+YwZ_L{tr5_;KrzW^byXO$zb%CN^%eDcbY2s=t54>1AYL zNULd2Y*}fjeI`qaBchs>_{ ze4gs@d3kK5y|ddjPyHjCQ>IUzdsryxyhC@@Jx_6slG{mJJJgr$`x=#SBHbKQaPyRP zZ|Z0T%P4py+t&1LQsVLAUZ;?rqQODsixKG)=7TeeWGid;M8#Z>FqJE36stCfuzNK- zOPiPR&wU==;l8-?Q{BL^_IPfnKf6m5_tR?53Ld+zn5NxXkfFZ2@X#73A&}jC`_WT{ zWN%i$%z^sec1&S}=(&U2zkJR$w;qvh#&0mU{)ese1@;T6>;8`GeRWvdF7xdjb`;P} zrkU2ULhW(J6Ks7If0a zSEOmJLAk+@8>H)v=LlT-p@z1pvewBQ|9M}PXyJMN_0F$CtU{>Sn#(75^{5Xpp&CfL z-Jy?_r-K=Nl6TbRM%|gvh+XH{ori}DQ{auSe|Ai$?@CE7S&%LFrOB4F%`COc=K*`| z20LG$lPeCmzhRG3YdD!VsSoxqmA1ps7>l(pxyZ9`+{Zu8#I$SFODsLT8DALV^n88& zddf9Djrtv|KxO9Jb==&~Wm0C@j-L~x8ZwAHBa63o#3k`vSh;7ta`+X;^9YuSUvY2q z=5;<;k>GNMUbqM3_cyW6Bl-Pfu1Us&A4HeiWGp>&MXG?2pq#iQwz{_a!rOHoG7U}s z#69<|ANfn|VOOcv-}G2FnIL89HnE=8=)a=TR#|&;N=ztSCHRCh*6&xL>Nd{sV9;ns zcadZDt#YQ{nq5ZKU2=4h&f96X$Ez9fP^D1%ry)l6v!|tXobg!ESyom{>$}kjE2|<6-MX3I(Xz*MoG^wU4+kgc|Wya zm@j&-Ny(+?G}d*jT$n&*-Ydsm)m$cVSa+sYNrj^9WKh-q*f#a)RPoNhQaIJw-shSZ zYY+coZgX?)_$9BzWIvDoCZ(aX9hZjULTc9Y+ot8K%kFe1HCO8Gvxo}z;fguds*Xr< z(+whT9FJ-I5D;EP%_kTqhYS$V66KX|7X?vj$C?lVGvd~x<4D#JWc%$UmmCA8t4U+Cy~nyDgTvB^I#ieSYGNp;Jz z$||m%VXSC*G#m3E+k$bw$GAA~d>>;2%%o{y^h{VBPUiS$rle!Jev^npculHUh2-He z*GC3XpQ`SR$b2lx#N z^qx)SrK~Cr;vUG@Q*Or)ZAsMKYxXRpq0)Pv$CviFh_1Y? z<#E5BE9~x)HDV>Xc3Mu}a`bZ0(K{KhkF`{DHf!0oc6Rxz*8|;=A1_<9Sb9-Jmb;i} zxK=8580HNbZeHzm^i|5L8S=v_<$&j>KA9Cff!;5%TN-vfcF_zq%$5=MohSdlb3*j= zRCWIB$v+K`#gT~r&DPic4*=?qN&6(^ujx5Y{sBjd_!~?L57HXvB<+Jpn(x!3v~d6u zW%QSMQY1m=f&hL50sII8_}_v6ey{5Cr#z|ev3ro*b+rChnNsNE{hhB7 z-V@Rv5veTz_KAR%MZkf4esKFEAv~>bj3^L*0QM;`$k_)v2?D_rNbWw;7I3hLpq2oE z40u$?d*J3s!GV1wzaObZ0P^<#&d>CtFF_yuKOB>9K>&vX+-MTWDNBHu%HK8sM?*?T z&{V%^I1s#pY^uKBG(g}K&~fiL{Mx4-IfH3cc3+-Fo%E!CN)~45YflOk&$n} zbM0_s5?DOuYIul@1yvc4?b~(3Lof;52LZ-{;vaME2rv;q?&fMl7zPW~T#bY!5YcVP zSOly$*N%(>;ksyzLcyay8yUvI=sw6WUce8?Fad`iKQc@N(O0N`VPsK6YY8R=^G-3S1AE0tw6`7$#Ft zegL?@1PbaJ0S$P}+5lD9lp#OWd!(jms5|+@=FtIe1_!m9wxwZfR diff --git a/docs/code/pdf/zi.zsh.pdf b/docs/code/pdf/zi.zsh.pdf deleted file mode 100644 index 784128a92597aa18383b5f49b67072aa02e91ef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379616 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%0D{!4Fr)GGMc&Y*_IsE)8CA6I*eW?TYR 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 From d3167cc5ef2b9052e6c4eb0acb033581b76f060d Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 02:20:51 +0000 Subject: [PATCH 017/470] update workflow --- .github/workflows/code-docs.yml | 87 --------------------------------- .github/workflows/code.yml | 40 ++++++++------- code/Makefile | 25 +++------- code/zsdoc/Makefile | 18 +++++-- code/zsdoc/ZSDOC_REAMDE.md | 50 +++++++++++++++++++ 5 files changed, 93 insertions(+), 127 deletions(-) delete mode 100644 .github/workflows/code-docs.yml create mode 100644 code/zsdoc/ZSDOC_REAMDE.md diff --git a/.github/workflows/code-docs.yml b/.github/workflows/code-docs.yml deleted file mode 100644 index a991749..0000000 --- a/.github/workflows/code-docs.yml +++ /dev/null @@ -1,87 +0,0 @@ ---- -name: ZI Code Documentation - -on: - workflow_dispatch: -# schedule: -# - cron: "30 4 * * 4" - -jobs: - doxygen: - runs-on: ubuntu-latest - steps: - - name: Install zsdoc - run: | - sudo apt-get install -y zsh - git clone https://github.com/z-shell/zsdoc.git /tmp/zsdoc - sudo make -C /tmp/zsdoc install - - name: ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 2.7 - bundler-cache: true - - name: asciidoctor-pdf - run: | - gem install asciidoctor-pdf - - uses: actions/checkout@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - name: Clone repository - run: | - git clone https://github.com/z-shell/zi.git zi - - name: Parse scripts and generate Asciidoc documents - run: | - make -C zi/docs doc - - name: Generate PDF from Asciidoc documents - run: | - make -C zi/docs/zsdoc pdf - mv -vf zi/docs/zsdoc/*.adoc docs/code/asciidoc/ - mv -vf zi/docs/zsdoc/pdf/*.pdf docs/code/pdf/ - echo "$(git log --relative-date)" > docs/COMMITLOG.md - - name: Tar Code documentation - run: | - tar cvzf code-documentation.tar.gz docs/code - - name: Upload docs.tar.gz - uses: actions/upload-artifact@v2 - with: - name: Upload Code documentation artifact - path: | - code-documentation.tar.gz - - name: Check if update required for zsdoc - run: | - git --no-pager diff docs/code - if git --no-pager diff --quiet docs/code - then - echo "The Code Doocumentation are up to date" - else - { - echo "The Code Doocumentation in the repo are not up to date" - echo 'Please regenerate them with $ make doc' - } >&2 - exit 1 - fi - - name: Commit changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "Code Documentation Update" - branch: main - # See https://git-scm.com/docs/git-commit#_options - commit_options: '--no-verify --signoff' - # See the `pathspec`-documentation for git - # - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203 - # - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec - file_pattern: docs - repository: . - commit_user_name: Z-Shell Bot - commit_user_email: z-shell@digitalclouds.dev - commit_author: Z-Shell ZI - #tagging_message: 'v1.0.0' - # See https://git-scm.com/docs/git-status#_options - status_options: '--untracked-files=no' - # See https://git-scm.com/docs/git-add#_options - #add_options: '-u' - push_options: '--force' - skip_dirty_check: true - skip_fetch: true - # Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html - disable_globbing: true diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 150fa22..792d2b0 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -1,12 +1,12 @@ --- name: Code Documentation -on: +on: workflow_dispatch: schedule: - - cron: "30 4 * * 4" + - cron: "30 4 * * 4" jobs: - doxygen: + genrate-documentation: runs-on: ubuntu-latest steps: - name: Install zsdoc @@ -29,6 +29,8 @@ jobs: run: make -C code adoc - name: Generate PDF run: make -C code/zsdoc pdf + - name: Generate HTML + run: make -C code/zsdoc html - name: Cleanup run: make -C code clean - name: Tar Code documentation @@ -38,26 +40,26 @@ jobs: with: name: Upload Code documentation artifact path: code.tar.gz -# - name: Check if update required for zsdoc -# run: | -# git --no-pager diff docs/code -# if git --no-pager diff --quiet docs/code -# then -# echo "The Code Doocumentation are up to date" -# else -# { -# echo "The Code Doocumentation in the repo are not up to date" -# echo 'Please regenerate them with $ make doc' -# } >&2 -# exit 1 -# fi + # - name: Check if update required for zsdoc + # run: | + # git --no-pager diff zsoc/zsdoc + # if git --no-pager diff --quiet code/zsdoc + # then + # echo "The Code Doocumentation are up to date" + # else + # { + # echo "The Code Doocumentation in the repo are not up to date" + # echo 'Please regenerate them with $ make adoc' + # } >&2 + # exit 1 + # fi - name: Commit changes uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "Code Documentation Update" branch: main # See https://git-scm.com/docs/git-commit#_options - commit_options: '--no-verify --signoff' + commit_options: "--no-verify --signoff" # See the `pathspec`-documentation for git # - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203 # - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec @@ -68,10 +70,10 @@ jobs: commit_author: Z-Shell ZI #tagging_message: 'v1.0.0' # See https://git-scm.com/docs/git-status#_options - status_options: '--untracked-files=no' + status_options: "--untracked-files=no" # See https://git-scm.com/docs/git-add#_options #add_options: '-u' - push_options: '--force' + push_options: "--force" skip_dirty_check: true skip_fetch: true # Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html diff --git a/code/Makefile b/code/Makefile index 74b1820..5153ce3 100644 --- a/code/Makefile +++ b/code/Makefile @@ -1,34 +1,23 @@ -all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc - -clone: clean - git clone --depth 1 --branch main https://github.com/z-shell/zi +all: clone zi/zi.zsh.zwc zi/lib/zsh/side.zsh.zwc zi/lib/zsh/install.zsh.zwc zi/lib/zsh/autoload.zsh.zwc zi/lib/zsh/additional.zsh.zwc %.zwc: % zi/lib/zcompile $< -adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh +clone: clean + git clone --depth 1 --branch main https://github.com/z-shell/zi + +adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/autoload.zsh zi/lib/zsh/additional.zsh rm -vrf zsdoc/data rm -vrf zsdoc/asciidoc/*.adoc zsd -v --scomm --cignore "(\#*FUNCTION:*{{{*|\#[[:space:]]#}}}*)" \ zi/zi.zsh \ zi/lib/zsh/side.zsh \ zi/lib/zsh/install.zsh \ - zi/lib/zsh/autoload.zsh + zi/lib/zsh/autoload.zsh \ + zi/lib/zsh/additional.zsh @mkdir -p zsdoc/asciidoc mv -v zsdoc/*.adoc zsdoc/asciidoc/ -man: - rm -vrf zsdoc/man - make -C zsdoc man - -pdf: - rm -vrf zsdoc/pdf - make -C zsdoc pdf - -html: - rm -vrf zsdoc/html - make -C zsdoc html - clean: rm -vrf zi diff --git a/code/zsdoc/Makefile b/code/zsdoc/Makefile index ee584ec..b540f2f 100644 --- a/code/zsdoc/Makefile +++ b/code/zsdoc/Makefile @@ -3,7 +3,7 @@ all: man pdf html # MAN # Converted with a2x from asciidoc package -man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 +man: man/zi.zsh.1 man/side.zsh.1 man/install.zsh.1 man/autoload.zsh.1 man/additional.zsh.1 man/zi.zsh.1: @mkdir -p man @@ -21,10 +21,14 @@ man/autoload.zsh.1: @mkdir -p man a2x --verbose -L --doctype manpage --format manpage -D man autoload.zsh.doc +man/additional.zsh.1: + @mkdir -p man + a2x --verbose -L --doctype manpage --format manpage -D man additional.zsh.doc + # PDF # Uses asciidoctor not a2x (i.e. not asciidoc) -pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf +pdf: pdf/zi.zsh.pdf pdf/side.zsh.pdf pdf/install.zsh.pdf pdf/autoload.zsh.pdf pdf/additional.zsh.pdf pdf/zi.zsh.pdf: @mkdir -p pdf @@ -42,7 +46,11 @@ pdf/autoload.zsh.pdf: @mkdir -p pdf asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf autoload.zsh.adoc -html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html +pdf/additional.zsh.pdf: + @mkdir -p pdf + asciidoctor -a reproducible -b pdf -r asciidoctor-pdf -D pdf additional.zsh.adoc + +html: html/zi.zsh.html html/side.zsh.html html/install.zsh.html html/autoload.zsh.html html/additional.zsh.html html/zi.zsh.html: @mkdir -p html @@ -60,6 +68,10 @@ html/autoload.zsh.html: @mkdir -p html asciidoctor -D html autoload.zsh.adoc +html/additional.zsh.html: + @mkdir -p html + asciidoctor -D html additional.zsh.adoc + clean: rm -rvf man pdf html data diff --git a/code/zsdoc/ZSDOC_REAMDE.md b/code/zsdoc/ZSDOC_REAMDE.md new file mode 100644 index 0000000..8f59e4d --- /dev/null +++ b/code/zsdoc/ZSDOC_REAMDE.md @@ -0,0 +1,50 @@ +The files will be processed and their documentation will be generated +in subdirectory `zsdoc` (with meta-data in subdirectory `data'). + +> Supported are Bash and Zsh scripts. + +- Reading configuration from: /usr/local/share/zsdoc/zsd.config +- Zsh control binary is: `zsh' +- Usage: zsd [-h/--help] [-v/--verbose] [-q/--quiet] [-n/--noansi] [--cignore ] {file1} [file2] ... + +Options: + +```shell +-h/--help # Usage information +-v/--verbose # More verbose operation-status output +-q/--quiet # No status messages +-n/--noansi # No colors in terminal output +--cignore # Specify which comment lines should be ignored +-f/--fpath # Paths separated by : pointing to directories with functions +--synopsis # Text to be used in SYNOPSIS section. Line break "... +\n", paragraph "...\n\n" +--blocka # String used as block-begin, default: {{{ +--blockb # String used as block-end, default: }}} +--scomm # Strip comment char "#" from function comments +--bash # Output slightly tailored to Bash specifics (instead of Zsh specifics) +``` + +Example --cignore options: + +```shell +--cignore '#*FUNCTION:*{{{*' - ignore comments like: # FUNCTION: usage {{{ +--cignore '(#*FUNCTION:*{{{*|#*FUN:*{{{*)' - also ignore comments like: # FUN: usage {{{ +``` + +File is parsed for synopsis block, which can be e.g.: + +```shell +# synopsis {{{my synopsis, can be multi-line}}} +``` + + Other block that is parsed is commenting on environment variables. There can be multiple such blocks, + +their content will be merged. Single block consists of multiple 'VAR_NAME -> var-description' lines +and results in a table in the output AsciiDoc document. An example block: + +```shell +# env-vars {{{ +# PATH -> paths to executables +# MANPATH -> paths to manuals }}} +``` + + Change the default brace block-delimeters with --blocka, --blockb. Block body should be AsciiDoc. From 067a4f96f3da7f3f50c8d374b6ac62c01e2e9eda Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 02:22:08 +0000 Subject: [PATCH 018/470] Update code.yml --- .github/workflows/code.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 792d2b0..68cf071 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -38,7 +38,7 @@ jobs: - name: Upload code.tar.gz uses: actions/upload-artifact@v2 with: - name: Upload Code documentation artifact + name: code documentation path: code.tar.gz # - name: Check if update required for zsdoc # run: | From 7651694c8fce9e4484e76217bd1ceee117953983 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 02:25:41 +0000 Subject: [PATCH 019/470] Update code.yml --- .github/workflows/code.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 68cf071..aada7f3 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -6,7 +6,7 @@ on: - cron: "30 4 * * 4" jobs: - genrate-documentation: + generate-documentation: runs-on: ubuntu-latest steps: - name: Install zsdoc From 4316ed3605ec10cfcc70c23c0ace0f94adc02136 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Tue, 14 Dec 2021 02:52:52 +0000 Subject: [PATCH 020/470] modified: Makefile --- code/Makefile | 7 +- code/zsdoc/asciidoc/additional.zsh.adoc | 165 + code/zsdoc/asciidoc/autoload.zsh.adoc | 53 +- code/zsdoc/asciidoc/install.zsh.adoc | 592 +-- code/zsdoc/asciidoc/side.zsh.adoc | 10 +- code/zsdoc/asciidoc/zi.zsh.adoc | 961 ++--- code/zsdoc/data/autoload/install.zsh/compinit | 549 --- code/zsdoc/data/autoload/side.zsh/zmv | 299 -- code/zsdoc/data/autoload/zi.zsh/add-zsh-hook | 93 - code/zsdoc/data/autoload/zi.zsh/compinit | 549 --- code/zsdoc/data/autoload/zi.zsh/is-at-least | 56 - code/zsdoc/data/bodies/autoload.zsh | 4 - code/zsdoc/data/bodies/autoload.zsh.comments | 362 -- code/zsdoc/data/bodies/install.zsh | 3 - code/zsdoc/data/bodies/install.zsh.comments | 94 - code/zsdoc/data/bodies/side.zsh | 1 - code/zsdoc/data/bodies/side.zsh.comments | 60 - code/zsdoc/data/bodies/zi.zsh | 202 - code/zsdoc/data/bodies/zi.zsh.comments | 314 -- code/zsdoc/data/call_tree.zsd | 44 - .../autoload.zsh/.zi-analytics-menu | 4 - .../autoload.zsh/.zi-any-to-uspl2 | 6 - .../descriptions/autoload.zsh/.zi-at-eval | 1 - .../autoload.zsh/.zi-build-module | 2 - .../data/descriptions/autoload.zsh/.zi-cd | 7 - .../descriptions/autoload.zsh/.zi-cdisable | 6 - .../descriptions/autoload.zsh/.zi-cenable | 6 - .../descriptions/autoload.zsh/.zi-changes | 7 - .../autoload.zsh/.zi-check-comp-consistency | 8 - .../.zi-check-which-completions-are-enabled | 8 - .../.zi-check-which-completions-are-installed | 6 - .../autoload.zsh/.zi-clear-completions | 7 - .../autoload.zsh/.zi-clear-report-for | 5 - .../autoload.zsh/.zi-compile-uncompile-all | 4 - .../descriptions/autoload.zsh/.zi-compiled | 4 - .../descriptions/autoload.zsh/.zi-confirm | 5 - .../autoload.zsh/.zi-control-menu | 4 - .../data/descriptions/autoload.zsh/.zi-create | 7 - .../data/descriptions/autoload.zsh/.zi-delete | 7 - .../autoload.zsh/.zi-diff-env-compute | 5 - .../autoload.zsh/.zi-diff-functions-compute | 5 - .../autoload.zsh/.zi-diff-options-compute | 5 - .../autoload.zsh/.zi-diff-parameter-compute | 6 - .../data/descriptions/autoload.zsh/.zi-edit | 7 - .../autoload.zsh/.zi-exists-message | 5 - .../.zi-find-completions-of-plugin | 6 - .../descriptions/autoload.zsh/.zi-format-env | 5 - .../autoload.zsh/.zi-format-functions | 4 - .../autoload.zsh/.zi-format-options | 4 - .../autoload.zsh/.zi-format-parameter | 4 - .../autoload.zsh/.zi-get-completion-owner | 10 - .../.zi-get-completion-owner-uspl2col | 6 - .../descriptions/autoload.zsh/.zi-get-path | 3 - .../data/descriptions/autoload.zsh/.zi-glance | 8 - .../data/descriptions/autoload.zsh/.zi-help | 4 - .../autoload.zsh/.zi-list-bindkeys | 1 - .../autoload.zsh/.zi-list-compdef-replay | 5 - .../data/descriptions/autoload.zsh/.zi-ls | 1 - .../data/descriptions/autoload.zsh/.zi-module | 4 - .../data/descriptions/autoload.zsh/.zi-pager | 2 - .../autoload.zsh/.zi-prepare-readlink | 4 - .../data/descriptions/autoload.zsh/.zi-recall | 1 - .../descriptions/autoload.zsh/.zi-recently | 6 - .../autoload.zsh/.zi-restore-extendedglob | 2 - .../autoload.zsh/.zi-run-delete-hooks | 1 - .../autoload.zsh/.zi-save-set-extendedglob | 3 - .../autoload.zsh/.zi-search-completions | 6 - .../descriptions/autoload.zsh/.zi-self-update | 4 - .../autoload.zsh/.zi-show-all-reports | 4 - .../autoload.zsh/.zi-show-completions | 8 - .../autoload.zsh/.zi-show-debug-report | 4 - .../autoload.zsh/.zi-show-registered-plugins | 4 - .../descriptions/autoload.zsh/.zi-show-report | 7 - .../descriptions/autoload.zsh/.zi-show-times | 4 - .../autoload.zsh/.zi-show-zstatus | 5 - .../data/descriptions/autoload.zsh/.zi-stress | 9 - .../autoload.zsh/.zi-uncompile-plugin | 7 - .../autoload.zsh/.zi-uninstall-completions | 6 - .../data/descriptions/autoload.zsh/.zi-unload | 17 - .../autoload.zsh/.zi-unregister-plugin | 3 - .../autoload.zsh/.zi-update-all-parallel | 1 - .../autoload.zsh/.zi-update-or-status | 8 - .../autoload.zsh/.zi-update-or-status-all | 6 - .../autoload.zsh/.zi-update-or-status-snippet | 6 - .../autoload.zsh/.zi-wait-for-update-jobs | 2 - .../data/descriptions/install.zsh/.zi-at-eval | 2 - .../install.zsh/.zi-compile-plugin | 5 - .../descriptions/install.zsh/.zi-compinit | 5 - .../install.zsh/.zi-download-file-stdout | 3 - .../install.zsh/.zi-download-snippet | 4 - .../data/descriptions/install.zsh/.zi-extract | 1 - .../install.zsh/.zi-forget-completion | 6 - .../install.zsh/.zi-get-cygwin-package | 1 - .../install.zsh/.zi-get-latest-gh-r-url-part | 4 - .../descriptions/install.zsh/.zi-get-package | 2 - .../install.zsh/.zi-get-url-mtime | 2 - .../install.zsh/.zi-install-completions | 9 - .../install.zsh/.zi-mirror-using-svn | 8 - .../descriptions/install.zsh/.zi-parse-json | 2 - .../install.zsh/.zi-setup-plugin-dir | 7 - .../install.zsh/.zi-update-snippet | 2 - .../data/descriptions/install.zsh/compinit | 10 - code/zsdoc/data/descriptions/install.zsh/zicp | 2 - .../data/descriptions/install.zsh/ziextract | 9 - code/zsdoc/data/descriptions/install.zsh/zimv | 2 - .../data/descriptions/install.zsh/zpextract | 2 - .../install.zsh/\342\210\236zi-atclone-hook" | 1 - .../install.zsh/\342\210\236zi-atpull-e-hook" | 1 - .../install.zsh/\342\210\236zi-atpull-hook" | 1 - .../\342\210\236zi-compile-plugin-hook" | 1 - .../install.zsh/\342\210\236zi-cp-hook" | 1 - .../install.zsh/\342\210\236zi-extract-hook" | 1 - .../install.zsh/\342\210\236zi-make-e-hook" | 1 - .../install.zsh/\342\210\236zi-make-ee-hook" | 1 - .../install.zsh/\342\210\236zi-make-hook" | 1 - .../install.zsh/\342\210\236zi-mv-hook" | 1 - .../\342\210\236zi-ps-on-update-hook" | 1 - .../install.zsh/\342\210\236zi-reset-hook" | 2 - .../side.zsh/.zi-any-colorify-as-uspl2 | 6 - .../descriptions/side.zsh/.zi-compute-ice | 15 - .../data/descriptions/side.zsh/.zi-countdown | 3 - .../side.zsh/.zi-exists-physically | 7 - .../side.zsh/.zi-exists-physically-message | 7 - .../data/descriptions/side.zsh/.zi-first | 7 - .../data/descriptions/side.zsh/.zi-store-ices | 9 - .../data/descriptions/side.zsh/.zi-two-paths | 3 - code/zsdoc/data/descriptions/side.zsh/zmv | 10 - .../descriptions/zi.zsh/+zi-deploy-message | 3 - .../data/descriptions/zi.zsh/+zi-message | 1 - .../zi.zsh/+zi-prehelp-usage-message | 1 - .../descriptions/zi.zsh/-zi_scheduler_add_sh | 4 - .../data/descriptions/zi.zsh/.zi-add-fpath | 1 - .../data/descriptions/zi.zsh/.zi-add-report | 5 - .../data/descriptions/zi.zsh/.zi-any-to-pid | 1 - .../zi.zsh/.zi-any-to-user-plugin | 8 - .../descriptions/zi.zsh/.zi-compdef-clear | 2 - .../descriptions/zi.zsh/.zi-compdef-replay | 2 - code/zsdoc/data/descriptions/zi.zsh/.zi-diff | 2 - .../data/descriptions/zi.zsh/.zi-diff-env | 5 - .../descriptions/zi.zsh/.zi-diff-functions | 5 - .../data/descriptions/zi.zsh/.zi-diff-options | 5 - .../descriptions/zi.zsh/.zi-diff-parameter | 6 - .../zi.zsh/.zi-find-other-matches | 4 - .../descriptions/zi.zsh/.zi-formatter-bar | 1 - .../zi.zsh/.zi-formatter-bar-util | 1 - .../descriptions/zi.zsh/.zi-formatter-pid | 1 - .../descriptions/zi.zsh/.zi-formatter-th-bar | 1 - .../descriptions/zi.zsh/.zi-formatter-url | 1 - .../descriptions/zi.zsh/.zi-get-mtime-into | 1 - .../descriptions/zi.zsh/.zi-get-object-path | 1 - code/zsdoc/data/descriptions/zi.zsh/.zi-ice | 3 - code/zsdoc/data/descriptions/zi.zsh/.zi-load | 5 - .../data/descriptions/zi.zsh/.zi-load-ices | 1 - .../data/descriptions/zi.zsh/.zi-load-object | 1 - .../data/descriptions/zi.zsh/.zi-load-plugin | 6 - .../data/descriptions/zi.zsh/.zi-load-snippet | 4 - .../zi.zsh/.zi-main-message-formatter | 1 - .../data/descriptions/zi.zsh/.zi-pack-ice | 4 - .../data/descriptions/zi.zsh/.zi-parse-opts | 2 - .../data/descriptions/zi.zsh/.zi-prepare-home | 2 - .../descriptions/zi.zsh/.zi-register-plugin | 4 - code/zsdoc/data/descriptions/zi.zsh/.zi-run | 3 - .../data/descriptions/zi.zsh/.zi-run-task | 12 - .../data/descriptions/zi.zsh/.zi-set-m-func | 2 - .../data/descriptions/zi.zsh/.zi-setup-params | 1 - .../data/descriptions/zi.zsh/.zi-submit-turbo | 6 - .../descriptions/zi.zsh/.zi-tmp-subst-off | 3 - .../data/descriptions/zi.zsh/.zi-tmp-subst-on | 4 - .../descriptions/zi.zsh/.zi-util-shands-path | 2 - .../descriptions/zi.zsh/:zi-reload-and-run | 12 - .../descriptions/zi.zsh/:zi-tmp-subst-alias | 4 - .../zi.zsh/:zi-tmp-subst-autoload | 5 - .../descriptions/zi.zsh/:zi-tmp-subst-bindkey | 4 - .../descriptions/zi.zsh/:zi-tmp-subst-compdef | 4 - .../descriptions/zi.zsh/:zi-tmp-subst-zle | 4 - .../descriptions/zi.zsh/:zi-tmp-subst-zstyle | 4 - code/zsdoc/data/descriptions/zi.zsh/@autoload | 2 - .../descriptions/zi.zsh/@zi-register-annex | 2 - .../descriptions/zi.zsh/@zi-register-hook | 2 - .../data/descriptions/zi.zsh/@zi-scheduler | 16 - .../data/descriptions/zi.zsh/@zi-substitute | 1 - .../zi.zsh/@zsh-plugin-run-on-unload | 3 - .../zi.zsh/@zsh-plugin-run-on-update | 2 - .../data/descriptions/zi.zsh/add-zsh-hook | 10 - code/zsdoc/data/descriptions/zi.zsh/compinit | 10 - .../data/descriptions/zi.zsh/is-at-least | 10 - code/zsdoc/data/descriptions/zi.zsh/pmodload | 2 - code/zsdoc/data/descriptions/zi.zsh/zi | 2 - code/zsdoc/data/descriptions/zi.zsh/zi-turbo | 4 - code/zsdoc/data/descriptions/zi.zsh/zicdclear | 3 - .../zsdoc/data/descriptions/zi.zsh/zicdreplay | 3 - code/zsdoc/data/descriptions/zi.zsh/zicompdef | 3 - .../zsdoc/data/descriptions/zi.zsh/zicompinit | 5 - .../zsdoc/data/descriptions/zi.zsh/zpcdreplay | 3 - .../.zi-get-package/zi.zsh/Script_Body_/ZPFX | 0 .../install.zsh/zicp/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-load-ices/zi.zsh/Script_Body_/ZPFX | 0 .../.zi-prepare-home/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZPFX | 0 .../@zi-substitute/zi.zsh/Script_Body_/ZPFX | 0 .../zsd_script_body/zi.zsh/Script_Body_/ZPFX | 0 .../zi.zsh/Script_Body_/ZSH_CACHE_DIR | 0 .../data/exports/zi.zsh/Script_Body_/PMSPEC | 1 - .../data/exports/zi.zsh/Script_Body_/ZPFX | 1 - .../exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR | 1 - code/zsdoc/data/extended/autoload.zsh | 3072 -------------- code/zsdoc/data/extended/install.zsh | 2691 ------------- code/zsdoc/data/extended/side.zsh | 670 ---- code/zsdoc/data/extended/zi.zsh | 3521 ----------------- .../features/autoload.zsh/.zi-at-eval/eval | 1 - .../data/features/autoload.zsh/.zi-cd/setopt | 1 - .../autoload.zsh/.zi-clear-completions/setopt | 1 - .../.zi-compile-uncompile-all/setopt | 1 - .../features/autoload.zsh/.zi-compiled/setopt | 1 - .../features/autoload.zsh/.zi-confirm/eval | 1 - .../features/autoload.zsh/.zi-confirm/read | 1 - .../features/autoload.zsh/.zi-create/autoload | 1 - .../features/autoload.zsh/.zi-create/setopt | 1 - .../features/autoload.zsh/.zi-create/vared | 1 - .../features/autoload.zsh/.zi-delete/setopt | 1 - .../autoload.zsh/.zi-diff-env-compute/setopt | 1 - .../.zi-diff-functions-compute/setopt | 1 - .../.zi-diff-options-compute/setopt | 1 - .../.zi-diff-parameter-compute/setopt | 1 - .../.zi-find-completions-of-plugin/setopt | 1 - .../autoload.zsh/.zi-format-parameter/setopt | 1 - .../.zi-get-completion-owner/setopt | 1 - .../features/autoload.zsh/.zi-get-path/setopt | 1 - .../features/autoload.zsh/.zi-pager/setopt | 1 - .../autoload.zsh/.zi-prepare-readlink/type | 1 - .../features/autoload.zsh/.zi-recall/setopt | 1 - .../features/autoload.zsh/.zi-recently/setopt | 1 - .../.zi-restore-extendedglob/setopt | 1 - .../autoload.zsh/.zi-run-delete-hooks/eval | 1 - .../.zi-save-set-extendedglob/setopt | 1 - .../.zi-search-completions/setopt | 1 - .../autoload.zsh/.zi-self-update/setopt | 1 - .../autoload.zsh/.zi-self-update/source | 1 - .../autoload.zsh/.zi-self-update/zcompile | 1 - .../autoload.zsh/.zi-show-completions/setopt | 1 - .../.zi-show-registered-plugins/setopt | 1 - .../autoload.zsh/.zi-show-report/setopt | 1 - .../autoload.zsh/.zi-show-times/setopt | 1 - .../autoload.zsh/.zi-show-zstatus/setopt | 1 - .../features/autoload.zsh/.zi-stress/setopt | 1 - .../features/autoload.zsh/.zi-stress/zcompile | 1 - .../autoload.zsh/.zi-uncompile-plugin/setopt | 1 - .../.zi-uninstall-completions/setopt | 1 - .../.zi-uninstall-completions/source | 1 - .../features/autoload.zsh/.zi-unload/alias | 1 - .../features/autoload.zsh/.zi-unload/bindkey | 1 - .../features/autoload.zsh/.zi-unload/eval | 1 - .../features/autoload.zsh/.zi-unload/setopt | 1 - .../features/autoload.zsh/.zi-unload/unalias | 1 - .../autoload.zsh/.zi-unload/unfunction | 1 - .../data/features/autoload.zsh/.zi-unload/zle | 1 - .../features/autoload.zsh/.zi-unload/zstyle | 1 - .../.zi-update-all-parallel/setopt | 1 - .../.zi-update-or-status-all/setopt | 1 - .../.zi-update-or-status-all/source | 1 - .../.zi-update-or-status-snippet/source | 1 - .../autoload.zsh/.zi-update-or-status/kill | 1 - .../autoload.zsh/.zi-update-or-status/read | 1 - .../autoload.zsh/.zi-update-or-status/setopt | 1 - .../autoload.zsh/.zi-update-or-status/source | 1 - .../autoload.zsh/.zi-update-or-status/trap | 1 - .../autoload.zsh/.zi-update-or-status/wait | 1 - .../.zi-wait-for-update-jobs/wait | 1 - .../features/autoload.zsh/Script_Body_/source | 1 - .../features/install.zsh/.zi-at-eval/eval | 1 - .../install.zsh/.zi-compile-plugin/eval | 1 - .../install.zsh/.zi-compile-plugin/setopt | 1 - .../install.zsh/.zi-compile-plugin/zcompile | 1 - .../install.zsh/.zi-compinit/autoload | 1 - .../install.zsh/.zi-compinit/compinit | 1 - .../features/install.zsh/.zi-compinit/setopt | 1 - .../install.zsh/.zi-compinit/unfunction | 1 - .../.zi-download-file-stdout/setopt | 1 - .../install.zsh/.zi-download-file-stdout/trap | 1 - .../install.zsh/.zi-download-file-stdout/type | 1 - .../install.zsh/.zi-download-snippet/setopt | 1 - .../install.zsh/.zi-download-snippet/trap | 1 - .../install.zsh/.zi-download-snippet/zcompile | 1 - .../features/install.zsh/.zi-extract/setopt | 1 - .../install.zsh/.zi-forget-completion/setopt | 1 - .../.zi-forget-completion/unfunction | 1 - .../install.zsh/.zi-get-cygwin-package/setopt | 1 - .../.zi-get-latest-gh-r-url-part/setopt | 1 - .../features/install.zsh/.zi-get-package/eval | 1 - .../install.zsh/.zi-get-package/setopt | 1 - .../features/install.zsh/.zi-get-package/trap | 1 - .../install.zsh/.zi-get-url-mtime/read | 1 - .../install.zsh/.zi-get-url-mtime/setopt | 1 - .../install.zsh/.zi-get-url-mtime/trap | 1 - .../install.zsh/.zi-get-url-mtime/type | 1 - .../.zi-install-completions/setopt | 1 - .../install.zsh/.zi-mirror-using-svn/setopt | 1 - .../install.zsh/.zi-parse-json/setopt | 1 - .../install.zsh/.zi-setup-plugin-dir/setopt | 1 - .../install.zsh/.zi-setup-plugin-dir/trap | 1 - .../install.zsh/.zi-update-snippet/eval | 1 - .../install.zsh/.zi-update-snippet/setopt | 1 - .../features/install.zsh/Script_Body_/source | 1 - .../features/install.zsh/compinit/autoload | 1 - .../features/install.zsh/compinit/bindkey | 1 - .../features/install.zsh/compinit/compdef | 1 - .../features/install.zsh/compinit/compdump | 1 - .../data/features/install.zsh/compinit/eval | 1 - .../data/features/install.zsh/compinit/read | 1 - .../data/features/install.zsh/compinit/setopt | 1 - .../features/install.zsh/compinit/unfunction | 1 - .../data/features/install.zsh/compinit/zle | 1 - .../data/features/install.zsh/compinit/zstyle | 1 - .../data/features/install.zsh/zicp/setopt | 1 - .../features/install.zsh/ziextract/setopt | 1 - .../features/install.zsh/ziextract/unfunction | 1 - .../features/install.zsh/ziextract/zparseopts | 1 - .../\342\210\236zi-atclone-hook/eval" | 1 - .../\342\210\236zi-atclone-hook/setopt" | 1 - .../\342\210\236zi-atpull-e-hook/setopt" | 1 - .../\342\210\236zi-atpull-hook/setopt" | 1 - .../setopt" | 1 - .../\342\210\236zi-cp-hook/setopt" | 1 - .../\342\210\236zi-mv-hook/setopt" | 1 - .../\342\210\236zi-ps-on-update-hook/eval" | 1 - .../\342\210\236zi-reset-hook/eval" | 1 - .../side.zsh/.zi-compute-ice/autoload | 1 - .../features/side.zsh/.zi-compute-ice/setopt | 1 - .../features/side.zsh/.zi-compute-ice/zmv | 1 - .../data/features/side.zsh/.zi-countdown/trap | 1 - .../.zi-exists-physically-message/setopt | 1 - .../features/side.zsh/.zi-two-paths/setopt | 1 - code/zsdoc/data/features/side.zsh/zmv/eval | 1 - code/zsdoc/data/features/side.zsh/zmv/getopts | 1 - code/zsdoc/data/features/side.zsh/zmv/read | 1 - code/zsdoc/data/features/side.zsh/zmv/setopt | 1 - .../features/zi.zsh/+zi-deploy-message/read | 1 - .../features/zi.zsh/+zi-deploy-message/zle | 1 - .../features/zi.zsh/.zi-any-to-pid/setopt | 1 - .../zi.zsh/.zi-any-to-user-plugin/setopt | 1 - .../zi.zsh/.zi-compdef-replay/compdef | 1 - .../features/zi.zsh/.zi-formatter-pid/source | 1 - .../zsdoc/data/features/zi.zsh/.zi-ice/setopt | 1 - .../data/features/zi.zsh/.zi-load-plugin/eval | 1 - .../features/zi.zsh/.zi-load-plugin/setopt | 1 - .../features/zi.zsh/.zi-load-plugin/source | 1 - .../zi.zsh/.zi-load-plugin/unfunction | 1 - .../data/features/zi.zsh/.zi-load-plugin/zle | 1 - .../features/zi.zsh/.zi-load-snippet/autoload | 1 - .../features/zi.zsh/.zi-load-snippet/eval | 1 - .../features/zi.zsh/.zi-load-snippet/setopt | 1 - .../features/zi.zsh/.zi-load-snippet/source | 1 - .../zi.zsh/.zi-load-snippet/unfunction | 1 - .../zi.zsh/.zi-load-snippet/zparseopts | 1 - .../features/zi.zsh/.zi-load-snippet/zstyle | 1 - code/zsdoc/data/features/zi.zsh/.zi-load/eval | 1 - .../data/features/zi.zsh/.zi-load/setopt | 1 - .../data/features/zi.zsh/.zi-load/source | 1 - code/zsdoc/data/features/zi.zsh/.zi-load/zle | 1 - .../features/zi.zsh/.zi-prepare-home/source | 1 - .../data/features/zi.zsh/.zi-run-task/eval | 1 - .../data/features/zi.zsh/.zi-run-task/source | 1 - .../data/features/zi.zsh/.zi-run-task/zle | 1 - .../data/features/zi.zsh/.zi-run-task/zpty | 1 - code/zsdoc/data/features/zi.zsh/.zi-run/eval | 1 - .../zsdoc/data/features/zi.zsh/.zi-run/setopt | 1 - .../features/zi.zsh/.zi-set-m-func/setopt | 1 - .../features/zi.zsh/.zi-tmp-subst-off/setopt | 1 - .../zi.zsh/.zi-tmp-subst-off/unfunction | 1 - .../features/zi.zsh/.zi-tmp-subst-on/source | 1 - .../zi.zsh/.zi-util-shands-path/setopt | 1 - .../zi.zsh/:zi-reload-and-run/autoload | 1 - .../zi.zsh/:zi-reload-and-run/unfunction | 1 - .../features/zi.zsh/:zi-tmp-subst-alias/alias | 1 - .../zi.zsh/:zi-tmp-subst-alias/setopt | 1 - .../zi.zsh/:zi-tmp-subst-alias/zparseopts | 1 - .../zi.zsh/:zi-tmp-subst-autoload/autoload | 1 - .../zi.zsh/:zi-tmp-subst-autoload/eval | 1 - .../zi.zsh/:zi-tmp-subst-autoload/is-at-least | 1 - .../zi.zsh/:zi-tmp-subst-autoload/setopt | 1 - .../zi.zsh/:zi-tmp-subst-autoload/zparseopts | 1 - .../zi.zsh/:zi-tmp-subst-bindkey/bindkey | 1 - .../zi.zsh/:zi-tmp-subst-bindkey/is-at-least | 1 - .../zi.zsh/:zi-tmp-subst-bindkey/setopt | 1 - .../zi.zsh/:zi-tmp-subst-bindkey/zparseopts | 1 - .../zi.zsh/:zi-tmp-subst-compdef/setopt | 1 - .../features/zi.zsh/:zi-tmp-subst-zle/setopt | 1 - .../features/zi.zsh/:zi-tmp-subst-zle/zle | 1 - .../zi.zsh/:zi-tmp-subst-zstyle/setopt | 1 - .../zi.zsh/:zi-tmp-subst-zstyle/zparseopts | 1 - .../zi.zsh/:zi-tmp-subst-zstyle/zstyle | 1 - .../zi.zsh/@zi-scheduler/add-zsh-hook | 1 - .../data/features/zi.zsh/@zi-scheduler/sched | 1 - .../data/features/zi.zsh/@zi-scheduler/setopt | 1 - .../data/features/zi.zsh/@zi-scheduler/zle | 1 - .../features/zi.zsh/@zi-substitute/setopt | 1 - .../features/zi.zsh/Script_Body_/add-zsh-hook | 1 - .../data/features/zi.zsh/Script_Body_/alias | 1 - .../features/zi.zsh/Script_Body_/autoload | 1 - .../data/features/zi.zsh/Script_Body_/export | 1 - .../features/zi.zsh/Script_Body_/is-at-least | 1 - .../data/features/zi.zsh/Script_Body_/setopt | 1 - .../data/features/zi.zsh/Script_Body_/source | 1 - .../features/zi.zsh/Script_Body_/zmodload | 1 - .../data/features/zi.zsh/Script_Body_/zstyle | 1 - .../features/zi.zsh/add-zsh-hook/autoload | 1 - .../data/features/zi.zsh/add-zsh-hook/getopts | 1 - .../data/features/zi.zsh/compinit/autoload | 1 - .../data/features/zi.zsh/compinit/bindkey | 1 - .../data/features/zi.zsh/compinit/compdef | 1 - .../data/features/zi.zsh/compinit/compdump | 1 - code/zsdoc/data/features/zi.zsh/compinit/eval | 1 - code/zsdoc/data/features/zi.zsh/compinit/read | 1 - .../data/features/zi.zsh/compinit/setopt | 1 - .../data/features/zi.zsh/compinit/unfunction | 1 - code/zsdoc/data/features/zi.zsh/compinit/zle | 1 - .../data/features/zi.zsh/compinit/zstyle | 1 - .../data/features/zi.zsh/pmodload/zstyle | 1 - code/zsdoc/data/features/zi.zsh/zi/autoload | 1 - code/zsdoc/data/features/zi.zsh/zi/compinit | 1 - code/zsdoc/data/features/zi.zsh/zi/eval | 1 - code/zsdoc/data/features/zi.zsh/zi/setopt | 1 - code/zsdoc/data/features/zi.zsh/zi/source | 1 - .../data/features/zi.zsh/zicompinit/autoload | 1 - .../data/features/zi.zsh/zicompinit/compinit | 1 - .../data/features/zi.zsh/zpcompinit/autoload | 1 - .../data/features/zi.zsh/zpcompinit/compinit | 1 - .../functions/autoload.zsh/.zi-analytics-menu | 23 - .../functions/autoload.zsh/.zi-any-to-uspl2 | 2 - .../data/functions/autoload.zsh/.zi-at-eval | 5 - .../functions/autoload.zsh/.zi-build-module | 41 - code/zsdoc/data/functions/autoload.zsh/.zi-cd | 15 - .../data/functions/autoload.zsh/.zi-cdisable | 27 - .../data/functions/autoload.zsh/.zi-cenable | 26 - .../data/functions/autoload.zsh/.zi-changes | 6 - .../autoload.zsh/.zi-check-comp-consistency | 11 - .../.zi-check-which-completions-are-enabled | 10 - .../.zi-check-which-completions-are-installed | 11 - .../autoload.zsh/.zi-clear-completions | 35 - .../autoload.zsh/.zi-clear-report-for | 23 - .../autoload.zsh/.zi-compile-uncompile-all | 19 - .../data/functions/autoload.zsh/.zi-compiled | 23 - .../data/functions/autoload.zsh/.zi-confirm | 22 - .../functions/autoload.zsh/.zi-control-menu | 22 - .../data/functions/autoload.zsh/.zi-create | 103 - .../data/functions/autoload.zsh/.zi-delete | 93 - .../autoload.zsh/.zi-diff-env-compute | 28 - .../autoload.zsh/.zi-diff-functions-compute | 16 - .../autoload.zsh/.zi-diff-options-compute | 16 - .../autoload.zsh/.zi-diff-parameter-compute | 27 - .../data/functions/autoload.zsh/.zi-edit | 19 - .../functions/autoload.zsh/.zi-exists-message | 7 - .../.zi-find-completions-of-plugin | 5 - .../functions/autoload.zsh/.zi-format-env | 15 - .../autoload.zsh/.zi-format-functions | 34 - .../functions/autoload.zsh/.zi-format-options | 19 - .../autoload.zsh/.zi-format-parameter | 29 - .../autoload.zsh/.zi-get-completion-owner | 19 - .../.zi-get-completion-owner-uspl2col | 2 - .../data/functions/autoload.zsh/.zi-get-path | 5 - .../data/functions/autoload.zsh/.zi-glance | 37 - .../data/functions/autoload.zsh/.zi-help | 31 - .../functions/autoload.zsh/.zi-list-bindkeys | 39 - .../autoload.zsh/.zi-list-compdef-replay | 5 - code/zsdoc/data/functions/autoload.zsh/.zi-ls | 17 - .../data/functions/autoload.zsh/.zi-module | 24 - .../data/functions/autoload.zsh/.zi-pager | 14 - .../autoload.zsh/.zi-prepare-readlink | 4 - .../data/functions/autoload.zsh/.zi-recall | 33 - .../data/functions/autoload.zsh/.zi-recently | 23 - .../autoload.zsh/.zi-restore-extendedglob | 1 - .../autoload.zsh/.zi-run-delete-hooks | 17 - .../autoload.zsh/.zi-save-set-extendedglob | 2 - .../autoload.zsh/.zi-search-completions | 39 - .../functions/autoload.zsh/.zi-self-update | 43 - .../autoload.zsh/.zi-show-all-reports | 5 - .../autoload.zsh/.zi-show-completions | 61 - .../autoload.zsh/.zi-show-debug-report | 1 - .../autoload.zsh/.zi-show-registered-plugins | 19 - .../functions/autoload.zsh/.zi-show-report | 66 - .../functions/autoload.zsh/.zi-show-times | 51 - .../functions/autoload.zsh/.zi-show-zstatus | 47 - .../data/functions/autoload.zsh/.zi-stress | 31 - .../autoload.zsh/.zi-uncompile-plugin | 20 - .../autoload.zsh/.zi-uninstall-completions | 39 - .../data/functions/autoload.zsh/.zi-unload | 380 -- .../autoload.zsh/.zi-unregister-plugin | 5 - .../autoload.zsh/.zi-update-all-parallel | 63 - .../autoload.zsh/.zi-update-or-status | 263 -- .../autoload.zsh/.zi-update-or-status-all | 96 - .../autoload.zsh/.zi-update-or-status-snippet | 28 - .../autoload.zsh/.zi-wait-for-update-jobs | 14 - .../data/functions/install.zsh/.zi-at-eval | 5 - .../functions/install.zsh/.zi-compile-plugin | 84 - .../data/functions/install.zsh/.zi-compinit | 26 - .../install.zsh/.zi-download-file-stdout | 46 - .../install.zsh/.zi-download-snippet | 309 -- .../data/functions/install.zsh/.zi-extract | 22 - .../install.zsh/.zi-forget-completion | 20 - .../install.zsh/.zi-get-cygwin-package | 70 - .../install.zsh/.zi-get-latest-gh-r-url-part | 101 - .../functions/install.zsh/.zi-get-package | 194 - .../functions/install.zsh/.zi-get-url-mtime | 34 - .../install.zsh/.zi-install-completions | 61 - .../install.zsh/.zi-mirror-using-svn | 27 - .../data/functions/install.zsh/.zi-parse-json | 102 - .../install.zsh/.zi-setup-plugin-dir | 189 - .../functions/install.zsh/.zi-update-snippet | 72 - code/zsdoc/data/functions/install.zsh/zicp | 28 - .../data/functions/install.zsh/ziextract | 274 -- code/zsdoc/data/functions/install.zsh/zimv | 3 - .../data/functions/install.zsh/zpextract | 1 - .../install.zsh/\342\210\236zi-atclone-hook" | 4 - .../install.zsh/\342\210\236zi-atpull-e-hook" | 2 - .../install.zsh/\342\210\236zi-atpull-hook" | 2 - .../\342\210\236zi-compile-plugin-hook" | 14 - .../install.zsh/\342\210\236zi-cp-hook" | 24 - .../install.zsh/\342\210\236zi-extract-hook" | 4 - .../install.zsh/\342\210\236zi-make-e-hook" | 5 - .../install.zsh/\342\210\236zi-make-ee-hook" | 5 - .../install.zsh/\342\210\236zi-make-hook" | 4 - .../install.zsh/\342\210\236zi-mv-hook" | 21 - .../\342\210\236zi-ps-on-update-hook" | 14 - .../install.zsh/\342\210\236zi-reset-hook" | 79 - .../side.zsh/.zi-any-colorify-as-uspl2 | 22 - .../data/functions/side.zsh/.zi-compute-ice | 116 - .../data/functions/side.zsh/.zi-countdown | 14 - .../functions/side.zsh/.zi-exists-physically | 6 - .../side.zsh/.zi-exists-physically-message | 22 - code/zsdoc/data/functions/side.zsh/.zi-first | 19 - .../data/functions/side.zsh/.zi-store-ices | 28 - .../data/functions/side.zsh/.zi-two-paths | 22 - .../data/functions/zi.zsh/+zi-deploy-message | 13 - code/zsdoc/data/functions/zi.zsh/+zi-message | 14 - .../zi.zsh/+zi-prehelp-usage-message | 34 - .../functions/zi.zsh/-zi_scheduler_add_sh | 7 - .../zsdoc/data/functions/zi.zsh/.zi-add-fpath | 10 - .../data/functions/zi.zsh/.zi-add-report | 3 - .../data/functions/zi.zsh/.zi-any-to-pid | 21 - .../functions/zi.zsh/.zi-any-to-user-plugin | 25 - .../data/functions/zi.zsh/.zi-compdef-clear | 3 - .../data/functions/zi.zsh/.zi-compdef-replay | 16 - code/zsdoc/data/functions/zi.zsh/.zi-diff | 4 - code/zsdoc/data/functions/zi.zsh/.zi-diff-env | 15 - .../data/functions/zi.zsh/.zi-diff-functions | 3 - .../data/functions/zi.zsh/.zi-diff-options | 2 - .../data/functions/zi.zsh/.zi-diff-parameter | 7 - .../functions/zi.zsh/.zi-find-other-matches | 17 - .../data/functions/zi.zsh/.zi-formatter-bar | 1 - .../functions/zi.zsh/.zi-formatter-bar-util | 7 - .../data/functions/zi.zsh/.zi-formatter-pid | 10 - .../functions/zi.zsh/.zi-formatter-th-bar | 1 - .../data/functions/zi.zsh/.zi-formatter-url | 19 - .../data/functions/zi.zsh/.zi-get-mtime-into | 7 - .../data/functions/zi.zsh/.zi-get-object-path | 23 - code/zsdoc/data/functions/zi.zsh/.zi-ice | 12 - code/zsdoc/data/functions/zi.zsh/.zi-load | 76 - .../zsdoc/data/functions/zi.zsh/.zi-load-ices | 22 - .../data/functions/zi.zsh/.zi-load-object | 10 - .../data/functions/zi.zsh/.zi-load-plugin | 107 - .../data/functions/zi.zsh/.zi-load-snippet | 173 - .../zi.zsh/.zi-main-message-formatter | 18 - code/zsdoc/data/functions/zi.zsh/.zi-pack-ice | 3 - .../data/functions/zi.zsh/.zi-parse-opts | 2 - .../data/functions/zi.zsh/.zi-prepare-home | 38 - .../data/functions/zi.zsh/.zi-register-plugin | 20 - code/zsdoc/data/functions/zi.zsh/.zi-run | 24 - code/zsdoc/data/functions/zi.zsh/.zi-run-task | 45 - .../data/functions/zi.zsh/.zi-set-m-func | 17 - .../data/functions/zi.zsh/.zi-setup-params | 3 - .../data/functions/zi.zsh/.zi-submit-turbo | 16 - .../data/functions/zi.zsh/.zi-tmp-subst-off | 17 - .../data/functions/zi.zsh/.zi-tmp-subst-on | 29 - .../functions/zi.zsh/.zi-util-shands-path | 8 - .../data/functions/zi.zsh/:zi-reload-and-run | 9 - .../data/functions/zi.zsh/:zi-tmp-subst-alias | 30 - .../functions/zi.zsh/:zi-tmp-subst-autoload | 106 - .../functions/zi.zsh/:zi-tmp-subst-bindkey | 107 - .../functions/zi.zsh/:zi-tmp-subst-compdef | 5 - .../data/functions/zi.zsh/:zi-tmp-subst-zle | 33 - .../functions/zi.zsh/:zi-tmp-subst-zstyle | 19 - code/zsdoc/data/functions/zi.zsh/@autoload | 3 - .../data/functions/zi.zsh/@zi-register-annex | 8 - .../data/functions/zi.zsh/@zi-register-hook | 4 - .../zsdoc/data/functions/zi.zsh/@zi-scheduler | 74 - .../data/functions/zi.zsh/@zi-substitute | 36 - .../zi.zsh/@zsh-plugin-run-on-unload | 2 - .../zi.zsh/@zsh-plugin-run-on-update | 2 - code/zsdoc/data/functions/zi.zsh/pmodload | 15 - code/zsdoc/data/functions/zi.zsh/zi | 547 --- code/zsdoc/data/functions/zi.zsh/zi-turbo | 1 - code/zsdoc/data/functions/zi.zsh/zicdclear | 1 - code/zsdoc/data/functions/zi.zsh/zicdreplay | 1 - code/zsdoc/data/functions/zi.zsh/zicompdef | 1 - code/zsdoc/data/functions/zi.zsh/zicompinit | 1 - code/zsdoc/data/functions/zi.zsh/zpcdclear | 1 - code/zsdoc/data/functions/zi.zsh/zpcdreplay | 1 - code/zsdoc/data/functions/zi.zsh/zpcompdef | 1 - code/zsdoc/data/functions/zi.zsh/zpcompinit | 1 - code/zsdoc/data/hooks/zi.zsh/@zi-scheduler | 1 - code/zsdoc/data/rev_call_tree.zsd | 57 - .../trees/autoload.zsh/.zi-any-to-uspl2.tree | 4 - .../data/trees/autoload.zsh/.zi-at-eval.tree | 4 - .../trees/autoload.zsh/.zi-build-module.tree | 4 - .../zsdoc/data/trees/autoload.zsh/.zi-cd.tree | 4 - .../data/trees/autoload.zsh/.zi-cdisable.tree | 3 - .../data/trees/autoload.zsh/.zi-cenable.tree | 3 - .../data/trees/autoload.zsh/.zi-changes.tree | 5 - .../autoload.zsh/.zi-clear-completions.tree | 4 - .../autoload.zsh/.zi-clear-report-for.tree | 3 - .../.zi-compile-uncompile-all.tree | 6 - .../data/trees/autoload.zsh/.zi-compiled.tree | 5 - .../data/trees/autoload.zsh/.zi-create.tree | 6 - .../data/trees/autoload.zsh/.zi-delete.tree | 7 - .../data/trees/autoload.zsh/.zi-edit.tree | 4 - .../autoload.zsh/.zi-exists-message.tree | 4 - .../.zi-find-completions-of-plugin.tree | 4 - .../autoload.zsh/.zi-format-options.tree | 3 - .../.zi-get-completion-owner-uspl2col.tree | 4 - .../data/trees/autoload.zsh/.zi-get-path.tree | 4 - .../data/trees/autoload.zsh/.zi-glance.tree | 6 - .../trees/autoload.zsh/.zi-list-bindkeys.tree | 4 - .../data/trees/autoload.zsh/.zi-module.tree | 3 - .../data/trees/autoload.zsh/.zi-recall.tree | 5 - .../data/trees/autoload.zsh/.zi-recently.tree | 4 - .../autoload.zsh/.zi-run-delete-hooks.tree | 4 - .../autoload.zsh/.zi-search-completions.tree | 4 - .../trees/autoload.zsh/.zi-self-update.tree | 5 - .../autoload.zsh/.zi-show-all-reports.tree | 3 - .../autoload.zsh/.zi-show-completions.tree | 4 - .../autoload.zsh/.zi-show-debug-report.tree | 3 - .../.zi-show-registered-plugins.tree | 4 - .../trees/autoload.zsh/.zi-show-report.tree | 4 - .../trees/autoload.zsh/.zi-show-times.tree | 4 - .../trees/autoload.zsh/.zi-show-zstatus.tree | 4 - .../data/trees/autoload.zsh/.zi-stress.tree | 6 - .../autoload.zsh/.zi-uncompile-plugin.tree | 5 - .../.zi-uninstall-completions.tree | 6 - .../data/trees/autoload.zsh/.zi-unload.tree | 5 - .../autoload.zsh/.zi-unregister-plugin.tree | 4 - .../autoload.zsh/.zi-update-all-parallel.tree | 6 - .../.zi-update-or-status-all.tree | 8 - .../.zi-update-or-status-snippet.tree | 5 - .../autoload.zsh/.zi-update-or-status.tree | 14 - .../.zi-wait-for-update-jobs.tree | 4 - .../data/trees/install.zsh/.zi-at-eval.tree | 4 - .../trees/install.zsh/.zi-compile-plugin.tree | 6 - .../data/trees/install.zsh/.zi-compinit.tree | 5 - .../install.zsh/.zi-download-file-stdout.tree | 4 - .../install.zsh/.zi-download-snippet.tree | 5 - .../data/trees/install.zsh/.zi-extract.tree | 6 - .../install.zsh/.zi-get-cygwin-package.tree | 4 - .../.zi-get-latest-gh-r-url-part.tree | 4 - .../trees/install.zsh/.zi-get-package.tree | 7 - .../install.zsh/.zi-install-completions.tree | 7 - .../trees/install.zsh/.zi-parse-json.tree | 3 - .../install.zsh/.zi-setup-plugin-dir.tree | 9 - .../trees/install.zsh/.zi-update-snippet.tree | 6 - .../data/trees/install.zsh/ziextract.tree | 4 - code/zsdoc/data/trees/install.zsh/zimv.tree | 4 - .../data/trees/install.zsh/zpextract.tree | 5 - .../\342\210\236zi-atclone-hook.tree" | 5 - .../\342\210\236zi-atpull-e-hook.tree" | 4 - .../\342\210\236zi-atpull-hook.tree" | 4 - .../\342\210\236zi-compile-plugin-hook.tree" | 3 - .../install.zsh/\342\210\236zi-cp-hook.tree" | 4 - .../\342\210\236zi-extract-hook.tree" | 4 - .../\342\210\236zi-make-e-hook.tree" | 5 - .../\342\210\236zi-make-ee-hook.tree" | 5 - .../\342\210\236zi-make-hook.tree" | 5 - .../install.zsh/\342\210\236zi-mv-hook.tree" | 4 - .../\342\210\236zi-ps-on-update-hook.tree" | 4 - .../\342\210\236zi-reset-hook.tree" | 4 - .../side.zsh/.zi-any-colorify-as-uspl2.tree | 5 - .../data/trees/side.zsh/.zi-compute-ice.tree | 6 - .../data/trees/side.zsh/.zi-countdown.tree | 4 - .../.zi-exists-physically-message.tree | 6 - .../trees/side.zsh/.zi-exists-physically.tree | 4 - code/zsdoc/data/trees/side.zsh/.zi-first.tree | 7 - .../data/trees/side.zsh/.zi-two-paths.tree | 4 - .../zi.zsh/+zi-prehelp-usage-message.tree | 4 - .../data/trees/zi.zsh/.zi-add-fpath.tree | 3 - .../data/trees/zi.zsh/.zi-any-to-pid.tree | 3 - .../data/trees/zi.zsh/.zi-compdef-clear.tree | 4 - .../data/trees/zi.zsh/.zi-compdef-replay.tree | 4 - code/zsdoc/data/trees/zi.zsh/.zi-diff.tree | 3 - .../data/trees/zi.zsh/.zi-formatter-bar.tree | 3 - .../data/trees/zi.zsh/.zi-formatter-pid.tree | 4 - .../trees/zi.zsh/.zi-formatter-th-bar.tree | 3 - .../trees/zi.zsh/.zi-get-object-path.tree | 3 - .../data/trees/zi.zsh/.zi-load-ices.tree | 3 - .../data/trees/zi.zsh/.zi-load-object.tree | 3 - .../data/trees/zi.zsh/.zi-load-plugin.tree | 6 - .../data/trees/zi.zsh/.zi-load-snippet.tree | 6 - code/zsdoc/data/trees/zi.zsh/.zi-load.tree | 6 - .../data/trees/zi.zsh/.zi-prepare-home.tree | 5 - .../trees/zi.zsh/.zi-register-plugin.tree | 4 - .../zsdoc/data/trees/zi.zsh/.zi-run-task.tree | 4 - code/zsdoc/data/trees/zi.zsh/.zi-run.tree | 4 - .../data/trees/zi.zsh/.zi-set-m-func.tree | 4 - .../trees/zi.zsh/:zi-tmp-subst-alias.tree | 3 - .../trees/zi.zsh/:zi-tmp-subst-autoload.tree | 5 - .../trees/zi.zsh/:zi-tmp-subst-bindkey.tree | 4 - .../trees/zi.zsh/:zi-tmp-subst-compdef.tree | 3 - .../data/trees/zi.zsh/:zi-tmp-subst-zle.tree | 3 - .../trees/zi.zsh/:zi-tmp-subst-zstyle.tree | 3 - code/zsdoc/data/trees/zi.zsh/@autoload.tree | 6 - .../data/trees/zi.zsh/@zi-scheduler.tree | 4 - .../zi.zsh/@zsh-plugin-run-on-unload.tree | 3 - .../zi.zsh/@zsh-plugin-run-on-update.tree | 3 - .../zsdoc/data/trees/zi.zsh/Script_Body_.tree | 8 - code/zsdoc/data/trees/zi.zsh/pmodload.tree | 3 - code/zsdoc/data/trees/zi.zsh/zi-turbo.tree | 39 - code/zsdoc/data/trees/zi.zsh/zi.tree | 38 - code/zsdoc/data/trees/zi.zsh/zicdclear.tree | 3 - code/zsdoc/data/trees/zi.zsh/zicdreplay.tree | 3 - code/zsdoc/data/trees/zi.zsh/zicompinit.tree | 4 - code/zsdoc/data/trees/zi.zsh/zpcdclear.tree | 3 - code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree | 3 - code/zsdoc/data/trees/zi.zsh/zpcompinit.tree | 4 - code/zsdoc/html/autoload.zsh.html | 2989 -------------- code/zsdoc/html/install.zsh.html | 1622 -------- code/zsdoc/html/side.zsh.html | 909 ----- code/zsdoc/html/zi.zsh.html | 2834 ------------- code/zsdoc/pdf/autoload.zsh.pdf | Bin 410740 -> 0 bytes code/zsdoc/pdf/install.zsh.pdf | Bin 210801 -> 0 bytes code/zsdoc/pdf/side.zsh.pdf | Bin 109159 -> 0 bytes code/zsdoc/pdf/zi.zsh.pdf | Bin 378687 -> 0 bytes 730 files changed, 987 insertions(+), 29647 deletions(-) create mode 100644 code/zsdoc/asciidoc/additional.zsh.adoc delete mode 100644 code/zsdoc/data/autoload/install.zsh/compinit delete mode 100644 code/zsdoc/data/autoload/side.zsh/zmv delete mode 100644 code/zsdoc/data/autoload/zi.zsh/add-zsh-hook delete mode 100644 code/zsdoc/data/autoload/zi.zsh/compinit delete mode 100644 code/zsdoc/data/autoload/zi.zsh/is-at-least delete mode 100644 code/zsdoc/data/bodies/autoload.zsh delete mode 100644 code/zsdoc/data/bodies/autoload.zsh.comments delete mode 100644 code/zsdoc/data/bodies/install.zsh delete mode 100644 code/zsdoc/data/bodies/install.zsh.comments delete mode 100644 code/zsdoc/data/bodies/side.zsh delete mode 100644 code/zsdoc/data/bodies/side.zsh.comments delete mode 100644 code/zsdoc/data/bodies/zi.zsh delete mode 100644 code/zsdoc/data/bodies/zi.zsh.comments delete mode 100644 code/zsdoc/data/call_tree.zsd delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-analytics-menu delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-any-to-uspl2 delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-at-eval delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-build-module delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cd delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cdisable delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-cenable delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-changes delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-comp-consistency delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-enabled delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-check-which-completions-are-installed delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-completions delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-clear-report-for delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compile-uncompile-all delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-compiled delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-confirm delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-control-menu delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-create delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-delete delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-env-compute delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-functions-compute delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-options-compute delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-diff-parameter-compute delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-edit delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-exists-message delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-find-completions-of-plugin delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-env delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-functions delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-options delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-format-parameter delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-completion-owner-uspl2col delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-get-path delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-glance delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-help delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-bindkeys delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-list-compdef-replay delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-ls delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-module delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-pager delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-prepare-readlink delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recall delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-recently delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-restore-extendedglob delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-run-delete-hooks delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-save-set-extendedglob delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-search-completions delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-self-update delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-all-reports delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-completions delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-debug-report delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-registered-plugins delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-report delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-times delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-show-zstatus delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-stress delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uncompile-plugin delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-uninstall-completions delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unload delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-unregister-plugin delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-all-parallel delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-all delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-update-or-status-snippet delete mode 100644 code/zsdoc/data/descriptions/autoload.zsh/.zi-wait-for-update-jobs delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-at-eval delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compile-plugin delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-compinit delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-file-stdout delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-download-snippet delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-extract delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-forget-completion delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-cygwin-package delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-latest-gh-r-url-part delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-package delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-get-url-mtime delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-install-completions delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-mirror-using-svn delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-parse-json delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-setup-plugin-dir delete mode 100644 code/zsdoc/data/descriptions/install.zsh/.zi-update-snippet delete mode 100644 code/zsdoc/data/descriptions/install.zsh/compinit delete mode 100644 code/zsdoc/data/descriptions/install.zsh/zicp delete mode 100644 code/zsdoc/data/descriptions/install.zsh/ziextract delete mode 100644 code/zsdoc/data/descriptions/install.zsh/zimv delete mode 100644 code/zsdoc/data/descriptions/install.zsh/zpextract delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atclone-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-e-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-atpull-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-compile-plugin-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-cp-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-extract-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-e-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-ee-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-make-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-mv-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-ps-on-update-hook" delete mode 100644 "code/zsdoc/data/descriptions/install.zsh/\342\210\236zi-reset-hook" delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-any-colorify-as-uspl2 delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-compute-ice delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-countdown delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-exists-physically-message delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-first delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-store-ices delete mode 100644 code/zsdoc/data/descriptions/side.zsh/.zi-two-paths delete mode 100644 code/zsdoc/data/descriptions/side.zsh/zmv delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-deploy-message delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-message delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/+zi-prehelp-usage-message delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/-zi_scheduler_add_sh delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-fpath delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-add-report delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-pid delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-any-to-user-plugin delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-clear delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-compdef-replay delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-env delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-functions delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-options delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-diff-parameter delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-find-other-matches delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-bar-util delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-pid delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-th-bar delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-formatter-url delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-mtime-into delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-get-object-path delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-ice delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-ices delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-object delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-plugin delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-load-snippet delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-main-message-formatter delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-pack-ice delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-parse-opts delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-prepare-home delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-register-plugin delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-run-task delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-set-m-func delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-setup-params delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-submit-turbo delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-off delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-tmp-subst-on delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/.zi-util-shands-path delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-reload-and-run delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-alias delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-autoload delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-bindkey delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-compdef delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zle delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/:zi-tmp-subst-zstyle delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@autoload delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-annex delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-register-hook delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-scheduler delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zi-substitute delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-unload delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/@zsh-plugin-run-on-update delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/add-zsh-hook delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/compinit delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/is-at-least delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/pmodload delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zi-turbo delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdclear delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicdreplay delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompdef delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zicompinit delete mode 100644 code/zsdoc/data/descriptions/zi.zsh/zpcdreplay delete mode 100644 code/zsdoc/data/env-use/install.zsh/.zi-get-package/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/install.zsh/zicp/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-any-to-user-plugin/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-ice/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-load-ices/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-prepare-home/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/.zi-util-shands-path/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/@zi-substitute/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/env-use/zi.zsh/zsd_script_body/zi.zsh/Script_Body_/ZSH_CACHE_DIR delete mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/PMSPEC delete mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZPFX delete mode 100644 code/zsdoc/data/exports/zi.zsh/Script_Body_/ZSH_CACHE_DIR delete mode 100644 code/zsdoc/data/extended/autoload.zsh delete mode 100644 code/zsdoc/data/extended/install.zsh delete mode 100644 code/zsdoc/data/extended/side.zsh delete mode 100644 code/zsdoc/data/extended/zi.zsh delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-at-eval/eval delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-cd/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-clear-completions/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compile-uncompile-all/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-compiled/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/eval delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-confirm/read delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/autoload delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-create/vared delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-delete/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-env-compute/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-functions-compute/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-options-compute/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-diff-parameter-compute/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-find-completions-of-plugin/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-format-parameter/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-completion-owner/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-get-path/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-pager/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-prepare-readlink/type delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recall/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-recently/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-restore-extendedglob/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-run-delete-hooks/eval delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-save-set-extendedglob/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-search-completions/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/source delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-self-update/zcompile delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-completions/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-registered-plugins/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-report/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-times/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-show-zstatus/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-stress/zcompile delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uncompile-plugin/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-uninstall-completions/source delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/alias delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/bindkey delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/eval delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unalias delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/unfunction delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zle delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-unload/zstyle delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-all-parallel/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-all/source delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status-snippet/source delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/kill delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/read delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/setopt delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/source delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/trap delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-update-or-status/wait delete mode 100644 code/zsdoc/data/features/autoload.zsh/.zi-wait-for-update-jobs/wait delete mode 100644 code/zsdoc/data/features/autoload.zsh/Script_Body_/source delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-at-eval/eval delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/eval delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compile-plugin/zcompile delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/autoload delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/compinit delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-compinit/unfunction delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/trap delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-file-stdout/type delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/trap delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-download-snippet/zcompile delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-extract/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-forget-completion/unfunction delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-cygwin-package/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-latest-gh-r-url-part/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/eval delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-package/trap delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/read delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/trap delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-get-url-mtime/type delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-install-completions/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-mirror-using-svn/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-parse-json/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-setup-plugin-dir/trap delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/eval delete mode 100644 code/zsdoc/data/features/install.zsh/.zi-update-snippet/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/Script_Body_/source delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/autoload delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/bindkey delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdef delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/compdump delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/eval delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/read delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/unfunction delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/zle delete mode 100644 code/zsdoc/data/features/install.zsh/compinit/zstyle delete mode 100644 code/zsdoc/data/features/install.zsh/zicp/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/ziextract/setopt delete mode 100644 code/zsdoc/data/features/install.zsh/ziextract/unfunction delete mode 100644 code/zsdoc/data/features/install.zsh/ziextract/zparseopts delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/eval" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atclone-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-e-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-atpull-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-compile-plugin-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-cp-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-mv-hook/setopt" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-ps-on-update-hook/eval" delete mode 100644 "code/zsdoc/data/features/install.zsh/\342\210\236zi-reset-hook/eval" delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/autoload delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/setopt delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-compute-ice/zmv delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-countdown/trap delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-exists-physically-message/setopt delete mode 100644 code/zsdoc/data/features/side.zsh/.zi-two-paths/setopt delete mode 100644 code/zsdoc/data/features/side.zsh/zmv/eval delete mode 100644 code/zsdoc/data/features/side.zsh/zmv/getopts delete mode 100644 code/zsdoc/data/features/side.zsh/zmv/read delete mode 100644 code/zsdoc/data/features/side.zsh/zmv/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/read delete mode 100644 code/zsdoc/data/features/zi.zsh/+zi-deploy-message/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-pid/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-any-to-user-plugin/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-compdef-replay/compdef delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-formatter-pid/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-ice/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/unfunction delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-plugin/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/unfunction delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zparseopts delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load-snippet/zstyle delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-load/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-prepare-home/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run-task/zpty delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-run/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-set-m-func/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-off/unfunction delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-tmp-subst-on/source delete mode 100644 code/zsdoc/data/features/zi.zsh/.zi-util-shands-path/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-reload-and-run/unfunction delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/alias delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-alias/zparseopts delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/is-at-least delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-autoload/zparseopts delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/bindkey delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/is-at-least delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-bindkey/zparseopts delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-compdef/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zle/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zparseopts delete mode 100644 code/zsdoc/data/features/zi.zsh/:zi-tmp-subst-zstyle/zstyle delete mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/add-zsh-hook delete mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/sched delete mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/@zi-scheduler/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/@zi-substitute/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/add-zsh-hook delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/alias delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/export delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/is-at-least delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/source delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zmodload delete mode 100644 code/zsdoc/data/features/zi.zsh/Script_Body_/zstyle delete mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/add-zsh-hook/getopts delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/bindkey delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdef delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/compdump delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/read delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/unfunction delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zle delete mode 100644 code/zsdoc/data/features/zi.zsh/compinit/zstyle delete mode 100644 code/zsdoc/data/features/zi.zsh/pmodload/zstyle delete mode 100644 code/zsdoc/data/features/zi.zsh/zi/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/zi/compinit delete mode 100644 code/zsdoc/data/features/zi.zsh/zi/eval delete mode 100644 code/zsdoc/data/features/zi.zsh/zi/setopt delete mode 100644 code/zsdoc/data/features/zi.zsh/zi/source delete mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/zicompinit/compinit delete mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/autoload delete mode 100644 code/zsdoc/data/features/zi.zsh/zpcompinit/compinit delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-analytics-menu delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-any-to-uspl2 delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-at-eval delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-build-module delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cd delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cdisable delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-cenable delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-changes delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-comp-consistency delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-enabled delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-check-which-completions-are-installed delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-completions delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-clear-report-for delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compile-uncompile-all delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-compiled delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-confirm delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-control-menu delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-create delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-delete delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-env-compute delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-functions-compute delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-options-compute delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-diff-parameter-compute delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-edit delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-exists-message delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-find-completions-of-plugin delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-env delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-functions delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-options delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-format-parameter delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-completion-owner-uspl2col delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-get-path delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-glance delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-help delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-bindkeys delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-list-compdef-replay delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-ls delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-module delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-pager delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-prepare-readlink delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recall delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-recently delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-restore-extendedglob delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-run-delete-hooks delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-save-set-extendedglob delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-search-completions delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-self-update delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-all-reports delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-completions delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-debug-report delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-registered-plugins delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-report delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-times delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-show-zstatus delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-stress delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uncompile-plugin delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-uninstall-completions delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unload delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-unregister-plugin delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-all-parallel delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-all delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-update-or-status-snippet delete mode 100644 code/zsdoc/data/functions/autoload.zsh/.zi-wait-for-update-jobs delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-at-eval delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compile-plugin delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-compinit delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-file-stdout delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-download-snippet delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-extract delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-forget-completion delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-cygwin-package delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-latest-gh-r-url-part delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-package delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-get-url-mtime delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-install-completions delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-mirror-using-svn delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-parse-json delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-setup-plugin-dir delete mode 100644 code/zsdoc/data/functions/install.zsh/.zi-update-snippet delete mode 100644 code/zsdoc/data/functions/install.zsh/zicp delete mode 100644 code/zsdoc/data/functions/install.zsh/ziextract delete mode 100644 code/zsdoc/data/functions/install.zsh/zimv delete mode 100644 code/zsdoc/data/functions/install.zsh/zpextract delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atclone-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-e-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-atpull-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-compile-plugin-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-cp-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-extract-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-e-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-ee-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-make-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-mv-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-ps-on-update-hook" delete mode 100644 "code/zsdoc/data/functions/install.zsh/\342\210\236zi-reset-hook" delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-any-colorify-as-uspl2 delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-compute-ice delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-countdown delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-exists-physically-message delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-first delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-store-ices delete mode 100644 code/zsdoc/data/functions/side.zsh/.zi-two-paths delete mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-deploy-message delete mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-message delete mode 100644 code/zsdoc/data/functions/zi.zsh/+zi-prehelp-usage-message delete mode 100644 code/zsdoc/data/functions/zi.zsh/-zi_scheduler_add_sh delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-fpath delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-add-report delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-pid delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-any-to-user-plugin delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-clear delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-compdef-replay delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-env delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-functions delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-options delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-diff-parameter delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-find-other-matches delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-bar-util delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-pid delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-th-bar delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-formatter-url delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-mtime-into delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-get-object-path delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-ice delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-ices delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-object delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-plugin delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-load-snippet delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-main-message-formatter delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-pack-ice delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-parse-opts delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-prepare-home delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-register-plugin delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-run-task delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-set-m-func delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-setup-params delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-submit-turbo delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-off delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-tmp-subst-on delete mode 100644 code/zsdoc/data/functions/zi.zsh/.zi-util-shands-path delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-reload-and-run delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-alias delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-autoload delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-bindkey delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-compdef delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zle delete mode 100644 code/zsdoc/data/functions/zi.zsh/:zi-tmp-subst-zstyle delete mode 100644 code/zsdoc/data/functions/zi.zsh/@autoload delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-annex delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-register-hook delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-scheduler delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zi-substitute delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-unload delete mode 100644 code/zsdoc/data/functions/zi.zsh/@zsh-plugin-run-on-update delete mode 100644 code/zsdoc/data/functions/zi.zsh/pmodload delete mode 100644 code/zsdoc/data/functions/zi.zsh/zi delete mode 100644 code/zsdoc/data/functions/zi.zsh/zi-turbo delete mode 100644 code/zsdoc/data/functions/zi.zsh/zicdclear delete mode 100644 code/zsdoc/data/functions/zi.zsh/zicdreplay delete mode 100644 code/zsdoc/data/functions/zi.zsh/zicompdef delete mode 100644 code/zsdoc/data/functions/zi.zsh/zicompinit delete mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdclear delete mode 100644 code/zsdoc/data/functions/zi.zsh/zpcdreplay delete mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompdef delete mode 100644 code/zsdoc/data/functions/zi.zsh/zpcompinit delete mode 100644 code/zsdoc/data/hooks/zi.zsh/@zi-scheduler delete mode 100644 code/zsdoc/data/rev_call_tree.zsd delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-any-to-uspl2.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-at-eval.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-build-module.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cd.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cdisable.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-cenable.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-changes.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-completions.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-clear-report-for.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compile-uncompile-all.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-compiled.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-create.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-delete.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-edit.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-exists-message.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-find-completions-of-plugin.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-format-options.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-completion-owner-uspl2col.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-get-path.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-glance.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-list-bindkeys.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-module.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recall.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-recently.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-run-delete-hooks.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-search-completions.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-self-update.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-all-reports.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-completions.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-debug-report.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-registered-plugins.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-report.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-times.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-show-zstatus.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-stress.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uncompile-plugin.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-uninstall-completions.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unload.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-unregister-plugin.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-all-parallel.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-all.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status-snippet.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-update-or-status.tree delete mode 100644 code/zsdoc/data/trees/autoload.zsh/.zi-wait-for-update-jobs.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-at-eval.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compile-plugin.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-compinit.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-file-stdout.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-download-snippet.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-extract.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-cygwin-package.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-latest-gh-r-url-part.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-get-package.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-install-completions.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-parse-json.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-setup-plugin-dir.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/.zi-update-snippet.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/ziextract.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/zimv.tree delete mode 100644 code/zsdoc/data/trees/install.zsh/zpextract.tree delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atclone-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-e-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-atpull-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-compile-plugin-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-cp-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-extract-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-e-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-ee-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-make-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-mv-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-ps-on-update-hook.tree" delete mode 100644 "code/zsdoc/data/trees/install.zsh/\342\210\236zi-reset-hook.tree" delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-any-colorify-as-uspl2.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-compute-ice.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-countdown.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically-message.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-exists-physically.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-first.tree delete mode 100644 code/zsdoc/data/trees/side.zsh/.zi-two-paths.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/+zi-prehelp-usage-message.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-add-fpath.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-any-to-pid.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-clear.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-compdef-replay.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-diff.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-bar.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-pid.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-formatter-th-bar.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-get-object-path.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-ices.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-object.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-plugin.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load-snippet.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-load.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-prepare-home.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-register-plugin.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run-task.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-run.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/.zi-set-m-func.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-alias.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-autoload.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-bindkey.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-compdef.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zle.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/:zi-tmp-subst-zstyle.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/@autoload.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/@zi-scheduler.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-unload.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/@zsh-plugin-run-on-update.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/Script_Body_.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/pmodload.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zi-turbo.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zi.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zicdclear.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zicdreplay.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zicompinit.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdclear.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zpcdreplay.tree delete mode 100644 code/zsdoc/data/trees/zi.zsh/zpcompinit.tree delete mode 100644 code/zsdoc/html/autoload.zsh.html delete mode 100644 code/zsdoc/html/install.zsh.html delete mode 100644 code/zsdoc/html/side.zsh.html delete mode 100644 code/zsdoc/html/zi.zsh.html delete mode 100644 code/zsdoc/pdf/autoload.zsh.pdf delete mode 100644 code/zsdoc/pdf/install.zsh.pdf delete mode 100644 code/zsdoc/pdf/side.zsh.pdf delete mode 100644 code/zsdoc/pdf/zi.zsh.pdf diff --git a/code/Makefile b/code/Makefile index 5153ce3..946d81d 100644 --- a/code/Makefile +++ b/code/Makefile @@ -16,12 +16,13 @@ adoc: clone zi/zi.zsh zi/lib/zsh/side.zsh zi/lib/zsh/install.zsh zi/lib/zsh/auto zi/lib/zsh/autoload.zsh \ zi/lib/zsh/additional.zsh @mkdir -p zsdoc/asciidoc - mv -v zsdoc/*.adoc zsdoc/asciidoc/ + cp -vf zsdoc/*.adoc zsdoc/asciidoc/ clean: - rm -vrf zi + rm -rf zi + rm -vf zsdoc/*.adoc distclean: clean - rm -vrf zsdoc/data + rm -rf zsdoc/data .PHONY: all clean clone man pdf html adoc diff --git a/code/zsdoc/asciidoc/additional.zsh.adoc b/code/zsdoc/asciidoc/additional.zsh.adoc new file mode 100644 index 0000000..357fcf8 --- /dev/null +++ b/code/zsdoc/asciidoc/additional.zsh.adoc @@ -0,0 +1,165 @@ +additional.zsh(1) +================= +:compat-mode!: + +NAME +---- +additional.zsh - a shell script + +SYNOPSIS +-------- +Documentation automatically generated with `zsdoc' + +FUNCTIONS +--------- + + .zi-clear-debug-report + .zi-debug-start + .zi-debug-stop + .zi-debug-unload + .zi-service + :zi-tmp-subst-source + .zi-wrap-track-functions + +DETAILS +------- + +Script Body +~~~~~~~~~~~ + +Has 1 line(s). No functions are called (may set up e.g. a hook, a Zle widget bound to a key, etc.). + +.zi-clear-debug-report +~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-clear-debug-report [[[ + Forgets dtrace repport gathered up to this moment. +____ + +Has 1 line(s). Calls functions: + + .zi-clear-debug-report + `-- autoload.zsh/.zi-clear-report-for + +Called by: + + autoload.zsh/.zi-unload + zi.zsh/zi + +.zi-debug-start +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-start [[[ + Starts Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 9 line(s). Calls functions: + + .zi-debug-start + |-- zi.zsh/.zi-diff + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-tmp-subst-on + +Called by: + + zi.zsh/zi + +.zi-debug-stop +~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-stop [[[ + Stops Dtrace, i.e. session tracking for changes in Zsh state. +____ + +Has 3 line(s). Calls functions: + + .zi-debug-stop + |-- zi.zsh/.zi-diff + `-- zi.zsh/.zi-tmp-subst-off + +Called by: + + zi.zsh/zi + +.zi-debug-unload +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-debug-unload [[[ + Reverts changes detected by dtrace run. +____ + +Has 6 line(s). Calls functions: + + .zi-debug-unload + |-- autoload.zsh/.zi-unload + `-- zi.zsh/+zi-message + +Uses feature(s): _source_ + +Called by: + + zi.zsh/zi + +.zi-service +~~~~~~~~~~~ + +____ + + ]]] + FUNCTION: .zi-service [[[ + Handles given service, i.e. obtains lock, runs it, or waits if no lock + + $1 - type "p" or "s" (plugin or snippet) + $2 - mode - for plugin (light or load) + $3 - id - URL or plugin ID or alias name (from id-as'') +____ + +Has 29 line(s). Calls functions: + + .zi-service + |-- zi.zsh/.zi-load + `-- zi.zsh/.zi-load-snippet + +Uses feature(s): _kill_, _read_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +:zi-tmp-subst-source +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-tmp-subst-source [[[ +____ + +Has 25 line(s). Calls functions: + + :zi-tmp-subst-source + `-- zi.zsh/+zi-message + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +.zi-wrap-track-functions +~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-wrap-track-functions [[[ +____ + +Has 19 line(s). Doesn't call other functions. + +Uses feature(s): _eval_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + diff --git a/code/zsdoc/asciidoc/autoload.zsh.adoc b/code/zsdoc/asciidoc/autoload.zsh.adoc index 834b74c..7c63567 100644 --- a/code/zsdoc/asciidoc/autoload.zsh.adoc +++ b/code/zsdoc/asciidoc/autoload.zsh.adoc @@ -26,8 +26,8 @@ FUNCTIONS .zi-check-which-completions-are-installed .zi-clear-completions .zi-clear-report-for - .zi-compile-uncompile-all .zi-compiled + .zi-compile-uncompile-all .zi-confirm .zi-control-menu .zi-create @@ -336,8 +336,8 @@ Uses feature(s): _setopt_ Called by: - zi.zsh/.zi-prepare-home zi.zsh/zi + zi.zsh/.zi-prepare-home .zi-clear-report-for ~~~~~~~~~~~~~~~~~~~~ @@ -358,22 +358,22 @@ Has 23 line(s). Calls functions: Called by: .zi-unload + additional.zsh/.zi-clear-debug-report -.zi-compile-uncompile-all -~~~~~~~~~~~~~~~~~~~~~~~~~ +.zi-compiled +~~~~~~~~~~~~ ____ - FUNCTION: .zi-compile-uncompile-all [[[ - Compiles or uncompiles all existing (on disk) plugins. + FUNCTION: .zi-compiled [[[ + Displays list of plugins that are compiled. User-action entry point. ____ -Has 19 line(s). Calls functions: +Has 23 line(s). Calls functions: - .zi-compile-uncompile-all - |-- install.zsh/.zi-compile-plugin + .zi-compiled |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -383,20 +383,21 @@ Called by: zi.zsh/zi -.zi-compiled -~~~~~~~~~~~~ +.zi-compile-uncompile-all +~~~~~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-compiled [[[ - Displays list of plugins that are compiled. + FUNCTION: .zi-compile-uncompile-all [[[ + Compiles or uncompiles all existing (on disk) plugins. User-action entry point. ____ -Has 23 line(s). Calls functions: +Has 19 line(s). Calls functions: - .zi-compiled + .zi-compile-uncompile-all + |-- install.zsh/.zi-compile-plugin |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -486,9 +487,9 @@ Has 93 line(s). Calls functions: .zi-delete |-- side.zsh/.zi-compute-ice - |-- zi.zsh/+zi-prehelp-usage-message |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-parse-opts + |-- zi.zsh/.zi-parse-opts + `-- zi.zsh/+zi-prehelp-usage-message Uses feature(s): _setopt_ @@ -1077,8 +1078,8 @@ ____ Has 43 line(s). Calls functions: .zi-self-update - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-get-mtime-into + |-- zi.zsh/.zi-get-mtime-into + `-- zi.zsh/+zi-message Uses feature(s): _setopt_, _source_, _zcompile_ @@ -1352,6 +1353,7 @@ ____ Has 380 line(s). Calls functions: .zi-unload + |-- additional.zsh/.zi-clear-debug-report |-- side.zsh/.zi-any-colorify-as-uspl2 `-- zi.zsh/.zi-any-to-user-plugin @@ -1359,8 +1361,9 @@ Uses feature(s): _alias_, _bindkey_, _eval_, _setopt_, _unalias_, _unfunction_, Called by: - zi.zsh/.zi-run-task + additional.zsh/.zi-debug-unload zi.zsh/zi + zi.zsh/.zi-run-task .zi-unregister-plugin ~~~~~~~~~~~~~~~~~~~~~ @@ -1393,8 +1396,8 @@ Has 63 line(s). Calls functions: .zi-update-all-parallel |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ @@ -1428,8 +1431,8 @@ Has 263 line(s). Calls functions: |-- side.zsh/.zi-exists-physically-message |-- side.zsh/.zi-store-ices |-- side.zsh/.zi-two-paths - |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/+zi-message `-- zi.zsh/.zi-set-m-func Uses feature(s): _kill_, _read_, _setopt_, _source_, _trap_, _wait_ @@ -1458,9 +1461,9 @@ Has 96 line(s). Calls functions: .zi-update-or-status-all |-- install.zsh/.zi-compinit |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-user-plugin - `-- zi.zsh/.zi-get-mtime-into + |-- zi.zsh/.zi-get-mtime-into + `-- zi.zsh/+zi-message Uses feature(s): _setopt_, _source_ diff --git a/code/zsdoc/asciidoc/install.zsh.adoc b/code/zsdoc/asciidoc/install.zsh.adoc index 4d06554..8dad434 100644 --- a/code/zsdoc/asciidoc/install.zsh.adoc +++ b/code/zsdoc/asciidoc/install.zsh.adoc @@ -13,38 +13,38 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- + ∞zi-atclone-hook .zi-at-eval + ∞zi-atpull-e-hook + ∞zi-atpull-hook .zi-compile-plugin + ∞zi-compile-plugin-hook .zi-compinit + zicp + ∞zi-cp-hook .zi-download-file-stdout .zi-download-snippet .zi-extract + ziextract + ∞zi-extract-hook .zi-forget-completion .zi-get-cygwin-package .zi-get-latest-gh-r-url-part .zi-get-package .zi-get-url-mtime .zi-install-completions - .zi-mirror-using-svn - .zi-parse-json - .zi-setup-plugin-dir - .zi-update-snippet - zicp - ziextract - zimv - zpextract - ∞zi-atclone-hook - ∞zi-atpull-e-hook - ∞zi-atpull-hook - ∞zi-compile-plugin-hook - ∞zi-cp-hook - ∞zi-extract-hook - ∞zi-make-e-hook ∞zi-make-ee-hook + ∞zi-make-e-hook ∞zi-make-hook + .zi-mirror-using-svn + zimv ∞zi-mv-hook + .zi-parse-json ∞zi-ps-on-update-hook ∞zi-reset-hook + .zi-setup-plugin-dir + .zi-update-snippet + zpextract AUTOLOAD compinit DETAILS @@ -57,6 +57,24 @@ Has 3 line(s). No functions are called (may set up e.g. a hook, a Zle widget bou Uses feature(s): _source_ +∞zi-atclone-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atclone-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-atclone-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Uses feature(s): _eval_, _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-at-eval ~~~~~~~~~~~ @@ -78,6 +96,40 @@ Called by: ∞zi-atpull-e-hook ∞zi-atpull-hook +∞zi-atpull-e-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-e-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-e-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-atpull-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-atpull-hook [[[ +____ + +Has 2 line(s). Calls functions: + + ∞zi-atpull-hook + `-- side.zsh/.zi-countdown + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-compile-plugin ~~~~~~~~~~~~~~~~~~ @@ -105,6 +157,22 @@ Called by: autoload.zsh/.zi-compile-uncompile-all zi.zsh/zi +∞zi-compile-plugin-hook +~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-compile-plugin-hook [[[ +____ + +Has 14 line(s). Calls functions: + + ∞zi-compile-plugin-hook + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-compinit ~~~~~~~~~~~~ @@ -130,8 +198,44 @@ Called by: .zi-install-completions autoload.zsh/.zi-uninstall-completions autoload.zsh/.zi-update-or-status-all - zi.zsh/.zi-prepare-home zi.zsh/zi + zi.zsh/.zi-prepare-home + +zicp +~~~~ + +____ + + ]]] + FUNCTION zicp [[[ +____ + +Has 28 line(s). Doesn't call other functions. + +Uses feature(s): _setopt_ + +Called by: + + zimv + +_Environment variables used:_ zi.zsh -> ZPFX + +∞zi-cp-hook +~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-cp-hook [[[ +____ + +Has 24 line(s). Calls functions: + + ∞zi-cp-hook + `-- zi.zsh/@zi-substitute + +Uses feature(s): _setopt_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). .zi-download-file-stdout ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -192,9 +296,9 @@ ____ Has 22 line(s). Calls functions: .zi-extract - |-- zi.zsh/+zi-message - `-- ziextract - `-- zi.zsh/+zi-message + |-- ziextract + |   `-- zi.zsh/+zi-message + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ @@ -202,6 +306,51 @@ Called by: ∞zi-extract-hook +ziextract +~~~~~~~~~ + +____ + + ]]] + FUNCTION: ziextract [[[ + If the file is an archive, it is extracted by this function. + Next stage is scanning of files with the common utility `file', + to detect executables. They are given +x mode. There are also + messages to the user on performed actions. + + $1 - url + $2 - file +____ + +Has 274 line(s). Calls functions: + + ziextract + `-- zi.zsh/+zi-message + +Uses feature(s): _setopt_, _unfunction_, _zparseopts_ + +Called by: + + .zi-extract + .zi-get-package + .zi-setup-plugin-dir + zpextract + +∞zi-extract-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-extract-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-extract-hook + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-forget-completion ~~~~~~~~~~~~~~~~~~~~~ @@ -280,10 +429,10 @@ ____ Has 194 line(s). Calls functions: .zi-get-package + |-- ziextract + |   `-- zi.zsh/+zi-message |-- zi.zsh/+zi-message - |-- zi.zsh/@zi-substitute - `-- ziextract - `-- zi.zsh/+zi-message + `-- zi.zsh/@zi-substitute Uses feature(s): _eval_, _setopt_, _trap_ @@ -331,8 +480,8 @@ Has 61 line(s). Calls functions: .zi-install-completions |-- side.zsh/.zi-any-colorify-as-uspl2 |-- side.zsh/.zi-exists-physically-message - |-- zi.zsh/+zi-message - `-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ @@ -342,6 +491,54 @@ Called by: .zi-setup-plugin-dir zi.zsh/zi +∞zi-make-ee-hook +~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-ee-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-ee-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-e-hook +~~~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-e-hook [[[ +____ + +Has 5 line(s). Calls functions: + + ∞zi-make-e-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +∞zi-make-hook +~~~~~~~~~~~~~ + +____ + + FUNCTION: ∞zi-make-hook [[[ +____ + +Has 4 line(s). Calls functions: + + ∞zi-make-hook + |-- side.zsh/.zi-countdown + `-- zi.zsh/@zi-substitute + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-mirror-using-svn ~~~~~~~~~~~~~~~~~~~~ @@ -365,357 +562,160 @@ Called by: .zi-download-snippet -.zi-parse-json -~~~~~~~~~~~~~~ +zimv +~~~~ ____ - FUNCTION: .zi-parse-json [[[ - Retrievies the ice-list from given profile from the JSON of the package.json. + ]]] + FUNCTION zimv [[[ ____ -Has 102 line(s). Calls functions: +Has 3 line(s). Calls functions: - .zi-parse-json + zimv + `-- zicp -Uses feature(s): _setopt_ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -Called by: - - .zi-get-package - -.zi-setup-plugin-dir -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-setup-plugin-dir [[[ - Clones given plugin into PLUGIN_DIR. Supports multiple - sites (respecting `from' and `proto' ice modifiers). - Invokes compilation of plugin's main file. - - $1 - user - $2 - plugin -____ - -Has 189 line(s). Calls functions: - - .zi-setup-plugin-dir - |-- side.zsh/.zi-any-colorify-as-uspl2 - |-- side.zsh/.zi-store-ices - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _trap_ - -Called by: - - autoload.zsh/.zi-update-or-status - zi.zsh/.zi-load - -.zi-update-snippet -~~~~~~~~~~~~~~~~~~ - -____ - - ]]] - FUNCTION: .zi-update-snippet [[[ -____ - -Has 72 line(s). Calls functions: - - .zi-update-snippet - |-- zi.zsh/+zi-message - |-- zi.zsh/.zi-get-object-path - `-- zi.zsh/.zi-pack-ice - -Uses feature(s): _eval_, _setopt_ - -Called by: - - autoload.zsh/.zi-update-or-status-snippet - -zicp -~~~~ - -____ - - ]]] - FUNCTION zicp [[[ -____ - -Has 28 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - zimv - -_Environment variables used:_ zi.zsh -> ZPFX - -ziextract -~~~~~~~~~ - -____ - - ]]] - FUNCTION: ziextract [[[ - If the file is an archive, it is extracted by this function. - Next stage is scanning of files with the common utility `file', - to detect executables. They are given +x mode. There are also - messages to the user on performed actions. - - $1 - url - $2 - file -____ - -Has 274 line(s). Calls functions: - - ziextract - `-- zi.zsh/+zi-message - -Uses feature(s): _setopt_, _unfunction_, _zparseopts_ - -Called by: - - .zi-extract - .zi-get-package - .zi-setup-plugin-dir - zpextract - -zimv -~~~~ - -____ - - ]]] - FUNCTION zimv [[[ -____ - -Has 3 line(s). Calls functions: - - zimv - `-- zicp - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zpextract -~~~~~~~~~ +∞zi-mv-hook +~~~~~~~~~~~ ____ - ]]] - FUNCTION: zpextract [[[ -____ - -Has 1 line(s). Calls functions: - - zpextract - `-- ziextract - `-- zi.zsh/+zi-message - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atclone-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atclone-hook [[[ + FUNCTION: ∞zi-mv-hook [[[ ____ -Has 4 line(s). Calls functions: +Has 21 line(s). Calls functions: - ∞zi-atclone-hook - |-- side.zsh/.zi-countdown + ∞zi-mv-hook `-- zi.zsh/@zi-substitute -Uses feature(s): _eval_, _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-atpull-e-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-atpull-e-hook [[[ -____ - -Has 2 line(s). Calls functions: - - ∞zi-atpull-e-hook - `-- side.zsh/.zi-countdown - Uses feature(s): _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -∞zi-atpull-hook -~~~~~~~~~~~~~~~ +.zi-parse-json +~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-atpull-hook [[[ + FUNCTION: .zi-parse-json [[[ + Retrievies the ice-list from given profile from the JSON of the package.json. ____ -Has 2 line(s). Calls functions: +Has 102 line(s). Calls functions: - ∞zi-atpull-hook - `-- side.zsh/.zi-countdown + .zi-parse-json Uses feature(s): _setopt_ -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +Called by: -∞zi-compile-plugin-hook -~~~~~~~~~~~~~~~~~~~~~~~ + .zi-get-package + +∞zi-ps-on-update-hook +~~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-compile-plugin-hook [[[ + FUNCTION: ∞zi-ps-on-update-hook [[[ ____ Has 14 line(s). Calls functions: - ∞zi-compile-plugin-hook + ∞zi-ps-on-update-hook + `-- zi.zsh/+zi-message -Uses feature(s): _setopt_ +Uses feature(s): _eval_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -∞zi-cp-hook -~~~~~~~~~~~ +∞zi-reset-hook +~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-cp-hook [[[ + ]]] + FUNCTION: ∞zi-reset-opt-hook [[[ ____ -Has 24 line(s). Calls functions: - - ∞zi-cp-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-extract-hook -~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-extract-hook [[[ -____ +Has 79 line(s). Calls functions: -Has 4 line(s). Calls functions: + ∞zi-reset-hook + `-- zi.zsh/+zi-message - ∞zi-extract-hook - `-- zi.zsh/@zi-substitute +Uses feature(s): _eval_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -∞zi-make-e-hook -~~~~~~~~~~~~~~~ +.zi-setup-plugin-dir +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-make-e-hook [[[ -____ - -Has 5 line(s). Calls functions: - - ∞zi-make-e-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-ee-hook -~~~~~~~~~~~~~~~~ - -____ + FUNCTION: .zi-setup-plugin-dir [[[ + Clones given plugin into PLUGIN_DIR. Supports multiple + sites (respecting `from' and `proto' ice modifiers). + Invokes compilation of plugin's main file. - FUNCTION: ∞zi-make-ee-hook [[[ + $1 - user + $2 - plugin ____ -Has 5 line(s). Calls functions: - - ∞zi-make-ee-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-make-hook -~~~~~~~~~~~~~ +Has 189 line(s). Calls functions: -____ - - FUNCTION: ∞zi-make-hook [[[ -____ + .zi-setup-plugin-dir + |-- side.zsh/.zi-any-colorify-as-uspl2 + |-- side.zsh/.zi-store-ices + |-- ziextract + |   `-- zi.zsh/+zi-message + |-- zi.zsh/.zi-get-object-path + `-- zi.zsh/+zi-message -Has 4 line(s). Calls functions: +Uses feature(s): _setopt_, _trap_ - ∞zi-make-hook - |-- side.zsh/.zi-countdown - `-- zi.zsh/@zi-substitute +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + autoload.zsh/.zi-update-or-status + zi.zsh/.zi-load -∞zi-mv-hook -~~~~~~~~~~~ +.zi-update-snippet +~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: ∞zi-mv-hook [[[ + ]]] + FUNCTION: .zi-update-snippet [[[ ____ -Has 21 line(s). Calls functions: - - ∞zi-mv-hook - `-- zi.zsh/@zi-substitute - -Uses feature(s): _setopt_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -∞zi-ps-on-update-hook -~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: ∞zi-ps-on-update-hook [[[ -____ +Has 72 line(s). Calls functions: -Has 14 line(s). Calls functions: + .zi-update-snippet + |-- zi.zsh/.zi-get-object-path + |-- zi.zsh/+zi-message + `-- zi.zsh/.zi-pack-ice - ∞zi-ps-on-update-hook - `-- zi.zsh/+zi-message +Uses feature(s): _eval_, _setopt_ -Uses feature(s): _eval_ +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + autoload.zsh/.zi-update-or-status-snippet -∞zi-reset-hook -~~~~~~~~~~~~~~ +zpextract +~~~~~~~~~ ____ ]]] - FUNCTION: ∞zi-reset-opt-hook [[[ + FUNCTION: zpextract [[[ ____ -Has 79 line(s). Calls functions: - - ∞zi-reset-hook - `-- zi.zsh/+zi-message +Has 1 line(s). Calls functions: -Uses feature(s): _eval_ + zpextract + `-- ziextract + `-- zi.zsh/+zi-message Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). diff --git a/code/zsdoc/asciidoc/side.zsh.adoc b/code/zsdoc/asciidoc/side.zsh.adoc index da9afa2..b80bdb7 100644 --- a/code/zsdoc/asciidoc/side.zsh.adoc +++ b/code/zsdoc/asciidoc/side.zsh.adoc @@ -54,8 +54,8 @@ Called by: .zi-exists-physically-message autoload.zsh/.zi-clear-completions - autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-compiled + autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-create autoload.zsh/.zi-exists-message autoload.zsh/.zi-get-completion-owner-uspl2col @@ -110,8 +110,8 @@ Called by: autoload.zsh/.zi-delete autoload.zsh/.zi-edit autoload.zsh/.zi-recall - autoload.zsh/.zi-update-or-status-snippet autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-update-or-status-snippet install.zsh/.zi-compile-plugin .zi-countdown @@ -137,8 +137,8 @@ Called by: install.zsh/∞zi-atclone-hook install.zsh/∞zi-atpull-e-hook install.zsh/∞zi-atpull-hook - install.zsh/∞zi-make-e-hook install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-e-hook install.zsh/∞zi-make-hook .zi-exists-physically @@ -183,9 +183,9 @@ ____ Has 22 line(s). Calls functions: .zi-exists-physically-message - |-- zi.zsh/+zi-message |-- zi.zsh/.zi-any-to-pid - `-- zi.zsh/.zi-any-to-user-plugin + |-- zi.zsh/.zi-any-to-user-plugin + `-- zi.zsh/+zi-message Uses feature(s): _setopt_ diff --git a/code/zsdoc/asciidoc/zi.zsh.adoc b/code/zsdoc/asciidoc/zi.zsh.adoc index 6f1cba4..f33bfb9 100644 --- a/code/zsdoc/asciidoc/zi.zsh.adoc +++ b/code/zsdoc/asciidoc/zi.zsh.adoc @@ -13,16 +13,20 @@ Documentation automatically generated with `zsdoc' FUNCTIONS --------- - +zi-deploy-message - +zi-message - +zi-prehelp-usage-message - -zi_scheduler_add_sh + @autoload + pmodload + zi .zi-add-fpath .zi-add-report .zi-any-to-pid .zi-any-to-user-plugin + zicdclear + zicdreplay + zicompdef .zi-compdef-clear .zi-compdef-replay + zicompinit + +zi-deploy-message .zi-diff .zi-diff-env .zi-diff-functions @@ -43,42 +47,38 @@ FUNCTIONS .zi-load-plugin .zi-load-snippet .zi-main-message-formatter + +zi-message .zi-pack-ice .zi-parse-opts + +zi-prehelp-usage-message .zi-prepare-home + @zi-register-annex + @zi-register-hook .zi-register-plugin + :zi-reload-and-run .zi-run .zi-run-task + -zi_scheduler_add_sh .zi-set-m-func .zi-setup-params .zi-submit-turbo - .zi-tmp-subst-off - .zi-tmp-subst-on - .zi-util-shands-path - :zi-reload-and-run + @zi-substitute :zi-tmp-subst-alias :zi-tmp-subst-autoload :zi-tmp-subst-bindkey :zi-tmp-subst-compdef + .zi-tmp-subst-off + .zi-tmp-subst-on :zi-tmp-subst-zle :zi-tmp-subst-zstyle - @autoload - @zi-register-annex - @zi-register-hook - @zi-substitute - @zsh-plugin-run-on-unload - @zsh-plugin-run-on-update - pmodload - zi zi-turbo - zicdclear - zicdreplay - zicompdef - zicompinit + .zi-util-shands-path zpcdclear zpcdreplay zpcompdef zpcompinit + @zsh-plugin-run-on-unload + @zsh-plugin-run-on-update AUTOLOAD add-zsh-hook AUTOLOAD compinit AUTOLOAD is-at-least @@ -93,116 +93,108 @@ Script Body Has 202 line(s). Calls functions: Script-Body - |-- +zi-message - |-- @zi-register-hook |-- add-zsh-hook |-- autoload.zsh/.zi-module - `-- is-at-least + |-- is-at-least + |-- +zi-message + `-- @zi-register-hook Uses feature(s): _add-zsh-hook_, _alias_, _autoload_, _export_, _is-at-least_, _setopt_, _source_, _zmodload_, _zstyle_ _Exports (environment):_ PMSPEC [big]*//* ZPFX [big]*//* ZSH_CACHE_DIR -+zi-deploy-message -~~~~~~~~~~~~~~~~~~ +@autoload +~~~~~~~~~ ____ - FUNCTION: +zi-deploy-message. [[[ - Deploys a sub-prompt message to be displayed OR a `zle - .reset-prompt' call to be invoked + ]]] + FUNCTION: @autoload. [[[ ____ -Has 13 line(s). Doesn't call other functions. - -Uses feature(s): _read_, _zle_ +Has 3 line(s). Calls functions: -Called by: + @autoload + `-- :zi-tmp-subst-autoload + |-- is-at-least + `-- +zi-message - .zi-load-snippet - .zi-load - autoload.zsh/.zi-recall +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -+zi-message -~~~~~~~~~~~ +pmodload +~~~~~~~~ ____ - FUNCTION: +zi-message. [[[ + FUNCTION: pmodload. [[[ + Compatibility with Prezto. Calls can be recursive. ____ -Has 14 line(s). Doesn't call other functions. +Has 15 line(s). Calls functions: -Called by: + pmodload - +zi-prehelp-usage-message - .zi-compdef-clear - .zi-compdef-replay - .zi-load-snippet - .zi-register-plugin - .zi-run - .zi-set-m-func - :zi-tmp-subst-autoload - Script-Body - zi - autoload.zsh/.zi-build-module - autoload.zsh/.zi-cd - autoload.zsh/.zi-self-update - autoload.zsh/.zi-show-zstatus - autoload.zsh/.zi-uninstall-completions - autoload.zsh/.zi-update-all-parallel - autoload.zsh/.zi-update-or-status-all - autoload.zsh/.zi-update-or-status - autoload.zsh/.zi-wait-for-update-jobs - install.zsh/.zi-compile-plugin - install.zsh/.zi-compinit - install.zsh/.zi-download-file-stdout - install.zsh/.zi-download-snippet - install.zsh/.zi-extract - install.zsh/.zi-get-cygwin-package - install.zsh/.zi-get-latest-gh-r-url-part - install.zsh/.zi-get-package - install.zsh/.zi-install-completions - install.zsh/.zi-setup-plugin-dir - install.zsh/.zi-update-snippet - install.zsh/ziextract - install.zsh/∞zi-ps-on-update-hook - install.zsh/∞zi-reset-hook - side.zsh/.zi-countdown - side.zsh/.zi-exists-physically-message +Uses feature(s): _zstyle_ -+zi-prehelp-usage-message -~~~~~~~~~~~~~~~~~~~~~~~~~ +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zi +~~ ____ - FUNCTION: +zi-prehelp-usage-message. [[[ + FUNCTION: zi. [[[ + Main function directly exposed to user, obtains subcommand and its arguments, has completion. ____ -Has 34 line(s). Calls functions: - - +zi-prehelp-usage-message - `-- +zi-message - -Called by: +Has 547 line(s). Calls functions: zi - autoload.zsh/.zi-delete - --zi_scheduler_add_sh -~~~~~~~~~~~~~~~~~~~~ + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload + |-- autoload.zsh/.zi-analytics-menu + |-- autoload.zsh/.zi-cdisable + |-- autoload.zsh/.zi-cenable + |-- autoload.zsh/.zi-clear-completions + |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-compile-uncompile-all + |-- autoload.zsh/.zi-control-menu + |-- autoload.zsh/.zi-help + |-- autoload.zsh/.zi-list-bindkeys + |-- autoload.zsh/.zi-list-compdef-replay + |-- autoload.zsh/.zi-ls + |-- autoload.zsh/.zi-module + |-- autoload.zsh/.zi-recently + |-- autoload.zsh/.zi-search-completions + |-- autoload.zsh/.zi-self-update + |-- autoload.zsh/.zi-show-all-reports + |-- autoload.zsh/.zi-show-completions + |-- autoload.zsh/.zi-show-debug-report + |-- autoload.zsh/.zi-show-registered-plugins + |-- autoload.zsh/.zi-show-report + |-- autoload.zsh/.zi-show-times + |-- autoload.zsh/.zi-show-zstatus + |-- autoload.zsh/.zi-uncompile-plugin + |-- autoload.zsh/.zi-uninstall-completions + |-- autoload.zsh/.zi-unload + |-- autoload.zsh/.zi-update-or-status + |-- autoload.zsh/.zi-update-or-status-all + |-- compinit + |-- install.zsh/.zi-compile-plugin + |-- install.zsh/.zi-compinit + |-- install.zsh/.zi-forget-completion + |-- install.zsh/.zi-install-completions + |-- +zi-message + `-- +zi-prehelp-usage-message + `-- +zi-message -____ - - FUNCTION: -zi_scheduler_add_sh. [[[ - Copies task into ZI_RUN array, called when a task timeouts. - A small function ran from pattern in /-substitution as a math - function. -____ +Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ -Has 7 line(s). Doesn't call other functions. +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + zi-turbo .zi-add-fpath ~~~~~~~~~~~~~ @@ -293,8 +285,8 @@ Called by: :zi-tmp-subst-autoload autoload.zsh/.zi-any-to-uspl2 autoload.zsh/.zi-changes - autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-compiled + autoload.zsh/.zi-compile-uncompile-all autoload.zsh/.zi-create autoload.zsh/.zi-delete autoload.zsh/.zi-find-completions-of-plugin @@ -316,6 +308,52 @@ Called by: _Environment variables used:_ ZPFX +zicdclear +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicdclear. [[[ + A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. +____ + +Has 1 line(s). Calls functions: + + zicdclear + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicdreplay +~~~~~~~~~~ + +____ + + FUNCTION: zicdreplay. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It works like `zi cdreplay', which cannot be invoked from such hook ices. +____ + +Has 1 line(s). Calls functions: + + zicdreplay + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +zicompdef +~~~~~~~~~ + +____ + + ]]] + FUNCTION: zicompdef. [[[ + Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. +____ + +Has 1 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-compdef-clear ~~~~~~~~~~~~~~~~~ @@ -332,8 +370,8 @@ Has 3 line(s). Calls functions: Called by: - zi zicdclear + zi zpcdclear .zi-compdef-replay @@ -354,38 +392,81 @@ Uses feature(s): _compdef_ Called by: - zi zicdreplay + zi zpcdreplay -.zi-diff -~~~~~~~~ +zicompinit +~~~~~~~~~~ ____ - FUNCTION: .zi-diff. [[[ - Performs diff actions of all types + ]]] + FUNCTION: zicompinit. [[[ + A function that can be invoked from within `atinit', `atload', etc. ice-mod. + It runs `autoload compinit; compinit' and respects + ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. ____ -Has 4 line(s). Calls functions: +Has 1 line(s). Calls functions: - .zi-diff + zicompinit + `-- compinit -Called by: +Uses feature(s): _autoload_, _compinit_ - .zi-load-plugin +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -.zi-diff-env -~~~~~~~~~~~~ ++zi-deploy-message +~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-diff-env. [[[ - Implements detection of change in PATH and FPATH. - - $1 - user/plugin (i.e. uspl2 format) - $2 - command, can be "begin" or "end" -____ + FUNCTION: +zi-deploy-message. [[[ + Deploys a sub-prompt message to be displayed OR a `zle + .reset-prompt' call to be invoked +____ + +Has 13 line(s). Doesn't call other functions. + +Uses feature(s): _read_, _zle_ + +Called by: + + .zi-load-snippet + .zi-load + autoload.zsh/.zi-recall + +.zi-diff +~~~~~~~~ + +____ + + FUNCTION: .zi-diff. [[[ + Performs diff actions of all types +____ + +Has 4 line(s). Calls functions: + + .zi-diff + +Called by: + + .zi-load-plugin + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-stop + +.zi-diff-env +~~~~~~~~~~~~ + +____ + + FUNCTION: .zi-diff-env. [[[ + Implements detection of change in PATH and FPATH. + + $1 - user/plugin (i.e. uspl2 format) + $2 - command, can be "begin" or "end" +____ Has 15 line(s). Doesn't call other functions. @@ -615,9 +696,9 @@ ____ Has 76 line(s). Calls functions: .zi-load - |-- +zi-deploy-message |-- install.zsh/.zi-get-package - `-- install.zsh/.zi-setup-plugin-dir + |-- install.zsh/.zi-setup-plugin-dir + `-- +zi-deploy-message Uses feature(s): _eval_, _setopt_, _source_, _zle_ @@ -625,6 +706,7 @@ Called by: .zi-load-object .zi-run-task + additional.zsh/.zi-service .zi-load-ices ~~~~~~~~~~~~~ @@ -677,8 +759,8 @@ Has 107 line(s). Calls functions: .zi-load-plugin `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least + |-- is-at-least + `-- +zi-message Uses feature(s): _eval_, _setopt_, _source_, _unfunction_, _zle_ @@ -700,18 +782,19 @@ ____ Has 173 line(s). Calls functions: .zi-load-snippet + |-- install.zsh/.zi-download-snippet |-- +zi-deploy-message - |-- +zi-message - `-- install.zsh/.zi-download-snippet + `-- +zi-message Uses feature(s): _autoload_, _eval_, _setopt_, _source_, _unfunction_, _zparseopts_, _zstyle_ Called by: + pmodload .zi-load-object .zi-load .zi-run-task - pmodload + additional.zsh/.zi-service .zi-main-message-formatter ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -725,6 +808,57 @@ Has 18 line(s). Doesn't call other functions. Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). ++zi-message +~~~~~~~~~~~ + +____ + + FUNCTION: +zi-message. [[[ +____ + +Has 14 line(s). Doesn't call other functions. + +Called by: + + Script-Body + .zi-compdef-clear + .zi-compdef-replay + .zi-load-snippet + +zi-prehelp-usage-message + .zi-register-plugin + .zi-run + .zi-set-m-func + :zi-tmp-subst-autoload + zi + additional.zsh/.zi-debug-start + additional.zsh/.zi-debug-unload + additional.zsh/:zi-tmp-subst-source + autoload.zsh/.zi-build-module + autoload.zsh/.zi-cd + autoload.zsh/.zi-self-update + autoload.zsh/.zi-show-zstatus + autoload.zsh/.zi-uninstall-completions + autoload.zsh/.zi-update-all-parallel + autoload.zsh/.zi-update-or-status-all + autoload.zsh/.zi-update-or-status + autoload.zsh/.zi-wait-for-update-jobs + install.zsh/.zi-compile-plugin + install.zsh/.zi-compinit + install.zsh/.zi-download-file-stdout + install.zsh/.zi-download-snippet + install.zsh/.zi-extract + install.zsh/ziextract + install.zsh/.zi-get-cygwin-package + install.zsh/.zi-get-latest-gh-r-url-part + install.zsh/.zi-get-package + install.zsh/.zi-install-completions + install.zsh/∞zi-ps-on-update-hook + install.zsh/∞zi-reset-hook + install.zsh/.zi-setup-plugin-dir + install.zsh/.zi-update-snippet + side.zsh/.zi-countdown + side.zsh/.zi-exists-physically-message + .zi-pack-ice ~~~~~~~~~~~~ @@ -758,6 +892,24 @@ ____ Has 2 line(s). Doesn't call other functions. +Called by: + + zi + autoload.zsh/.zi-delete + ++zi-prehelp-usage-message +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: +zi-prehelp-usage-message. [[[ +____ + +Has 34 line(s). Calls functions: + + +zi-prehelp-usage-message + `-- +zi-message + Called by: zi @@ -786,6 +938,34 @@ Called by: _Environment variables used:_ ZPFX +@zi-register-annex +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-annex. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 8 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zi-register-hook +~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-register-hook. [[[ + Registers the z-annex inside ZI – i.e. an ZI extension +____ + +Has 4 line(s). Doesn't call other functions. + +Called by: + + Script-Body + .zi-register-plugin ~~~~~~~~~~~~~~~~~~~ @@ -806,6 +986,31 @@ Called by: .zi-load +:zi-reload-and-run +~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: :zi-reload-and-run. [[[ + Marks given function ($3) for autoloading, and executes it triggering the load. + $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", + because using that on older Zsh versions causes problems with traps. + + So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". + + $1 - FPATH dedicated to function + $2 - autoload options + $3 - function name (one that needs autoloading) + + Author: Bart Schaefer +____ + +Has 9 line(s). Doesn't call other functions. + +Uses feature(s): _autoload_, _unfunction_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-run ~~~~~~~ @@ -857,6 +1062,53 @@ Called by: @zi-scheduler +@zi-scheduler +~~~~~~~~~~~~~ + +____ + + FUNCTION: @zi-scheduler. [[[ + Searches for timeout tasks, executes them. There's an array of tasks + waiting for execution, this scheduler manages them, detects which ones + should be run at current moment, decides to remove (or not) them from + the array after execution. + + $1 - if "following", then it is non-first (second and more) + invocation of the scheduler; this results in chain of `sched' + invocations that results in repetitive @zi-scheduler activity. + + if "burst", then all tasks are marked timeout and executed one + by one; this is handy if e.g. a docker image starts up and + needs to install all turbo-mode plugins without any hesitation + (delay), i.e. "burst" allows to run package installations from + script, not from prompt. + +____ + +Has 74 line(s). *Is a precmd hook*. Calls functions: + + @zi-scheduler + `-- add-zsh-hook + +Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +-zi_scheduler_add_sh +~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: -zi_scheduler_add_sh. [[[ + Copies task into ZI_RUN array, called when a task timeouts. + A small function ran from pattern in /-substitution as a math + function. +____ + +Has 7 line(s). Doesn't call other functions. + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-set-m-func ~~~~~~~~~~~~~~ @@ -913,101 +1165,47 @@ Called by: zi -.zi-tmp-subst-off -~~~~~~~~~~~~~~~~~ +@zi-substitute +~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-off. [[[ - Turn off temporary substituting of functions completely for a given mode ("load", "light", - "light-b" (i.e. the `trackbinds' mode) or "compdef"). + FUNCTION: @zi-substitute. [[[ ____ -Has 17 line(s). Doesn't call other functions. +Has 36 line(s). Doesn't call other functions. -Uses feature(s): _setopt_, _unfunction_ +Uses feature(s): _setopt_ Called by: - .zi-load-plugin + autoload.zsh/.zi-at-eval + install.zsh/∞zi-atclone-hook + install.zsh/.zi-at-eval + install.zsh/∞zi-cp-hook + install.zsh/∞zi-extract-hook + install.zsh/.zi-get-package + install.zsh/∞zi-make-ee-hook + install.zsh/∞zi-make-e-hook + install.zsh/∞zi-make-hook + install.zsh/∞zi-mv-hook -.zi-tmp-subst-on -~~~~~~~~~~~~~~~~ +_Environment variables used:_ ZPFX + +:zi-tmp-subst-alias +~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: .zi-tmp-subst-on. [[[ - Turn on temporary substituting of functions of builtins and functions according to passed - mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is - to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. + FUNCTION: :zi-tmp-subst-alias. [[[ + Function defined to hijack plugin's calls to the `alias' builtin. + + The hijacking is to gather report data (which is used in unload). ____ -Has 29 line(s). Doesn't call other functions. +Has 30 line(s). Calls functions: -Uses feature(s): _source_ - -Called by: - - .zi-load-plugin - -.zi-util-shands-path -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: .zi-util-shands-path. [[[ - Replaces parts of path with %HOME, etc. -____ - -Has 8 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - .zi-any-to-pid - -_Environment variables used:_ ZPFX - -:zi-reload-and-run -~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-reload-and-run. [[[ - Marks given function ($3) for autoloading, and executes it triggering the load. - $1 is the fpath dedicated to the function, $2 are autoload options. This function replaces "autoload -X", - because using that on older Zsh versions causes problems with traps. - - So basically one creates function stub that calls :zi-reload-and-run() instead of "autoload -X". - - $1 - FPATH dedicated to function - $2 - autoload options - $3 - function name (one that needs autoloading) - - Author: Bart Schaefer -____ - -Has 9 line(s). Doesn't call other functions. - -Uses feature(s): _autoload_, _unfunction_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-alias -~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-alias. [[[ - Function defined to hijack plugin's calls to the `alias' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 30 line(s). Calls functions: - - :zi-tmp-subst-alias + :zi-tmp-subst-alias Uses feature(s): _alias_, _setopt_, _zparseopts_ @@ -1028,15 +1226,15 @@ ____ Has 106 line(s). Calls functions: :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least + |-- is-at-least + `-- +zi-message Uses feature(s): _autoload_, _eval_, _is-at-least_, _setopt_, _zparseopts_ Called by: - .zi-load-plugin @autoload + .zi-load-plugin :zi-tmp-subst-bindkey ~~~~~~~~~~~~~~~~~~~~~ @@ -1077,251 +1275,83 @@ Uses feature(s): _setopt_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -:zi-tmp-subst-zle +.zi-tmp-subst-off ~~~~~~~~~~~~~~~~~ ____ - FUNCTION: :zi-tmp-subst-zle. [[[. - Function defined to hijack plugin's calls to the `zle' builtin. - - The hijacking is to gather report data (which is used in unload). -____ - -Has 33 line(s). Calls functions: - - :zi-tmp-subst-zle - -Uses feature(s): _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -:zi-tmp-subst-zstyle -~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: :zi-tmp-subst-zstyle. [[[ - Function defined to hijack plugin's calls to the `zstyle' builtin. - - The hijacking is to gather report data (which is used in unload). + FUNCTION: .zi-tmp-subst-off. [[[ + Turn off temporary substituting of functions completely for a given mode ("load", "light", + "light-b" (i.e. the `trackbinds' mode) or "compdef"). ____ -Has 19 line(s). Calls functions: - - :zi-tmp-subst-zstyle - -Uses feature(s): _setopt_, _zparseopts_, _zstyle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@autoload -~~~~~~~~~ - -____ - - ]]] - FUNCTION: @autoload. [[[ -____ +Has 17 line(s). Doesn't call other functions. -Has 3 line(s). Calls functions: +Uses feature(s): _setopt_, _unfunction_ - @autoload - `-- :zi-tmp-subst-autoload - |-- +zi-message - `-- is-at-least +Called by: -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + .zi-load-plugin + additional.zsh/.zi-debug-stop -@zi-register-annex -~~~~~~~~~~~~~~~~~~ +.zi-tmp-subst-on +~~~~~~~~~~~~~~~~ ____ - FUNCTION: @zi-register-annex. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension + FUNCTION: .zi-tmp-subst-on. [[[ + Turn on temporary substituting of functions of builtins and functions according to passed + mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is + to gather report data, and to hijack `autoload', `bindkey' and `compdef' calls. ____ -Has 8 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-register-hook -~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zi-register-hook. [[[ - Registers the z-annex inside ZI – i.e. an ZI extension -____ +Has 29 line(s). Doesn't call other functions. -Has 4 line(s). Doesn't call other functions. +Uses feature(s): _source_ Called by: - Script-Body + .zi-load-plugin + additional.zsh/.zi-debug-start -@zi-scheduler -~~~~~~~~~~~~~ +:zi-tmp-subst-zle +~~~~~~~~~~~~~~~~~ ____ - FUNCTION: @zi-scheduler. [[[ - Searches for timeout tasks, executes them. There's an array of tasks - waiting for execution, this scheduler manages them, detects which ones - should be run at current moment, decides to remove (or not) them from - the array after execution. - - $1 - if "following", then it is non-first (second and more) - invocation of the scheduler; this results in chain of `sched' - invocations that results in repetitive @zi-scheduler activity. - - if "burst", then all tasks are marked timeout and executed one - by one; this is handy if e.g. a docker image starts up and - needs to install all turbo-mode plugins without any hesitation - (delay), i.e. "burst" allows to run package installations from - script, not from prompt. - -____ - -Has 74 line(s). *Is a precmd hook*. Calls functions: - - @zi-scheduler - `-- add-zsh-hook - -Uses feature(s): _add-zsh-hook_, _sched_, _setopt_, _zle_ - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -@zi-substitute -~~~~~~~~~~~~~~ - -____ + FUNCTION: :zi-tmp-subst-zle. [[[. + Function defined to hijack plugin's calls to the `zle' builtin. - FUNCTION: @zi-substitute. [[[ + The hijacking is to gather report data (which is used in unload). ____ -Has 36 line(s). Doesn't call other functions. - -Uses feature(s): _setopt_ - -Called by: - - autoload.zsh/.zi-at-eval - install.zsh/.zi-at-eval - install.zsh/.zi-get-package - install.zsh/∞zi-atclone-hook - install.zsh/∞zi-cp-hook - install.zsh/∞zi-extract-hook - install.zsh/∞zi-make-e-hook - install.zsh/∞zi-make-ee-hook - install.zsh/∞zi-make-hook - install.zsh/∞zi-mv-hook - -_Environment variables used:_ ZPFX - -@zsh-plugin-run-on-unload -~~~~~~~~~~~~~~~~~~~~~~~~~ - -____ - - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism, see: - https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard -____ +Has 33 line(s). Calls functions: -Has 2 line(s). Calls functions: + :zi-tmp-subst-zle - @zsh-plugin-run-on-unload +Uses feature(s): _setopt_, _zle_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -@zsh-plugin-run-on-update -~~~~~~~~~~~~~~~~~~~~~~~~~ +:zi-tmp-subst-zstyle +~~~~~~~~~~~~~~~~~~~~ ____ - FUNCTION: @zsh-plugin-run-on-update. [[[ - The Plugin Standard required mechanism -____ - -Has 2 line(s). Calls functions: - - @zsh-plugin-run-on-update - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -pmodload -~~~~~~~~ - -____ + FUNCTION: :zi-tmp-subst-zstyle. [[[ + Function defined to hijack plugin's calls to the `zstyle' builtin. - FUNCTION: pmodload. [[[ - Compatibility with Prezto. Calls can be recursive. + The hijacking is to gather report data (which is used in unload). ____ -Has 15 line(s). Calls functions: +Has 19 line(s). Calls functions: - pmodload + :zi-tmp-subst-zstyle -Uses feature(s): _zstyle_ +Uses feature(s): _setopt_, _zparseopts_, _zstyle_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -zi -~~ - -____ - - FUNCTION: zi. [[[ - Main function directly exposed to user, obtains subcommand and its arguments, has completion. -____ - -Has 547 line(s). Calls functions: - - zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message - |-- autoload.zsh/.zi-analytics-menu - |-- autoload.zsh/.zi-cdisable - |-- autoload.zsh/.zi-cenable - |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all - |-- autoload.zsh/.zi-compiled - |-- autoload.zsh/.zi-control-menu - |-- autoload.zsh/.zi-help - |-- autoload.zsh/.zi-list-bindkeys - |-- autoload.zsh/.zi-list-compdef-replay - |-- autoload.zsh/.zi-ls - |-- autoload.zsh/.zi-module - |-- autoload.zsh/.zi-recently - |-- autoload.zsh/.zi-search-completions - |-- autoload.zsh/.zi-self-update - |-- autoload.zsh/.zi-show-all-reports - |-- autoload.zsh/.zi-show-completions - |-- autoload.zsh/.zi-show-debug-report - |-- autoload.zsh/.zi-show-registered-plugins - |-- autoload.zsh/.zi-show-report - |-- autoload.zsh/.zi-show-times - |-- autoload.zsh/.zi-show-zstatus - |-- autoload.zsh/.zi-uncompile-plugin - |-- autoload.zsh/.zi-uninstall-completions - |-- autoload.zsh/.zi-unload - |-- autoload.zsh/.zi-update-or-status - |-- autoload.zsh/.zi-update-or-status-all - |-- compinit - |-- install.zsh/.zi-compile-plugin - |-- install.zsh/.zi-compinit - |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Uses feature(s): _autoload_, _compinit_, _eval_, _setopt_, _source_ - -Called by: - - zi-turbo - zi-turbo ~~~~~~~~ @@ -1337,15 +1367,16 @@ Has 1 line(s). Calls functions: zi-turbo `-- zi - |-- +zi-message - |-- +zi-prehelp-usage-message - |   `-- +zi-message + |-- additional.zsh/.zi-clear-debug-report + |-- additional.zsh/.zi-debug-start + |-- additional.zsh/.zi-debug-stop + |-- additional.zsh/.zi-debug-unload |-- autoload.zsh/.zi-analytics-menu |-- autoload.zsh/.zi-cdisable |-- autoload.zsh/.zi-cenable |-- autoload.zsh/.zi-clear-completions - |-- autoload.zsh/.zi-compile-uncompile-all |-- autoload.zsh/.zi-compiled + |-- autoload.zsh/.zi-compile-uncompile-all |-- autoload.zsh/.zi-control-menu |-- autoload.zsh/.zi-help |-- autoload.zsh/.zi-list-bindkeys @@ -1371,76 +1402,31 @@ Has 1 line(s). Calls functions: |-- install.zsh/.zi-compile-plugin |-- install.zsh/.zi-compinit |-- install.zsh/.zi-forget-completion - `-- install.zsh/.zi-install-completions - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdclear -~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicdclear. [[[ - A wrapper for `zi cdclear -q' which can be called from hook ices like the atinit'', atload'', etc. ices. -____ - -Has 1 line(s). Calls functions: - - zicdclear - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicdreplay -~~~~~~~~~~ - -____ - - FUNCTION: zicdreplay. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It works like `zi cdreplay', which cannot be invoked from such hook ices. -____ - -Has 1 line(s). Calls functions: - - zicdreplay + |-- install.zsh/.zi-install-completions + |-- +zi-message + `-- +zi-prehelp-usage-message + `-- +zi-message Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). -zicompdef -~~~~~~~~~ +.zi-util-shands-path +~~~~~~~~~~~~~~~~~~~~ ____ - ]]] - FUNCTION: zicompdef. [[[ - Stores compdef for a replay with `zicdreplay' (turbo mode) or with `zi cdreplay' (normal mode). An utility functton of an undefined use case. + FUNCTION: .zi-util-shands-path. [[[ + Replaces parts of path with %HOME, etc. ____ -Has 1 line(s). Doesn't call other functions. - -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). - -zicompinit -~~~~~~~~~~ - -____ - - ]]] - FUNCTION: zicompinit. [[[ - A function that can be invoked from within `atinit', `atload', etc. ice-mod. - It runs `autoload compinit; compinit' and respects - ZI[ZCOMPDUMP_PATH] and ZI[COMPINIT_OPTS]. -____ +Has 8 line(s). Doesn't call other functions. -Has 1 line(s). Calls functions: +Uses feature(s): _setopt_ - zicompinit - `-- compinit +Called by: -Uses feature(s): _autoload_, _compinit_ + .zi-any-to-pid -Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +_Environment variables used:_ ZPFX zpcdclear ~~~~~~~~~ @@ -1486,6 +1472,37 @@ Uses feature(s): _autoload_, _compinit_ Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). +@zsh-plugin-run-on-unload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism, see: + https://github.com/z-shell/zi/wiki/Zsh-Plugin-Standard +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-unload + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + +@zsh-plugin-run-on-update +~~~~~~~~~~~~~~~~~~~~~~~~~ + +____ + + FUNCTION: @zsh-plugin-run-on-update. [[[ + The Plugin Standard required mechanism +____ + +Has 2 line(s). Calls functions: + + @zsh-plugin-run-on-update + +Not called by script or any function (may be e.g. a hook, a Zle widget, etc.). + add-zsh-hook ~~~~~~~~~~~~ @@ -1509,8 +1526,8 @@ Uses feature(s): _autoload_, _getopts_ Called by: - @zi-scheduler Script-Body + @zi-scheduler compinit ~~~~~~~~ @@ -1560,7 +1577,7 @@ Has 56 line(s). Doesn't call other functions. Called by: + Script-Body :zi-tmp-subst-autoload :zi-tmp-subst-bindkey - Script-Body diff --git a/code/zsdoc/data/autoload/install.zsh/compinit b/code/zsdoc/data/autoload/install.zsh/compinit deleted file mode 100644 index f0f8421..0000000 --- a/code/zsdoc/data/autoload/install.zsh/compinit +++ /dev/null @@ -1,549 +0,0 @@ -# Initialisation for new style completion. This mainly contains some helper -# functions and setup. Everything else is split into different files that -# will automatically be made autoloaded (see the end of this file). The -# names of the files that will be considered for autoloading are those that -# begin with an underscores (like `_condition). -# -# The first line of each of these files is read and must indicate what -# should be done with its contents: -# -# `#compdef ' -# If the first line looks like this, the file is autoloaded as a -# function and that function will be called to generate the matches -# when completing for one of the commands whose are given. -# The names may also be interspersed with `-T ' options -# specifying for which set of functions this should be added. -# -# `#compdef -[pP] ' -# This defines a function that should be called to generate matches -# for commands whose name matches . Note that only one pattern -# may be given. -# -# `#compdef -k - - -