From 5fefff3a8656729274179b2f618bb567fb3f57a8 Mon Sep 17 00:00:00 2001 From: Tovi Jaeschke-Rogers Date: Fri, 31 Oct 2025 08:54:24 +1030 Subject: [PATCH] updates --- .config/hypr/hyprland.conf | 5 - .config/nvim/lua/lsp/servers/gopls.lua | 2 +- .config/nvim/lua/lsp/servers/tsserver.lua | 48 +- .config/nvim/lua/plugins/dadbod.lua | 1 + .config/phpcs.xml | 1 - .config/zsh/.zsh/_git | 293 -- .config/zsh/.zsh/fsh/.fast-make-targets | 98 - .config/zsh/.zsh/fsh/.fast-read-ini-file | 30 - .config/zsh/.zsh/fsh/.fast-run-command | 37 - .config/zsh/.zsh/fsh/.fast-run-git-command | 60 - .config/zsh/.zsh/fsh/.fast-zts-read-all | 17 - .config/zsh/.zsh/fsh/.github/FUNDING.yml | 5 - .config/zsh/.zsh/fsh/.gitignore | 24 - .config/zsh/.zsh/fsh/.travis.yml | 13 - .config/zsh/.zsh/fsh/.zunit.yml | 8 - .config/zsh/.zsh/fsh/CHANGELOG.md | 144 - .config/zsh/.zsh/fsh/CHROMA_GUIDE.adoc | 166 - .config/zsh/.zsh/fsh/DONATIONS.md | 441 --- .config/zsh/.zsh/fsh/LICENSE | 23 - .config/zsh/.zsh/fsh/README.md | 290 -- .config/zsh/.zsh/fsh/THEME_GUIDE.md | 76 - .config/zsh/.zsh/fsh/_fast-theme | 39 - .config/zsh/.zsh/fsh/fast-highlight | 1463 ------- .config/zsh/.zsh/fsh/fast-string-highlight | 77 - .../fsh/fast-syntax-highlighting.plugin.zsh | 384 -- .config/zsh/.zsh/fsh/fast-theme | 385 -- .config/zsh/.zsh/fsh/images/203654.gif | Bin 168066 -> 0 bytes .config/zsh/.zsh/fsh/images/array-assign.png | Bin 2022 -> 0 bytes .config/zsh/.zsh/fsh/images/assign.png | Bin 15333 -> 0 bytes .config/zsh/.zsh/fsh/images/brackets.gif | Bin 154167 -> 0 bytes .config/zsh/.zsh/fsh/images/cmdsubst.png | Bin 8086 -> 0 bytes .config/zsh/.zsh/fsh/images/cplx_cond.png | Bin 3533 -> 0 bytes .config/zsh/.zsh/fsh/images/eval_cmp.png | Bin 7750 -> 0 bytes .config/zsh/.zsh/fsh/images/execfd.png | Bin 2354 -> 0 bytes .config/zsh/.zsh/fsh/images/execfd_cmp.png | Bin 3846 -> 0 bytes .config/zsh/.zsh/fsh/images/for-loop-cmp.png | Bin 9140 -> 0 bytes .config/zsh/.zsh/fsh/images/for-loop.png | Bin 3041 -> 0 bytes .config/zsh/.zsh/fsh/images/function.png | Bin 7426 -> 0 bytes .config/zsh/.zsh/fsh/images/git_chroma.png | Bin 13195 -> 0 bytes .config/zsh/.zsh/fsh/images/global-alias.png | Bin 5499 -> 0 bytes .config/zsh/.zsh/fsh/images/heredoc.png | Bin 5060 -> 0 bytes .config/zsh/.zsh/fsh/images/herestring.png | Bin 5085 -> 0 bytes .../zsh/.zsh/fsh/images/highlight-less.png | Bin 4419 -> 0 bytes .../zsh/.zsh/fsh/images/highlight-much.png | Bin 6294 -> 0 bytes .config/zsh/.zsh/fsh/images/ideal-string.png | Bin 9813 -> 0 bytes .config/zsh/.zsh/fsh/images/in_string.png | Bin 6405 -> 0 bytes .config/zsh/.zsh/fsh/images/math.gif | Bin 139884 -> 0 bytes .config/zsh/.zsh/fsh/images/parameter.png | Bin 3235 -> 0 bytes .config/zsh/.zsh/fsh/images/theme.png | Bin 36511 -> 0 bytes .config/zsh/.zsh/fsh/images/typeset.png | Bin 4790 -> 0 bytes .config/zsh/.zsh/fsh/images/zcalc.png | Bin 4865 -> 0 bytes .config/zsh/.zsh/fsh/share/free_theme.zsh | 61 - .config/zsh/.zsh/fsh/test/parse.zsh | 220 -- .config/zsh/.zsh/fsh/test/to-parse.zsh | 823 ---- .config/zsh/.zsh/fsh/tests/_output/.gitkeep | 0 .config/zsh/.zsh/fsh/tests/_support/.gitkeep | 0 .config/zsh/.zsh/fsh/tests/_support/bootstrap | 2 - .config/zsh/.zsh/fsh/tests/example.zunit | 15 - .config/zsh/.zsh/fsh/tests/main.zunit | 124 - .config/zsh/.zsh/fsh/themes/clean.ini | 81 - .config/zsh/.zsh/fsh/themes/default.ini | 84 - .config/zsh/.zsh/fsh/themes/forest.ini | 81 - .config/zsh/.zsh/fsh/themes/free.ini | 81 - .config/zsh/.zsh/fsh/themes/q-jmnemonic.ini | 163 - .config/zsh/.zsh/fsh/themes/safari.ini | 83 - .config/zsh/.zsh/fsh/themes/spa.ini | 82 - .config/zsh/.zsh/fsh/themes/sv-orple.ini | 100 - .config/zsh/.zsh/fsh/themes/sv-plant.ini | 100 - .config/zsh/.zsh/fsh/themes/zdharma.ini | 81 - .config/zsh/.zsh/fsh/→chroma/-alias.ch | 29 - .config/zsh/.zsh/fsh/→chroma/-autoload.ch | 104 - .config/zsh/.zsh/fsh/→chroma/-autorandr.ch | 22 - .config/zsh/.zsh/fsh/→chroma/-awk.ch | 108 - .config/zsh/.zsh/fsh/→chroma/-docker.ch | 90 - .config/zsh/.zsh/fsh/→chroma/-example.ch | 120 - .config/zsh/.zsh/fsh/→chroma/-fast-theme.ch | 40 - .config/zsh/.zsh/fsh/→chroma/-fpath_peq.ch | 61 - .config/zsh/.zsh/fsh/→chroma/-git.ch | 954 ----- .config/zsh/.zsh/fsh/→chroma/-grep.ch | 89 - .config/zsh/.zsh/fsh/→chroma/-hub.ch | 51 - .config/zsh/.zsh/fsh/→chroma/-ionice.ch | 117 - .config/zsh/.zsh/fsh/→chroma/-lab.ch | 59 - .config/zsh/.zsh/fsh/→chroma/-make.ch | 105 - .config/zsh/.zsh/fsh/→chroma/-nice.ch | 138 - .config/zsh/.zsh/fsh/→chroma/-nmcli.ch | 58 - .config/zsh/.zsh/fsh/→chroma/-node.ch | 37 - .config/zsh/.zsh/fsh/→chroma/-ogit.ch | 383 -- .config/zsh/.zsh/fsh/→chroma/-perl.ch | 80 - .config/zsh/.zsh/fsh/→chroma/-precommand.ch | 17 - .config/zsh/.zsh/fsh/→chroma/-printf.ch | 86 - .config/zsh/.zsh/fsh/→chroma/-ruby.ch | 81 - .config/zsh/.zsh/fsh/→chroma/-scp.ch | 87 - .config/zsh/.zsh/fsh/→chroma/-sh.ch | 72 - .config/zsh/.zsh/fsh/→chroma/-source.ch | 75 - .config/zsh/.zsh/fsh/→chroma/-ssh.ch | 156 - .config/zsh/.zsh/fsh/→chroma/-subcommand.ch | 25 - .config/zsh/.zsh/fsh/→chroma/-subversion.ch | 250 -- .config/zsh/.zsh/fsh/→chroma/-vim.ch | 51 - .config/zsh/.zsh/fsh/→chroma/-whatis.ch | 138 - .config/zsh/.zsh/fsh/→chroma/-which.ch | 96 - .config/zsh/.zsh/fsh/→chroma/-zinit.ch | 378 -- .config/zsh/.zsh/fsh/→chroma/main-chroma.ch | 460 --- .config/zsh/.zsh/git-completion.bash | 3516 ----------------- .config/zsh/.zshrc | 16 +- .local/bin/tmux-sessionizer | 8 +- 105 files changed, 58 insertions(+), 14410 deletions(-) delete mode 100644 .config/zsh/.zsh/_git delete mode 100644 .config/zsh/.zsh/fsh/.fast-make-targets delete mode 100644 .config/zsh/.zsh/fsh/.fast-read-ini-file delete mode 100644 .config/zsh/.zsh/fsh/.fast-run-command delete mode 100644 .config/zsh/.zsh/fsh/.fast-run-git-command delete mode 100644 .config/zsh/.zsh/fsh/.fast-zts-read-all delete mode 100644 .config/zsh/.zsh/fsh/.github/FUNDING.yml delete mode 100644 .config/zsh/.zsh/fsh/.gitignore delete mode 100644 .config/zsh/.zsh/fsh/.travis.yml delete mode 100644 .config/zsh/.zsh/fsh/.zunit.yml delete mode 100644 .config/zsh/.zsh/fsh/CHANGELOG.md delete mode 100644 .config/zsh/.zsh/fsh/CHROMA_GUIDE.adoc delete mode 100644 .config/zsh/.zsh/fsh/DONATIONS.md delete mode 100644 .config/zsh/.zsh/fsh/LICENSE delete mode 100644 .config/zsh/.zsh/fsh/README.md delete mode 100644 .config/zsh/.zsh/fsh/THEME_GUIDE.md delete mode 100644 .config/zsh/.zsh/fsh/_fast-theme delete mode 100644 .config/zsh/.zsh/fsh/fast-highlight delete mode 100644 .config/zsh/.zsh/fsh/fast-string-highlight delete mode 100644 .config/zsh/.zsh/fsh/fast-syntax-highlighting.plugin.zsh delete mode 100644 .config/zsh/.zsh/fsh/fast-theme delete mode 100644 .config/zsh/.zsh/fsh/images/203654.gif delete mode 100644 .config/zsh/.zsh/fsh/images/array-assign.png delete mode 100644 .config/zsh/.zsh/fsh/images/assign.png delete mode 100644 .config/zsh/.zsh/fsh/images/brackets.gif delete mode 100644 .config/zsh/.zsh/fsh/images/cmdsubst.png delete mode 100644 .config/zsh/.zsh/fsh/images/cplx_cond.png delete mode 100644 .config/zsh/.zsh/fsh/images/eval_cmp.png delete mode 100644 .config/zsh/.zsh/fsh/images/execfd.png delete mode 100644 .config/zsh/.zsh/fsh/images/execfd_cmp.png delete mode 100644 .config/zsh/.zsh/fsh/images/for-loop-cmp.png delete mode 100644 .config/zsh/.zsh/fsh/images/for-loop.png delete mode 100644 .config/zsh/.zsh/fsh/images/function.png delete mode 100644 .config/zsh/.zsh/fsh/images/git_chroma.png delete mode 100644 .config/zsh/.zsh/fsh/images/global-alias.png delete mode 100644 .config/zsh/.zsh/fsh/images/heredoc.png delete mode 100644 .config/zsh/.zsh/fsh/images/herestring.png delete mode 100644 .config/zsh/.zsh/fsh/images/highlight-less.png delete mode 100644 .config/zsh/.zsh/fsh/images/highlight-much.png delete mode 100644 .config/zsh/.zsh/fsh/images/ideal-string.png delete mode 100644 .config/zsh/.zsh/fsh/images/in_string.png delete mode 100644 .config/zsh/.zsh/fsh/images/math.gif delete mode 100644 .config/zsh/.zsh/fsh/images/parameter.png delete mode 100644 .config/zsh/.zsh/fsh/images/theme.png delete mode 100644 .config/zsh/.zsh/fsh/images/typeset.png delete mode 100644 .config/zsh/.zsh/fsh/images/zcalc.png delete mode 100644 .config/zsh/.zsh/fsh/share/free_theme.zsh delete mode 100755 .config/zsh/.zsh/fsh/test/parse.zsh delete mode 100644 .config/zsh/.zsh/fsh/test/to-parse.zsh delete mode 100644 .config/zsh/.zsh/fsh/tests/_output/.gitkeep delete mode 100644 .config/zsh/.zsh/fsh/tests/_support/.gitkeep delete mode 100644 .config/zsh/.zsh/fsh/tests/_support/bootstrap delete mode 100644 .config/zsh/.zsh/fsh/tests/example.zunit delete mode 100644 .config/zsh/.zsh/fsh/tests/main.zunit delete mode 100644 .config/zsh/.zsh/fsh/themes/clean.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/default.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/forest.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/free.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/q-jmnemonic.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/safari.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/spa.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/sv-orple.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/sv-plant.ini delete mode 100644 .config/zsh/.zsh/fsh/themes/zdharma.ini delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-alias.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-autoload.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-autorandr.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-awk.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-docker.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-example.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-fast-theme.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-fpath_peq.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-git.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-grep.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-hub.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-ionice.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-lab.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-make.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-nice.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-nmcli.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-node.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-ogit.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-perl.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-precommand.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-printf.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-ruby.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-scp.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-sh.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-source.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-ssh.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-subcommand.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-subversion.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-vim.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-whatis.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-which.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/-zinit.ch delete mode 100644 .config/zsh/.zsh/fsh/→chroma/main-chroma.ch delete mode 100644 .config/zsh/.zsh/git-completion.bash diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index a681330..a960ab8 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -152,11 +152,6 @@ input { } } -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} - # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more device { diff --git a/.config/nvim/lua/lsp/servers/gopls.lua b/.config/nvim/lua/lsp/servers/gopls.lua index 955c189..017e5f8 100644 --- a/.config/nvim/lua/lsp/servers/gopls.lua +++ b/.config/nvim/lua/lsp/servers/gopls.lua @@ -3,7 +3,7 @@ local util = require("lspconfig.util") return { cmd = { "gopls" }, filetypes = { "go", "gomod", "gowork", "gotmpl" }, - root_dir = util.root_pattern("go.work", "go.mod", ".git"), + root_markers = { "go.work", "go.mod" }, settings = { gopls = { completeUnimported = true, diff --git a/.config/nvim/lua/lsp/servers/tsserver.lua b/.config/nvim/lua/lsp/servers/tsserver.lua index 1f07ec2..f36452f 100644 --- a/.config/nvim/lua/lsp/servers/tsserver.lua +++ b/.config/nvim/lua/lsp/servers/tsserver.lua @@ -33,6 +33,37 @@ local function get_typescript_server_path(root_dir) return global_ts end +local function get_tsserver_cmd(root_dir) + -- Check for local typescript-language-server in node_modules + local tsserver + + tsserver = root_dir .. '/node_modules/.bin/typescript-language-server' + if vim.loop.fs_stat(tsserver) then + return { tsserver, '--stdio' } + end + + -- Check for local typescript-language-server in node_modules + tsserver = root_dir .. '/node_modules/.bin/tsserver' + if vim.loop.fs_stat(tsserver) then + return { tsserver, '--stdio' } + end + + -- Check frontend/node_modules + tsserver = root_dir .. '/frontend/node_modules/.bin/typescript-language-server' + if vim.loop.fs_stat(tsserver) then + return { tsserver, '--stdio' } + end + + -- Check frontend/node_modules + tsserver = root_dir .. '/frontend/node_modules/.bin/tsserver' + if vim.loop.fs_stat(tsserver) then + return { tsserver, '--stdio' } + end + + -- Fallback to Mason + return { vim.fn.expand('~/.local/share/nvim/mason/bin/typescript-language-server'), '--stdio' } +end + local function organize_imports() local params = { command = "_typescript.organizeImports", @@ -66,12 +97,19 @@ return { description = "Organize Imports" } }, - on_new_config = function(new_config, new_root_dir) + before_init = function(initialize_params, config) + local root_dir = initialize_params.rootPath or initialize_params.rootUri + if root_dir and root_dir:match("^file://") then + root_dir = vim.uri_to_fname(root_dir) + end + + -- Update cmd + config.cmd = get_tsserver_cmd(root_dir) + + -- Update tsdk if get_typescript_server_path then - new_config.init_options.typescript = new_config.init_options.typescript or {} - new_config.init_options.typescript.tsdk = get_typescript_server_path(new_root_dir) - else - vim.notify("get_typescript_server_path is not defined", vim.log.levels.ERROR) + config.init_options.typescript = config.init_options.typescript or {} + config.init_options.typescript.tsdk = get_typescript_server_path(root_dir) end end, } diff --git a/.config/nvim/lua/plugins/dadbod.lua b/.config/nvim/lua/plugins/dadbod.lua index 72d6e39..b21a8e1 100644 --- a/.config/nvim/lua/plugins/dadbod.lua +++ b/.config/nvim/lua/plugins/dadbod.lua @@ -17,6 +17,7 @@ return { vim.g.dbs = { dev = 'mysql://jack:secret@localhost:33061/jack?protocol=tcp', + dev_prod_dump = 'mysql://root:secret@localhost:33061/jac_prod?protocol=tcp', } vim.api.nvim_create_user_command('DBUITab', function() diff --git a/.config/phpcs.xml b/.config/phpcs.xml index a2f70e6..3dc664d 100644 --- a/.config/phpcs.xml +++ b/.config/phpcs.xml @@ -28,6 +28,5 @@ - diff --git a/.config/zsh/.zsh/_git b/.config/zsh/.zsh/_git deleted file mode 100644 index e0fda27..0000000 --- a/.config/zsh/.zsh/_git +++ /dev/null @@ -1,293 +0,0 @@ -#compdef git gitk - -# zsh completion wrapper for git -# -# Copyright (c) 2012-2020 Felipe Contreras -# -# The recommended way to install this script is to make a copy of it as a -# file named '_git' inside any directory in your fpath. -# -# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git', -# and then add the following to your ~/.zshrc file: -# -# fpath=(~/.zsh $fpath) -# -# You need git's bash completion script installed. By default bash-completion's -# location will be used (e.g. pkg-config --variable=completionsdir bash-completion). -# -# If your bash completion script is somewhere else, you can specify the -# location in your ~/.zshrc: -# -# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash -# - -zstyle -T ':completion:*:*:git:*' tag-order && \ - zstyle ':completion:*:*:git:*' tag-order 'common-commands' - -zstyle -s ":completion:*:*:git:*" script script -if [ -z "$script" ]; then - local -a locations - local e bash_completion - - bash_completion=$(pkg-config --variable=completionsdir bash-completion 2>/dev/null) || - bash_completion='/usr/share/bash-completion/completions/' - - locations=( - "$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash - "$HOME/.local/share/bash-completion/completions/git" - "$bash_completion/git" - '/etc/bash_completion.d/git' # old debian - ) - for e in $locations; do - test -f $e && script="$e" && break - done -fi - -local old_complete="$functions[complete]" -functions[complete]=: -GIT_SOURCING_ZSH_COMPLETION=y . "$script" -functions[complete]="$old_complete" - -__gitcomp () -{ - emulate -L zsh - - local cur_="${3-$cur}" - - case "$cur_" in - --*=) - ;; - --no-*) - local c IFS=$' \t\n' - local -a array - for c in ${=1}; do - if [[ $c == "--" ]]; then - continue - fi - c="$c${4-}" - case $c in - --*=|*.) ;; - *) c="$c " ;; - esac - array+=("$c") - done - compset -P '*[=:]' - compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 - ;; - *) - local c IFS=$' \t\n' - local -a array - for c in ${=1}; do - if [[ $c == "--" ]]; then - c="--no-...${4-}" - array+=("$c ") - break - fi - c="$c${4-}" - case $c in - --*=|*.) ;; - *) c="$c " ;; - esac - array+=("$c") - done - compset -P '*[=:]' - compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 - ;; - esac -} - -__gitcomp_direct () -{ - emulate -L zsh - - compset -P '*[=:]' - compadd -Q -S '' -- ${(f)1} && _ret=0 -} - -__gitcomp_nl () -{ - emulate -L zsh - - compset -P '*[=:]' - compadd -Q -S "${4- }" -p "${2-}" -- ${(f)1} && _ret=0 -} - -__gitcomp_file () -{ - emulate -L zsh - - compadd -f -p "${2-}" -- ${(f)1} && _ret=0 -} - -__gitcomp_direct_append () -{ - __gitcomp_direct "$@" -} - -__gitcomp_nl_append () -{ - __gitcomp_nl "$@" -} - -__gitcomp_file_direct () -{ - __gitcomp_file "$1" "" -} - -_git_zsh () -{ - __gitcomp "v1.1" -} - -__git_complete_command () -{ - emulate -L zsh - - local command="$1" - local completion_func="_git_${command//-/_}" - if (( $+functions[$completion_func] )); then - emulate ksh -c $completion_func - return 0 - else - return 1 - fi -} - -__git_zsh_bash_func () -{ - emulate -L ksh - - local command=$1 - - __git_complete_command "$command" && return - - local expansion=$(__git_aliased_command "$command") - if [ -n "$expansion" ]; then - words[1]=$expansion - __git_complete_command "$expansion" - fi -} - -__git_zsh_cmd_common () -{ - local -a list - list=( - add:'add file contents to the index' - bisect:'find by binary search the change that introduced a bug' - branch:'list, create, or delete branches' - checkout:'checkout a branch or paths to the working tree' - clone:'clone a repository into a new directory' - commit:'record changes to the repository' - diff:'show changes between commits, commit and working tree, etc' - fetch:'download objects and refs from another repository' - grep:'print lines matching a pattern' - init:'create an empty Git repository or reinitialize an existing one' - log:'show commit logs' - merge:'join two or more development histories together' - mv:'move or rename a file, a directory, or a symlink' - pull:'fetch from and merge with another repository or a local branch' - push:'update remote refs along with associated objects' - rebase:'forward-port local commits to the updated upstream head' - reset:'reset current HEAD to the specified state' - restore:'restore working tree files' - rm:'remove files from the working tree and from the index' - show:'show various types of objects' - status:'show the working tree status' - switch:'switch branches' - tag:'create, list, delete or verify a tag object signed with GPG') - _describe -t common-commands 'common commands' list && _ret=0 -} - -__git_zsh_cmd_alias () -{ - local -a list - list=(${${(0)"$(git config -z --get-regexp '^alias\.*')"}#alias.}) - list=(${(f)"$(printf "%s:alias for '%s'\n" ${(f@)list})"}) - _describe -t alias-commands 'aliases' list && _ret=0 -} - -__git_zsh_cmd_all () -{ - local -a list - emulate ksh -c __git_compute_all_commands - list=( ${=__git_all_commands} ) - _describe -t all-commands 'all commands' list && _ret=0 -} - -__git_zsh_main () -{ - local curcontext="$curcontext" state state_descr line - typeset -A opt_args - local -a orig_words - - orig_words=( ${words[@]} ) - - _arguments -C \ - '(-p --paginate --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \ - '(-p --paginate)--no-pager[do not pipe git output into a pager]' \ - '--git-dir=-[set the path to the repository]: :_directories' \ - '--bare[treat the repository as a bare repository]' \ - '(- :)--version[prints the git suite version]' \ - '--exec-path=-[path to where your core git programs are installed]:: :_directories' \ - '--html-path[print the path where git''s HTML documentation is installed]' \ - '--info-path[print the path where the Info files are installed]' \ - '--man-path[print the manpath (see `man(1)`) for the man pages]' \ - '--work-tree=-[set the path to the working tree]: :_directories' \ - '--namespace=-[set the git namespace]' \ - '--no-replace-objects[do not use replacement refs to replace git objects]' \ - '(- :)--help[prints the synopsis and a list of the most commonly used commands]: :->arg' \ - '(-): :->command' \ - '(-)*:: :->arg' && return - - case $state in - (command) - _tags common-commands alias-commands all-commands - while _tags; do - _requested common-commands && __git_zsh_cmd_common - _requested alias-commands && __git_zsh_cmd_alias - _requested all-commands && __git_zsh_cmd_all - let _ret || break - done - ;; - (arg) - local command="${words[1]}" __git_dir - - if (( $+opt_args[--bare] )); then - __git_dir='.' - else - __git_dir=${opt_args[--git-dir]} - fi - - (( $+opt_args[--help] )) && command='help' - - words=( ${orig_words[@]} ) - - __git_zsh_bash_func $command - ;; - esac -} - -_git () -{ - local _ret=1 - local cur cword prev - - cur=${words[CURRENT]} - prev=${words[CURRENT-1]} - let cword=CURRENT-1 - - if (( $+functions[__${service}_zsh_main] )); then - __${service}_zsh_main - elif (( $+functions[__${service}_main] )); then - emulate ksh -c __${service}_main - elif (( $+functions[_${service}] )); then - emulate ksh -c _${service} - elif (( $+functions[_${service//-/_}] )); then - emulate ksh -c _${service//-/_} - fi - - let _ret && _default && _ret=0 - return _ret -} - -_git diff --git a/.config/zsh/.zsh/fsh/.fast-make-targets b/.config/zsh/.zsh/fsh/.fast-make-targets deleted file mode 100644 index e2cbd32..0000000 --- a/.config/zsh/.zsh/fsh/.fast-make-targets +++ /dev/null @@ -1,98 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Almost all code borrowed from Zshell's _make function -# -# Copyright (c) 2018 Sebastian Gniazdowski - -local -a TARGETS - -.make-expandVars() { - local open close var val front='' rest=$1 - - while [[ $rest == (#b)[^$]#($)* ]]; do - front=$front${rest[1,$mbegin[1]-1]} - rest=${rest[$mbegin[1],-1]} - - case $rest[2] in - ($) # '$$'. may not appear in target and variable's value - front=$front\$\$ - rest=${rest[3,-1]} - continue - ;; - (\() # Variable of the form $(foobar) - open='(' - close=')' - ;; - ({) # ${foobar} - open='{' - close='}' - ;; - ([[:alpha:]]) # $foobar. This is exactly $(f)oobar. - open='' - close='' - var=$rest[2] - ;; - (*) # bad parameter name - print -- $front$rest - return 1 - ;; - esac - - if [[ -n $open ]]; then - if [[ $rest == \$$open(#b)([[:alnum:]_]##)(#B)$close* ]]; then - var=$match - else # unmatched () or {}, or bad parameter name - print -- $front$rest - return 1 - fi - fi - - val='' - if [[ -n ${VAR_ARGS[(i)$var]} ]]; then - val=${VAR_ARGS[$var]} - else - if [[ -n $opt_args[(I)(-e|--environment-overrides)] ]]; then - if [[ $parameters[$var] == scalar-export* ]]; then - val=${(P)var} - elif [[ -n ${VARIABLES[(i)$var]} ]]; then - val=${VARIABLES[$var]} - fi - else - if [[ -n ${VARIABLES[(i)$var]} ]]; then - val=${VARIABLES[$var]} - elif [[ $parameters[$var] == scalar-export* ]]; then - val=${(P)var} - fi - fi - fi - rest=${rest//\$$open$var$close/$val} - done - - print -- ${front}${rest} -} - - -.make-parseMakefile () { - local input var val target dep TAB=$'\t' tmp IFS= - - while read input - do - case "$input " in - # TARGET: dependencies - # TARGET1 TARGET2 TARGET3: dependencies - ([[*?[:alnum:]$][^$TAB:=%]#:[^=]*) - target=$(.make-expandVars ${input%%:*}) - TARGETS+=( ${(z)target} ) - ;; - esac - done -} - -if [[ -z "${FAST_HIGHLIGHT[chroma-make-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[chroma-make-cache-born-at] )) -gt 7 ]]; then - .make-parseMakefile - FAST_HIGHLIGHT[chroma-make-cache-born-at]="$EPOCHSECONDS" - FAST_HIGHLIGHT[chroma-make-cache]="${(j:;:)TARGETS}" -fi - -reply2=( "${(s:;:)FAST_HIGHLIGHT[chroma-make-cache]}" ) - -# vim:ft=zsh:et diff --git a/.config/zsh/.zsh/fsh/.fast-read-ini-file b/.config/zsh/.zsh/fsh/.fast-read-ini-file deleted file mode 100644 index 2e57d10..0000000 --- a/.config/zsh/.zsh/fsh/.fast-read-ini-file +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2018 Sebastian Gniazdowski -# -# $1 - path to the ini file to parse -# $2 - name of output hash (INI by default) -# $3 - prefix for keys in the hash (can be empty) -# -# Writes to given hash under keys built in following way: ${3}
_field. -# Values are values from ini file. - -local __ini_file="$1" __out_hash="${2:-INI}" __key_prefix="$3" -local IFS='' __line __cur_section="void" __access_string -local -a match mbegin mend - -[[ ! -r "$__ini_file" ]] && { builtin print -r "fast-syntax-highlighting: an ini file is unreadable ($__ini_file)"; return 1; } - -while read -r -t 1 __line; do - if [[ "$__line" = [[:blank:]]#\;* ]]; then - continue - elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then - __cur_section="${match[1]}" - elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then - match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # remove trailing whitespace - __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]" - : "${(P)__access_string::=${match[2]}}" - fi -done < "$__ini_file" - -return 0 - -# vim:ft=zsh:sw=4:sts=4:et diff --git a/.config/zsh/.zsh/fsh/.fast-run-command b/.config/zsh/.zsh/fsh/.fast-run-command deleted file mode 100644 index e251bcc..0000000 --- a/.config/zsh/.zsh/fsh/.fast-run-command +++ /dev/null @@ -1,37 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# FAST_HIGHLIGHT hash serves as container for variables that -# prevents creating them in global scope. (P) flag is not used, -# output array is fixed (__lines_list). -# -# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is -# added automatically -# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two -# additional fields will be used, $2-cache, $2-cache-born-at -# $3 - what to remove from beginning of the lines returned by the -# command -# $4 - cache validity time, default 5 (seconds) -# -# Output: array __lines_list, with output of the command ran - -# User should not forget to define this array, the below code -# will only ensure that it's array (can also define a global) -typeset -ga __lines_list -local -a __response - -if [[ -z "${FAST_HIGHLIGHT[$2-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then - FAST_HIGHLIGHT[$2-cache-born-at]="$EPOCHSECONDS" - __response=( ${${(f)"$(command ${(Qz)1#+} 2>/dev/null)"}#${~3}} ) - [[ "$1" = "+"* ]] && __lines_list+=( "${__response[@]}" ) || __lines_list=( "${__response[@]}" ) - FAST_HIGHLIGHT[$2-cache]="${(j:;:)__response}" -else - # Quoted (s:;:) flag without @ will skip empty elements. It - # still produces array output, interesingly. All this is for - # the trailing ";" above, to skip last, empty element. - [[ "$1" = "+"* ]] && \ - __lines_list+=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) || \ - __lines_list=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) -fi - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/.fast-run-git-command b/.config/zsh/.zsh/fsh/.fast-run-git-command deleted file mode 100644 index 4a42b97..0000000 --- a/.config/zsh/.zsh/fsh/.fast-run-git-command +++ /dev/null @@ -1,60 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# It runs given command, which in general will be a git command, -# automatically looking at cache first (a field named *-cache, -# in FAST_HIGHLIGHT), which is valid for 5 seconds, and in case -# of outdated or not existing cache, runs the command, splitting -# on new-lines, first checking if PWD is inside git repository. -# -# FAST_HIGHLIGHT hash serves as container for variables that -# prevents creating them in global scope. (P) flag is not used, -# output array is fixed (__lines_list). -# -# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is -# added automatically -# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two -# additional fields will be used, $2-cache, $2-cache-born-at -# $3 - what to remove from beginning of the lines returned by the -# command -# $4 - cache validity time, default 5 (seconds) -# -# Output: array __lines_list, with output of the (git) command ran - -# User should not forget to define this array, the below code -# will only ensure that it's array (can also define a global) -typeset -ga __lines_list -local -a __response - -if [[ $1 == --status ]] { - integer __status=1 - shift -} - -if [[ -z ${FAST_HIGHLIGHT[$2-cache]} || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then - FAST_HIGHLIGHT[$2-cache-born-at]=$EPOCHSECONDS - if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = true ]]; then - __response=( ${${(f)"$(command ${(Qz)${1#+}} 2>/dev/null)"}#$3} ) - integer retval=$? - if (( __status )) { - __response=( $retval ) - __lines_list=( $retval ) - } else { - [[ "$1" = "+"* ]] && \ - __lines_list+=( "${__response[@]}" ) || \ - __lines_list=( "${__response[@]}" ) - } - else - __lines_list=() - fi - FAST_HIGHLIGHT[$2-cache]="${(j:;:)__response}" -else - # Quoted (s:;:) flag without @ will skip empty elements. It - # still produces array output, interesingly. All this is for - # the trailing ";" above, to skip last, empty element. - [[ "$1" = "+"* ]] && \ - __lines_list+=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) || \ - __lines_list=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) -fi - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/.fast-zts-read-all b/.config/zsh/.zsh/fsh/.fast-zts-read-all deleted file mode 100644 index 96c52ab..0000000 --- a/.config/zsh/.zsh/fsh/.fast-zts-read-all +++ /dev/null @@ -1,17 +0,0 @@ -# $1 - file-descriptor to be read from -# $2 - name of output variable (default: REPLY) - -local __in_fd=${1:-0} __out_var=${2:-REPLY} -local -a __tmp -integer __ret=1 __repeat=10 __tmp_size=0 - -while sysread -s 65535 -i "$__in_fd" '__tmp[__tmp_size + 1]'; do - (( ( __ret=$? ) == 0 )) && (( ++ __tmp_size )) - (( __ret == 5 )) && { __ret=0; (( --__repeat == 0 )) && break; } -done - -: ${(P)__out_var::="${(j::)__tmp}"} - -return __ret - -# vim: ft=zsh:et:sw=4:sts=4 diff --git a/.config/zsh/.zsh/fsh/.github/FUNDING.yml b/.config/zsh/.zsh/fsh/.github/FUNDING.yml deleted file mode 100644 index 56544b3..0000000 --- a/.config/zsh/.zsh/fsh/.github/FUNDING.yml +++ /dev/null @@ -1,5 +0,0 @@ -# These are supported funding model platforms - -github: psprint -patreon: psprint -ko_fi: psprint diff --git a/.config/zsh/.zsh/fsh/.gitignore b/.config/zsh/.zsh/fsh/.gitignore deleted file mode 100644 index a863220..0000000 --- a/.config/zsh/.zsh/fsh/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -current_theme.zsh -secondary_theme.zsh -theme_overlay.zsh -*.txt -test/out.parse -test/res -hold/* -*.zwc - -### Vim -# Swap -[._]*.s[a-v][a-z] -[._]*.sw[a-p] -[._]s[a-v][a-z] -[._]sw[a-p] - -# Session -Session.vim - -# Temporary -.netrwhist -*~ -# Auto-generated tag files -tags diff --git a/.config/zsh/.zsh/fsh/.travis.yml b/.config/zsh/.zsh/fsh/.travis.yml deleted file mode 100644 index 351b593..0000000 --- a/.config/zsh/.zsh/fsh/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -addons: - apt: - packages: - zsh -install: - - mkdir .bin - - curl -L https://github.com/zunit-zsh/zunit/releases/download/v0.8.2/zunit > .bin/zunit - - curl -L https://raw.githubusercontent.com/molovo/revolver/master/revolver > .bin/revolver - - curl -L https://raw.githubusercontent.com/molovo/color/master/color.zsh > .bin/color -before_script: - - chmod u+x .bin/{color,revolver,zunit} - - export PATH="$PWD/.bin:$PATH" -script: zunit diff --git a/.config/zsh/.zsh/fsh/.zunit.yml b/.config/zsh/.zsh/fsh/.zunit.yml deleted file mode 100644 index e4fd57f..0000000 --- a/.config/zsh/.zsh/fsh/.zunit.yml +++ /dev/null @@ -1,8 +0,0 @@ -tap: false -directories: - tests: tests - output: tests/_output - support: tests/_support -time_limit: 0 -fail_fast: false -allow_risky: false diff --git a/.config/zsh/.zsh/fsh/CHANGELOG.md b/.config/zsh/.zsh/fsh/CHANGELOG.md deleted file mode 100644 index b2a7665..0000000 --- a/.config/zsh/.zsh/fsh/CHANGELOG.md +++ /dev/null @@ -1,144 +0,0 @@ -# News On Updates in F-Sy-H - -**2018-08-09** - -Added ideal string highlighting – FSH now handles any legal quoting and combination of `"`,`'` and `\` when -highlighting program arguments. See the introduction for an example (item #14). - -**2018-08-02** - -Global aliases are now supported: - -![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/global-alias.png) - -**2018-08-01** - -Hint – how to customize styles when using Zplugin and turbo mode: - -```zsh -zplugin ice wait"1" atload"set_fast_theme" -zplugin light zdharma/fast-syntax-highlighting - -set_fast_theme() { - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]='bg=blue' - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-1]='fg=red,bold' - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-2]='fg=magenta,bold' - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-3]='fg=cyan,bold' -} -``` - -If you have set theme before an update of styles (e.g. recent addition of bracket highlighting) -then please repeat `fast-theme {theme}` call to regenerate theme files. (**2018-08-09**: FSH -now has full user-theme support, refer to [appropriate section of README](#customization)). - -**2018-07-30** - -Ideal highlighting of brackets (pairing, etc.) – no quoting can disturb the result: - -![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/brackets.gif) - -`FAST_HIGHLIGHT[use_brackets]=1` to enable this feature (**2018-07-31**: not needed anymore, this highlighting is active by default). - -**2018-07-21** - -Chroma architecture now supports aliases. You can have `alias mygit="git commit"` and when `mygit` -will be invoked everything will work as expected (Git chroma will be ran). - -**2018-07-11** - -There were problems with Ctrl-C not working when using FSH. After many days I've found a fix -for this, it's pushed to master. - -Second, asynchronous path checking (useful on e.g. slow network drives, or when there are many files in directory) -is now optional. Set `FAST_HIGHLIGHT[use_async]=1` to enable it. This saves some users from Zshell crashes -– there's an unknown bug in Zsh. - -**2018-06-09** - -New chroma functions: `awk`, `make`, `perl`, `vim`. Checkout the [video](https://asciinema.org/a/186234), -it shows functionality of `awk` – compiling of code and NOT running it. Perl can do this too: -[video](https://asciinema.org/a/186098). - -**2018-06-06** - -FSH gained a new architecture – "chroma functions". They are similar to "completion functions", i.e. they -are defined **per-command**, but instead of completing that command, they colorize it. Two chroma exist, -for `Git` ([video](https://asciinema.org/a/185707), [video](https://asciinema.org/a/185811)) and for `grep` -([video](https://asciinema.org/a/185942)). Checkout -[example chroma](https://github.com/zdharma/fast-syntax-highlighting/blob/master/chroma/-example.ch) if you -would like to highlight a command. - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/git_chroma.png) - -**2018-06-01** - -Highlighting of command substitution (i.e. `$(...)`) with alternate theme – two themes at once! It was just white before: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/cmdsubst.png) - -To select which theme to use for `$(...)` set the key `secondary=` in [theme ini file](https://github.com/zdharma/fast-syntax-highlighting/blob/master/themes/free.ini#L7). -All shipped themes have this key set (only the `default` theme doesn't use second theme). - -Also added correct highlighting of descriptor-variables passed to `exec`: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/execfd.png) - -**2018-05-30** - -For-loop is highlighted, it has separate settings in [theme file](https://github.com/zdharma/fast-syntax-highlighting/blob/master/themes/free.ini). - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/for-loop.png) - -**2018-05-27** - -Added support for 256-color themes. There are six themes shipped with FSH. The command to -switch theme is `fast-theme {theme-name}`, it has a completion which lists available themes -and options. Checkout [asciinema recording](https://asciinema.org/a/183814) that presents -the themes. - -**2018-05-25** - -Hash holding paths that shouldn't be grepped (globbed) – blacklist for slow disks, mounts, etc.: - -```zsh -typeset -gA FAST_BLIST_PATTERNS -FAST_BLIST_PATTERNS[/mount/nfs1/*]=1 -FAST_BLIST_PATTERNS[/mount/disk2/*]=1 -``` - -**2018-05-23** - -Assign colorizing now spans to variables defined by `typeset`, `export`, `local`, etc.: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/typeset.png) - -Also, `zcalc` has a separate math mode and specialized highlighting – no more light-red colors because of -treating `zcalc` like a regular command-line: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/zcalc.png) - -**2018-05-22** - -Array assignments were still boring, so I throwed in bracked colorizing: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/array-assign.png) - -**2018-05-22** - -Assignments are no more one-colour default-white. When used in assignment, highlighted are: - -- variables (outside strings), -- strings (double-quoted and single-quoted), -- math-mode (`val=$(( ... ))`). - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/assign.png) - -**2018-01-06** - -Math mode is highlighted – expressions `(( ... ))` and `$(( ... ))`. Empty variables are colorized as red. -There are 3 style names (fields of -[FAST_HIGHLIGHT_STYLES](https://github.com/zdharma/fast-syntax-highlighting/blob/master/fast-highlight#L34) -hash) for math-variable, number and empty variable (error): `mathvar`, `mathnum`, `matherr`. You can set -them (like the animation below shows) to change colors. - -![animation](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/math.gif) diff --git a/.config/zsh/.zsh/fsh/CHROMA_GUIDE.adoc b/.config/zsh/.zsh/fsh/CHROMA_GUIDE.adoc deleted file mode 100644 index 579f192..0000000 --- a/.config/zsh/.zsh/fsh/CHROMA_GUIDE.adoc +++ /dev/null @@ -1,166 +0,0 @@ -# Chroma Guide for F-Sy-H - -## Motivation - -Someone might want to create a detailed highlighting for a **specific program** -and this document helps achieving this. It explains how chroma functions – the -code behind such detailed highlighting – are constructed and used. - -## Keywords - -- `chroma` - a shorthand for `chroma function` – the thing that literally colorizes selected commands, like `git`, `grep`, etc. invocations, see `chroma function` below, -- `big loop` - main highlighting code, a loop over tokens and at least 2 large structular constructs (big `if` and `case`); - it is advanced, e.g. parses `case` statements, here-string, it basically constitutes 90% of the F-Sy-H project, -- `chroma function` - a plugin-function that is called when a specific command occurs (e.g. when user enters `git` at - command line) suppressing activity of `big loop` (i.e. no standard highlighting unless requested), -- `token` - result of splitting whole command line (i.e. `$BUFFER`, the Zle variable) into bits called tokens, which are - words in general, separated by spaces on the command line. - -## Overview Of Functioning - -1. Big loop is working – token by token processes command line, changes states (e.g. enters state "inside case - statement") and in the end decides on color of the token currently processed. - -2. Big loop occurs a command that has a chroma, e.g. `git`. - -3. Big loop enters "chroma" state, calls associated chroma function. - -4. Chroma takes care of "chroma" state, ensures it will be set also for next token. - -5. "chroma" state is active, so all following tokens are routed to the chroma (in general skipping big-loop, see next items), - -6. When processing of a single token is complete, the associated chroma returns 0 - (shell-truth) to request no further processing by the big loop. - -7. It can also return 1 so that single, current token will be passed into big-loop - for processing (to do a standard highlighting). - -## Chroma-Function Arguments - -- `$1` - 0 or 1, denoting if it's the first call to the chroma, or a following one, - -- `$2` - the current token, also accessible by `$\__arg` from the upper scope - - basically a private copy of `$__arg`; the token can be eg.: "grep", - -- `$3` - a private copy of `$_start_pos`, i.e. the position of the token in the - command line buffer, used to add region_highlight entry (see man), - because Zsh colorizes by *ranges* applied onto command line buffer (e.g. - `from-10 to-13 fg=red`), - -- `$4` - a private copy of `$_end_pos` from the upper scope; denotes where current token - ends (at which index in the string being the command line). - -So example invocation could look like this: - ----- -chroma/-example.ch 1 "grep" "$_start_pos" "$_end_pos" ----- - -Big-loop will be doing such calls for the user, after occurring a specific chroma-enabled command (like e.g. `awk`), and then until chroma will detect end of this chroma-enabled command (end of whole invocation, with arguments, etc.; in other words, when e.g. new line or `;`-character occurs, etc.). - -## Example Chroma-Function - -[source,zsh] ----- -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Example chroma function. It colorizes first two arguments as `builtin' style, -# third and following arguments as `globbing' style. First two arguments may -# be "strings", they will be passed through to normal higlighter (by returning 1). -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - like above document says -# -# $3 - ... -# -# $4 - ... -# -# Other tips are: -# - $CURSOR holds cursor position -# - $BUFFER holds whole command line buffer -# - $LBUFFER holds command line buffer that is left from the cursor, i.e. it's a -# BUFFER substring 1 .. $CURSOR -# - $RBUFFER is the same as LBUFFER but holds part of BUFFER right to the cursor -# -# The function receives $BUFFER but via sequence of tokens, which are shell words, -# e.g. "a b c" is a shell word, while a b c are 3 shell words. -# -# FAST_HIGHLIGHT is a friendly hash array which allows to store strings without -# creating global parameters (variables). If you need hash, go ahead and use it, -# declaring first, under some distinct name like: typeset -gA CHROMA_EXPLE_DICT. -# Remember to reset the hash and others at __first_call == 1, so that you have -# a fresh state for new command. - -# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. -# So the below 8192 assignment takes care that next token will be routed to chroma. -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global string variables. - FAST_HIGHLIGHT[chroma-example-counter]=0 - - # Set style for region_highlight entry. It is used below in - # '[[ -n "$__style" ]] ...' line, which adds highlight entry, - # like "10 12 fg=green", through `reply' array. - # - # Could check if command `example' exists and set `unknown-token' - # style instead of `command' - __style=${FAST_THEME_NAME}command - -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - else - # Count non-option tokens - (( FAST_HIGHLIGHT[chroma-example-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-example-counter] )) - - # Colorize 1..2 as builtin, 3.. as glob - if (( FAST_HIGHLIGHT[chroma-example-counter] <= 2 )); then - if [[ "$__wrd" = \"* ]]; then - # Pass through, fsh main code will do the highlight! - return 1 - else - __style=${FAST_THEME_NAME}builtin - fi - else - __style=${FAST_THEME_NAME}globbing - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# If 1 will be added to __start_pos, this will highlight "oken". -# If 1 will be subtracted from __end_pos, this will highlight "toke". -# $PREBUFFER is for specific situations when users does command \ -# i.e. when multi-line command using backslash is entered. -# -# This is a common place of adding such entry, but any above code can do -# it itself (and it does in other chromas) and skip setting __style to -# this way disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves. -# _start_pos=$_end_pos advainces pointers in command line buffer. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 ----- - diff --git a/.config/zsh/.zsh/fsh/DONATIONS.md b/.config/zsh/.zsh/fsh/DONATIONS.md deleted file mode 100644 index fc22058..0000000 --- a/.config/zsh/.zsh/fsh/DONATIONS.md +++ /dev/null @@ -1,441 +0,0 @@ - - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [2018-08-14, received $30](#2018-08-14-received-30) -- [2018-08-03, received $8](#2018-08-03-received-8) -- [2018-08-02, received $3 from Patreon](#2018-08-02-received-3-from-patreon) -- [2018-07-31, received $7](#2018-07-31-received-7) -- [2018-07-28, received $2](#2018-07-28-received-2) -- [2018-07-25, received $3](#2018-07-25-received-3) -- [2018-07-20, received $3](#2018-07-20-received-3) -- [2018-06-17, received ~$155 (200 CAD)](#2018-06-17-received-155-200-cad) -- [2018-06-10, received $10](#2018-06-10-received-10) -- [2018-05-25, received $50](#2018-05-25-received-50) - - - -Below are reports about what is being done with donations, i.e. which commits -are created thanks to them, which new features are added, etc. From the money -I receive I buy myself coffee and organize the time to work on the requested -features, sometimes many days in a row. - -## 2018-08-14, received $30 - - * **Project**: **[Zplugin](https://github.com/zdharma/zplugin)** - * **Goal**: Create a binary Zsh module with one Zplugin optimization and optionally some - other features. - * **Status**: The job is done. - -Thanks to this donation I have finally started to code **[binary Zplugin module]( -https://github.com/zdharma/zplugin#quick-start-module-only)**, which is a big step onward -in evolution of Zplugin. I've implemented and published the module with 3 complete -features: 1) `load` optimization, 2) autocompilation of scripts, 3) profiling of script -load times. - -Commit list: -``` -2018-08-22 7b96fad doc: mod-install.sh -2018-08-22 ba1ba64 module: Update zpmod usage text -2018-08-22 b0d72e8 zplugin,*autoload: `module' command, manages new zdharma/zplugin module -2018-08-22 706bbb3 Update Zsh source files to latest -2018-08-20 b77426f module: source-study builds report with milliseconds without fractions -2018-08-20 c3cc09b module: Updated zpmod_usage, i.a. with `source-study' sub-command -2018-08-20 6190295 module: Go back to subcommand-interface to `zpmod'; simple option parser -2018-08-20 881005f module: Report on sourcing times is shown on `zpmod -S`. Done generation -2018-08-19 e5d046a module: Correct conditions on zwc file vs. script file (after stats) -2018-08-19 1282c21 module: Duration of sourcing a file is measured and stored into a hash -2018-08-18 e080153 module: Overload both `source' and `.' builtins -2018-08-18 580efb8 module: Invoke bin_zcompile with -U option (i.e. no alias expansion) -2018-08-18 b7d9836 module: Custom `source' ensures script is compiled, compiles if not -2018-08-18 1e75a47 module: Code cleanup, vim folding -2018-08-18 a4a02f3 module: Finally working `source'/`.' overload (used options translating) -2018-08-16 99bba56 module: zpmod_usage gained content -2018-08-16 04703cd module: Add the main builtin zpmod with report-append which is working -2018-08-16 cd6dc19 module: my_ztrdup_glen, zp_unmetafy_zalloc -2018-08-16 6d44e36 module: Cleanup, `source' overload after patron leoj3n restarted module -``` - -## 2018-08-03, received $8 - - * **Project**: **[zdharma/history-search-multi-word](https://github.com/zdharma/history-search-multi-word)** - * **Goal**: Allow calling `zle reset-prompt` (Zshell feature). - * **Status**: The job is done. - -A user wanted to be able to call `reset-prompt` Zshell widget without disturbing my project -`history-search-multi-word`. I've implemented the necessary changes to HSMW. - -Commit list: - -``` -2018-08-04 9745d3d hsmw: reset-prompt-protect zstyle – allow users to run zle reset-prompt -2018-08-04 ce48a53 hsmw: More typo-like lackings of % substitution -2018-08-04 7e2d79b hsmw: A somewhat typo, missing % substitution -``` - -## 2018-08-02, received $3 from Patreon - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: No goal set up. - * **Status**: Bug-fixing work. - -I did bug-fixing run on `fast-syntax-highlighting`, spotted many small and sometimes important things to -improve. Did one bigger thing – added global-aliases functionality. - -Commit list: - -``` -2018-08-02 1e854f5 -autoload.ch: Don't check existence for arguments that are variables -2018-08-02 14cdc5e *-string-*: Support highlighter cooperation in presence of $PREBUFFER -2018-08-02 2d8f0e4 *-highlight: Correctly highlight $VAR, $~VAR, ${+VAR}, etc. in strings -2018-08-02 e3032d9 *-highlight: ${#PREBUFFER} -> __PBUFLEN, equal performance -2018-08-02 f0a7121 *-highlight: Make case conditions and brackets highlighter compatible -2018-08-02 781f68e *-highlight: Recognize more case-item-end tokens -2018-08-02 206c122 *-highlight: Remove unused 4th __arg_type -2018-08-02 c6da477 *-string-*: Handle 'abc\' – no slash-quoting here. Full quoting support -2018-08-02 52e0176 *-string-*: Fix bug, third level was getting wrong style -2018-08-02 5edbfae -git.ch: Support "--message=..." syntax (commit) -2018-08-02 669d4b7 -git.ch: Handle "--" argument (stops options) -2018-08-02 4fae1f2 -make.ch: Handle make's -f option -2018-08-02 3fd32fe -make.ch: Handle make's -C option -2018-08-02 31751f5 -make.ch: Recognize options that obtain argument -2018-08-02 e480f18 -make.ch: Fix reply-var clash, gained consistency -2018-08-02 0e8bc1e Updated README.md -2018-08-02 eee0034 images: global-alias.png -2018-08-02 00b41ef *-highlight,themes,fast-theme: Support for global aliases #41 -``` - -## 2018-07-31, received $7 - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: Implement ideal brackets highlighting. - * **Status**: The job is done. - -When a source code is edited e.g. in `Notepad++` or some IDE, then most often brackets are somehow matched to -each other, so that the programmer can detect mistakes. `Fast-syntax-highlighting` too gained that feature. It -was done in such a way that FSH cannot make any mistake, colors will perfectly match brackets to each other. - -Commit list: - -``` -2018-07-31 2889860 *-highlight: Correct place to initialize $_FAST_COMPLEX_BRACKETS -2018-07-31 2bde2a9 Performance status -15/8/8 -2018-07-31 5078261 *-highlight,README: Brackets highlighter active by default -2018-07-31 2ee3073 *-highlight,*string-*: Brackets in [[..]], ((..)), etc. handled normally -2018-07-31 776b12d plugin.zsh: $_ZSH_HIGHLIGHT_MAIN_CACHE -> $_FAST_MAIN_CACHE -2018-07-30 2867712 plugin.zsh: Fix array parameter created without declaring #43 -2018-07-30 cbe5fc8 Updated README.md -2018-07-30 2bd3291 images: brackets.gif -2018-07-30 ef23a96 *-string-*: Bug-fix, correctly use theme styles -2018-07-30 9046f82 plugin.zsh: Attach the new brackets highlighter; F_H[use_brackets]=1 -2018-07-30 b33a5fd fast-theme: Support 4 new styles (for brackets) -2018-07-30 a03f004 themes: Add 4 new styles (brackets) -2018-07-30 2448cdc *-string-*: Additional highlight of bracket under cursor; more styles -2018-07-30 5e1795e *-string-*: Highlighter for brackets, handles all quotings; detached -``` - -## 2018-07-28, received $2 - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: Distinguish file and directory when highlighting - * **Status**: The job is done. - -A user requested that when `fast-syntax-highlighting` colorizes the command line it should use different -styles (e.g. colors) for token that's a *file* and that's a *directory*. It was a reasonable idea and I've -implemented it. - -Commit list: -``` -2018-07-28 7f48e04 themes: Extend all themes with new style `path-to-dir' -2018-07-28 c7c6a91 fast-theme: Support for new style `path-to-dir' -2018-07-28 264676c *-highlight: Differentiate path and to-dir path. New style: path-to-dir -``` - -## 2018-07-25, received $3 - - * **Project**: **[zdharma/zshelldoc](https://github.com/zdharma/zshelldoc)** - * **Goal**: Implement documenting of used environment variables. - * **Status**: The job is done. - -Zshelldoc generates code-documentation like Doxygen or Javadoc, etc. User requested a -new feature: the generated docs should enumerate environment variables used and/or -exported by every function. Everything went fine and this feature has been implemented. - -Commit list: - -``` -2018-07-26 f63ea25 Updated README.md -2018-07-26 3af0cf7 *detect: Get `var' from ${var:-...} and ${...:+${var}} and other subst -2018-07-25 2932510 *adoc: Better language in output document (about exported vars) #5 -2018-07-25 f858dd8 *adoc: Include (in the output document) data on env-vars used #5 -2018-07-25 80e3763 *adoc: Include data on exports (environment) in the output document #5 -2018-07-25 ca576e2 *detect: Detect which env-vars are used, store meta-data in data/ #5 -2018-07-25 f369dcc *detect: Function `find-variables' reported "$" as a variable, fixed #5 -2018-07-25 e243dab *detect: Function `find-variables' #5 -2018-07-25 5b34bb1 *transform: Detect exports done by function/script-body, store #5 -``` - -## 2018-07-20, received $3 - - * **Project**: **[zdharma/zshelldoc](https://github.com/zdharma/zshelldoc)** - * **Goal**: Implement stripping of leading `#` char from functions' descriptions. - * **Status**: The job is done. - -A user didn't like that functions' descriptions in the JavaDoc-like document (generated with Zshelldoc) all -contain a leading `#` character. I've added stripping of this character (it is there in the processed source -code) controlled by a new Zshelldoc option. - -Commit list: -``` -2018-07-20 172c220 zsd,*adoc,README: Option --scomm to strip "#" from function descriptions -``` - -## 2018-06-17, received ~$155 (200 CAD) - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: No goal set up. - * **Status**: Done intense research. - -I've created 2 new branches: `Hue-optimization` (33 commits) and `Tidbits-feature` (22 commits). Those were -branches with architectural changes and extraordinary features. The changes yielded to be too slow, and I had -to withdraw the merge. Below are fixing and optimizing commits (i.e. the valuable ones) that I've restored -from the two branches into master. - -Commit list: -``` -2018-07-21 dab6576 *-highlight: Merge-restore: remove old comments -2018-07-21 637521f *-highlight: Merge-restore: a threshold on # of zle .redisplay calls -2018-07-21 4163d4d *-highlight: Merge-restore: optimize four $__arg[1] = ... cases -2018-07-21 0f01195 *-highlight: Merge-restore: can remove one (Q) dequoting -2018-07-21 39a4ec6 *-highlight: Merge-restore: $v = A* is faster than $v[1] = A, tests: -2018-07-21 99d6b33 *-highlight: Merge-restore: optimize-out ${var:1} Bash syntax -2018-07-21 719c092 *-highlight: Merge-restore: allow $V/cmd, "$V/cmd, "$V/cmd", "${V}/cmd" -2018-07-21 026941d *-highlight: Merge-restore: stack pop in single instruction, not two -2018-07-21 3467e3d *-highlight: Merge-restore: more reasonable redirection-detecting code -2018-07-21 00d25ee *-highlight: Merge-restore: one active_command="$__arg" not needed (?) -2018-07-21 1daa6b3 *-highlight: Merge-restore: simplify ; and \n code short-paths -2018-07-21 55d65be *-highlight: Merge-restore: proc_buf advancement via patterns (not (i)) -2018-07-21 cc55546 *-highlight: Merge-restore: pattern matching to replace (i) flag -``` - -## 2018-06-10, received $10 - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: No goal set up. - * **Status**: Done intense experimenting. - -I was working on *chromas* – command-specific colorization. I've added `which` and -`printf` colorization, then added asynchronous path checking (needed on slow network -drives), then coded experimental `ZPath` feature for chromas, but it couldn't be optimized -so I had to resign of it. - -Commit list: -``` -2018-06-12 c4ed1c6 Optimization – the same idea as in previous patch, better method -2018-06-12 c36feef Optimization – a) don't index large buffer, b) with negative index -2018-06-12 2f03829 Performance status 2298 / 1850 -2018-06-12 14f5159 New working feature – ZPath. It requires optimization -2018-06-12 e027c40 -which.ch: One of commands can apparently return via stderr (#27) -2018-06-11 5b8004f New chroma `ruby', works like chroma `perl', checks syntax via -ce opts -2018-06-10 ca2e18b *-highlight: Async path checking has now 8-second cache -2018-06-10 e071469 *-highlight: Remove path-exists queue clearing -2018-06-10 5a6684c *-highlight: Support for asynchronous path checking -2018-06-10 1d7d6f5 New chroma: `printf', highlights special sequences like %s, %20s, etc. -2018-06-10 8f59868 -which.ch: Update main comment on purpose of this chroma -2018-06-10 5f4ece2 -which.ch: Added `whatis', it has only 1st line if output used -2018-06-10 e2d173e -which.ch: Uplift: handle `which' called on a function, /usr/bin/which -``` - -## 2018-05-25, received $50 - - * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** - * **Goal**: No goal set up. - * **Status**: New ideas and features. - -I was working from May, 25 to June, 9 and came up with key ideas and implemented them. First were *themes* -that were very special because they were using `INI` files instead of some Zsh-script format. Creating themes -for `fast-syntax-highlighting` is thus easy and fun. Then I came up with *chromas*, command-specific -highlighting, which redefine how syntax-highlighting for Zshell works – detailed highlighting for e.g. Git -became possible, the user is informed about e.g. a mistake even before running a command. Overall 178 commits -in 16 days. - -``` -2018-06-09 3f72e6c -git.ch: `revert' works almost like `checkout', attach `revert' there -2018-06-09 b892743 Updated CHROMA_GUIDE.adoc -2018-06-09 f05643d Revert "Revert "Updated CHROMA_GUIDE.md"" -2018-06-09 729bf7f Revert "Revert "CHROMA_GUIDE: Remove redundant comments, uplift"" -2018-06-09 48a4e0c Revert "CHROMA_GUIDE: Remove redundant comments, uplift" -2018-06-09 55ede0a Revert "Updated CHROMA_GUIDE.md" -2018-06-09 17a28ba New chroma `-docker.ch' that verifies image ID passed to `image rm' -2018-06-09 868812a -make.ch,*-make-targets: Check Makefile exists, use 7 second cache, #24 -2018-06-09 73df278 -sh.ch: Attach fish, has -c option, though different syntax, let's try -2018-06-09 3a73b8e Updated CHROMA_GUIDE.md -2018-06-09 29d04c8 CHROMA_GUIDE: Remove redundant comments, uplift -2018-06-09 22ce1d8 -sh.ch,*-highlight: Attach to 2 other shells, Zsh and Bash -2018-06-09 f54e44f New chroma `-sh.ch', colorizes code passed to `sh' with -c option -2018-06-09 f5d2375 CHROMA_GUIDE: Add example code block (rendered broken in mdown) -2018-06-09 08f4b28 CHROMA_GUIDE: Switch to asciidoc (rename) -2018-06-09 4e03609 CHROMA_GUIDE.md -2018-06-09 bbcf2d6 -source.ch: Word "source" should be highlighted as builtin -2018-06-09 6739b8b New chroma – `source' to handle . and source builtins -2018-06-09 b961211 gitignore: ignore more paths -2018-06-09 59d5d09 Updated README.md -2018-06-09 f6d4d19 Updated README.md -2018-06-09 eb31324 Update README.md (figlet logo) -2018-06-09 71dcc5f Performance status 298 / 479 -2018-06-09 00c5f8f *-highlight: Add comments -2018-06-09 232903c -awk.ch: Highlight `sub' function, not working {, } highlighting -2018-06-09 b5241ba *-highlight: Much better $( ) recursion, would say problems-free, maybe -2018-06-08 6c69437 *-highlight: Larger buffer (110 -> 250) for $( ) matching -2018-06-08 f2b7a96 -awk.ch: Syntax check code passed to awk. Awk is very forgiving, though -2018-06-08 c53d8ba -vim.ch: Pass almost everything to big-loop, check if vim exists -2018-06-08 7fbf7cd chroma: New chroma `vim', shows last opened files under prompt -2018-06-08 06e4570 gitignore: Extend .gitignore -2018-06-08 3184ba1 chroma: All chroma functions end chroma mode on e.g. | and similar -2018-06-08 070077d *-highlight,-example.ch: Rename arg_type -> __arg_type, use it to end -2018-06-08 6c2411e -awk.ch: Use the new theme style `subtle-bg' -2018-06-08 9ec8d63 themes: All themes (remaining 4) to support `subtle-bg' style -2018-06-08 66e848b fast-theme: New theme key `subtle-bg', default & clean.ini support it -2018-06-08 1e794f9 -awk.ch: More keywords highlighted -2018-06-08 f3bbaca -awk.ch: Don't highlight keywords when they only contain proper keyword -2018-06-08 e4d5283 -awk.ch: Fix mistake (indices), was highlighting 1 extra trailing letter -2018-06-08 eebbb19 -awk.ch: Initialize FSH_LIST -2018-06-08 8ec24ca *-highlight: Missing math function for awk -2018-06-08 d8e423a -awk.ch: Highlight more keywords, via more general code -2018-06-07 ee26e66 Commit missing -fast-make-targets -2018-06-07 9d4f2b5 New chroma `-awk.ch', colorizes regex characters and a keyword (print) -2018-06-07 def5133 -example.ch: Add comments -2018-06-07 f31a2d0 New chroma -make.ch, verifies if target is correct -2018-06-07 623b8ce -perl.ch: Use correct keys in FAST_HIGHLIGHT hash -2018-06-07 090f420 themes: Make all themes provide {in,}correct-subtle styles -2018-06-07 2201fb6 New -perl.ch chroma, syntax-checks perl code; 2 new theme entries -2018-06-06 4b9598e *-highlight: Fix bug in math highlight – allow variables starting with _ -2018-06-06 708afec *-highlight: Fix FAST_BLIST_PATTERNS not expanding path to absolute one -2018-06-06 caef05a -example.ch: Update, fix typos, remove unused code -2018-06-06 3fb192a Updated README.md -2018-06-06 6de0c82 images: git_chroma.png -2018-06-06 2852fdd -grep.ch (new): Special highlighting for grep – -grep.ch chroma function -2018-06-06 f216785 -example.ch: Added comments -2018-06-06 4ab5b36 -example.ch: Add comments -2018-06-06 380cd12 -example.ch: Added comments -2018-06-06 c8947cc -example.ch: Add comments -2018-06-06 f2e273e -example.ch: Add comments -2018-06-06 2f3565b plugin.zsh: Fix parse error -2018-06-06 4f1a9bd plugin.zsh: Added $fpath handling, to match what README contains -2018-06-06 cc9adb5 -example.ch: Change and extend comments -2018-06-06 3128fff -git.ch: More intelligent `checkout' highlighting – ref is first -2018-06-06 4b6f54b -git.ch: Support for `checkout' subcommand -2018-06-06 1930d37 -example.ch: Added example chroma function -2018-06-05 d79cd85 -git.ch: Add comments -2018-06-05 1473c9e -git.ch: Add comments -2018-06-05 0cb1419 -git.ch: Message passed after -m is checked for the 72 chars boundary -2018-06-05 3f99944 -git.ch: Architectural uplift of git chroma -2018-06-05 e044d13 -git.ch: Single place to add entry to $reply (target: region_highlight) -2018-06-05 3a84364 -git.ch: Handle quoted non-option arguments, also partly quoted: "abc -2018-06-05 d635bf4 -fast-run-git-command, it handles cache automatically, decimates source -2018-06-05 102ea78 -git.ch: Smart handling of `git push', remotes and branches are verified -2018-06-04 be88850 Performance status [+] 39+77=116 / -26+24=-2 -2018-06-04 0e033f8 Experimental chroma support, currently active only on command `git' -2018-06-04 43ae221 *-highlight: Emacs mode-line -2018-06-04 938ad29 test: New "-git" parsing option, test results, -git.ch included -2018-06-04 e433fbc fast-theme: Explicitly return 0; added Emacs mode-line -2018-06-04 66e9b3c *-highlight: Detection of $( ) now doesn't go for $(( )) as a candidate -2018-06-04 488a580 chroma: Empty chroma function for `git' -2018-06-04 f54d770 *-highlight: Rename $cur_cmd to $active_command -2018-06-04 3f24e68 *-highlight: Make sudo and always-block compatible with `case' handling -2018-06-02 cd82637 themes: forest.ini to support 3 new `case' styles -2018-06-02 e1e993e themes: safari.ini & zdharma.ini to support 3 new `case' styles -2018-06-02 2e78a02 themes: clean.ini & default.ini to support 3 new `case' styles -2018-06-02 c1c3aab themes: free.ini to support 3 new `case' styles -2018-06-02 70a7e18 fast-theme,*-highlight: 3 new styles for `case' higlighting -2018-06-02 8d90dc2 *-highlight: Support for `case' highlighting -2018-06-02 10d291c *-highlight: Softer state manipulation, less rigid =1 etc. assignments -2018-06-02 6159507 *-highlight: Don't highlight closing ) with style `assign' -2018-06-02 1fc2450 *-highlight: One complex math command optimization, top of the loop -2018-06-02 cc49247 *-highlight: Fix improper state after assignment (command | regular) -2018-06-02 02942b8 Updated README.md -2018-06-02 5e28259 images: eval_cmp.png -2018-06-02 df92fed *-highlight: Fix removal of trailing "/' when recursing in eval -2018-06-02 4f61938 Performance status 46 / 44 -2018-06-02 a5ade0e *-highlight: Recursive highlighting of eval string argument -2018-06-02 e91847b *-highlight: Don't recurse when not at main *-process call -2018-06-02 fca8603 *-highlight: Support assignments of arrays when key is taken from array -2018-06-02 5d70f01 *-highlight: Math highlighting recognizes ${+VAR} -2018-06-02 c48eb0d *-highlight: Math colorizing recognizes variables in braces ${HISTISZE} -2018-06-02 53dd85a *-highlight: Allow -- for precommand modifiers command & exec -2018-06-02 d9fe110 *-highlight: Detect globbing also when `##' occurs -2018-06-02 55c923d Performance status 132 / 66 -2018-06-02 3bd8f07 themes: safari.ini to have globbing color specifically selected -2018-06-02 2b55260 themes: free.ini to have globbing color specifically selected -2018-06-02 494868e themes: clean.ini to have globbing color specifically selected -2018-06-01 fca6b3d images: herestring.png #9 -2018-06-01 f9842c1 themes: forest.ini to use underline instead of bg color #9 -2018-06-01 c25c539 themes: Small tune-up of forest & zdharma themes for here-string #9 -2018-06-01 988d504 themes: Rudimentary (all same) configuration of here-string tokens #9 -2018-06-01 99842d2 fast-theme,*-highlight: Support for here-string, can use bg color #9 -2018-06-01 f739c30 Updated README.md -2018-06-01 7fa8451 images: execfd.png execfd_cmp.png -2018-06-01 d7384f1 themes: All themes gained `exec-descriptor=` key, now supported by code -2018-06-01 d66d140 themes: Fix improper effect of s/red/.../ substitution in clean,forest -2018-06-01 f7ee5e2 fast-theme,*-highlight: Support highlighting of {FD} etc. passed to exec -2018-06-01 e5c5534 *-highlight: Proper states for precmd (command,exec) option handling -2018-06-01 647b198 images: New cmdsubst.png -2018-06-01 74bdc4c Updated README.md -2018-06-01 86eb15e images: theme.png -2018-06-01 5169e82 Updated README.md -2018-06-01 1c462b7 Updated README.md -2018-06-01 4c21da4 images: cmdsubst.png -2018-06-01 b39996e *-highlight: Switch theme to secondary when descending into $() #15 -2018-06-01 bf96045 themes: Equip all themes with key `secondary' (an alternate theme) #15 -2018-06-01 aa1b112 fast-theme: Generate secondary theme (from key `secondary' in theme) #15 -2018-06-01 6dd3bd3 *-highlight: Support for multiple active themes #15 -2018-06-01 8a32944 *-highlight: Fix "$() found?" comparison -2018-06-01 3651605 *-highlight: Significant change: the parser is called recursively on $() -2018-05-31 882d88b test,*-highlight: New -ooo performance test; highlighter takes arguments -2018-05-31 5ba1178 *-highlight: Optimization - compute __arg length once -2018-05-30 b2a0126 *-highlight: Allow multiple separate options for `command', `exec' (#10) -2018-05-30 5804e9a *-highlight: Correct state after option for precommand (#10) -2018-05-30 1247b64 *-highlight: Simpler and more accurate option-testing for exec, command (#10) -2018-05-30 d87fed4 *-highlight: Correctly highlight options for `command' and `exec' (#10) -2018-05-30 8c3e75e *-highlight: Double-hyphen (--) stops option recognition and colorizing -2018-05-30 1c5a56c *-highlight: Support ${VAR} at command position (not only $VAR) -2018-05-30 f19d761 Updated README.md -2018-05-30 4a27351 images: for-loop -2018-05-30 4d650de themes: zdharma.ini to support for-loop -2018-05-30 45cafbc themes: safari.ini to support for-loop -2018-05-30 8bb9ee0 themes: free.ini to support for-loop -2018-05-30 f25a059 themes: forest.ini to support for-loop -2018-05-29 093d79e themes: default.ini to support for-loop -2018-05-29 446cb7b clean.ini,fast-theme: Clean-theme & theme subsystem to support for-loop -2018-05-29 1bb701f *-highlight: Move $variable highlighting from case to if-block -2018-05-29 b8413e9 *-highlight: For-loop highlighting, working, needs few upgrades -2018-05-28 7bec6e5 *-highlight: Three more simple vs. complex math operation optimizations -2018-05-27 baae683 *-highlight: Optimise complex math command into single one with & and ~ -2018-05-27 2dc3103 *-highlight: Optimise complex math command into single one with & and ~ -2018-05-27 291f905 _fast-theme: Update -t/--test description -2018-05-27 ec305f6 fast-theme: Help message treats about -t/--test -2018-05-27 0e1d19a Updated README.md -2018-05-27 5c3c911 Updated README.md -2018-05-26 76af248 themes: A fix for zdharma theme, 61 -> 63, a lighter color for builtins -2018-05-26 8eca0f2 *fast-theme: Ability to test theme after setting it (-t/--test) -2018-05-26 d3a7922 *-highlight: Fix in_array_assignment setting when closing ) found -2018-05-26 796c482 *-highlight: Make parameters' names exotic blank-var detection to work -2018-05-26 ae3913f _fast-theme: Complete theme names -2018-05-26 d212945 *-highlight,plugin.zsh,default.ini: Uplift of fg=112-fix code -2018-05-26 ee56f65 *-highlight,plugin.zsh: Final fix for fg=112 assignment – use zstyle -2018-05-26 391f5a4 fast-theme: Set `theme' zstyle in `:plugin:fast...' to given theme -2018-05-26 e0dc086 plugin.zsh: Fix the fg=112 assignment done for `variable' style -2018-05-26 17c9286 Updated README.md -2018-05-26 4774c1c fast-theme: Add completion for this function -2018-05-26 d971f39 fast-theme: Detect lack of theme name in arguments -2018-05-26 74f0d4d fast-theme: Use standard option parsing (zparseopts) and typical options -2018-05-26 d9c6180 New theme: `forest' -2018-05-26 419c156 New theme: `zdharma' -2018-05-26 a7735df gitignore -2018-05-26 99db69a New theme: `free' -2018-05-26 73619ff New theme: `clean' -2018-05-25 52307fb Theme support, 1 extra theme – `safari' -2018-05-25 41df55b *-highlight: (k) subscript flag is sufficient, no need for (K) -2018-05-25 cb21c05 Updated README.md -2018-05-25 a580cff *-highlight: FAST_BLIST_PATTERNS -``` diff --git a/.config/zsh/.zsh/fsh/LICENSE b/.config/zsh/.zsh/fsh/LICENSE deleted file mode 100644 index 3d6b811..0000000 --- a/.config/zsh/.zsh/fsh/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2010-2016 zsh-syntax-highlighting contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors - may be used to endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.config/zsh/.zsh/fsh/README.md b/.config/zsh/.zsh/fsh/README.md deleted file mode 100644 index 6c069f3..0000000 --- a/.config/zsh/.zsh/fsh/README.md +++ /dev/null @@ -1,290 +0,0 @@ -[![paypal](https://img.shields.io/badge/-Donate-yellow.svg?longCache=true&style=for-the-badge)](https://www.paypal.me/ZdharmaInitiative) -[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=D54B3S7C6HGME) -[![patreon](https://img.shields.io/badge/-Patreon-orange.svg?longCache=true&style=for-the-badge)](https://www.patreon.com/psprint) -
New: You can request a feature when donating, even fancy or advanced ones get implemented this way. [There are -reports](DONATIONS.md) about what is being done with the money received. - -# Fast Syntax Highlighting (F-Sy-H) - -Feature rich syntax highlighting for Zsh. - -
- image could not be loaded -
- -### Table of Contents - -- [News](#news) -- [Installation](#installation) -- [Features](#features) -- [Performance](#performance) -- [IRC Channel](#irc-channel) - -### Other Contents -- [License](https://github.com/zdharma/fast-syntax-highlighting/blob/master/LICENSE) -- [Changelog](https://github.com/zdharma/fast-syntax-highlighting/blob/master/CHANGELOG.md) -- [Theme Guide](https://github.com/zdharma/fast-syntax-highlighting/blob/master/THEME_GUIDE.md) -- [Chroma Guide](https://github.com/zdharma/fast-syntax-highlighting/blob/master/CHROMA_GUIDE.adoc) - -# News - -* 15-06-2019 - - A new architecture for defining the highlighting for **specific commands**: it now - uses **abstract definitions** instead of **top-down, regular code**. The first effect - is the highlighting for the `git` command it is now **maximally faithful**, it - follows the `git` command almost completely. - [Screencast](https://asciinema.org/a/253411) - -# Installation - -### Manual - -Clone the Repository. - -```zsh -git clone https://github.com/zdharma/fast-syntax-highlighting ~/path/to/fsh -``` - -And add the following to your `zshrc` file. -```zsh -source ~/path/to/fsh/fast-syntax-highlighting.plugin.zsh -``` - -### Zinit - -Add the following to your `zshrc` file. - -```zsh -zinit light zdharma/fast-syntax-highlighting -``` - -Here's an example of how to load the plugin together with a few other popular -ones with the use of -[Turbo](https://zdharma.org/zinit/wiki/INTRODUCTION/#turbo_mode_zsh_62_53), -i.e.: speeding up the Zsh startup by loading the plugin right after the first -prompt, in background: - -```zsh -zinit wait lucid for \ - atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay" \ - zdharma/fast-syntax-highlighting \ - blockf \ - zsh-users/zsh-completions \ - atload"!_zsh_autosuggest_start" \ - zsh-users/zsh-autosuggestions -``` - -### Antigen - -Add the following to your `zshrc` file. - -```zsh -antigen bundle zdharma/fast-syntax-highlighting -``` - -### Zgen - -Add the following to your `.zshrc` file in the same place you're doing -your other `zgen load` calls in. - -```zsh -zgen load zdharma/fast-syntax-highlighting -``` - - -### Oh-My-Zsh - -Clone the Repository. - -```zsh -git clone https://github.com/zdharma/fast-syntax-highlighting.git \ - ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting -``` - -And add `fast-syntax-highlighting` to your plugin list. - -# Features - -### Themes - -Switch themes via `fast-theme {theme-name}`. - -
- image could not be loaded -
- -Run `fast-theme -t {theme-name}` option to obtain the snippet above. - -Run `fast-theme -l` to list available themes. - -### Variables - -Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): - -
- image could not be loaded -
- -
- image could not be loaded -
- -### Brackets - -
- image could not be loaded -
- -### Conditions - -Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): - -
- image could not be loaded -
- -### Strings - -Exact highlighting that recognizes quotings. - -
- image could not be loaded -
- - -### here-strings - -
- image could not be loaded -
- -### `exec` descriptor-variables - -Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): - -
- image could not be loaded -
- -### for-loops and alternate syntax (brace `{`/`}` blocks) - -
- image could not be loaded -
- -### Function definitions - -Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper 2 lines): - -
- image could not be loaded -
- -### Recursive `eval` and `$( )` highlighting - -Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): - -
- image could not be loaded -
- -### Chroma functions - -Highlighting that is specific for a given command. - -
- image could not be loaded -
- -The [chromas](https://github.com/zdharma/fast-syntax-highlighting/tree/master/chroma) -that are enabled by default can be found -[here](https://github.com/zdharma/fast-syntax-highlighting/blob/master/fast-highlight#L166). - -### Math-mode highlighting - -
- image could not be loaded -
- -### Zcalc highlighting - -
- image could not be loaded -
- -# Performance -Performance differences can be observed in this Asciinema recording, where a `10 kB` function is being edited. - -
- - asciicast - -
- -## IRC Channel - -Channel `#zinit@freenode` is a support place for all author's projects. Connect to: -[chat.freenode.net:6697](ircs://chat.freenode.net:6697/%23zinit) (SSL) or [chat.freenode.net:6667](irc://chat.freenode.net:6667/%23zinit) - and join #zinit. - -Following is a quick access via Webchat [![IRC](https://kiwiirc.com/buttons/chat.freenode.net/zinit.png)](https://kiwiirc.com/client/chat.freenode.net:+6697/#zinit) diff --git a/.config/zsh/.zsh/fsh/THEME_GUIDE.md b/.config/zsh/.zsh/fsh/THEME_GUIDE.md deleted file mode 100644 index 1d66dac..0000000 --- a/.config/zsh/.zsh/fsh/THEME_GUIDE.md +++ /dev/null @@ -1,76 +0,0 @@ -# Theme Guide for F-Sy-H - -`fast-theme` tool is used to select a theme. There are 6 shipped themes, they can be listed with `fast-theme -l`. -Themes are basic [INI files](https://github.com/zdharma/fast-syntax-highlighting/tree/master/themes) where each -key is a *style*. -Besides shipped themes, user can point this tool to any other theme, by simple `fast-theme ~/mytheme.ini`. To -obtain template to work on when creating own theme, issue `fast-theme --copy-shipped-theme {theme-name}`. - -To alter just a few styles and not create a whole new theme, use **overlay**. What is overlay? It is in the same -format as full theme, but can have only a few styles defined, and these styles will overwrite styles in main-theme. -Example overlay file: - -```ini -; overlay.ini -[base] -commandseparator = yellow,bold -comment = 17 - -[command-point] -function = green -command = 180 -``` - -File name `overlay.ini` is treated specially. - -When specifing path, following short-hands can be used: - -``` -XDG: = ~/.config/fsh (respects $XDG_CONFIG_HOME env var) -LOCAL: = /usr/local/share/fsh/ -HOME: = ~/.fsh/ -OPT: = /opt/local/share/fsh/ -``` - -So for example, issue `fast-theme XDG:overlay` to load `~/.config/fsh/overlay.ini` as overlay. The `.ini` -extension is optional. - -## Secondary Theme - -Each theme has key `secondary`, e.g. for theme `free`: - -```ini -; free.ini -[base] -default = none -unknown-token = red,bold -; ... -; ... -; ... -secondary = zdharma -``` - -Secondary theme (`zdharma` in the example) will be used for highlighting of argument for `eval` -and of `$( ... )` interior (i.e. of interior of command substitution). Basically, recursive -highlighting uses alternate theme to make the highlighted code distinct: - -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/cmdsubst.png) - -In the above screen-shot the interior of `$( ... )` uses different colors than the rest of the -code. Example for `eval`: - -![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/eval_cmp.png) - -First line doesn't use recursive highlighting, highlights `eval` argument as regular string. -Second line switches theme to `zdharma` and does full recursive highlighting of eval argument. - -## Custom Working Directory - -Set `$FAST_WORK_DIR` before loading the plugin to have e.g. processed theme files (ready to -load, in Zsh format, not INI) kept under specified location. This is handy if e.g. you install -Fast-Syntax-Highlighting system-wide (e.g. from AUR on ArchLinux) and want to have per-user -theme setup. - -You can use "~" in the path, e.g. `FAST_WORK_DIR=~/.fsh` and also the `XDG:`, `LOCAL:`, `OPT:`, -etc. short-hands, so e.g. `FAST_WORK_DIR=XDG` or `FAST_WORK_DIR=XDG:` is allowed (in this case -it will be changed to `$HOME/.config/fsh` by default by F-Sy-H loader). diff --git a/.config/zsh/.zsh/fsh/_fast-theme b/.config/zsh/.zsh/fsh/_fast-theme deleted file mode 100644 index 67f8a4d..0000000 --- a/.config/zsh/.zsh/fsh/_fast-theme +++ /dev/null @@ -1,39 +0,0 @@ -#compdef fast-theme - -# -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Completion for theme-switching function, fast-theme, -# part of zdharma/fast-syntax-highlighting. -# - -integer ret=1 -local -a arguments - -arguments=( - {-h,--help}'[display help text]' - {-l,--list}'[list available themes]' - {-r,--reset}'[unset any theme (revert to default highlighting)]' - {-R,--ov-reset}'[unset overlay, use styles only from main-theme (requires restart)]' - {-q,--quiet}'[no default messages]' - {-s,--show}'[get and display the theme currently being set]' - {-v,--verbose}'[more messages during operation]' - {-t,--test}'[test theme after setting it (show example code)]' - {-p,--palette}'[just print all 256 colors and exit (useful when creating a theme)]' - {-w,--workdir}'[cd into $FAST_WORK_DIR (if not set, then into the plugin directory)]' -) - -typeset -a themes -themes=( "$FAST_WORK_DIR"/themes/*.ini(:t:r) ) - -if [[ -d ${XDG_CONFIG_HOME:-$HOME/.config}/fsh ]] { - typeset -a themes2 - themes2=( "${XDG_CONFIG_HOME:-$HOME/.config}"/fsh/*.ini(:t:r) ) - themes+=( XDG:${^themes2[@]} ) -} - -_wanted themes expl "Themes" \ - compadd "$@" -a - themes && ret=0 -_arguments -s $arguments && ret=0 - -return $ret diff --git a/.config/zsh/.zsh/fsh/fast-highlight b/.config/zsh/.zsh/fsh/fast-highlight deleted file mode 100644 index d47ed5b..0000000 --- a/.config/zsh/.zsh/fsh/fast-highlight +++ /dev/null @@ -1,1463 +0,0 @@ -# -*- mode: sh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors -# Copyright (c) 2016-2019 Sebastian Gniazdowski (modifications) -# All rights reserved. -# -# The only licensing for this file follows. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- - -typeset -gA __fast_highlight_main__command_type_cache FAST_BLIST_PATTERNS -typeset -g FAST_WORK_DIR -: ${FAST_WORK_DIR:=$FAST_BASE_DIR} -FAST_WORK_DIR=${~FAST_WORK_DIR} -() { - emulate -L zsh -o extendedglob - local -A map - map=( "XDG:" "${XDG_CONFIG_HOME:-$HOME/.config}/fsh/" - "LOCAL:" "/usr/local/share/fsh/" - "HOME:" "$HOME/.fsh/" - "OPT:" "/opt/local/share/fsh/" - ) - FAST_WORK_DIR=${${FAST_WORK_DIR/(#m)(#s)(XDG|LOCAL|HOME|OPT):(#c0,1)/${map[${MATCH%:}:]}}%/} -} - -# Define default styles. You can set this after loading the plugin in -# Zshrc and use 256 colors via numbers, like: fg=150 -typeset -gA FAST_HIGHLIGHT_STYLES -if [[ -e $FAST_WORK_DIR/current_theme.zsh ]]; then - source $FAST_WORK_DIR/current_theme.zsh -else -# built-in theme -zstyle :plugin:fast-syntax-highlighting theme default -: ${FAST_HIGHLIGHT_STYLES[default]:=none} -: ${FAST_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} -: ${FAST_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[subcommand]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[alias]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[suffix-alias]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[global-alias]:=bg=blue} -: ${FAST_HIGHLIGHT_STYLES[builtin]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[function]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[command]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[precommand]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[commandseparator]:=none} -: ${FAST_HIGHLIGHT_STYLES[hashed-command]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[path]:=fg=magenta} -: ${FAST_HIGHLIGHT_STYLES[path-to-dir]:=fg=magenta,underline} -: ${FAST_HIGHLIGHT_STYLES[path_pathseparator]:=} -: ${FAST_HIGHLIGHT_STYLES[globbing]:=fg=blue,bold} -: ${FAST_HIGHLIGHT_STYLES[globbing-ext]:=fg=13} -: ${FAST_HIGHLIGHT_STYLES[history-expansion]:=fg=blue,bold} -: ${FAST_HIGHLIGHT_STYLES[single-hyphen-option]:=fg=cyan} -: ${FAST_HIGHLIGHT_STYLES[double-hyphen-option]:=fg=cyan} -: ${FAST_HIGHLIGHT_STYLES[back-quoted-argument]:=none} -: ${FAST_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[back-or-dollar-double-quoted-argument]:=fg=cyan} -: ${FAST_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} -: ${FAST_HIGHLIGHT_STYLES[assign]:=none} -: ${FAST_HIGHLIGHT_STYLES[redirection]:=none} -: ${FAST_HIGHLIGHT_STYLES[comment]:=fg=black,bold} -: ${FAST_HIGHLIGHT_STYLES[variable]:=fg=113} -: ${FAST_HIGHLIGHT_STYLES[mathvar]:=fg=blue,bold} -: ${FAST_HIGHLIGHT_STYLES[mathnum]:=fg=magenta} -: ${FAST_HIGHLIGHT_STYLES[matherr]:=fg=red} -: ${FAST_HIGHLIGHT_STYLES[assign-array-bracket]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[for-loop-variable]:=none} -: ${FAST_HIGHLIGHT_STYLES[for-loop-operator]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[for-loop-number]:=fg=magenta} -: ${FAST_HIGHLIGHT_STYLES[for-loop-separator]:=fg=yellow,bold} -: ${FAST_HIGHLIGHT_STYLES[here-string-tri]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[here-string-text]:=bg=18} -: ${FAST_HIGHLIGHT_STYLES[here-string-var]:=fg=cyan,bg=18} -: ${FAST_HIGHLIGHT_STYLES[case-input]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[case-parentheses]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[case-condition]:=bg=blue} -: ${FAST_HIGHLIGHT_STYLES[paired-bracket]:=bg=blue} -: ${FAST_HIGHLIGHT_STYLES[bracket-level-1]:=fg=green,bold} -: ${FAST_HIGHLIGHT_STYLES[bracket-level-2]:=fg=yellow,bold} -: ${FAST_HIGHLIGHT_STYLES[bracket-level-3]:=fg=cyan,bold} -: ${FAST_HIGHLIGHT_STYLES[single-sq-bracket]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[double-sq-bracket]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[double-paren]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[correct-subtle]:=fg=12} -: ${FAST_HIGHLIGHT_STYLES[incorrect-subtle]:=fg=red} -: ${FAST_HIGHLIGHT_STYLES[subtle-separator]:=fg=green} -: ${FAST_HIGHLIGHT_STYLES[subtle-bg]:=bg=18} -: ${FAST_HIGHLIGHT_STYLES[secondary]:=free} -fi - -# This can overwrite some of *_STYLES fields -[[ -r $FAST_WORK_DIR/theme_overlay.zsh ]] && source $FAST_WORK_DIR/theme_overlay.zsh - -typeset -gA __FAST_HIGHLIGHT_TOKEN_TYPES - -__FAST_HIGHLIGHT_TOKEN_TYPES=( - - # Precommand - - 'builtin' 1 - 'command' 1 - 'exec' 1 - 'nocorrect' 1 - 'noglob' 1 - 'pkexec' 1 # immune to #121 because it's usually not passed --option flags - - # Control flow - # Tokens that, at (naively-determined) "command position", are followed by - # a de jure command position. All of these are reserved words. - - $'\x7b' 2 # block '{' - $'\x28' 2 # subshell '(' - '()' 2 # anonymous function - 'while' 2 - 'until' 2 - 'if' 2 - 'then' 2 - 'elif' 2 - 'else' 2 - 'do' 2 - 'time' 2 - 'coproc' 2 - '!' 2 # reserved word; unrelated to $histchars[1] - - # Command separators - - '|' 3 - '||' 3 - ';' 3 - '&' 3 - '&&' 3 - '|&' 3 - '&!' 3 - '&|' 3 - # ### 'case' syntax, but followed by a pattern, not by a command - # ';;' ';&' ';|' -) - -# A hash instead of multiple globals -typeset -gA FAST_HIGHLIGHT - -# Brackets highlighter active by default -: ${FAST_HIGHLIGHT[use_brackets]:=1} - -FAST_HIGHLIGHT+=( - chroma-fast-theme →chroma/-fast-theme.ch - chroma-alias →chroma/-alias.ch - chroma-autoload →chroma/-autoload.ch - chroma-autorandr →chroma/-autorandr.ch - chroma-docker →chroma/-docker.ch - chroma-example →chroma/-example.ch - chroma-ionice →chroma/-ionice.ch - chroma-make →chroma/-make.ch - chroma-nice →chroma/-nice.ch - chroma-nmcli →chroma/-nmcli.ch - chroma-node →chroma/-node.ch - chroma-perl →chroma/-perl.ch - chroma-printf →chroma/-printf.ch - chroma-ruby →chroma/-ruby.ch - chroma-scp →chroma/-scp.ch - chroma-ssh →chroma/-ssh.ch - - chroma-git →chroma/main-chroma.ch%git - chroma-hub →chroma/-hub.ch - chroma-lab →chroma/-lab.ch - chroma-svn →chroma/-subversion.ch - chroma-svnadmin →chroma/-subversion.ch - chroma-svndumpfilter →chroma/-subversion.ch - - chroma-egrep →chroma/-grep.ch - chroma-fgrep →chroma/-grep.ch - chroma-grep →chroma/-grep.ch - - chroma-awk →chroma/-awk.ch - chroma-gawk →chroma/-awk.ch - chroma-mawk →chroma/-awk.ch - - chroma-source →chroma/-source.ch - chroma-. →chroma/-source.ch - - chroma-bash →chroma/-sh.ch - chroma-fish →chroma/-sh.ch - chroma-sh →chroma/-sh.ch - chroma-zsh →chroma/-sh.ch - - chroma-whatis →chroma/-whatis.ch - chroma-man →chroma/-whatis.ch - - chroma-- →chroma/-precommand.ch - chroma-xargs →chroma/-precommand.ch - chroma-nohup →chroma/-precommand.ch - chroma-strace →chroma/-precommand.ch - chroma-ltrace →chroma/-precommand.ch - - chroma-hg →chroma/-subcommand.ch - chroma-cvs →chroma/-subcommand.ch - chroma-pip →chroma/-subcommand.ch - chroma-pip2 →chroma/-subcommand.ch - chroma-pip3 →chroma/-subcommand.ch - chroma-gem →chroma/-subcommand.ch - chroma-bundle →chroma/-subcommand.ch - chroma-yard →chroma/-subcommand.ch - chroma-cabal →chroma/-subcommand.ch - chroma-npm →chroma/-subcommand.ch - chroma-nvm →chroma/-subcommand.ch - chroma-yarn →chroma/-subcommand.ch - chroma-brew →chroma/-subcommand.ch - chroma-port →chroma/-subcommand.ch - chroma-yum →chroma/-subcommand.ch - chroma-dnf →chroma/-subcommand.ch - chroma-tmux →chroma/-subcommand.ch - chroma-pass →chroma/-subcommand.ch - chroma-aws →chroma/-subcommand.ch - chroma-apt →chroma/-subcommand.ch - chroma-apt-get →chroma/-subcommand.ch - chroma-apt-cache →chroma/-subcommand.ch - chroma-aptitude →chroma/-subcommand.ch - chroma-keyctl →chroma/-subcommand.ch - chroma-systemctl →chroma/-subcommand.ch - chroma-asciinema →chroma/-subcommand.ch - chroma-ipfs →chroma/-subcommand.ch - chroma-zinit →chroma/main-chroma.ch%zinit - chroma-aspell →chroma/-subcommand.ch - chroma-bspc →chroma/-subcommand.ch - chroma-cryptsetup →chroma/-subcommand.ch - chroma-diskutil →chroma/-subcommand.ch - chroma-exercism →chroma/-subcommand.ch - chroma-gulp →chroma/-subcommand.ch - chroma-i3-msg →chroma/-subcommand.ch - chroma-openssl →chroma/-subcommand.ch - chroma-solargraph →chroma/-subcommand.ch - chroma-subliminal →chroma/-subcommand.ch - chroma-svnadmin →chroma/-subcommand.ch - chroma-travis →chroma/-subcommand.ch - chroma-udisksctl →chroma/-subcommand.ch - chroma-xdotool →chroma/-subcommand.ch - chroma-zmanage →chroma/-subcommand.ch - chroma-zsystem →chroma/-subcommand.ch - chroma-zypper →chroma/-subcommand.ch - - chroma-fpath+=\( →chroma/-fpath_peq.ch - chroma-fpath=\( →chroma/-fpath_peq.ch - chroma-FPATH+= →chroma/-fpath_peq.ch - chroma-FPATH= →chroma/-fpath_peq.ch - #chroma-which →chroma/-which.ch - #chroma-vim →chroma/-vim.ch -) - -if [[ $OSTYPE == darwin* ]] { - noglob unset FAST_HIGHLIGHT[chroma-man] FAST_HIGHLIGHT[chroma-whatis] -} - -# Assignments seen, to know if math parameter exists -typeset -gA FAST_ASSIGNS_SEEN - -# Exposing tokens found on command position, -# for other scripts to process -typeset -ga ZLAST_COMMANDS - -# Get the type of a command. -# -# Uses the zsh/parameter module if available to avoid forks, and a -# wrapper around 'type -w' as fallback. -# -# Takes a single argument. -# -# The result will be stored in REPLY. --fast-highlight-main-type() { - REPLY=$__fast_highlight_main__command_type_cache[(e)$1] - [[ -z $REPLY ]] && { - - if zmodload -e zsh/parameter; then - if (( $+aliases[(e)$1] )); then - REPLY=alias - elif (( ${+galiases[(e)$1]} )); then - REPLY="global alias" - elif (( $+functions[(e)$1] )); then - REPLY=function - elif (( $+builtins[(e)$1] )); then - REPLY=builtin - elif (( $+commands[(e)$1] )); then - REPLY=command - elif (( $+saliases[(e)${1##*.}] )); then - REPLY='suffix alias' - elif (( $reswords[(Ie)$1] )); then - REPLY=reserved - # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly - # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo - # exists and is in $PATH). Avoid triggering the bug, at the expense of - # falling through to the $() below, incurring a fork. (Issue #354.) - # - # The second disjunct mimics the isrelative() C call from the zsh bug. - elif [[ $1 != */* || ${+ZSH_ARGZERO} = "1" ]] && ! builtin type -w -- $1 >/dev/null 2>&1; then - REPLY=none - fi - fi - - [[ -z $REPLY ]] && REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }" - - [[ $REPLY = "none" ]] && { - [[ -n ${FAST_BLIST_PATTERNS[(k)${${(M)1:#/*}:-$PWD/$1}]} ]] || { - [[ -d $1 ]] && REPLY="dirpath" || { - for cdpath_dir in $cdpath; do - [[ -d $cdpath_dir/$1 ]] && { REPLY="dirpath"; break; } - done - } - } - } - - __fast_highlight_main__command_type_cache[(e)$1]=$REPLY - - } -} - -# Below are variables that must be defined in outer -# scope so that they are reachable in *-process() --fast-highlight-fill-option-variables() { - if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then - FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]=0 - else - FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]=1 - fi - - if [[ -o path_dirs ]]; then - FAST_HIGHLIGHT[path_dirs_was_set]=1 - else - FAST_HIGHLIGHT[path_dirs_was_set]=0 - fi - - if [[ -o multi_func_def ]]; then - FAST_HIGHLIGHT[multi_func_def]=1 - else - FAST_HIGHLIGHT[multi_func_def]=0 - fi - - if [[ -o interactive_comments ]]; then - FAST_HIGHLIGHT[ointeractive_comments]=1 - else - FAST_HIGHLIGHT[ointeractive_comments]=0 - fi -} - -# Main syntax highlighting function. --fast-highlight-process() -{ - emulate -L zsh - setopt extendedglob bareglobqual nonomatch typesetsilent - - [[ $CONTEXT == "select" ]] && return 0 - - (( FAST_HIGHLIGHT[path_dirs_was_set] )) && setopt PATH_DIRS - (( FAST_HIGHLIGHT[ointeractive_comments] )) && local interactive_comments= # _set_ to empty - - # Variable declarations and initializations - # in_array_assignment true between 'a=(' and the matching ')' - # braces_stack: "R" for round, "Q" for square, "Y" for curly - # _mybuf, cdpath_dir are used in sub-functions - local _start_pos=$3 _end_pos __start __end highlight_glob=1 __arg __style in_array_assignment=0 MATCH expanded_path braces_stack __buf=$1$2 _mybuf __workbuf cdpath_dir active_command alias_target _was_double_hyphen=0 __nul=$'\0' __tmp - # __arg_type can be 0, 1, 2 or 3, i.e. precommand, control flow, command separator - # __idx and _end_idx are used in sub-functions - # for this_word and next_word look below at commented integers and at state machine description - integer __arg_type=0 MBEGIN MEND in_redirection __len=${#__buf} __PBUFLEN=${#1} already_added offset __idx _end_idx this_word=1 next_word=0 __pos __asize __delimited=0 itmp iitmp - local -a match mbegin mend __inputs __list - - # This comment explains the numbers: - # BIT_for - word after reserved-word-recognized `for' - # BIT_afpcmd - word after a precommand that can take options, like `command' and `exec' - # integer BIT_start=1 BIT_regular=2 BIT_sudo_opt=4 BIT_sudo_arg=8 BIT_always=16 BIT_for=32 BIT_afpcmd=64 - # integer BIT_chroma=8192 - - integer BIT_case_preamble=512 BIT_case_item=1024 BIT_case_nempty_item=2048 BIT_case_code=4096 - - # Braces stack - # T - typeset, local, etc. - - # State machine - # - # The states are: - # - :__start: Command word - # - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i") - # - :sudo_arg: The argument to a sudo leading-dash option that takes one, - # when given as a separate word; i.e., "foo" in "-u foo" (two - # words) but not in "-ufoo" (one word). - # - :regular: "Not a command word", and command delimiters are permitted. - # Mainly used to detect premature termination of commands. - # - :always: The word 'always' in the «{ foo } always { bar }» syntax. - # - # When the kind of a word is not yet known, $this_word / $next_word may contain - # multiple states. For example, after "sudo -i", the next word may be either - # another --flag or a command name, hence the state would include both :__start: - # and :sudo_opt:. - # - # The tokens are always added with both leading and trailing colons to serve as - # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} - # will DTRT regardless of how many elements or repetitions $x has.. - # - # Handling of redirections: upon seeing a redirection token, we must stall - # the current state --- that is, the value of $this_word --- for two iterations - # (one for the redirection operator, one for the word following it representing - # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a - # redirection operator, decrement it each iteration, and stall the current state - # when it is non-zero. Thus, upon reaching the next word (the one that follows - # the redirection operator and target), $this_word will still contain values - # appropriate for the word immediately following the word that preceded the - # redirection operator. - # - # The "the previous word was a redirection operator" state is not communicated - # to the next iteration via $next_word/$this_word as usual, but via - # $in_redirection. The value of $next_word from the iteration that processed - # the operator is discarded. - # - - # Command exposure for other scripts - ZLAST_COMMANDS=() - # Restart observing of assigns - FAST_ASSIGNS_SEEN=() - # Restart function's gathering - FAST_HIGHLIGHT[chroma-autoload-elements]="" - # Restart FPATH elements gathering - FAST_HIGHLIGHT[chroma-fpath_peq-elements]="" - # Restart svn zinit's ICE gathering - FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=0 - FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]="" - - [[ -n $ZCALC_ACTIVE ]] && { - _start_pos=0; _end_pos=__len; __arg=$__buf - -fast-highlight-math-string - return 0 - } - - # Processing buffer - local proc_buf=$__buf needle - for __arg in ${interactive_comments-${(z)__buf}} \ - ${interactive_comments+${(zZ+c+)__buf}}; do - - # Initialize $next_word to its default value? - (( in_redirection = in_redirection > 0 ? in_redirection - 1 : in_redirection )); - (( next_word = (in_redirection == 0) ? 2 : next_word )) # else Stall $next_word. - (( next_word = next_word | (this_word & (BIT_case_code|8192)) )) - - # If we have a good delimiting construct just ending, and '{' - # occurs, then respect this and go for alternate syntax, i.e. - # treat '{' (\x7b) as if it's on command position - [[ $__arg = '{' && $__delimited = 2 ]] && { (( this_word = (this_word & ~2) | 1 )); __delimited=0; } - - __asize=${#__arg} - - # Reset state of working variables - already_added=0 - __style=${FAST_THEME_NAME}unknown-token - (( this_word & 1 )) && { in_array_assignment=0; [[ $__arg == 'noglob' ]] && highlight_glob=0; } - - # Compute the new $_start_pos and $_end_pos, skipping over whitespace in $__buf. - if [[ $__arg == ';' ]] ; then - braces_stack=${braces_stack#T} - __delimited=0 - - # Both ; and \n are rendered as a ";" (SEPER) by the ${(z)..} flag. - needle=$';\n' - [[ $proc_buf = (#b)[^$needle]#([$needle]##)* ]] && offset=${mbegin[1]}-1 - (( _start_pos += offset )) - (( _end_pos = _start_pos + __asize )) - - # Prepare next loop cycle - (( this_word & BIT_case_item )) || { (( in_array_assignment )) && (( this_word = 2 | (this_word & BIT_case_code) )) || { (( this_word = 1 | (this_word & BIT_case_code) )); highlight_glob=1; }; } - in_redirection=0 - - # Chance to highlight ';' - [[ ${proc_buf[offset+1]} != $'\n' ]] && { - [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}commandseparator]} != "none" ]] && \ - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}commandseparator]}") - } - - proc_buf=${proc_buf[offset + __asize + 1,__len]} - _start_pos=$_end_pos - continue - else - offset=0 - if [[ $proc_buf = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then - # The first, outer parenthesis - offset=${mend[1]} - fi - (( _start_pos += offset )) - (( _end_pos = _start_pos + __asize )) - - # No-hit will result in value 0 - __arg_type=${__FAST_HIGHLIGHT_TOKEN_TYPES[$__arg]} - fi - - (( this_word & 1 )) && ZLAST_COMMANDS+=( $__arg ); - - proc_buf=${proc_buf[offset + __asize + 1,__len]} - - # Handle the INTERACTIVE_COMMENTS option. - # - # We use the (Z+c+) flag so the entire comment is presented as one token in $__arg. - if [[ -n ${interactive_comments+'set'} && $__arg == ${histchars[3]}* ]]; then - if (( this_word & 3 )); then - __style=${FAST_THEME_NAME}comment - else - __style=${FAST_THEME_NAME}unknown-token # prematurely terminated - fi - # ADD - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - _start_pos=$_end_pos - continue - fi - - # Redirection? - [[ $__arg == (<0-9>|)(\<|\>)* && $__arg != (\<|\>)$'\x28'* && $__arg != "<<<" ]] && \ - in_redirection=2 - - # Special-case the first word after 'sudo'. - if (( ! in_redirection )); then - (( this_word & 4 )) && [[ $__arg != -* ]] && (( this_word = this_word ^ 4 )) - - # Parse the sudo command line - if (( this_word & 4 )); then - case $__arg in - # Flag that requires an argument - '-'[Cgprtu]) - (( this_word = this_word & ~1 )) - (( next_word = 8 | (this_word & BIT_case_code) )) - ;; - # This prevents misbehavior with sudo -u -otherargument - '-'*) - (( this_word = this_word & ~1 )) - (( next_word = next_word | 1 | 4 )) - ;; - esac - elif (( this_word & 8 )); then - (( next_word = next_word | 4 | 1 )) - elif (( this_word & 64 )); then - [[ $__arg = -[pvV-]## && $active_command = "command" ]] && (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) - [[ $__arg = -[cla-]## && $active_command = "exec" ]] && (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) - [[ $__arg = \{[a-zA-Z_][a-zA-Z0-9_]#\} && $active_command = "exec" ]] && { - # Highlight {descriptor} passed to exec - (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}exec-descriptor]}") - already_added=1 - } - fi - fi - - (( this_word & 8192 )) && { - __list=( ${(z@)${aliases[$active_command]:-${active_command##*/}}##[[:space:]]#(command|builtin|exec|noglob|nocorrect|pkexec)[[:space:]]#} ) - ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 0 "$__arg" $_start_pos $_end_pos 2>/dev/null && continue - } - - (( this_word & 1 )) && { - # !in_redirection needed particularly for exec {A}>b {C}>d - (( !in_redirection )) && active_command=$__arg - _mybuf=${${aliases[$active_command]:-${active_command##*/}}##[[:space:]]#(command|builtin|exec|noglob|nocorrect|pkexec)[[:space:]]#} - [[ "$_mybuf" = (#b)(FPATH+(#c0,1)=)* ]] && _mybuf="${match[1]} ${(j: :)${(s,:,)${_mybuf#FPATH+(#c0,1)=}}}" - [[ -n ${FAST_HIGHLIGHT[chroma-${_mybuf%% *}]} ]] && { - __list=( ${(z@)_mybuf} ) - if (( ${#__list} > 1 )) || [[ $active_command != $_mybuf ]]; then - __style=${FAST_THEME_NAME}alias - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - - ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 1 "${__list[1]}" "-100000" $_end_pos 2>/dev/null || \ - (( this_word = next_word, next_word = 2 )) - - for _mybuf in "${(@)__list[2,-1]}"; do - (( next_word = next_word | (this_word & (BIT_case_code|8192)) )) - ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 0 "$_mybuf" "-100000" $_end_pos 2>/dev/null || \ - (( this_word = next_word, next_word = 2 )) - done - - # This might have been done multiple times in chroma, but - # as _end_pos doesn't change, it can be done one more time - _start_pos=$_end_pos - - continue - else - ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 1 "$__arg" $_start_pos $_end_pos 2>/dev/null && continue - fi - } || (( 1 )) - } - - expanded_path="" - - # The Great Fork: is this a command word? Is this a non-command word? - if (( this_word & 16 )) && [[ $__arg == 'always' ]]; then - # try-always construct - __style=${FAST_THEME_NAME}reserved-word # de facto a reserved word, although not de jure - (( next_word = 1 | (this_word & BIT_case_code) )) - elif (( (this_word & 1) && (in_redirection == 0) )) || [[ $braces_stack = T* ]]; then # T - typedef, etc. - if (( __arg_type == 1 )); then - __style=${FAST_THEME_NAME}precommand - [[ $__arg = "command" || $__arg = "exec" ]] && (( next_word = next_word | 64 )) - elif [[ $__arg = (sudo|doas) ]]; then - __style=${FAST_THEME_NAME}precommand - (( next_word = (next_word & ~2) | 4 | 1 )) - else - _mybuf=${${(Q)__arg}#\"} - if (( ${+parameters} )) && \ - [[ $_mybuf = (#b)(*)(*)\$([a-zA-Z_][a-zA-Z0-9_]#|[0-9]##)(*) || \ - $_mybuf = (#b)(*)(*)\$\{([a-zA-Z_][a-zA-Z0-9_:-]#|[0-9]##)(*) ]] && \ - (( ${+parameters[${match[3]%%:-*}]} )) - then - -fast-highlight-main-type ${match[1]}${match[2]}${(P)match[3]%%:-*}${match[4]#\}} - elif [[ $braces_stack = T* ]]; then # T - typedef, etc. - REPLY=none - else - : ${expanded_path::=${~_mybuf}} - -fast-highlight-main-type $expanded_path - fi - - case $REPLY in - reserved) # reserved word - [[ $__arg = "[[" ]] && __style=${FAST_THEME_NAME}double-sq-bracket || __style=${FAST_THEME_NAME}reserved-word - if [[ $__arg == $'\x7b' ]]; then # Y - '{' - braces_stack='Y'$braces_stack - - elif [[ $__arg == $'\x7d' && $braces_stack = Y* ]]; then # Y - '}' - # We're at command word, so no need to check right_brace_is_recognised_everywhere - braces_stack=${braces_stack#Y} - __style=${FAST_THEME_NAME}reserved-word - (( next_word = next_word | 16 )) - - elif [[ $__arg == "[[" ]]; then # A - [[ - braces_stack='A'$braces_stack - - # Counting complex brackets (for brackets-highlighter): 1. [[ as command - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) - elif [[ $__arg == "for" ]]; then - (( next_word = next_word | 32 )) # BIT_for - - elif [[ $__arg == "case" ]]; then - (( next_word = BIT_case_preamble )) - - elif [[ $__arg = (typeset|declare|local|float|integer|export|readonly) ]]; then - braces_stack='T'$braces_stack - fi - ;; - 'suffix alias') __style=${FAST_THEME_NAME}suffix-alias;; - 'global alias') __style=${FAST_THEME_NAME}global-alias;; - - alias) - if [[ $__arg = ?*'='* ]]; then - # The so called (by old code) "insane_alias" - __style=${FAST_THEME_NAME}unknown-token - else - __style=${FAST_THEME_NAME}alias - (( ${+aliases} )) && alias_target=${aliases[$__arg]} || alias_target="${"$(alias -- $__arg)"#*=}" - [[ ${__FAST_HIGHLIGHT_TOKEN_TYPES[$alias_target]} = "1" && $__arg_type != "1" ]] && __FAST_HIGHLIGHT_TOKEN_TYPES[$__arg]="1" - fi - ;; - - builtin) [[ $__arg = "[" ]] && { - __style=${FAST_THEME_NAME}single-sq-bracket - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) - } || __style=${FAST_THEME_NAME}builtin - # T - typeset, etc. mode - [[ $__arg = (typeset|declare|local|float|integer|export|readonly) ]] && braces_stack='T'$braces_stack - [[ $__arg = eval ]] && (( next_word = next_word | 256 )) - ;; - - function) __style=${FAST_THEME_NAME}function;; - - command) __style=${FAST_THEME_NAME}command;; - - hashed) __style=${FAST_THEME_NAME}hashed-command;; - - dirpath) __style=${FAST_THEME_NAME}path-to-dir;; - - none) # Assign? - if [[ $__arg == [a-zA-Z_][a-zA-Z0-9_]#(|\[[^\]]#\])(|[^\]]#\])(|[+])=* || $__arg == [0-9]##(|[+])=* || ( $braces_stack = T* && ${__arg_type} != 3 ) ]] { - __style=${FAST_THEME_NAME}assign - FAST_ASSIGNS_SEEN[${__arg%%=*}]=1 - - # Handle array assignment - [[ $__arg = (#b)*=(\()*(\))* || $__arg = (#b)*=(\()* ]] && { - (( __start=_start_pos-__PBUFLEN+${mbegin[1]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") - # Counting complex brackets (for brackets-highlighter): 2. ( in array assign - _FAST_COMPLEX_BRACKETS+=( $__start ) - (( mbegin[2] >= 1 )) && { - (( __start=_start_pos-__PBUFLEN+${mbegin[2]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") - # Counting complex brackets (for brackets-highlighter): 3a. ) in array assign - _FAST_COMPLEX_BRACKETS+=( $__start ) - } || in_array_assignment=1 - } || { [[ ${braces_stack[1]} != 'T' ]] && (( next_word = (next_word | 1) & ~2 )); } - - # Handle no-string highlight, string "/' highlight, math mode highlight - local ctmp="\"" dtmp="'" - itmp=${__arg[(i)$ctmp]}-1 iitmp=${__arg[(i)$dtmp]}-1 - integer jtmp=${__arg[(b:itmp+2:i)$ctmp]} jjtmp=${__arg[(b:iitmp+2:i)$dtmp]} - (( itmp < iitmp && itmp <= __asize - 1 )) && (( jtmp > __asize && (jtmp = __asize), 1 > 0 )) && \ - (( __start=_start_pos-__PBUFLEN+itmp, __end=_start_pos-__PBUFLEN+jtmp, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") && \ - { itmp=${__arg[(i)=]}; __arg=${__arg[itmp,__asize]}; (( _start_pos += itmp - 1 )); - -fast-highlight-string; (( _start_pos = _start_pos - itmp + 1, 1 > 0 )); } || \ - { - (( iitmp <= __asize - 1 )) && (( jjtmp > __asize && (jjtmp = __asize), 1 > 0 )) && \ - (( __start=_start_pos-__PBUFLEN+iitmp, __end=_start_pos-__PBUFLEN+jjtmp, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}single-quoted-argument]}") - } || \ - { - itmp=${__arg[(i)=]}; __arg=${__arg[itmp,__asize]}; (( _start_pos += itmp - 1 )); - [[ ${__arg[2,4]} = '$((' ]] && { -fast-highlight-math-string; - (( __start=_start_pos-__PBUFLEN+2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - # Counting complex brackets (for brackets-highlighter): 4. $(( in assign argument - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - (( jtmp = ${__arg[(I)\)\)]}-1, jtmp > 0 )) && { - (( __start=_start_pos-__PBUFLEN+jtmp, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - # Counting complex brackets (for brackets-highlighter): 5. )) in assign argument - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - } - } || -fast-highlight-string; - (( _start_pos = _start_pos - itmp + 1, 1 > 0 )) - } - - } elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]] { - __style=${FAST_THEME_NAME}history-expansion - - } elif [[ $__arg == ${histchars[2]}* ]] { - __style=${FAST_THEME_NAME}history-expansion - - } elif (( __arg_type == 3 )) { - # This highlights empty commands (semicolon follows nothing) as an error. - # Zsh accepts them, though. - (( this_word & 3 )) && __style=${FAST_THEME_NAME}commandseparator - - } elif [[ $__arg[1,2] == '((' ]] { - # Arithmetic evaluation. - # - # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} - # splitter would only output the '((' token if the matching '))' had - # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" - # would be highlighted as an error until the matching "))" are typed. - # - # We highlight just the opening parentheses, as a reserved word; this - # is how [[ ... ]] is highlighted, too. - - # ADD - (( __start=_start_pos-__PBUFLEN, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - already_added=1 - - # Counting complex brackets (for brackets-highlighter): 6. (( as command - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - - -fast-highlight-math-string - - # ADD - [[ $__arg[-2,-1] == '))' ]] && { - (( __start=_end_pos-__PBUFLEN-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - (( __delimited = __delimited ? 2 : __delimited )) - - # Counting complex brackets (for brackets-highlighter): 7. )) for as-command (( - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - } - - } elif [[ $__arg == '()' ]] { - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) - # anonymous function - __style=${FAST_THEME_NAME}reserved-word - } elif [[ $__arg == $'\x28' ]] { - # subshell '(', stack: letter 'R' - __style=${FAST_THEME_NAME}reserved-word - braces_stack='R'$braces_stack - - } elif [[ $__arg == $'\x29' ]] { - # ')', stack: letter 'R' for subshell - [[ $braces_stack = R* ]] && { braces_stack=${braces_stack#R}; __style=${FAST_THEME_NAME}reserved-word; } - - } elif (( this_word & 14 )) { - __style=${FAST_THEME_NAME}default - - } elif [[ $__arg = (';;'|';&'|';|') ]] && (( this_word & BIT_case_code )) { - (( next_word = (next_word | BIT_case_item) & ~(BIT_case_code+3) )) - __style=${FAST_THEME_NAME}default - - } elif [[ $__arg = \$\([^\(]* ]] { - already_added=1 - } - ;; - *) - # ADD - # (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end commandtypefromthefuture-$REPLY") - already_added=1 - ;; - esac - fi - # in_redirection || BIT_regular || BIT_sudo_opt || BIT_sudo_arg - elif (( in_redirection + this_word & 14 )) - then # $__arg is a non-command word - case $__arg in - ']]') - # A - [[ - [[ $braces_stack = A* ]] && { - __style=${FAST_THEME_NAME}double-sq-bracket - (( __delimited = __delimited ? 2 : __delimited )) - # Counting complex brackets (for brackets-highlighter): 8a. ]] for as-command [[ - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) - } || { - [[ $braces_stack = *A* ]] && { - __style=${FAST_THEME_NAME}unknown-token - # Counting complex brackets (for brackets-highlighter): 8b. ]] for as-command [[ - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) - } || __style=${FAST_THEME_NAME}default - } - braces_stack=${braces_stack#A} - ;; - ']') - __style=${FAST_THEME_NAME}single-sq-bracket - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) - ;; - $'\x28') - # '(' inside [[ - __style=${FAST_THEME_NAME}reserved-word - braces_stack='R'$braces_stack - ;; - $'\x29') # ')' - subshell or end of array assignment - if (( in_array_assignment )); then - in_array_assignment=0 - (( next_word = next_word | 1 )) - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") - already_added=1 - # Counting complex brackets (for brackets-highlighter): 3b. ) in array assign - _FAST_COMPLEX_BRACKETS+=( $__start ) - elif [[ $braces_stack = R* ]]; then - braces_stack=${braces_stack#R} - __style=${FAST_THEME_NAME}reserved-word - # Zsh doesn't tokenize final ) if it's just single ')', - # but logically what's below is correct, so it is kept - # in case Zsh will be changed / fixed, etc. - elif [[ $braces_stack = F* ]]; then - __style=${FAST_THEME_NAME}builtin - fi - ;; - $'\x28\x29') # '()' - possibly a function definition - # || false # TODO: or if the previous word was a command word - (( FAST_HIGHLIGHT[multi_func_def] )) && (( next_word = next_word | 1 )) - __style=${FAST_THEME_NAME}reserved-word - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) - # Remove possible annoying unknown-token __style, or misleading function __style - reply[-1]=() - __fast_highlight_main__command_type_cache[$active_command]="function" - ;; - '--'*) [[ $__arg == "--" ]] && { _was_double_hyphen=1; __style=${FAST_THEME_NAME}double-hyphen-option; } || { - (( !_was_double_hyphen )) && { - [[ "$__arg" = (#b)(--[a-zA-Z0-9_]##)=(*) ]] && { - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") - (( __start=_start_pos-__PBUFLEN+1+mend[1], __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") - already_added=1 - } || __style=${FAST_THEME_NAME}double-hyphen-option - } || __style=${FAST_THEME_NAME}default - } - ;; - '-'*) (( !_was_double_hyphen )) && __style=${FAST_THEME_NAME}single-hyphen-option || __style=${FAST_THEME_NAME}default;; - \$\'*) - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}dollar-quoted-argument]}") - -fast-highlight-dollar-string - already_added=1 - ;; - [\"\']*|[^\"\\]##([\\][\\])#\"*|[^\'\\]##([\\][\\])#\'*) - # 256 is eval-mode - if (( this_word & 256 )) && [[ $__arg = [\'\"]* ]]; then - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}recursive-base]}") - if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then - __idx=1 - _mybuf=$FAST_THEME_NAME - FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} - (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh - else - __idx=0 - fi - (( _start_pos-__PBUFLEN >= 0 )) && \ - -fast-highlight-process "$PREBUFFER" "${${__arg%[\'\"]}#[\'\"]}" $(( _start_pos + 1 )) - (( __idx )) && FAST_THEME_NAME=$_mybuf - already_added=1 - else - [[ $__arg = *([^\\][\#][\#]|"(#b)"|"(#B)"|"(#m)"|"(#c")* && $highlight_glob -ne 0 ]] && \ - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}globbing-ext]}") - # Reusing existing vars, treat this code like C++ STL - # header, full of underscores and unhelpful var names - itmp=0 __workbuf=$__arg __tmp="" cdpath_dir=$__arg - while [[ $__workbuf = (#b)[^\"\'\\]#(([\"\'])|[\\](*))(*) ]]; do - [[ -n ${match[3]} ]] && { - itmp+=${mbegin[1]} - # Optionally skip 1 quoted char - [[ $__tmp = \' ]] && __workbuf=${match[3]} || { itmp+=1; __workbuf=${match[3]:1}; } - } || { - itmp+=${mbegin[1]} - __workbuf=${match[4]} - # Toggle quoting - [[ ( ${match[1]} = \" && $__tmp != \' ) || ( ${match[1]} = \' && $__tmp != \" ) ]] && { - [[ $__tmp = [\"\'] ]] && { - # End of quoting - (( __start=_start_pos-__PBUFLEN+iitmp-1, __end=_start_pos-__PBUFLEN+itmp, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}${${${__tmp#\'}:+double-quoted-argument}:-single-quoted-argument}]}") - already_added=1 - - [[ $__tmp = \" ]] && { - __arg=${cdpath_dir[iitmp+1,itmp-1]} - (( _start_pos += iitmp - 1 + 1 )) - -fast-highlight-string - (( _start_pos = _start_pos - iitmp + 1 - 1 )) - } - # The end-of-quoting proper algorithm action - __tmp= - } || { - # Beginning of quoting - iitmp=itmp - # The beginning-of-quoting proper algorithm action - __tmp=${match[1]} - } - } - } - done - [[ $__tmp = [\"\'] ]] && { - (( __start=_start_pos-__PBUFLEN+iitmp-1, __end=_start_pos-__PBUFLEN+__asize, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}${${${__tmp#\'}:+double-quoted-argument}:-single-quoted-argument}]}") - already_added=1 - - [[ $__tmp = \" ]] && { - __arg=${cdpath_dir[iitmp+1,__asize]} - (( _start_pos += iitmp - 1 + 1 )) - -fast-highlight-string - (( _start_pos = _start_pos - iitmp + 1 - 1 )) - } - } - fi - ;; - \$\(\(*) - already_added=1 - -fast-highlight-math-string - # ADD - (( __start=_start_pos-__PBUFLEN+1, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - # Counting complex brackets (for brackets-highlighter): 9. $(( as argument - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - # ADD - [[ $__arg[-2,-1] == '))' ]] && (( __start=_end_pos-__PBUFLEN-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") - # Counting complex brackets (for brackets-highlighter): 10. )) for as-argument $(( - _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) - ;; - '`'*) - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-quoted-argument]}") - if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then - __idx=1 - _mybuf=$FAST_THEME_NAME - FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} - (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh - else - __idx=0 - fi - (( _start_pos-__PBUFLEN >= 0 )) && \ - -fast-highlight-process "$PREBUFFER" "${${__arg%[\`]}#[\`]}" $(( _start_pos + 1 )) - (( __idx )) && FAST_THEME_NAME=$_mybuf - already_added=1 - ;; - '((') # 'F' - (( after for - (( this_word & 32 )) && { - braces_stack='F'$braces_stack - __style=${FAST_THEME_NAME}double-paren - # Counting complex brackets (for brackets-highlighter): 11. (( as for-syntax - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) - # This is set after __arg_type == 2, and also here, - # when another alternate-syntax capable command occurs - __delimited=1 - } - ;; - '))') # 'F' - (( after for - [[ $braces_stack = F* ]] && { - braces_stack=${braces_stack#F} - __style=${FAST_THEME_NAME}double-paren - # Counting complex brackets (for brackets-highlighter): 12. )) as for-syntax - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) - (( __delimited = __delimited ? 2 : __delimited )) - } - ;; - '<<<') - (( next_word = (next_word | 128) & ~3 )) - [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-tri]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-tri]}") - already_added=1 - ;; - *) # F - (( after for - if [[ $braces_stack = F* ]]; then - -fast-highlight-string - _mybuf=$__arg - __idx=_start_pos - while [[ $_mybuf = (#b)[^a-zA-Z\{\$]#([a-zA-Z][a-zA-Z0-9]#)(*) ]]; do - (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-variable]}") - __idx+=${mend[1]} - _mybuf=${match[2]} - done - - _mybuf=$__arg - __idx=_start_pos - while [[ $_mybuf = (#b)[^+\<\>=:\*\|\&\^\~-]#([+\<\>=:\*\|\&\^\~-]##)(*) ]]; do - (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-operator]}") - __idx+=${mend[1]} - _mybuf=${match[2]} - done - - _mybuf=$__arg - __idx=_start_pos - while [[ $_mybuf = (#b)[^0-9]#([0-9]##)(*) ]]; do - (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-number]}") - __idx+=${mend[1]} - _mybuf=${match[2]} - done - - if [[ $__arg = (#b)[^\;]#(\;)[\ ]# ]]; then - (( __start=_start_pos-__PBUFLEN+${mbegin[1]}-1, __end=_start_pos-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") - fi - - already_added=1 - elif [[ $__arg = *([^\\][\#][\#]|"(#b)"|"(#B)"|"(#m)"|"(#c")* ]]; then - (( highlight_glob )) && __style=${FAST_THEME_NAME}globbing-ext || __style=${FAST_THEME_NAME}default - elif [[ $__arg = ([*?]*|*[^\\][*?]*) ]]; then - (( highlight_glob )) && __style=${FAST_THEME_NAME}globbing || __style=${FAST_THEME_NAME}default - elif [[ $__arg = \$* ]]; then - __style=${FAST_THEME_NAME}variable - elif [[ $__arg = $'\x7d' && $braces_stack = Y* && ${FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]} = "1" ]]; then - # right brace, i.e. $'\x7d' == '}' - # Parsing rule: # { - # - # Additionally, `tt(})' is recognized in any position if neither the - # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set.""" - braces_stack=${braces_stack#Y} - __style=${FAST_THEME_NAME}reserved-word - (( next_word = next_word | 16 )) - elif [[ $__arg = (';;'|';&'|';|') ]] && (( this_word & BIT_case_code )); then - (( next_word = (next_word | BIT_case_item) & ~(BIT_case_code+3) )) - __style=${FAST_THEME_NAME}default - elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]]; then - __style=${FAST_THEME_NAME}history-expansion - elif (( __arg_type == 3 )); then - __style=${FAST_THEME_NAME}commandseparator - elif (( in_redirection == 2 )); then - __style=${FAST_THEME_NAME}redirection - elif (( ${+galiases[(e)$__arg]} )); then - __style=${FAST_THEME_NAME}global-alias - else - if [[ ${FAST_HIGHLIGHT[no_check_paths]} != 1 ]]; then - if [[ ${FAST_HIGHLIGHT[use_async]} != 1 ]]; then - if -fast-highlight-check-path noasync; then - # ADD - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - already_added=1 - - # TODO: path separators, optimize and add to async code-path - [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} ]] && { - for (( __pos = _start_pos; __pos <= _end_pos; __pos++ )) ; do - # ADD - [[ ${__buf[__pos]} == "/" ]] && (( __start=__pos-__PBUFLEN, __start >= 0 )) && reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") - done - } - else - __style=${FAST_THEME_NAME}default - fi - else - if [[ -z ${FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]} || $(( EPOCHSECONDS - FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}-born-at] )) -gt 8 ]]; then - if [[ $LASTWIDGET != *-or-beginning-search ]]; then - exec {PCFD}< <(-fast-highlight-check-path; sleep 5) - command sleep 0 - FAST_HIGHLIGHT[path-queue]+=";$_start_pos $_end_pos;" - is-at-least 5.0.6 && __pos=1 || __pos=0 - zle -F ${${__pos:#0}:+-w} $PCFD fast-highlight-check-path-handler - already_added=1 - else - __style=${FAST_THEME_NAME}default - fi - elif [[ ${FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]%D} -eq 1 ]]; then - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path${${(M)FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]%D}:+-to-dir}]}") - already_added=1 - else - __style=${FAST_THEME_NAME}default - fi - fi - else - __style=${FAST_THEME_NAME}default - fi - fi - ;; - esac - elif (( this_word & 128 )) - then - (( next_word = (next_word | 2) & ~129 )) - [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-text]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-text]}") - -fast-highlight-string ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-var]:#none} - already_added=1 - elif (( this_word & (BIT_case_preamble + BIT_case_item) )) - then - if (( this_word & BIT_case_preamble )); then - [[ $__arg = "in" ]] && { - __style=${FAST_THEME_NAME}reserved-word - (( next_word = BIT_case_item )) - } || { - __style=${FAST_THEME_NAME}case-input - (( next_word = BIT_case_preamble )) - } - else - if (( this_word & BIT_case_nempty_item == 0 )) && [[ $__arg = "esac" ]]; then - (( next_word = 1 )) - __style=${FAST_THEME_NAME}reserved-word - elif [[ $__arg = (\(*\)|\)|\() ]]; then - [[ $__arg = *\) ]] && (( next_word = BIT_case_code | 1 )) || (( next_word = BIT_case_item | BIT_case_nempty_item )) - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) - (( ${#__arg} > 1 )) && { - _FAST_COMPLEX_BRACKETS+=( $(( _start_pos+${#__arg}-1-__PBUFLEN )) ) - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}") - (( __start=_start_pos+1-__PBUFLEN, __end=_end_pos-1-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}") - already_added=1 - } || { - __style=${FAST_THEME_NAME}case-parentheses - } - else - (( next_word = BIT_case_item | BIT_case_nempty_item )) - __style=${FAST_THEME_NAME}case-condition - fi - fi - fi - if [[ $__arg = (#b)*'#'(([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])|([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]))* || $__arg = (#b)*'rgb('(([0-9a-fA-F][0-9a-fA-F](#c0,1)),([0-9a-fA-F][0-9a-fA-F](#c0,1)),([0-9a-fA-F][0-9a-fA-F](#c0,1)))* ]]; then - if [[ -n $match[2] ]]; then - if [[ $match[2] = ?? || $match[3] = ?? || $match[4] = ?? ]]; then - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#${(l:2::0:)match[2]}${(l:2::0:)match[3]}${(l:2::0:)match[4]}") - else - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#$match[2]$match[3]$match[4]") - fi - else - (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#$match[5]$match[6]$match[7]") - fi - already_added=1 - fi - - # ADD - (( already_added == 0 )) && [[ ${FAST_HIGHLIGHT_STYLES[$__style]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - - if (( (__arg_type == 3) && ((this_word & (BIT_case_preamble|BIT_case_item)) == 0) )); then - if [[ $__arg == ';' ]] && (( in_array_assignment )); then - # literal newline inside an array assignment - (( next_word = 2 | (next_word & BIT_case_code) )) - elif [[ -n ${braces_stack[(r)A]} ]]; then - # 'A' in stack -> inside [[ ... ]] - (( next_word = 2 | (next_word & BIT_case_code) )) - else - braces_stack=${braces_stack#T} - (( next_word = 1 | (next_word & BIT_case_code) )) - highlight_glob=1 - # A new command means that we should not expect that alternate - # syntax will occur (this is also in the ';' short-path), but - # || and && mean going down just 1 step, not all the way to 0 - [[ $__arg != ("||"|"&&") ]] && __delimited=0 || (( __delimited = __delimited == 2 ? 1 : __delimited )) - fi - elif (( ( (__arg_type == 1) || (__arg_type == 2) ) && (this_word & 1) )); then # (( __arg_type == 1 || __arg_type == 2 )) && (( this_word & 1 )) - __delimited=1 - (( next_word = 1 | (next_word & (64 | BIT_case_code)) )) - elif [[ $__arg == "repeat" ]] && (( this_word & 1 )); then - __delimited=1 - # skip the repeat-count word - in_redirection=2 - # The redirection mechanism assumes $this_word describes the word - # following the redirection. Make it so. - # - # That word can be a command word with shortloops (`repeat 2 ls`) - # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). - # - # The repeat-count word will be handled like a redirection target. - (( this_word = 3 )) - fi - _start_pos=$_end_pos - # This is the default/common codepath. - (( this_word = in_redirection == 0 ? next_word : this_word )) #else # Stall $this_word. - done - - # Do we have whole buffer? I.e. start at zero - [[ $3 != 0 ]] && return 0 - - # The loop overwrites ")" with "x", except those from $( ) substitution - # - # __pos: current nest level, starts from 0 - # __workbuf: copy of __buf, with limit on 250 characters - # __idx: index in whole command line buffer - # __list: list of coordinates of ) which shouldn't be ovewritten - _mybuf=${__buf[1,250]} __workbuf=$_mybuf __idx=0 __pos=0 __list=() - - while [[ $__workbuf = (#b)[^\(\)]#([\(\)])(*) ]]; do - if [[ ${match[1]} == \( ]]; then - __arg=${_mybuf[__idx+${mbegin[1]}-1,__idx+${mbegin[1]}-1+2]} - [[ $__arg = '$('[^\(] ]] && __list+=( $__pos ) - [[ $__arg = '$((' ]] && _mybuf[__idx+${mbegin[1]}-1]=x - # Increase parenthesis level - __pos+=1 - else - # Decrease parenthesis level - __pos=__pos-1 - [[ -z ${__list[(r)$__pos]} ]] && [[ $__pos -gt 0 ]] && _mybuf[__idx+${mbegin[1]}]=x - fi - __idx+=${mbegin[2]}-1 - __workbuf=${match[2]} - done - - # Run on fake buffer with replaced parentheses: ")" into "x" - if [[ "$_mybuf" = *$__nul* ]]; then - # Try to avoid conflict with the \0, however - # we have to split at *some* character - \7 - # is ^G, so one cannot have null and ^G at - # the same time on the command line - __nul=$'\7' - fi - - __inputs=( ${(ps:$__nul:)${(S)_mybuf//(#b)*\$\(([^\)]#)(\)|(#e))/${mbegin[1]};${mend[1]}${__nul}}%$__nul*} ) - if [[ "${__inputs[1]}" != "$_mybuf" && -n "${__inputs[1]}" ]]; then - if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then - __idx=1 - __tmp=$FAST_THEME_NAME - FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} - (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh - else - __idx=0 - fi - for _mybuf in $__inputs; do - (( __start=${_mybuf%%;*}-__PBUFLEN-1, __end=${_mybuf##*;}-__PBUFLEN, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${__tmp}recursive-base]}") - # Pass authentic buffer for recursive analysis - -fast-highlight-process "$PREBUFFER" "${__buf[${_mybuf%%;*},${_mybuf##*;}]}" $(( ${_mybuf%%;*} - 1 )) - done - # Restore theme - (( __idx )) && FAST_THEME_NAME=$__tmp - fi - - return 0 -} - --fast-highlight-check-path() -{ - (( _start_pos-__PBUFLEN >= 0 )) || \ - { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } - [[ $1 != "noasync" ]] && { - print -r -- ${sysparams[pid]} - # This is to fill cache - print -r -- $__arg - } - - : ${expanded_path:=${(Q)~__arg}} - [[ -n ${FAST_BLIST_PATTERNS[(k)${${(M)expanded_path:#/*}:-$PWD/$expanded_path}]} ]] && { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } - - [[ -z $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } - [[ -d $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos ${_end_pos}D" || __style=${FAST_THEME_NAME}path-to-dir; return 0; } - [[ -e $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos $_end_pos" || __style=${FAST_THEME_NAME}path; return 0; } - - # Search the path in CDPATH, only for CD command - [[ $active_command = "cd" ]] && for cdpath_dir in $cdpath; do - [[ -d $cdpath_dir/$expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos ${_end_pos}D" || __style=${FAST_THEME_NAME}path-to-dir; return 0; } - [[ -e $cdpath_dir/$expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos $_end_pos" || __style=${FAST_THEME_NAME}path; return 0; } - done - - # It's not a path. - [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos" - return 1 -} - --fast-highlight-check-path-handler() { - local IFS=$'\n' pid PCFD=$1 line stripped val - integer idx - - if read -r -u $PCFD pid; then - if read -r -u $PCFD val; then - if read -r -u $PCFD line; then - stripped=${${line#- }%D} - FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}-born-at]=$EPOCHSECONDS - idx=${${FAST_HIGHLIGHT[path-queue]}[(I)$stripped]} - (( idx > 0 )) && { - if [[ $line != -* ]]; then - FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]="1${(M)line%D}" - region_highlight+=("${line%% *} ${${line##* }%D} ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path${${(M)line%D}:+-to-dir}]}") - else - FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]=0 - fi - val=${FAST_HIGHLIGHT[path-queue]} - val[idx-1,idx+${#stripped}]="" - FAST_HIGHLIGHT[path-queue]=$val - [[ ${FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]%D} = 1 && ${#val} -le 27 ]] && zle -R - } - fi - fi - kill -9 $pid 2>/dev/null - fi - - zle -F -w ${PCFD} - exec {PCFD}<&- -} - -zle -N -- fast-highlight-check-path-handler -fast-highlight-check-path-handler - -# Highlight special blocks inside double-quoted strings -# -# The while [[ ... ]] pattern is logically ((A)|(B)|(C)|(D)|(E))(*), where: -# - A matches $var[abc] -# - B matches ${(...)var[abc]} -# - C matches $ -# - D matches \$ or \" or \' -# - E matches \* -# -# and the first condition -n ${match[7] uses D to continue searching when -# backslash-something (not ['"$]) is occured. -# -# $1 - additional style to glue-in to added style --fast-highlight-string() -{ - (( _start_pos-__PBUFLEN >= 0 )) || return 0 - _mybuf=$__arg - __idx=_start_pos - - # 7 8 - while [[ $_mybuf = (#b)[^\$\\]#((\$(#B)([#+^=~](#c1,2))(#c0,1)(#B)([a-zA-Z_:][a-zA-Z0-9_:]#|[0-9]##)(#b)(\[[^\]]#\])(#c0,1))|(\$[{](#B)([#+^=~](#c1,2))(#c0,1)(#b)(\([a-zA-Z0-9_:@%#]##\))(#c0,1)[a-zA-Z0-9_:#]##(\[[^\]]#\])(#c0,1)[}])|\$|[\\][\'\"\$]|[\\](*))(*) ]]; do - [[ -n ${match[7]} ]] && { - # Skip following char – it is quoted. Choice is - # made to not highlight such quoting - __idx+=${mbegin[1]}+1 - _mybuf=${match[7]:1} - } || { - __idx+=${mbegin[1]}-1 - _end_idx=__idx+${mend[1]}-${mbegin[1]}+1 - _mybuf=${match[8]} - - # ADD - (( __start=__idx-__PBUFLEN, __end=_end_idx-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${${1:+$1}:-${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}}") - - __idx=_end_idx - } - done - return 0 -} - -# Highlight math and non-math context variables inside $(( )) and (( )) -# -# The while [[ ... ]] pattern is logically ((A)|(B)|(C)|(D))(*), where: -# - A matches $var[abc] -# - B matches ${(...)var[abc]} -# - C matches $ -# - D matches words [a-zA-Z]## (variables) -# -# Parameters used: _mybuf, __idx, _end_idx, __style --fast-highlight-math-string() -{ - (( _start_pos-__PBUFLEN >= 0 )) || return 0 - _mybuf=$__arg - __idx=_start_pos - - # 7 - while [[ $_mybuf = (#b)[^\$_a-zA-Z0-9]#((\$(#B)(+|)(#B)([a-zA-Z_:][a-zA-Z0-9_:]#|[0-9]##)(#b)(\[[^\]]##\])(#c0,1))|(\$[{](#B)(+|)(#b)(\([a-zA-Z0-9_:@%#]##\))(#c0,1)[a-zA-Z0-9_:#]##(\[[^\]]##\])(#c0,1)[}])|\$|[a-zA-Z_][a-zA-Z0-9_]#|[0-9]##)(*) ]]; do - __idx+=${mbegin[1]}-1 - _end_idx=__idx+${mend[1]}-${mbegin[1]}+1 - _mybuf=${match[7]} - - [[ ${match[1]} = [0-9]* ]] && __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]} || { - [[ ${match[1]} = [a-zA-Z_]* ]] && { - [[ ${+parameters[${match[1]}]} = 1 || ${FAST_ASSIGNS_SEEN[${match[1]}]} = 1 ]] && \ - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathvar]} || \ - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}matherr]} - } || { - [[ ${match[1]} = "$"* ]] && { - match[1]=${match[1]//[\{\}+]/} - if [[ ${match[1]} = "$" || ${FAST_ASSIGNS_SEEN[${match[1]:1}]} = 1 ]] || \ - { eval "[[ -n \${(P)\${match[1]:1}} ]]" } 2>> /dev/null; then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]} - else - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}matherr]} - fi - } - } - } - - # ADD - [[ $__style != "none" && -n $__style ]] && (( __start=__idx-__PBUFLEN, __end=_end_idx-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end $__style") - - __idx=_end_idx - done -} - -# Highlight special chars inside dollar-quoted strings --fast-highlight-dollar-string() -{ - (( _start_pos-__PBUFLEN >= 0 )) || return 0 - local i j k __style - local AA - integer c - - # Starting dollar-quote is at 1:2, so __start parsing at offset 3 in the string. - for (( i = 3 ; i < _end_pos - _start_pos ; i += 1 )) ; do - (( j = i + _start_pos - 1 )) - (( k = j + 1 )) - - case ${__arg[$i]} in - "\\") __style=${FAST_THEME_NAME}back-dollar-quoted-argument - for (( c = i + 1 ; c <= _end_pos - _start_pos ; c += 1 )); do - [[ ${__arg[$c]} != ([0-9xXuUa-fA-F]) ]] && break - done - AA=$__arg[$i+1,$c-1] - # Matching for HEX and OCT values like \0xA6, \xA6 or \012 - if [[ "$AA" == (#m)(#s)(x|X)[0-9a-fA-F](#c1,2) - || "$AA" == (#m)(#s)[0-7](#c1,3) - || "$AA" == (#m)(#s)u[0-9a-fA-F](#c1,4) - || "$AA" == (#m)(#s)U[0-9a-fA-F](#c1,8) - ]]; then - (( k += MEND )) - (( i += MEND )) - else - if (( __asize > i+1 )) && [[ $__arg[i+1] == [xXuU] ]]; then - # \x not followed by hex digits is probably an error - __style=${FAST_THEME_NAME}unknown-token - fi - (( k += 1 )) # Color following char too. - (( i += 1 )) # Skip parsing the escaped char. - fi - ;; - *) continue ;; - - esac - # ADD - (( __start=j-__PBUFLEN, __end=k-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - done -} - --fast-highlight-init() { - _FAST_COMPLEX_BRACKETS=() - __fast_highlight_main__command_type_cache=() -} - -typeset -ga FSH_LIST --fsh_sy_h_shappend() { - FSH_LIST+=( "$(( $1 - 1 ));;$(( $2 ))" ) -} - -functions -M fsh_sy_h_append 2 2 -fsh_sy_h_shappend 2>/dev/null - -# vim:ft=zsh:sw=2:sts=2 diff --git a/.config/zsh/.zsh/fsh/fast-string-highlight b/.config/zsh/.zsh/fsh/fast-string-highlight deleted file mode 100644 index cc8d860..0000000 --- a/.config/zsh/.zsh/fsh/fast-string-highlight +++ /dev/null @@ -1,77 +0,0 @@ -# vim:ft=zsh:sw=4:sts=4 - -# -# $1 - PREBUFFER -# $2 - BUFFER -# -function -fast-highlight-string-process { - emulate -LR zsh - setopt extendedglob warncreateglobal typesetsilent - - local -A pos_to_level level_to_pos pair_map final_pairs - local input=$1$2 _mybuf=$1$2 __style __quoting - integer __idx=0 __pair_idx __level=0 __start __end - local -a match mbegin mend - - pair_map=( "(" ")" "{" "}" "[" "]" ) - - while [[ $_mybuf = (#b)([^"{}()[]\\\"'"]#)((["({[]})\"'"])|[\\](*))(*) ]]; do - if [[ -n ${match[4]} ]] { - __idx+=${mbegin[2]} - - [[ $__quoting = \' ]] && _mybuf=${match[4]} || { _mybuf=${match[4]:1}; (( ++ __idx )); } - } else { - __idx+=${mbegin[2]} - [[ -z $__quoting && -z ${_FAST_COMPLEX_BRACKETS[(r)$((__idx-${#PREBUFFER}-1))]} ]] && { - if [[ ${match[2]} = ["({["] ]]; then - pos_to_level[$__idx]=$(( ++__level )) - level_to_pos[$__level]=$__idx - elif [[ ${match[2]} = ["]})"] ]]; then - if (( __level > 0 )); then - __pair_idx=${level_to_pos[$__level]} - pos_to_level[$__idx]=$(( __level -- )) - [[ ${pair_map[${input[__pair_idx]}]} = ${input[__idx]} ]] && { - final_pairs[$__idx]=$__pair_idx - final_pairs[$__pair_idx]=$__idx - } - else - pos_to_level[$__idx]=-1 - fi - fi - } - - if [[ ${match[2]} = \" && $__quoting != \' ]] { - [[ $__quoting = '"' ]] && __quoting="" || __quoting='"'; - } - if [[ ${match[2]} = \' && $__quoting != \" ]] { - if [[ $__quoting = ("'"|"$'") ]] { - __quoting="" - } else { - if [[ $match[1] = *\$ ]] { - __quoting="\$'"; - } else { - __quoting="'"; - } - } - } - _mybuf=${match[5]} - } - done - - for __idx in ${(k)pos_to_level}; do - (( ${+final_pairs[$__idx]} )) && __style=${FAST_THEME_NAME}bracket-level-$(( ( (pos_to_level[$__idx]-1) % 3 ) + 1 )) || __style=${FAST_THEME_NAME}unknown-token - (( __start=__idx-${#PREBUFFER}-1, __end=__idx-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - done - - # If cursor is on a bracket, then highlight corresponding bracket, if any. - if [[ $WIDGET != zle-line-finish ]]; then - __idx=$(( CURSOR + 1 )) - if (( ${+pos_to_level[$__idx]} )) && (( ${+final_pairs[$__idx]} )); then - (( __start=final_pairs[$__idx]-${#PREBUFFER}-1, __end=final_pairs[$__idx]-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") && \ - reply+=("$CURSOR $__idx ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") - fi - fi - return 0 -} diff --git a/.config/zsh/.zsh/fsh/fast-syntax-highlighting.plugin.zsh b/.config/zsh/.zsh/fsh/fast-syntax-highlighting.plugin.zsh deleted file mode 100644 index c05dc4f..0000000 --- a/.config/zsh/.zsh/fsh/fast-syntax-highlighting.plugin.zsh +++ /dev/null @@ -1,384 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors -# Copyright (c) 2017-2019 Sebastian Gniazdowski (modifications) -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Standarized way of handling finding plugin dir, -# regardless of functionargzero and posixargzero, -# and with an option for a plugin manager to alter -# the plugin directory (i.e. set ZERO parameter) -# http://zdharma.org/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html -0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" -0="${${(M)0:#/*}:-$PWD/$0}" - -typeset -g FAST_HIGHLIGHT_VERSION=1.55 -typeset -g FAST_BASE_DIR="${0:h}" -typeset -ga _FAST_MAIN_CACHE -# Holds list of indices pointing at brackets that -# are complex, i.e. e.g. part of "[[" in [[ ... ]] -typeset -ga _FAST_COMPLEX_BRACKETS - -typeset -g FAST_WORK_DIR=${FAST_WORK_DIR:-${XDG_CACHE_HOME:-~/.cache}/fast-syntax-highlighting} -: ${FAST_WORK_DIR:=$FAST_BASE_DIR} -# Expand any tilde in the (supposed) path. -FAST_WORK_DIR=${~FAST_WORK_DIR} - -# Last (currently, possibly) loaded plugin isn't "fast-syntax-highlighting"? -# And FPATH isn't containing plugin dir? -if [[ ${zsh_loaded_plugins[-1]} != */fast-syntax-highlighting && -z ${fpath[(r)${0:h}]} ]] -then - fpath+=( "${0:h}" ) -fi - -if [[ ! -w $FAST_WORK_DIR ]]; then - FAST_WORK_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/fsh" - command mkdir -p "$FAST_WORK_DIR" -fi - -# Invokes each highlighter that needs updating. -# This function is supposed to be called whenever the ZLE state changes. -_zsh_highlight() -{ - # Store the previous command return code to restore it whatever happens. - local ret=$? - - # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains. - # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'. - if [[ $WIDGET == zle-isearch-update ]] && ! (( $+ISEARCHMATCH_ACTIVE )); then - region_highlight=() - return $ret - fi - - emulate -LR zsh - setopt extendedglob warncreateglobal typesetsilent noshortloops - - local REPLY # don't leak $REPLY into global scope - local -a reply - - # Do not highlight if there are more than 300 chars in the buffer. It's most - # likely a pasted command or a huge list of files in that case.. - [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret - - # Do not highlight if there are pending inputs (copy/paste). - [[ $PENDING -gt 0 ]] && return $ret - - # Reset region highlight to build it from scratch - # may need to remove path_prefix highlighting when the line ends - if [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified; then - -fast-highlight-init - -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - (( FAST_HIGHLIGHT[use_brackets] )) && { - _FAST_MAIN_CACHE=( $reply ) - -fast-highlight-string-process "$PREBUFFER" "$BUFFER" - } - region_highlight=( $reply ) - else - local char="${BUFFER[CURSOR+1]}" - if [[ "$char" = ["{([])}"] || "${FAST_HIGHLIGHT[prev_char]}" = ["{([])}"] ]]; then - FAST_HIGHLIGHT[prev_char]="$char" - (( FAST_HIGHLIGHT[use_brackets] )) && { - reply=( $_FAST_MAIN_CACHE ) - -fast-highlight-string-process "$PREBUFFER" "$BUFFER" - region_highlight=( $reply ) - } - fi - fi - - { - local cache_place - local -a region_highlight_copy - - # Re-apply zle_highlight settings - - # region - if (( REGION_ACTIVE == 1 )); then - _zsh_highlight_apply_zle_highlight region standout "$MARK" "$CURSOR" - elif (( REGION_ACTIVE == 2 )); then - () { - local needle=$'\n' - integer min max - if (( MARK > CURSOR )) ; then - min=$CURSOR max=$(( MARK + 1 )) - else - min=$MARK max=$CURSOR - fi - (( min = ${${BUFFER[1,$min]}[(I)$needle]} )) - (( max += ${${BUFFER:($max-1)}[(i)$needle]} - 1 )) - _zsh_highlight_apply_zle_highlight region standout "$min" "$max" - } - fi - - # yank / paste (zsh-5.1.1 and newer) - (( $+YANK_ACTIVE )) && (( YANK_ACTIVE )) && _zsh_highlight_apply_zle_highlight paste standout "$YANK_START" "$YANK_END" - - # isearch - (( $+ISEARCHMATCH_ACTIVE )) && (( ISEARCHMATCH_ACTIVE )) && _zsh_highlight_apply_zle_highlight isearch underline "$ISEARCHMATCH_START" "$ISEARCHMATCH_END" - - # suffix - (( $+SUFFIX_ACTIVE )) && (( SUFFIX_ACTIVE )) && _zsh_highlight_apply_zle_highlight suffix bold "$SUFFIX_START" "$SUFFIX_END" - - return $ret - - } always { - typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER" - typeset -g _ZSH_HIGHLIGHT_PRIOR_RACTIVE="$REGION_ACTIVE" - typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR - } -} - -# Apply highlighting based on entries in the zle_highlight array. -# This function takes four arguments: -# 1. The exact entry (no patterns) in the zle_highlight array: -# region, paste, isearch, or suffix -# 2. The default highlighting that should be applied if the entry is unset -# 3. and 4. Two integer values describing the beginning and end of the -# range. The order does not matter. -_zsh_highlight_apply_zle_highlight() { - local entry="$1" default="$2" - integer first="$3" second="$4" - - # read the relevant entry from zle_highlight - local region="${zle_highlight[(r)${entry}:*]}" - - if [[ -z "$region" ]]; then - # entry not specified at all, use default value - region=$default - else - # strip prefix - region="${region#${entry}:}" - - # no highlighting when set to the empty string or to 'none' - if [[ -z "$region" ]] || [[ "$region" == none ]]; then - return - fi - fi - - integer start end - if (( first < second )); then - start=$first end=$second - else - start=$second end=$first - fi - region_highlight+=("$start $end $region") -} - - -# ------------------------------------------------------------------------------------------------- -# API/utility functions for highlighters -# ------------------------------------------------------------------------------------------------- - -# Whether the command line buffer has been modified or not. -# -# Returns 0 if the buffer has changed since _zsh_highlight was last called. -_zsh_highlight_buffer_modified() -{ - [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]] || [[ "$REGION_ACTIVE" != "$_ZSH_HIGHLIGHT_PRIOR_RACTIVE" ]] || { _zsh_highlight_cursor_moved && [[ "$REGION_ACTIVE" = 1 || "$REGION_ACTIVE" = 2 ]] } -} - -# Whether the cursor has moved or not. -# -# Returns 0 if the cursor has moved since _zsh_highlight was last called. -_zsh_highlight_cursor_moved() -{ - [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR)) -} - -# ------------------------------------------------------------------------------------------------- -# Setup functions -# ------------------------------------------------------------------------------------------------- - -# Helper for _zsh_highlight_bind_widgets -# $1 is name of widget to call -_zsh_highlight_call_widget() -{ - integer ret - builtin zle "$@" - ret=$? - _zsh_highlight - return $ret -} - -# Rebind all ZLE widgets to make them invoke _zsh_highlights. -_zsh_highlight_bind_widgets() -{ - setopt localoptions noksharrays - local -F2 SECONDS - local prefix=orig-s${SECONDS/./}-r$(( RANDOM % 1000 )) # unique each time, in case we're sourced more than once - - # Load ZSH module zsh/zleparameter, needed to override user defined widgets. - zmodload zsh/zleparameter 2>/dev/null || { - print -r -- >&2 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' - return 1 - } - - # Override ZLE widgets to make them invoke _zsh_highlight. - local -U widgets_to_bind - widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|zle-line-pre-redraw|zle-keymap-select)}) - - # Always wrap special zle-line-finish widget. This is needed to decide if the - # current line ends and special highlighting logic needs to be applied. - # E.g. remove cursor imprint, don't highlight partial paths, ... - widgets_to_bind+=(zle-line-finish) - - # Always wrap special zle-isearch-update widget to be notified of updates in isearch. - # This is needed because we need to disable highlighting in that case. - widgets_to_bind+=(zle-isearch-update) - - local cur_widget - for cur_widget in $widgets_to_bind; do - case $widgets[$cur_widget] in - - # Already rebound event: do nothing. - user:_zsh_highlight_widget_*);; - - # The "eval"'s are required to make $cur_widget a closure: the value of the parameter at function - # definition time is used. - # - # We can't use ${0/_zsh_highlight_widget_} because these widgets are always invoked with - # NO_function_argzero, regardless of the option's setting here. - - # User defined widget: override and rebind old one with prefix "orig-". - user:*) zle -N -- $prefix-$cur_widget ${widgets[$cur_widget]#*:} - eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" - zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Completion widget: override and rebind old one with prefix "orig-". - completion:*) zle -C $prefix-$cur_widget ${${(s.:.)widgets[$cur_widget]}[2,3]} - eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" - zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Builtin widget: override and make it call the builtin ".widget". - builtin) eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }" - zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Incomplete or nonexistent widget: Bind to z-sy-h directly. - *) - if [[ $cur_widget == zle-* ]] && [[ -z $widgets[$cur_widget] ]]; then - _zsh_highlight_widget_${cur_widget}() { :; _zsh_highlight } - zle -N -- $cur_widget _zsh_highlight_widget_$cur_widget - else - # Default: unhandled case. - print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget ${(qq)cur_widget}" - fi - esac - done -} - -# ------------------------------------------------------------------------------------------------- -# Setup -# ------------------------------------------------------------------------------------------------- - -# Try binding widgets. -_zsh_highlight_bind_widgets || { - print -r -- >&2 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.' - return 1 -} - -# Reset scratch variables when commandline is done. -_zsh_highlight_preexec_hook() -{ - typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER= - typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=0 - typeset -ga _FAST_MAIN_CACHE - _FAST_MAIN_CACHE=() -} - -autoload -Uz add-zsh-hook -add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { - print -r -- >&2 'zsh-syntax-highlighting: failed loading add-zsh-hook.' -} - -/fshdbg() { - print -r -- "$@" >>! /tmp/reply -} - -ZSH_HIGHLIGHT_MAXLENGTH=10000 - -# Load zsh/parameter module if available -zmodload zsh/parameter 2>/dev/null -zmodload zsh/system 2>/dev/null - -autoload -Uz -- is-at-least fast-theme .fast-read-ini-file .fast-run-git-command \ - .fast-make-targets .fast-run-command .fast-zts-read-all -autoload -Uz -- →chroma/-git.ch →chroma/-hub.ch →chroma/-lab.ch →chroma/-example.ch \ - →chroma/-grep.ch →chroma/-perl.ch →chroma/-make.ch →chroma/-awk.ch \ - →chroma/-vim.ch →chroma/-source.ch →chroma/-sh.ch →chroma/-docker.ch \ - →chroma/-autoload.ch →chroma/-ssh.ch →chroma/-scp.ch →chroma/-which.ch \ - →chroma/-printf.ch →chroma/-ruby.ch →chroma/-whatis.ch →chroma/-alias.ch \ - →chroma/-subcommand.ch →chroma/-autorandr.ch →chroma/-nmcli.ch \ - →chroma/-fast-theme.ch →chroma/-node.ch →chroma/-fpath_peq.ch \ - →chroma/-precommand.ch →chroma/-subversion.ch →chroma/-ionice.ch \ - →chroma/-nice.ch →chroma/main-chroma.ch →chroma/-ogit.ch →chroma/-zinit.ch - -source "${0:h}/fast-highlight" -source "${0:h}/fast-string-highlight" - -local __fsyh_theme -zstyle -s :plugin:fast-syntax-highlighting theme __fsyh_theme - -[[ ( "${+termcap}" != 1 || "${termcap[Co]}" != <-> || "${termcap[Co]}" -lt "256" ) && "$__fsyh_theme" = (default|) ]] && { - FAST_HIGHLIGHT_STYLES[defaultvariable]="none" - FAST_HIGHLIGHT_STYLES[defaultglobbing-ext]="fg=blue,bold" - FAST_HIGHLIGHT_STYLES[defaulthere-string-text]="bg=blue" - FAST_HIGHLIGHT_STYLES[defaulthere-string-var]="fg=cyan,bg=blue" - FAST_HIGHLIGHT_STYLES[defaultcorrect-subtle]="bg=blue" - FAST_HIGHLIGHT_STYLES[defaultsubtle-bg]="bg=blue" - [[ "${FAST_HIGHLIGHT_STYLES[variable]}" = "fg=113" ]] && FAST_HIGHLIGHT_STYLES[variable]="none" - [[ "${FAST_HIGHLIGHT_STYLES[globbing-ext]}" = "fg=13" ]] && FAST_HIGHLIGHT_STYLES[globbing-ext]="fg=blue,bold" - [[ "${FAST_HIGHLIGHT_STYLES[here-string-text]}" = "bg=18" ]] && FAST_HIGHLIGHT_STYLES[here-string-text]="bg=blue" - [[ "${FAST_HIGHLIGHT_STYLES[here-string-var]}" = "fg=cyan,bg=18" ]] && FAST_HIGHLIGHT_STYLES[here-string-var]="fg=cyan,bg=blue" - [[ "${FAST_HIGHLIGHT_STYLES[correct-subtle]}" = "fg=12" ]] && FAST_HIGHLIGHT_STYLES[correct-subtle]="bg=blue" - [[ "${FAST_HIGHLIGHT_STYLES[subtle-bg]}" = "bg=18" ]] && FAST_HIGHLIGHT_STYLES[subtle-bg]="bg=blue" -} - -unset __fsyh_theme - -alias fsh-alias=fast-theme - --fast-highlight-fill-option-variables - -if [[ ! -e $FAST_WORK_DIR/secondary_theme.zsh ]] { - if { type curl &>/dev/null } { - curl -fsSL -o "$FAST_WORK_DIR/secondary_theme.zsh" \ - https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/share/free_theme.zsh \ - &>/dev/null - } elif { type wget &>/dev/null } { - wget -O "$FAST_WORK_DIR/secondary_theme.zsh" \ - https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/share/free_theme.zsh \ - &>/dev/null - } - touch "$FAST_WORK_DIR/secondary_theme.zsh" -} - -if [[ $(uname -a) = (#i)*darwin* ]] { - typeset -gA FAST_HIGHLIGHT - FAST_HIGHLIGHT[chroma-man]= -} - -[[ $COLORTERM == (24bit|truecolor) || ${terminfo[colors]} -eq 16777216 ]] || zmodload zsh/nearcolor &>/dev/null diff --git a/.config/zsh/.zsh/fsh/fast-theme b/.config/zsh/.zsh/fsh/fast-theme deleted file mode 100644 index 06ad005..0000000 --- a/.config/zsh/.zsh/fsh/fast-theme +++ /dev/null @@ -1,385 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (c) 2018, 2019 Philippe Troin (F-i-f on GitHub) -# -# Theme support using ini-files. -# - -zmodload zsh/zutil 2>/dev/null - -emulate -LR zsh -setopt extendedglob typesetsilent warncreateglobal -autoload colors; colors - -typeset -g FAST_WORK_DIR -: ${FAST_WORK_DIR:=$FAST_BASE_DIR} -FAST_WORK_DIR=${~FAST_WORK_DIR} - -local -A map -map=( "XDG:" "${XDG_CONFIG_HOME:-$HOME/.config}/fsh/" - "LOCAL:" "/usr/local/share/fsh/" - "HOME:" "$HOME/.fsh/" - "OPT:" "/opt/local/share/fsh/" -) - -FAST_WORK_DIR=${${FAST_WORK_DIR/(#m)(#s)(XDG|LOCAL|HOME|OPT):(#c0,1)/${map[${MATCH%:}:]}}%/} - -local OPT_HELP OPT_VERBOSE OPT_QUIET OPT_RESET OPT_LIST OPT_TEST OPT_SECONDARY OPT_SHOW OPT_COPY OPT_OV_RESET -local OPT_PALETTE OPT_CDWD OPT_XCHG OPT_OV_XCHG -local -A opthash -zparseopts -E -D -A opthash h -help v -verbose q -quiet r -reset l -list t -test -secondary \ - s -show -copy-shipped-theme: R -ov-reset p -palette w -workdir \ - x -xchg y -ov-xchg || \ - { echo "Improper options given, see help (-h/--help)"; return 1; } - -(( ${+opthash[-h]} + ${+opthash[--help]} )) && OPT_HELP="-h" -(( ${+opthash[-v]} + ${+opthash[--verbose]} )) && OPT_VERBOSE="-v" -(( ${+opthash[-q]} + ${+opthash[--quiet]} )) && OPT_QUIET="-q" -(( ${+opthash[-r]} + ${+opthash[--reset]} )) && OPT_RESET="-r" -(( ${+opthash[-l]} + ${+opthash[--list]} )) && OPT_LIST="-l" -(( ${+opthash[-t]} + ${+opthash[--test]} )) && OPT_TEST="-t" -(( ${+opthash[--secondary]} )) && OPT_SECONDARY="--secondary" -(( ${+opthash[-s]} + ${+opthash[--show]} )) && OPT_SHOW="-s" -(( ${+opthash[--copy-shipped-theme]} )) && OPT_COPY="${opthash[--copy-shipped-theme]}" -(( ${+opthash[-R]} + ${+opthash[--ov-reset]} )) && OPT_OV_RESET="-R" -(( ${+opthash[-p]} + ${+opthash[--palette]} )) && OPT_PALETTE="-p" -(( ${+opthash[-w]} + ${+opthash[--workdir]} )) && OPT_CDWD="-w" -(( ${+opthash[-x]} + ${+opthash[--xchg]} )) && OPT_XCHG="-x" -(( ${+opthash[-y]} + ${+opthash[--ov-xchg]} )) && OPT_OV_XCHG="-y" - -local -a match mbegin mend -local MATCH; integer MBEGIN MEND - -[[ -n "$OPT_CDWD" ]] && { - builtin cd $FAST_WORK_DIR - return 0 -} - -[[ -n "$OPT_PALETTE" ]] && { - local n - local -a __colors - for n in {000..255} - do - __colors+=("%F{$n}$n%f") - done - print -cP $__colors - return -} - -[[ -n "$OPT_SHOW" ]] && { - print -r -- "Currently active theme: ${fg_bold[yellow]}$FAST_THEME_NAME$reset_color" - ( source "$FAST_WORK_DIR"/current_theme.zsh 2>/dev/null && print "Main theme (loaded at startup of a session): ${fg_bold[yellow]}$FAST_THEME_NAME$reset_color" || print "No main theme is set"; ) - return 0 -} - -[[ -n "$OPT_COPY" ]] && { - [[ ! -f "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" ]] && { print "Theme \`$OPT_COPY' doesn't exist in FSH plugin dir ($FAST_BASE_DIR/themes)"; return 1; } - [[ ! -r "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" ]] && { print "Theme \`$OPT_COPY' isn't readable in FSH plugin dir ($FAST_BASE_DIR/themes)"; return 1; } - [[ -n "$1" ]] && { - [[ ! -e "$1" && ! -e ${1:h} ]] && { print "Destination path doesn't exist, aborting"; return 1; } - } - command cp -vf "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" "${${1:-.}%.ini}.ini" || return 1 - return 0 -} - -[[ -n "$OPT_RESET" ]] && { command rm -f "$FAST_WORK_DIR"/{current_theme.zsh,secondary_theme.zsh}; [[ -z "$OPT_QUIET" ]] && print "Reset done (no theme is now set, restart is required)"; return 0; } - -[[ -n "$OPT_OV_RESET" ]] && { command rm -f "$FAST_WORK_DIR"/theme_overlay.zsh; [[ -z "$OPT_QUIET" ]] && print "Overlay-reset done, it is inactive (restart is required)"; return 0; } - -[[ -n "$OPT_LIST" ]] && { - [[ -z "$OPT_QUIET" ]] && print -r -- "Available themes:" - print -rl -- "$FAST_BASE_DIR"/themes/*.ini(:t:r) - return 0 -} - -[[ -n "$OPT_HELP" ]] && { - print -r -- "Usage: fast-theme [-h/--help] [-v/--verbose] [-q/--quiet] [-t/--test] " - print -r -- " fast-theme [-r/--reset] [-l/--list] [-s/--show] [-p/--palette] [-w/--workdir]" - print -r -- " fast-theme --copy-shipped-theme {theme-name} [destination-path]" - print -r -- "" - print -r -- "Default action (after providing or ) is to switch" - print -r -- "current session and any future sessions to the new theme. Using ," - print -r -- "i.e.: a path to an ini file means using custom, own theme. The path can use an" - print -r -- "\"XDG:\" shorthand (e.g.: \"XDG:mytheme\") that will point to ~/.config/fsh/.ini" - print -r -- "(or \$XDG_CONFIG_HOME/fsh/.ini in general if the variable is set in the" - print -r -- "environment). If the INI file pointed in the path is \"*overlay*\", then it is" - print -r -- "not a full theme, but an additional theme-snippet that overwrites only selected" - print -r -- "styles of the main theme." - print -r -- "" - print -r -- "Other path-shorthands:" - print -r -- "LOCAL: = /usr/local/share/fsh/" - print -r -- "HOME: = $HOME/.fsh/" - print -r -- "OPT: = /opt/local/share/fsh/" - print -r -- "" - print -r -- "-r/--reset - unset any theme, use default highlighting (requires restart)" - print -r -- "-R/--ov-reset - unset overlay, use styles only from main-theme (requires restart)" - print -r -- "-l/--list - list names of available themes" - print -r -- "-t/--test - show test block of code after switching theme" - print -r -- "-s/--show - get and display the theme currently being set" - print -r -- "-p/--palette - just print all 256 colors and exit (useful when creating a theme)" - print -r -- "-w/--workdir - cd into \$FAST_WORK_DIR (if not set, then into the plugin directory)" - print -r -- "-v/--verbose - more messages during operation" - print -r -- "-q/--quiet - no default messages" - print -r -- "" - print -r -- "The option --copy-shipped-theme allows easy copying of one of the 6 shipped" - print -r -- "themes into given destination path. Normal use means changing directory to" - print -r -- "e.g.: ~/.config/fsh, and then issuing e.g.: \`fast-theme --copy-shipped-theme" - print -r -- "clean mytheme', to obtain a template for own new theme." - return 0 -} - -[[ -z "$1" ]] && { print -u2 "Provide a theme (its name or path to its file) to switch to, aborting (see -h/--help)"; return 1; } - -# FAST_HIGHLIGHT_STYLES key onto ini-file key -map=( - default "-" - unknown-token "-" - reserved-word "-" - subcommand "- reserved-word" - alias "- command builtin" - suffix-alias "- alias command builtin" - builtin "-" - function "- builtin command" - command "-" - precommand "- command" - commandseparator "-" - hashed-command "- command" - path "-" - path_pathseparator "pathseparator" - globbing "- back-or-dollar-double-quoted-argument" # fallback: variable in string "text $var text" - globbing-ext "- double-quoted-argument" # fallback: the string "abc..." - history-expansion "-" - single-hyphen-option "- single-quoted-argument" - double-hyphen-option "- double-quoted-argument" - back-quoted-argument "-" - single-quoted-argument "-" - double-quoted-argument "-" - dollar-quoted-argument "-" - back-or-dollar-double-quoted-argument "- back-dollar-quoted-argument" - back-dollar-quoted-argument "- back-or-dollar-double-quoted-argument" - assign "- reserved-word" - redirection "- reserved-word" - comment "-" - variable "-" - mathvar "- forvar variable" - mathnum "- fornum" - matherr "- incorrect-subtle" - assign-array-bracket "-" - for-loop-variable "forvar mathvar variable" - for-loop-number "fornum mathnum" - for-loop-operator "foroper reserved-word" - for-loop-separator "forsep commandseparator" - exec-descriptor "- reserved-word" - here-string-tri "-" - here-string-text "- subtle-bg" - here-string-var "- back-or-dollar-double-quoted-argument" - secondary "-" - recursive-base "- default" - case-input "- variable" - case-parentheses "- reserved-word" - case-condition "- correct-subtle" - correct-subtle "-" - incorrect-subtle "-" - subtle-separator "- commandseparator" - subtle-bg "- correct-subtle" - path-to-dir "- path" - paired-bracket "- subtle-bg correct-subtle" - bracket-level-1 "-" - bracket-level-2 "-" - bracket-level-3 "-" - global-alias "- alias suffix-alias" - single-sq-bracket "-" - double-sq-bracket "-" - double-paren "-" - optarg-string "- double-quoted-argument" - optarg-number "- mathnum" -) - -# In which order to generate entries -local -a order -order=( - default unknown-token reserved-word alias suffix-alias builtin function command precommand - commandseparator hashed-command path path_pathseparator globbing globbing-ext history-expansion - single-hyphen-option double-hyphen-option back-quoted-argument single-quoted-argument - double-quoted-argument dollar-quoted-argument back-or-dollar-double-quoted-argument - back-dollar-quoted-argument assign redirection comment variable mathvar - mathnum matherr assign-array-bracket for-loop-variable for-loop-number for-loop-operator - for-loop-separator exec-descriptor here-string-tri here-string-text here-string-var secondary - case-input case-parentheses case-condition correct-subtle incorrect-subtle subtle-separator subtle-bg - path-to-dir paired-bracket bracket-level-1 bracket-level-2 bracket-level-3 - global-alias subcommand single-sq-bracket double-sq-bracket double-paren - optarg-string optarg-number recursive-base -) - -[[ -n "$OPT_VERBOSE" ]] && print "Number of styles available for customization: ${#order}" - -# Named colors -local -a color -color=( red green blue yellow cyan magenta black white default ) - -# -# Execution starts here -# - -local -A out -local THEME_NAME THEME_PATH="$1" -if [[ "$1" = */* || "$1" = (XDG|LOCAL|HOME|OPT):* ]]; then - 1="${${1/(#s)XDG:/${${XDG_CONFIG_HOME:-$HOME/.config}%/}/fsh/}%.ini}.ini" - 1="${${1/(#s)LOCAL://usr/local/share/fsh/}%.ini}.ini" - 1="${${1/(#s)HOME:/$HOME/.fsh/}%.ini}.ini" - 1="${${1/(#s)OPT://opt/local/share/fsh/}%.ini}.ini" - 1=${~1} # allow user to quote ~ - - [[ ! -f "$1" ]] && { print -u2 "No such theme \`$1', aborting"; return 1; } - [[ ! -r "$1" ]] && { print -u2 "Theme \`$1' unreadable, aborting"; return 1; } - - THEME_NAME="${1:t:r}" - .fast-read-ini-file "$1" out "" -else - [[ ! -f "$FAST_BASE_DIR/themes/$1.ini" ]] && { print -u2 "No such theme \`$1', aborting"; return 1; } - [[ ! -r "$FAST_BASE_DIR/themes/$1.ini" ]] && { print -u2 "Theme \`$1' unreadable, aborting"; return 1; } - - THEME_NAME="$1" - .fast-read-ini-file "$FAST_BASE_DIR/themes/$1.ini" out "" -fi - -[[ -z "$OPT_SECONDARY" ]] && { [[ "$THEME_NAME" = *"overlay"* ]] && local outfile="theme_overlay.zsh" || local outfile="current_theme.zsh"; } || local outfile="secondary_theme.zsh" -[[ -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]] && command rm -f "$FAST_WORK_DIR"/"$outfile" - -# Set a zstyle and a parameter to carry theme name -if [[ -z "$OPT_SECONDARY" && -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]]; then - [[ "$THEME_NAME" != *"overlay"* ]] && { - print -r -- 'zstyle :plugin:fast-syntax-highlighting theme "'"$THEME_NAME"'"' >>! "$FAST_WORK_DIR"/"$outfile" - print -r -- 'typeset -g FAST_THEME_NAME="'"$THEME_NAME"'"' >>! "$FAST_WORK_DIR"/"$outfile" - zstyle :plugin:fast-syntax-highlighting theme "$THEME_NAME" - typeset -g FAST_THEME_NAME="$THEME_NAME" - } -elif [[ -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]]; then - local FAST_THEME_NAME="$THEME_NAME" -fi - -# Store from which file the theme or overlay is being loaded -[[ "$THEME_NAME" != *"overlay" && -z "$OPT_OV_XCHG" ]] && FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}-path]="$THEME_PATH" || FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}-ov-path]="$THEME_PATH" - -# Generate current_theme.zsh or secondary_theme.zsh, traversing ini-file associative array -local k kk -local inikey inival result result2 first_val isbg -integer ov_counter=0 first -for k in "${order[@]}"; do - first=1 - for kk in ${(s. .)map[$k]} default; do - [[ "$kk" = "-" ]] && kk="$k" - (( first )) && first_val="$kk" - inikey="${out[(i)<*>_${kk}]}" - [[ -n "$inikey" ]] && { - (( !first )) && [[ -z "$OPT_QUIET" ]] && { - [[ $kk = default ]] && { - [[ "$THEME_NAME" != *"overlay"* ]] && print "Missing style: $first_val" - } || print "For style $first_val, went for fallback style $kk" - } - break - } - first=0 - [[ "$THEME_NAME" = *"overlay"* ]] && break - done - - # ORIG: Clear orig-style when loading a new theme, not overlay - [[ -z "$OPT_OV_XCHG" ]] && unset "FAST_HIGHLIGHT_STYLES[orig-style-$k]" - # ORIG: Restore orig-style when loading a new overlay - [[ -n "$OPT_OV_XCHG" && -n "${FAST_HIGHLIGHT_STYLES[orig-style-$k]}" ]] && { FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="${FAST_HIGHLIGHT_STYLES[orig-style-$k]}"; unset "FAST_HIGHLIGHT_STYLES[orig-style-$k]"; } - # Set only the keys provided in theme - [[ -z "$inikey" ]] && { [[ -z "$OPT_QUIET" && "$THEME_NAME" != *"overlay"* ]] && print "Missing style $first_val"; continue; } - - inival="${out[$inikey]}" - if [[ "$k" = "secondary" && -z "$OPT_SECONDARY" && -n "$inival" ]]; then - fast-theme -q --secondary "$inival" - fi - - result="" - if [[ $k = secondary ]]; then - result="$inival" - else - for kk in ${(s:,:)inival} - do - if [[ $kk = (none|(no-|)(bold|blink|conceal|reverse|standout|underline)) ]]; then - result+="${result:+,}$kk" - else - isbg=0 - if [[ $kk = bg:* ]]; then - isbg=1 - kk=${kk#bg:} - fi - if [[ $kk = (${(~j:|:)color}) || $kk = [0-9]## || $kk = \#[0-9a-fA-F](#c6,6) ]]; then - result+="${result:+,}" - (( isbg )) && result+="bg=" || result+="fg=" - result+="$kk" - else - print "cannot parse style $k: unknown color or style element $kk" - fi - fi - done - fi - - if [[ "$THEME_NAME" = *"overlay"* || -n "$OPT_OV_XCHG" ]]; then - (( ++ ov_counter )) - [[ -z "$OPT_XCHG$OPT_OV_XCHG" ]] && print -r -- ': ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}'"$k"']::='"$result"'}' >>! "$FAST_WORK_DIR"/"$outfile" - # ORIG: Save original value of the overwritten style - FAST_HIGHLIGHT_STYLES[orig-style-$k]=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]} - # Overwrite theme's style - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="$result" - else - [[ -z "$OPT_XCHG$OPT_OV_XCHG" ]] && print -r -- ': ${FAST_HIGHLIGHT_STYLES['"${FAST_THEME_NAME}$k"']:='"$result"'}' >>! "$FAST_WORK_DIR"/"$outfile" - FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="$result" - fi -done - -# This can overwrite some of *_STYLES fields -# Re-apply overlay on top of the theme we switched to -[[ "$THEME_NAME" != *"overlay"* ]] && [[ -r "$FAST_WORK_DIR"/theme_overlay.zsh ]] && source "$FAST_WORK_DIR"/theme_overlay.zsh - -zcompile $FAST_WORK_DIR/$outfile 2>/dev/null - -[[ -z "$OPT_QUIET" ]] && { - if [[ "$THEME_NAME" != *"overlay"* ]]; then - print "Switched to theme \`$THEME_NAME' (current session, and future sessions)" || \ - else - print "Processed the overlay ($ov_counter keys found), it is now active (for current session, and future sessions)" - fi -} - -[[ -n "$OPT_TEST" ]] && { - print -zr ' -# Subshell, assignments, math-mode -echo $(cat /etc/hosts |& grep -i "hello337") -local param1="text ${+variable[test]} text ${var} text"; typeset param2='"'"'other $variable'"'"' -math=$(( 10 + HISTSIZ + HISTSIZE + $SAVEHIST )) size=$(( 0 )) - -# Programming-like usage, bracket matching - through distinct colors; note the backslash quoting -for (( ii = 1; ii <= size; ++ ii )); do - if [[ "${cmds[ii]} string" = "| string" ]] - then - sidx=${buffer[(in:ii:)\$\(?#[^\\\\]\)]} # find opening cmd-subst - (( sidx <= len + 100 )) && { - eidx=${buffer[(b:sidx:ii)[^\\\\]\)]} # find closing cmd-subst - } - fi -done - -# Regular command-line usage -repeat 0 { - zsh -i -c "cat /etc/shells* | grep -x --line-buffered -i '"'/bin/zsh'"'" - builtin exit $return_value - fast-theme -tq default - fsh-alias -tq default-X # alias '"'"'fsh-alias=fast-theme'"'"' works just like the previous line - command -v git | grep ".+git" && echo $'"'"'Git is installed'"'"' - git checkout -m --ours /etc/shells && git status-X - gem install asciidoctor - cat <<<$PATH | tr : \\n > /dev/null 2>/usr/local - man -a fopen fopen-X - CFLAGS="-g -Wall -O0" ./configure -} -' -} - -return 0 -# vim:ft=zsh:et:sw=4:sts=4 diff --git a/.config/zsh/.zsh/fsh/images/203654.gif b/.config/zsh/.zsh/fsh/images/203654.gif deleted file mode 100644 index c4bad3684f03ea609e5eb3934810822bae2355ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168066 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 J3;-bZKLCYS{c`{S diff --git a/.config/zsh/.zsh/fsh/images/array-assign.png b/.config/zsh/.zsh/fsh/images/array-assign.png deleted file mode 100644 index 9d35e90102a014df0c5ad488b6b59f85d3170b98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2022 zcmZWq3p~`>7yo%QG~UdP$13w5YAMWkGu{oxm@&yxNX*2T24fhH8AVZ&*ZQ+rc~|SL zP4Y-WMni@uqC68}XEd#LBac*eRR8Mp`QOjy-gE9b=X=gQ=X~zHscr;}3|I{e0DuhE z*}+{%>xC08DJoo}G9hsQAQDGKqusD*G|Y`b52A*W0YE!DfJoej)z#*bNJJucV80HS z!E{ea$#5rjaM%NE4y=pV4J*m>^_@|XpW!4Z#kJmNOa6`!ob7j6ejhtr(G>R)YI-A| zad;2v_S-}erb}>yp_rJaL{@Q;dr^^8AP*Qv_3m)oW49^|JKEe<26Wko1g1koc1Z?4 z7r8n7pI36Q7{$DSF44nEiu2NeIAB~9D}M`=QY=e4nlRR@nyO=WOMo{58+ml=t@!r1%#Fg^H7w%?*%s)0e-Hdl z@dapw*gpSv`Ft+cC#kSnHef5n*UH;~ovA@p03aTZb+GqfP5hN_A2Q_x={eH+yi{UW z9JgEYB`!aGCrb5@_8svZ;C+rWNbz~LJX|`U3JlkExL{Frr4eih{lVVj7ukLAQ&RJ8 zWAu^yf0le&!(vQ)dLHauwj8@x8vFFr@)`QH^SML^c(${aV(M2ij!vfkHoK_2RQd+5 z+U^Ny89QbYQJ(SfQ1XR)O0FrKK{L-zYR%G%h$1Zm)mEr{zNC5*T5+iQkcypB%7^C{ z`Ui$I+*OV-xV!?EwkfW;y|ExXSgRhzmJPPq|L9E(=}103x>&Gx3Q z!DEb%Mshij6jz33MG9(961J4#72ztRDcALK z>P|$MNqn$&%ngja$HB0ldzM_JOyf{v#k%Y0TsZDpfxWY2s#Gq}#UCYD^D@sgZ#?Wl zY!&+vY(LtNZHE>Wj_f#TRP5*L&zv-i1_66(>A4s5tYrKigG&}c3On)FIegHAtUc0+ z%fGwmk)Og(-$LX173C+cFCB~RD_uT8sZR)1zETez=b8MZqrHc2AsA!6cyOA+m;MD4dKoSX-K@e4b|ZM`#=?k$|$+ z5L6Zp7Bkb@fT>hnQ?Ck>&fN_&sF!T;qN8A!DD25rDBKfg*1#`XvV$7A!UF1k0MYOT z;_ka=t{=wOcDK(Sa z<*GhsCyg6>Ra&^{uu3yY=#BTDYV{UINT=dIMThJ0=bF8fWj++0*KFzEP9o*k+7ImWK=g&Cq+%@6vtb?@m0WvJE@C zA`5v`GSod2LR4AV02&XTxOG{%`z@uCJze9Xqdd7AyDGX$`jF1NcskOhAt&SJ&L#LS s4{bLSX=_E=9E#Yt`!9SAer;c{^*N8RoHxo#+x`}?js%C=1H`lc0@kZ=fdBvi diff --git a/.config/zsh/.zsh/fsh/images/assign.png b/.config/zsh/.zsh/fsh/images/assign.png deleted file mode 100644 index 41fed43099c2fad0fb24244f33ff69b75ebbd5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15333 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 diff --git a/.config/zsh/.zsh/fsh/images/cmdsubst.png b/.config/zsh/.zsh/fsh/images/cmdsubst.png deleted file mode 100644 index 66e564163e2bc2ada226b2d16902012d44f3dc38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8086 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 diff --git a/.config/zsh/.zsh/fsh/images/cplx_cond.png b/.config/zsh/.zsh/fsh/images/cplx_cond.png deleted file mode 100644 index 2296cbb3eeb83f70779e9c4d99ec3373a95fd74f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3533 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 Q&p1*+M&(15lwrXC0gn8Z{{R30 diff --git a/.config/zsh/.zsh/fsh/images/execfd.png b/.config/zsh/.zsh/fsh/images/execfd.png deleted file mode 100644 index f9a1d658c888f2df241c158bb61420fa959e9271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 zcmV-23C;G2P)4Tx04R}TU|=dqEGWofVPIg$%_}Jia(7aQh>TKTzr(=Iz{4QKV8tMwm|R@o z7!csYfD?SX#=r=oFYAKLO7r}A)26k2{uVZ`nQ~SoI=Je z3uNa2**eJuMI}J?3?N&#yrclcJ^^Hl6agIwWZwa?(;@5+Aa)X%&BOv$6B6VMWJ>_q z0!a|I28f*wVOxOM$r*_$K(+_SE{GezfYZZ8!Q8-7*O7p`Nd~z&r7$}{p~aJ$7a9z5 z2N26JcrdsyC@`2a7%*5e=rTB#q*j!G6guY@R2F5XXOt*70z)=c!8t#-ptK~lNJqgl zFIi7V!N|bS0Hh8SXAq-52Z2pz6g!U)%U{UAV5!W&z}$lnOPa>Ouze2$gTyI>n94i` z27YS>hHd8x5{nYy4rlzvLWp0SW^4pu^Efduu-^Os|Faqc1N$TfhQAa4|Np({|Np;> zf%XIA>_83xBzI}xjB64P00006VoOIv00000008+zyMF)x010qNS#tmY3ljhU3ljkV znw%H_000McNliru;syZ{FB!>kWnTaQ2RBJXK~#9!?ONSS8(9?3zu-%JGGd@AVwA*) zNP?S$DmHEsB!iL|1hZ<&N?IEir?umjDD{i3lAuv+S0y#lVJ#}ADH{mNQfN@RlK9Yl zXu&=xv=4bO4?g6Hhf&~i}ELgB$ z!GZ+~7A&p`^5)&jy@RIE*Si{8o+lH12{nff8vVGa?1GQrOKYV<{xz}pdVAyMAou+@ z!*K+Tql3B_wPhWmHMeYSB{pinPg_S0Toc@J#pdyv`6*GSIwzhy@qSoOJ@Y?lwlCCT zo%3x{z{kzkz+M1#vCCZ-+*N(vsb8BaExTNAAZDxGK7`zIt(QHJMSz#XssTaVyk_cW z()*{!msbS@ZPiCfOW(Jo@FZ3btA-1jNKIasIyW~xW@^y{XmX;pSKQui97tL3 z$Hm*S*T*K%i(}>_E;`S%Dk$V+oryx!yquwN|LsL5+?m$-j2>LDf#HxtZ(*Xz%F) z_is zsXfyA@S49s4TOWDN7^Y!LoFxIpNhYM4FpW?dqrsq8W?8QXVHYHYaCxDl0T2NMM!&4 zVborji=%g8E*@!`Q78V>%y}a#DH~q=8(0c#Ed=0C^w&y4$>{4qV1T?n3q|+>7PK{i z`zlNF!2mPUlOWKxH=NwVwcGlFPKyuRIoVX0@m>S`9e6xgaS>8SH?&mFw=2`6IfxU6 zOPwXPg5rO^HWL!j?DZ6xcw{kIF@h ze_~{&8#m&l%;A(M{c!$t06u?j{|HEtAI5LVSjt|_5z!<%{96A+mWJA}W(F-CcvcR^ z=(AEyx&xPUCm2piZK?m84p#JG-Cmk#WOaH0PYw%F&8V#K7`4Jf#_EDSs4;|Z1c{(; zE>`T+J^zR;1!ALj6uUC^76%D^AMQ$1_m3IyM%Gg1At-7ah~8QF%gfc*Fg$;JiZ*1h z8%Eac5mh0FOGeh{h%3$pp(y)yT-XPzGV{IYbFizozvSWv?hJ9@etuPOfimc%RDGa0 zCOb{)lt*fLx>ggBBCcc6jwn&(c+6BxQq4hHJ?q|0uM?#!!C=hZn2u}GeFtIA8(HSc z7Y7%n1kTPgRF8Ds2eEchmoGQLi?=30hI=b@ZSnVCunbCD(TC5Vma34-^x`i>h>9fj z|I-&bfEpB@nqKGWJ}FtS55+Qnp?Q_a6UXUmVlZPbrQ`2g)n|OqW6m2?2SdoXl&K!Y z&Scvog#g4(R%Mp+n$lD$zA`u`8$spQh z*A>y$oH~Qrh(2_HeE-o*WtL&p69Ff)_7g{Cv2Vg0a7>!id?GrfIA%m@YgOimufvL3Pz<#gnf>b5(5l;X z#^t+(JmY&YnE~s*JE`8P;`9i5w7ctDop|ZiT(q+#4)duwcQ01q&7|SlnLx Y4=@9XQo9D!@Bjb+07*qoM6N<$f`)!ehX4Qo diff --git a/.config/zsh/.zsh/fsh/images/execfd_cmp.png b/.config/zsh/.zsh/fsh/images/execfd_cmp.png deleted file mode 100644 index 628f46ad40b5f146b0c95b1359e3ca28f7976c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3846 zcmY+HXD}Q9)5q_KULsDSi{4utL5Ox7juTx3QKE;7dP4NxYjl_BK@hz}@8pQ?9MOZ| zh^SHG9?!fV-g$mAyZ@Q}upjonGdmljtD{au&O{CX0H`!IRP}FlmKXwWAC>bVE>S1 zZobMuv)UI7@^2gLCM^`(3mt_WU;9p%Hu~Q@c>E>X!Du=1Ns$!wsCYoR#Mv)VC^&q?k+o$HfyY(z!*gPlhRfT zfF;nRX(EnBQCph@&yO(12q-m?42woHcLz`RsrCHm*2km-w`mf$%9e=BDHRN)<Y~OZ<|M$tX5{A58aTo8It&U8%!+ei;JDW1}8f#pe75?nVvu z9CKHJt-Zks?V5+<{Imi3V*s+-+4p+THylj7BSGu)8MUE@4=|KzPInc)fc_gmKu#XRZIQ%F z6Rt+GP7I_K5m@>l?SAVhNK;kW@a@9B`N|uRI-6x~7rQU%CXmZ~(#@3x&8x@m4q0Di z(ft0HMmlC+iJC%O&_k;^+O=g_CUc~O)%Ay)WpQNsA5VjpWNc@ zDqGomg*!0{KRJAd!ybBo>-YW+9S|>KsUmZepgp5F+=2gg{fg!5ATk2N{{;fWefWhl z^*Rwd&#p|(dy{#C9SN};it#P#>>M>Hqv8$I5y6C77_tv)!yf_rkkJ^L=&;uV{%l~q zl&Lb?_EW3XpI<4Oq=tS=&zo9){&?W>QK4?~MbFCQf}o6Xhgj$28yA%0+(!eW&H8$G zr{NLQw6O#*Z`si~kq~sE(P{Ne2KZh6e%ze^Hj4~^{X%9EAV2M^6+g}4WU-c&rZZ@V z3i_(nQAXnl#o#QPc>icb$xb;3F6(^ z%}be5=a(B)9W_h~6gpMT=AjV6jW*aMZ4;naCrhHt`vW_nLX`Ov0s2ZLAG=nbJdrvN z2T*^+Rw7-+RrLNDgGc06s$2Y~ri3=O&cFibrR0&Cou@`3uE2-?W=okTp+D7ksqd6! z?&Y7+#`EoPuy%Uk2VqO2jjJ$Dk@N}^rK2sm`;UZKU9W9;ch~}scKbCS{&G)o{-oP4 zl;>An>mhg1T!?q3=VeEQN+0Y>qy8`rQE21oS&4xYfQ@#5!2ODJub`R-gI-Eq5j&&W5Jz%K-oFkiTDcy_m*@;)#*lvP!9MHZ3DY`% zWChvg%6+*`^?l}uIzG9=YiR98wTg1|dGxqlfeb~`Hg(Hq-4FZ`sOSixq1L8N1+cO3y4i_#Ci4Uy}1|g!e6J7l?D1|9B4Ql@} zB6*8!4_u+TnWkBIJ!QE4p=$UgIy15d{%+|oa%ruq7Id`LsUoY&k0a-?Nv-1o+pAZ` zy15tb}(H-&lo^NzX0M6LmoJkjO^*9-YD$aq%+j>xd5r@)yTF zOV?59iR`Bvo2E*QAf_7C8RqD)pbdr0{y~-P5GIXy)cRNOM^rdiT)GCQJwb@Ub-rjBnDyX3(zRE{g!}iXj zocvp+S)N%B3*wZztcL+p~Hb&0-C-p^A_oTH&QxQjSkv-;=^G6gx`j|i8G<9_PEnVo#lmd#DmA*kt^fP zTkZpiK|MP8L~$R{lV4l&+K$fWWrAv(mjrG8P`ofVVv>v5UHLaJ9sK;jeBHN%|HC1$ zwUigq6#sL{4Xm%ta*25KB>@y5!K|I73}B(Or8#+kDs{i)OiLr9$?Cr&m7J(OdY`># zznMl(7VJu^OK6_umKYcok|H?7G@730Mx(OG%3=;%A7DltkS5c}~nB^S~e-R!k7T&EZi z^oCJyauquMj&;xFNJEX(6j}AW^G>T7*^{(#h;p~f;5k@*O=pZZ)pLY_C)>_P1udG) zEG#0(>91QpFzWBDZ||N&U$#i+%E_HMI5&Sm)v%EJH!{{*wXQyVo%YhLe7;ru#kgXp zVU1pj=~jI6vI_YD+Ig zMy{TbCtqg7O<6y!#D2JgQMsi|<1o2OGb|2^KAGCb+S1JUk0l#n`zKdMLI5+v(J%k)O%fLI?6_Ge_LLAImqNi?Mt9fMW*(}39XCpql}g5| zBzsIHB$glQC3HePaD=kc3Nxw}>p)DhxI*DVedbb3B1-^|-?49T@9%&**ttFWS45ZO zW*8~I%0o(wwQPS-txqP6iYrUN)2p#R-$P3vvkjpHIfkAnqtgskzN)&4vqY8ySiM+s zg^*K+Glp(P<->lLgwf?YBxUc4FXyXLk+3Q8PFd8Wf6o%U)0t|t8Qd^-6_y9k%zNv~Zx$PjKD*Xh?J)#<1(zutX{3FExf3Hhpi+^XZjj<}jV?8q_QpBu$ z;mBU|@+G0r#E&!F>yxK8=mM$biMXhCm{dk2kIanXvT^!0#!Wb;UuENc#9ogUHG^sAllc94i8@47 zot9?JwXv&ODQR2De7c7f(WOvz)Pe@qgnTctB{Hf=@$Q)TQj)0D^>|4dA<*97KQ&J- z_d0v=q}TBw|IF0i1GWjJ@p*VY_4v>0gJxbyKRXU+X?KeB)v|!!0ekVO1BUv&r`gRz zKUw^aX0A~`!GngDlK!PB9R5#cV8dP_&j%COd!t;npk1-BAo4|lrhwUZ-;6c)W<{%e zZb}#nEcw2%Q<2U4ZoiS-liF&ON7DAUEgjb=n!r2#4`%nem#$@kV3RoQ7Z}~rSDTqd zeXg8sjn1r}cA*NG&@H^YK{?c_`Anpe{J?nW`U{ewuX=$#ZOX7>=X!nRMDeD6QuJyk z*7Wxckt#Nwk9e)UlyWK=>Z9-#5g1iweQH^{IUtH*AFq~AoL2O0i~Fb*0JOL0yhL1N zAXrSlezN>6!UY?KdOT#rV7+40CNhk4OPH{8ZOUWDweQ>hZ&vvtiKxAMioM7+`H5&B z+`EOP!@gz&JjIiF|I=~Ot=BXO)+W+e5z*i>A4z#gEccj}RNN5oOQn8-{N85S#rj$S ze3^KJFG0kp!n){aNcvfj%?w}+6R6}lxa`~062*M58$e0OdM4_8L(Ves*8!6-FvcTU zxr0BOMwrD7+PkzuQPkMiJm?yiIy0xCBhSUSl}lMM*ID^Wj#zX-`!|@BM5T|zt}icH zm$N!YN*EQsNk4E?OjB=v+Z-SOcgVIihxxRZ^!&WoHypezVF#$BybX2QVtU~_- D80J;I diff --git a/.config/zsh/.zsh/fsh/images/for-loop-cmp.png b/.config/zsh/.zsh/fsh/images/for-loop-cmp.png deleted file mode 100644 index 64472e0e19c45abf8286dda16b47342c3ae7208f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9140 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 Di?Do` diff --git a/.config/zsh/.zsh/fsh/images/function.png b/.config/zsh/.zsh/fsh/images/function.png deleted file mode 100644 index 7450061868a08362763e36cbad0ef87284e345de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7426 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 diff --git a/.config/zsh/.zsh/fsh/images/heredoc.png b/.config/zsh/.zsh/fsh/images/heredoc.png deleted file mode 100644 index d88d55b3a80bd622ccd3c2a148f9b53a657dbe7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5060 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 diff --git a/.config/zsh/.zsh/fsh/images/highlight-less.png b/.config/zsh/.zsh/fsh/images/highlight-less.png deleted file mode 100644 index 54bad7292d8713cdc6956edaec24ab28178cef14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4419 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 z�yeI1I(?wo}(c`Ul#E(gXzhRHeSF@G$yeJuh2P+bbwrFH6pSmM-qsc+(+IoO5k( zw&nPx!aovVN_s2B&x!xGL6U8W^omXoNz8%|kNZk*(_{s3{ zY&`jOo2tH8ysJNjTCiC{u0+%PFcna!w~XZ;&nB~J$0-YCbR{arIT?hvg4Z7hh_+O% zx^`Ly)W=w6u_`~_3{}OZeRE!9ClTvc9*CJllbMpJYp~}xI#{OW!dG^Hl2Swr5#g_$ zV9+pfzMwF$l~4-|2opXAsgCDq;Zzo{HKx`Dxpwx%(UVFCoAu27=@3g=qzd}Dkvj4e z(zB^*KZwDNt%#J(-Sz4C{Yzf|w-$YezH}ItrHj$tW1!Y&maF;}?D% z-Ohar*be+ zd}=YTSc9`)^9-Dn%e7X+r92<0_fHp%LN*`?Bj$!I|5!{KlEr3Ff(MNdddXm=vO|?XB&Z9;OSe(DfK3uLZ@qiNd`%0yO%$hK*Gm4eaV+PD}y4**SehwGPG=} zpu0gZf4i#u{)x!qEi?WF;RpGpwUI0r_enMm?sK9~N!wlp9!jUFApGjzO0hETkxPs{ zW-NQqVhW6MG9T9q>BdG}6E>dieS;Cnr!&fx`JZDhzm1r`V#3%QwIHhQ;{v3AuE8ZS?XZ0u<=;89vT&LC^M3`9%;tzV2`r(j1(~ z8vW;lRc7+86_9A;QR<~TSXF-Un%N&3kngAb;_~_D5GnHldcj-SQ%{f=AqF;jEu0e& z(;R?(d_$=K&ssdi4vVceS!1OH+*VaxhIcgb46G)^LPwTe~Q$2Vp=#7x%`M zh;cMUedJz-Ixr#ABXe_rVGk+VH`E8KJ2|Kbtsei{*?CA?JnTF{rrbQeL7gS(@tR zY!xGNzW-PTx^5ko6J(s0;S`(bFqORlRIn`)!)`isn4m)|b?7^hWE~M0yJev@Bu^M{ zAuWqBgkdbn%wky7xxP&U3K#a=3C%_cg*I9g+*|W zJ)$-@s^^P=_C*Q`9o(te0h7Vzl$ZrxpXbcPxR;cC>H6hTJ6y{puSq{c!Pngan^k+2 zc7&hqNqc|I(*3En2D{}+!DSbAe)bdlI~Mg@myrPPdK&#dZ|$?wG$^o#OH08RA977Q zFo=gH#|tgJr9a~zOuH39`MtcP@h;!mGH^fXKPEQ`Rf+W^$hE1J zcm15bLZ4MQegsq;lwIbiIn`7@TR5t;z(eFJH#CT=d6`-ielyHngZg#kG`xehePiyV z=R#!u?A-4H?)ppRUj4Ce;xT}_OcJa4gb9mmKG<)C8m+xSd^>#E%`lp z(x_p*oLM=hD3^&Al9YJi6ci?dRr_LB05Ur}VcTIAc^UyAH(lO$+{*Pz*~oMnu3=!< zlhd>);}@;lVdN%qH5i`LIb4b3(st@zk&h4d?4Lcuc-F)+;6&0o)=^0pKd>pY5ao?h zMnM-TN3o+qA9dzQmT^&*d&BYr{VQE4BRwS@!e3G@m%pj`{paZ>Q4t@ZH(eXuHbM{SNvQJJ<4V^vB5WD{Rj|{*PweH!?81GU_q1fE*3kv8Fj;NZ@iW zq@SE*YG15jcW#obly_lJ_L?RdxE1gDl1K=K`g0pC!RbEDByY7Zg z_G3!rv)Jpd$Ut6%g7kp;=~{Sa(%~o%MZZQ&@PquQR45=mFQGw7J^Ejz_{Tl2L)+4k S&+EUhv6bc3a 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 diff --git a/.config/zsh/.zsh/fsh/images/in_string.png b/.config/zsh/.zsh/fsh/images/in_string.png deleted file mode 100644 index 86932c8d9d01998f7f551908916f253fdf58e2ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6405 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 diff --git a/.config/zsh/.zsh/fsh/images/math.gif b/.config/zsh/.zsh/fsh/images/math.gif deleted file mode 100644 index b445294cd8c129ecdedff6f80bd7d1c8337b3bbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139884 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 V!m%OQ5ibA$002ovPDHLkV1hGqEKL9a diff --git a/.config/zsh/.zsh/fsh/images/theme.png b/.config/zsh/.zsh/fsh/images/theme.png deleted file mode 100644 index 285e4e4ff8da9b8c027910febf3482f91ad15a4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36511 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

tEU^p`8C1>QGM=YmzPWM*lJG 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 diff --git a/.config/zsh/.zsh/fsh/images/typeset.png b/.config/zsh/.zsh/fsh/images/typeset.png deleted file mode 100644 index 06881fc069a9a4b928a22edd0e5f539a60c484aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4790 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 J;*M?De*kBC_v-)v diff --git a/.config/zsh/.zsh/fsh/images/zcalc.png b/.config/zsh/.zsh/fsh/images/zcalc.png deleted file mode 100644 index d2c286d36072204200907a515395cdfea1c86de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4865 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 LG6t7v*oFKLeikrS diff --git a/.config/zsh/.zsh/fsh/share/free_theme.zsh b/.config/zsh/.zsh/fsh/share/free_theme.zsh deleted file mode 100644 index 0f32d66..0000000 --- a/.config/zsh/.zsh/fsh/share/free_theme.zsh +++ /dev/null @@ -1,61 +0,0 @@ -: ${FAST_HIGHLIGHT_STYLES[freedefault]:=none} -: ${FAST_HIGHLIGHT_STYLES[freeunknown-token]:=fg=red,bold} -: ${FAST_HIGHLIGHT_STYLES[freereserved-word]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freealias]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freesuffix-alias]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freebuiltin]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freefunction]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freecommand]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freeprecommand]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freecommandseparator]:=none} -: ${FAST_HIGHLIGHT_STYLES[freehashed-command]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freepath]:=fg=166} -: ${FAST_HIGHLIGHT_STYLES[freepath_pathseparator]:=} -: ${FAST_HIGHLIGHT_STYLES[freeglobbing]:=fg=112} -: ${FAST_HIGHLIGHT_STYLES[freeglobbing-ext]:=fg=118} -: ${FAST_HIGHLIGHT_STYLES[freehistory-expansion]:=fg=blue,bold} -: ${FAST_HIGHLIGHT_STYLES[freesingle-hyphen-option]:=fg=110} -: ${FAST_HIGHLIGHT_STYLES[freedouble-hyphen-option]:=fg=110} -: ${FAST_HIGHLIGHT_STYLES[freeback-quoted-argument]:=none} -: ${FAST_HIGHLIGHT_STYLES[freesingle-quoted-argument]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freedouble-quoted-argument]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freedollar-quoted-argument]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freeback-or-dollar-double-quoted-argument]:=fg=110} -: ${FAST_HIGHLIGHT_STYLES[freeback-dollar-quoted-argument]:=fg=110} -: ${FAST_HIGHLIGHT_STYLES[freeassign]:=none} -: ${FAST_HIGHLIGHT_STYLES[freeredirection]:=none} -: ${FAST_HIGHLIGHT_STYLES[freecomment]:=fg=black,bold} -: ${FAST_HIGHLIGHT_STYLES[freevariable]:=none} -: ${FAST_HIGHLIGHT_STYLES[freemathvar]:=fg=blue,bold} -: ${FAST_HIGHLIGHT_STYLES[freemathnum]:=fg=166} -: ${FAST_HIGHLIGHT_STYLES[freematherr]:=fg=red} -: ${FAST_HIGHLIGHT_STYLES[freeassign-array-bracket]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freefor-loop-variable]:=none} -: ${FAST_HIGHLIGHT_STYLES[freefor-loop-number]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freefor-loop-operator]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freefor-loop-separator]:=fg=109} -: ${FAST_HIGHLIGHT_STYLES[freeexec-descriptor]:=fg=yellow,bold} -: ${FAST_HIGHLIGHT_STYLES[freehere-string-tri]:=fg=yellow} -: ${FAST_HIGHLIGHT_STYLES[freehere-string-text]:=bg=19} -: ${FAST_HIGHLIGHT_STYLES[freehere-string-var]:=fg=110,bg=19} -: ${FAST_HIGHLIGHT_STYLES[freesecondary]:=zdharma} -: ${FAST_HIGHLIGHT_STYLES[freecase-input]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freecase-parentheses]:=fg=116} -: ${FAST_HIGHLIGHT_STYLES[freecase-condition]:=bg=19} -: ${FAST_HIGHLIGHT_STYLES[freecorrect-subtle]:=bg=55} -: ${FAST_HIGHLIGHT_STYLES[freeincorrect-subtle]:=bg=52} -: ${FAST_HIGHLIGHT_STYLES[freesubtle-separator]:=none} -: ${FAST_HIGHLIGHT_STYLES[freesubtle-bg]:=bg=18} -: ${FAST_HIGHLIGHT_STYLES[freepath-to-dir]:=fg=166,underline} -: ${FAST_HIGHLIGHT_STYLES[freepaired-bracket]:=bg=blue} -: ${FAST_HIGHLIGHT_STYLES[freebracket-level-1]:=fg=130} -: ${FAST_HIGHLIGHT_STYLES[freebracket-level-2]:=fg=70} -: ${FAST_HIGHLIGHT_STYLES[freebracket-level-3]:=fg=69} -: ${FAST_HIGHLIGHT_STYLES[freeglobal-alias]:=bg=19} -: ${FAST_HIGHLIGHT_STYLES[freesubcommand]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freesingle-sq-bracket]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freedouble-sq-bracket]:=fg=180} -: ${FAST_HIGHLIGHT_STYLES[freedouble-paren]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freeoptarg-string]:=fg=150} -: ${FAST_HIGHLIGHT_STYLES[freeoptarg-number]:=fg=166} -: ${FAST_HIGHLIGHT_STYLES[freerecursive-base]:=fg=183} diff --git a/.config/zsh/.zsh/fsh/test/parse.zsh b/.config/zsh/.zsh/fsh/test/parse.zsh deleted file mode 100755 index 53dec62..0000000 --- a/.config/zsh/.zsh/fsh/test/parse.zsh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/sh - -# -# This file runs the highlighter on a specified file -# i.e. parses the file with the highlighter. Outputs -# running time (stderr) and resulting region_highlight -# (file parse.out, or $2 if given). -# -# Can be also run in line-wise mode on own input (-o -# option in $1), no region_highlight file then. -# - -[[ -z "$ZSH_VERSION" ]] && exec /usr/bin/env /usr/local/bin/zsh-5.5.1 -f -c "source \"$0\" \"$1\" \"$2\" \"$3\"" - -ZERO="${(%):-%N}" - -if [[ -e "${ZERO}/../fast-highlight" ]]; then - source "${ZERO}/../fast-highlight" - source "${ZERO}/../fast-string-highlight" - fpath+=( "${ZERO}/.." ) -elif [[ -e "../fast-highlight" ]]; then - source "../fast-highlight" - source "../fast-string-highlight" - fpath+=( "$PWD/.." ) -elif [[ -e "${ZERO}/fast-highlight" ]]; then - source "${ZERO}/fast-highlight" - source "${ZERO}/fast-string-highlight" - fpath+=( "${ZERO}" ) -elif [[ -e "./fast-highlight" ]]; then - source "./fast-highlight" - source "./fast-string-highlight" - fpath+=( "./" ) -else - print -u2 "Could not find fast-highlight, aborting" - exit 1 -fi - -zmodload zsh/zprof -autoload is-at-least chroma/-git.ch - -setopt interactive_comments extendedglob - -# Own input? -if [[ "$1" = "-o" || "$1" = "-oo" || "$1" = "-ooo" || "$1" = "-git" || "$1" = "-hue" || "$1" = "-hol" ]]; then - typeset -a input - input=() - if [[ "$1" = "-o" ]]; then - input+=( "./parse.zsh ../fast-highlight parse2.out" ) - input+=( "rm -f parse*.out" ) - input+=( "./mh-parse.zsh ../fast-highlight > out" ) - input+=( "if [[ -o multibyte ]]; then echo multibyte is set; fi" ) - input+=( "[[ \"a\" = *[[:alpha:]_-][[:alpha:]]# ]] && echo yes" ) - input+=( 'git tag -a v0.98 -m "Syntax highlighting of the history entries"' ) - input+=( 'func() { echo "a" >! phist2.db; echo "b" >>! phist2.db; fc -Rap "phist2.db"; list=( ${history[@]} ); echo "${history[1]}"; }' ) - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "${(F)input}"; return 0; } - elif [[ "$1" = "-oo" ]]; then - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "${(F)input}"; return 0; } - elif [[ "$1" = "-ooo" ]]; then - local in=' -# This is an example code that is diverse and allows to test a theme -text="An example quite long string $with variable in it" -local param1="text $variable" param2='"'"'other $variable'"'"' -math=$(( 10 + HISTSIZ + HISTSIZE + $SAVEHIST )) size=$(( 0 )) - -for (( ii = 1; ii <= size; ++ ii )); do - if [[ "${cmds[ii]} string" = "| string" ]] - then - sidx=${buffer[(in:ii:)\$\(?#[^\\\\]\)]} # find opening $( - (( sidx <= len )) && { - eidx=${buffer[(b:sidx:ii)[^\\\\]\)]} # find closing ) - } - fi -done' - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } - input+=( "$in" ) - input+=( "$in" ) - elif [[ "$1" = "-git" ]]; then - local in="git lp -git push origin master - git commit -git add safari.ini zdharma.ini -git st . -git diff --cached -git commit --allow-empty -git checkout themes/zdharma.ini -git commit --amend -git commit -m \"Example commit message\" -git tag -a 'v1.18' -m 'Here-string is highlighted, descriptor-variables passed to exec are correctly highlighted' -git tag -l -n9 -git checkout cb66b11 -" - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } - input+=( "$in" ) - input+=( "$in" ) - elif [[ "$1" = "-hue" ]]; then - local in="var=\$other; local var=\$other - () { eval \"\$var\"; } - case \$other in - \$var) - ( echo OK; ) - ;; - esac - sudo -i -s ls -1 /var/log - () { ( eval \"command ls -1\" ); } argument" - - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } - - input+=( "$in" "$in" ) - elif [[ "$1" = "-hol" ]]; then - local in="var=\$( other ) -local var2=\$(( other + 1 )) -() { eval \"\$var\"; } -sudo -i -s ls -1 >/tmp/ls-log.txt /var/log -IFS=\$'\\n' print -rl -- \$(command ls -1 | tee -a /tmp/ls-1.txt) -var3=\$(( HISTSIZE + 10 + \$var )) -local var4=\$( other command ) -touch \$(( HISTSIZE + \$SAVEHIST + 10 )) -case \$other in - \$var) - ( echo OK; ) - ;; - \$var3) - ( if { true } { noglob echo yes } ) -esac -( builtin cd /var/log; ls -1; noglob cd \"/var/log\" 'log' ) -noglob cat <<<\"\$PATH\" | tr : \"\\n\" -if [[ \"\$var\" -gt 10 ]]; then - (( var = HISTSIZE + \$SAVEHIST )) -fi -/var/log -sidx=\${buffer[(in:ii:)\\\$\\(?#[^\\\\\\\\]\\)]} # find opening cmd-subst -{ - exec {MYFD}<&0 {MYFD2}>&1 - ( read <&\$MYFD line; echo \$line >&\$MYFD2 && { builtin print \${match[1]}Written. } ) -} always { - (( MYFD > 0 )) && { print -rl -- -myfd:\$MYFD >&\$MYFD2 && print \"Sent.\" '(to filedescriptor)'; } -} -command sleep \"\$(( \$a + b + \${cde} + \${(s::)fgh[ijk]} + \\\$l + \\m + \\\" ))\" -for (( i = 0; i <= 2; ++ i )) { print \$i; } -" - - (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } - - input+=( "$in" ) - fi - - typeset -a long_input - integer i - for (( i=1; i<= 50; i ++ )); do - long_input+=( "${input[@]}" ) - done - - typeset -F SECONDS - SECONDS=0 - - local right_brace_is_recognised_everywhere - integer path_dirs_was_set multi_func_def ointeractive_comments - -fast-highlight-fill-option-variables - - local BUFFER - for BUFFER in "${long_input[@]}"; do - reply=( ) - () { - -fast-highlight-init - -fast-highlight-process "" "$BUFFER" "0" - -fast-highlight-string-process "" "$BUFFER" - } - done - - print "Running time: $SECONDS" - zprof | head -# File input? -elif [[ -r "$1" ]]; then - # Load from given file - local BUFFER="$(<$1)" - - typeset -F SECONDS - SECONDS=0 - - reply=( ) - -fast-highlight-init - - local right_brace_is_recognised_everywhere - integer path_dirs_was_set multi_func_def ointeractive_comments - -fast-highlight-fill-option-variables - - () { - -fast-highlight-process "" "$BUFFER" "0" - -fast-highlight-string-process "" "$BUFFER" - } - - print "Running time: $SECONDS" - zprof | head - - # This output can be diffed to detect changes in operation - if [[ -z "$2" ]]; then - print -rl -- "${reply[@]}" >! out.parse - else - print -rl -- "${reply[@]}" >! "$2" - fi -else - if [[ -z "$1" ]]; then - print -u2 "Usage: ./parse.zsh {to-parse file} [region_highlight output file]" - exit 2 - else - print -u2 "Unreadable to-parse file \`$1', aborting" - exit 3 - fi -fi - -exit 0 - -# vim:ft=zsh diff --git a/.config/zsh/.zsh/fsh/test/to-parse.zsh b/.config/zsh/.zsh/fsh/test/to-parse.zsh deleted file mode 100644 index 855d7a4..0000000 --- a/.config/zsh/.zsh/fsh/test/to-parse.zsh +++ /dev/null @@ -1,823 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -typeset -gA __hsmw_highlight_main__command_type_cache - -# Define default styles. -typeset -gA HSMW_HIGHLIGHT_STYLES -: ${HSMW_HIGHLIGHT_STYLES[default]:=none} -: ${HSMW_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} -: ${HSMW_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} -: ${HSMW_HIGHLIGHT_STYLES[alias]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[suffix-alias]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[builtin]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[function]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[command]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[precommand]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[commandseparator]:=none} -: ${HSMW_HIGHLIGHT_STYLES[hashed-command]:=fg=green} -: ${HSMW_HIGHLIGHT_STYLES[path]:=fg=magenta} -: ${HSMW_HIGHLIGHT_STYLES[path_pathseparator]:=} -: ${HSMW_HIGHLIGHT_STYLES[path_prefix]:=fg=magenta} -: ${HSMW_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=} -: ${HSMW_HIGHLIGHT_STYLES[globbing]:=fg=blue,bold} -: ${HSMW_HIGHLIGHT_STYLES[history-expansion]:=fg=blue,bold} -: ${HSMW_HIGHLIGHT_STYLES[single-hyphen-option]:=none} -: ${HSMW_HIGHLIGHT_STYLES[double-hyphen-option]:=none} -: ${HSMW_HIGHLIGHT_STYLES[back-quoted-argument]:=none} -: ${HSMW_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} -: ${HSMW_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} -: ${HSMW_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} -: ${HSMW_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} -: ${HSMW_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} -: ${HSMW_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} -: ${HSMW_HIGHLIGHT_STYLES[assign]:=none} -: ${HSMW_HIGHLIGHT_STYLES[redirection]:=none} -: ${HSMW_HIGHLIGHT_STYLES[comment]:=fg=black,bold} - -# Get the type of a command. -# -# Uses the zsh/parameter module if available to avoid forks, and a -# wrapper around 'type -w' as fallback. -# -# Takes a single argument. -# -# The result will be stored in REPLY. --hsmw-highlight-main-type() { - if (( $+__hsmw_highlight_main__command_type_cache )); then - REPLY=$__hsmw_highlight_main__command_type_cache[(e)$1] - if [[ -n "$REPLY" ]]; then - return - fi - fi - if (( $#options_to_set )); then - setopt localoptions $options_to_set; - fi - unset REPLY - if zmodload -e zsh/parameter; then - if (( $+aliases[(e)$1] )); then - REPLY=alias - elif (( $+saliases[(e)${1##*.}] )); then - REPLY='suffix alias' - elif (( $reswords[(Ie)$1] )); then - REPLY=reserved - elif (( $+functions[(e)$1] )); then - REPLY=function - elif (( $+builtins[(e)$1] )); then - REPLY=builtin - elif (( $+commands[(e)$1] )); then - REPLY=command - # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly - # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo - # exists and is in $PATH). Avoid triggering the bug, at the expense of - # falling through to the $(x) below, incurring a fork. (Issue #354.) - # - # The second disjunct mimics the isrelative() C call from the zsh bug. - elif { [[ $1 != */* ]] || is-at-least 5.3 } && - ! builtin type -w -- $1 >/dev/null 2>&1; then - REPLY=none - fi - fi - if ! (( $+REPLY )); then - REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)#*: }" - fi - if (( $+__hsmw_highlight_main__command_type_cache )); then - __hsmw_highlight_main__command_type_cache[(e)$1]=$REPLY - fi -} - -# Check whether the first argument is a redirection operator token. -# Report result via the exit code. --hsmw-highlight-is-redirection() { - # A redirection operator token: - # - starts with an optional single-digit number; - # - then, has a '<' or '>' character; - # - is not a process substitution [<(...) or >(...)]. - [[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]] -} - -# Resolve alias. -# -# Takes a single argument. -# -# The result will be stored in REPLY. --hsmw-highlight-resolve-alias() { - if zmodload -e zsh/parameter; then - REPLY=${aliases[$arg]} - else - REPLY="${"$(alias -- $arg)"#*=}" - fi -} - -# Check that the top of $braces_stack has the expected value. If it does, set -# the style according to $2; otherwise, set style=unknown-token. -# -# $1: character expected to be at the top of $braces_stack -# $2: assignment to execute it if matches --hsmw-highlight-stack-pop() { - if [[ $braces_stack[1] == $1 ]]; then - braces_stack=${braces_stack:1} - eval "$2" - else - style=unknown-token - fi -} - -# Main syntax highlighting function. --hsmw-highlight-process() -{ - ## Before we even 'emulate -L', we must test a few options that would reset. - if [[ -o interactive_comments ]]; then - local interactive_comments= # set to empty - fi - if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then - local right_brace_is_recognised_everywhere=false - else - local right_brace_is_recognised_everywhere=true - fi - if [[ -o path_dirs ]]; then - integer path_dirs_was_set=1 - else - integer path_dirs_was_set=0 - fi - if [[ -o multi_func_def ]]; then - integer multi_func_def=1 - else - integer multi_func_def=0 - fi - emulate -L zsh - setopt localoptions extendedglob bareglobqual - - ## Variable declarations and initializations - local start_pos=0 end_pos highlight_glob=true arg style - local in_array_assignment=false # true between 'a=(' and the matching ')' - typeset -a __HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR - typeset -a __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS - typeset -a __HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW - local -a options_to_set # used in callees - local buf="$1" - integer len="${#buf}" - integer pure_buf_len=len # historical, was $#BUFFER, i.e. len without $PREBUFFER; used e.g. in *_check_path - - local braces_stack # "R" for round, "Q" for square, "Y" for curly - - if (( path_dirs_was_set )); then - options_to_set+=( PATH_DIRS ) - fi - unset path_dirs_was_set - - __HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=( - '|' '||' ';' '&' '&&' - '|&' - '&!' '&|' - # ### 'case' syntax, but followed by a pattern, not by a command - # ';;' ';&' ';|' - ) - __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS=( - 'builtin' 'command' 'exec' 'nocorrect' 'noglob' - 'pkexec' # immune to #121 because it's usually not passed --option flags - ) - - # Tokens that, at (naively-determined) "command position", are followed by - # a de jure command position. All of these are reserved words. - __HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW=( - $'\x7b' # block - $'\x28' # subshell - '()' # anonymous function - 'while' - 'until' - 'if' - 'then' - 'elif' - 'else' - 'do' - 'time' - 'coproc' - '!' # reserved word; unrelated to $histchars[1] - ) - - local -a match mbegin mend - - # State machine - # - # The states are: - # - :start: Command word - # - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i") - # - :sudo_arg: The argument to a sudo leading-dash option that takes one, - # when given as a separate word; i.e., "foo" in "-u foo" (two - # words) but not in "-ufoo" (one word). - # - :regular: "Not a command word", and command delimiters are permitted. - # Mainly used to detect premature termination of commands. - # - :always: The word 'always' in the «{ foo } always { bar }» syntax. - # - # When the kind of a word is not yet known, $this_word / $next_word may contain - # multiple states. For example, after "sudo -i", the next word may be either - # another --flag or a command name, hence the state would include both :start: - # and :sudo_opt:. - # - # The tokens are always added with both leading and trailing colons to serve as - # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} - # will DTRT regardless of how many elements or repetitions $x has.. - # - # Handling of redirections: upon seeing a redirection token, we must stall - # the current state --- that is, the value of $this_word --- for two iterations - # (one for the redirection operator, one for the word following it representing - # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a - # redirection operator, decrement it each iteration, and stall the current state - # when it is non-zero. Thus, upon reaching the next word (the one that follows - # the redirection operator and target), $this_word will still contain values - # appropriate for the word immediately following the word that preceded the - # redirection operator. - # - # The "the previous word was a redirection operator" state is not communicated - # to the next iteration via $next_word/$this_word as usual, but via - # $in_redirection. The value of $next_word from the iteration that processed - # the operator is discarded. - # - local this_word=':start:' next_word - integer in_redirection - # Processing buffer - local proc_buf="$buf" - for arg in ${interactive_comments-${(z)buf}} \ - ${interactive_comments+${(zZ+c+)buf}}; do - # Initialize $next_word. - if (( in_redirection )); then - (( --in_redirection )) - fi - if (( in_redirection == 0 )); then - # Initialize $next_word to its default value. - next_word=':regular:' - else - # Stall $next_word. - fi - - # Initialize per-"simple command" [zshmisc(1)] variables: - # - # $already_added (see next paragraph) - # $style how to highlight $arg - # $in_array_assignment boolean flag for "between '(' and ')' of array assignment" - # $highlight_glob boolean flag for "'noglob' is in effect" - # - # $already_added is set to 1 to disable adding an entry to region_highlight - # for this iteration. Currently, that is done for "" and $'' strings, - # which add the entry early so escape sequences within the string override - # the string's color. - integer already_added=0 - style=unknown-token - if [[ $this_word == *':start:'* ]]; then - in_array_assignment=false - if [[ $arg == 'noglob' ]]; then - highlight_glob=false - fi - fi - - # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf. - if [[ $arg == ';' ]] ; then - # We're looking for either a semicolon or a newline, whichever comes - # first. Both of these are rendered as a ";" (SEPER) by the ${(z)..} - # flag. - # - # We can't use the (Z+n+) flag because that elides the end-of-command - # token altogether, so 'echo foo\necho bar' (two commands) becomes - # indistinguishable from 'echo foo echo bar' (one command with three - # words for arguments). - local needle=$'[;\n]' - integer offset=$(( ${proc_buf[(i)$needle]} - 1 )) - (( start_pos += offset )) - (( end_pos = start_pos + $#arg )) - else - # The line was: - # - # integer offset=$(((len-start_pos)-${#${proc_buf##([[:space:]]|\\[[:space:]])#}})) - # - # - len-start_pos is length of current proc_buf; basically: initial length minus where - # we are, and proc_buf is chopped to the "where we are" (compare the "previous value - # of start_pos" below, and the len-(start_pos-offset) = len-start_pos+offset) - # - what's after main minus sign is: length of proc_buf without spaces at the beginning - # - so what the line actually did, was computing length of the spaces! - # - this can be done via (#b) flag, like below - if [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then - # The first, outer parenthesis - integer offset="${#match[1]}" - else - integer offset=0 - fi - ((start_pos+=offset)) - ((end_pos=$start_pos+${#arg})) - fi - - # Compute the new $proc_buf. We advance it - # (chop off characters from the beginning) - # beyond what end_pos points to, by skipping - # as many characters as end_pos was advanced. - # - # end_pos was advanced by $offset (via start_pos) - # and by $#arg. Note the `start_pos=$end_pos` - # below. - # - # As for the [,len]. We could use [,len-start_pos+offset] - # here, but to make it easier on eyes, we use len and - # rely on the fact that Zsh simply handles that. The - # length of proc_buf is len-start_pos+offset because - # we're chopping it to match current start_pos, so its - # length matches the previous value of start_pos. - # - # Why [,-1] is slower than [,length] isn't clear. - proc_buf="${proc_buf[offset + $#arg + 1,len]}" - - # Handle the INTERACTIVE_COMMENTS option. - # - # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. - if [[ -n ${interactive_comments+'set'} && $arg[1] == $histchars[3] ]]; then - if [[ $this_word == *(':regular:'|':start:')* ]]; then - style=comment - else - style=unknown-token # prematurely terminated - fi - -hsmw-add-highlight $start_pos $end_pos $style - already_added=1 - continue - fi - - # Analyse the current word. - if -hsmw-highlight-is-redirection $arg ; then - # A '<' or '>', possibly followed by a digit - in_redirection=2 - fi - - # Special-case the first word after 'sudo'. - if (( ! in_redirection )); then - if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then - this_word=${this_word//:sudo_opt:/} - fi - fi - - # Parse the sudo command line - if (( ! in_redirection )); then - if [[ $this_word == *':sudo_opt:'* ]]; then - case "$arg" in - # Flag that requires an argument - '-'[Cgprtu]) this_word=${this_word//:start:/}; - next_word=':sudo_arg:';; - # This prevents misbehavior with sudo -u -otherargument - '-'*) this_word=${this_word//:start:/}; - next_word+=':start:'; - next_word+=':sudo_opt:';; - *) ;; - esac - elif [[ $this_word == *':sudo_arg:'* ]]; then - next_word+=':sudo_opt:' - next_word+=':start:' - fi - fi - - # The Great Fork: is this a command word? Is this a non-command word? - if [[ $this_word == *':always:'* && $arg == 'always' ]]; then - # try-always construct - style=reserved-word # de facto a reserved word, although not de jure - next_word=':start:' - elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word - if [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then - style=precommand - elif [[ "$arg" = "sudo" ]]; then - style=precommand - next_word=${next_word//:regular:/} - next_word+=':sudo_opt:' - next_word+=':start:' - else - -hsmw-highlight-expand-path $arg - local expanded_arg="$REPLY" - -hsmw-highlight-main-type ${expanded_arg} - local res="$REPLY" - () { - # Special-case: command word is '$foo', like that, without braces or anything. - # - # That's not entirely correct --- if the parameter's value happens to be a reserved - # word, the parameter expansion will be highlighted as a reserved word --- but that - # incorrectness is outweighed by the usability improvement of permitting the use of - # parameters that refer to commands, functions, and builtins. - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - if [[ $res == none ]] && (( ${+parameters} )) && - [[ ${arg[1]} == \$ ]] && [[ ${arg:1} = ([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##) ]] && - (( ${+parameters[${MATCH}]} )) - then - -hsmw-highlight-main-type ${(P)MATCH} - res=$REPLY - fi - } - case $res in - reserved) # reserved word - style=reserved-word - if [[ $arg == $'\x7b' ]]; then - braces_stack='Y'"$braces_stack" - elif [[ $arg == $'\x7d' ]]; then - # We're at command word, so no need to check $right_brace_is_recognised_everywhere - -hsmw-highlight-stack-pop 'Y' style=reserved-word - if [[ $style == reserved-word ]]; then - next_word+=':always:' - fi - fi - ;; - 'suffix alias') style=suffix-alias;; - alias) () { - integer insane_alias - case $arg in - # Issue #263: aliases with '=' on their LHS. - # - # There are three cases: - # - # - Unsupported, breaks 'alias -L' output, but invokable: - ('='*) :;; - # - Unsupported, not invokable: - (*'='*) insane_alias=1;; - # - The common case: - (*) :;; - esac - if (( insane_alias )); then - style=unknown-token - else - style=alias - -hsmw-highlight-resolve-alias $arg - local alias_target="$REPLY" - [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$alias_target"} && -z ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg) - fi - } - ;; - builtin) style=builtin;; - function) style=function;; - command) style=command;; - hashed) style=hashed-command;; - none) if -hsmw-highlight-check-assign; then - style=assign - if [[ $arg[-1] == '(' ]]; then - in_array_assignment=true - else - # assignment to a scalar parameter. - # (For array assignments, the command doesn't start until the ")" token.) - next_word+=':start:' - fi - elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then - style=history-expansion - elif [[ $arg[0,1] == $histchars[2,2] ]]; then - style=history-expansion - elif [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $this_word == *':regular:'* ]]; then - # This highlights empty commands (semicolon follows nothing) as an error. - # Zsh accepts them, though. - style=commandseparator - else - style=unknown-token - fi - elif (( in_redirection == 2 )); then - style=redirection - elif [[ $arg[1,2] == '((' ]]; then - # Arithmetic evaluation. - # - # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} - # splitter would only output the '((' token if the matching '))' had - # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" - # would be highlighted as an error until the matching "))" are typed. - # - # We highlight just the opening parentheses, as a reserved word; this - # is how [[ ... ]] is highlighted, too. - style=reserved-word - -hsmw-add-highlight $start_pos $((start_pos + 2)) $style - already_added=1 - if [[ $arg[-2,-1] == '))' ]]; then - -hsmw-add-highlight $((end_pos - 2)) $end_pos $style - already_added=1 - fi - elif [[ $arg == '()' ]]; then - # anonymous function - style=reserved-word - elif [[ $arg == $'\x28' ]]; then - # subshell - style=reserved-word - braces_stack='R'"$braces_stack" - else - if -hsmw-highlight-check-path; then - style=$REPLY - else - style=unknown-token - fi - fi - ;; - *) -hsmw-add-highlight $start_pos $end_pos commandtypefromthefuture-$res - already_added=1 - ;; - esac - fi - fi - if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath - { (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] } - then # $arg is a non-command word - case $arg in - $'\x29') # subshell or end of array assignment - if $in_array_assignment; then - style=assign - in_array_assignment=false - next_word+=':start:' - else - -hsmw-highlight-stack-pop 'R' style=reserved-word - fi;; - $'\x28\x29') # possibly a function definition - if (( multi_func_def )) || false # TODO: or if the previous word was a command word - then - next_word+=':start:' - fi - style=reserved-word - ;; - $'\x7d') # right brace - # - # Parsing rule: # { - # - # Additionally, `tt(})' is recognized in any position if neither the - # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set.""" - if $right_brace_is_recognised_everywhere; then - -hsmw-highlight-stack-pop 'Y' style=reserved-word - if [[ $style == reserved-word ]]; then - next_word+=':always:' - fi - else - # Fall through to the catchall case at the end. - fi - ;| - '--'*) style=double-hyphen-option;; - '-'*) style=single-hyphen-option;; - "'"*) style=single-quoted-argument;; - '"'*) style=double-quoted-argument - -hsmw-add-highlight $start_pos $end_pos $style - -hsmw-highlight-string - already_added=1 - ;; - \$\'*) style=dollar-quoted-argument - -hsmw-add-highlight $start_pos $end_pos $style - -hsmw-highlight-dollar-string - already_added=1 - ;; - '`'*) style=back-quoted-argument;; - [*?]*|*[^\\][*?]*) - $highlight_glob && style=globbing || style=default;; - *) if false; then - elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then - # was handled by the $'\x7d' case above - elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then - style=history-expansion - elif [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $this_word == *':regular:'* ]]; then - style=commandseparator - else - style=unknown-token - fi - elif (( in_redirection == 2 )); then - style=redirection - else - if -hsmw-highlight-check-path; then - style=$REPLY - else - style=default - fi - fi - ;; - esac - fi - if ! (( already_added )); then - -hsmw-add-highlight $start_pos $end_pos $style - [[ $style == path || $style == path_prefix ]] && -hsmw-highlight-path-separators - fi - if [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then - if [[ $arg == ';' ]] && $in_array_assignment; then - # literal newline inside an array assignment - next_word=':regular:' - else - next_word=':start:' - highlight_glob=true - fi - elif - [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} && $this_word == *':start:'* ]] || - [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} && $this_word == *':start:'* ]]; then - next_word=':start:' - elif [[ $arg == "repeat" && $this_word == *':start:'* ]]; then - # skip the repeat-count word - in_redirection=2 - # The redirection mechanism assumes $this_word describes the word - # following the redirection. Make it so. - # - # That word can be a command word with shortloops (`repeat 2 ls`) - # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). - # - # The repeat-count word will be handled like a redirection target. - this_word=':start::regular:' - fi - start_pos=$end_pos - if (( in_redirection == 0 )); then - # This is the default/common codepath. - this_word=$next_word - else - # Stall $this_word. - fi - done -} - -# Check if $arg is variable assignment --hsmw-highlight-check-assign() -{ - setopt localoptions extended_glob - [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] || - [[ $arg == [0-9]##(|[+])=* ]] -} - --hsmw-highlight-path-separators() -{ - local pos style_pathsep - style_pathsep=${style}_pathseparator - [[ -z "$HSMW_HIGHLIGHT_STYLES[$style_pathsep]" || "$HSMW_HIGHLIGHT_STYLES[$style]" == "$HSMW_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0 - for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do - if [[ ${buf[pos]} == "/" ]]; then - -hsmw-add-highlight $((pos - 1)) $pos $style_pathsep - fi - done -} - -# Check if $arg is a path. -# If yes, return 0 and in $REPLY the style to use. -# Else, return non-zero (and the contents of $REPLY is undefined). --hsmw-highlight-check-path() -{ - -hsmw-highlight-expand-path $arg; - local expanded_path="$REPLY" - - REPLY=path - - [[ -z $expanded_path ]] && return 1 - [[ -L $expanded_path ]] && return 0 - [[ -e $expanded_path ]] && return 0 - - # Search the path in CDPATH - local cdpath_dir - for cdpath_dir in $cdpath ; do - [[ -e "$cdpath_dir/$expanded_path" ]] && return 0 - done - - # If dirname($arg) doesn't exist, neither does $arg. - [[ ! -d ${expanded_path:h} ]] && return 1 - - # If this word ends the buffer, check if it's the prefix of a valid path. - if [[ ${buf[1]} != "-" && $pure_buf_len == $end_pos ]]; then - local -a tmp - tmp=( ${expanded_path}*(N) ) - (( $#tmp > 0 )) && REPLY=path_prefix && return 0 - fi - - # It's not a path. - return 1 -} - -# Highlight special chars inside double-quoted strings --hsmw-highlight-string() -{ - setopt localoptions noksharrays - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - local i j k style - # Starting quote is at 1, so start parsing at offset 2 in the string. - for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do - (( j = i + start_pos - 1 )) - (( k = j + 1 )) - case "$arg[$i]" in - '$' ) style=dollar-double-quoted-argument - # Look for an alphanumeric parameter name. - if [[ ${arg:$i} = ([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##) ]] ; then - (( k += $#MATCH )) # highlight the parameter name - (( i += $#MATCH )) # skip past it - elif [[ ${arg:$i} = [{]([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)[}]* ]] ; then - (( k += $#MATCH )) # highlight the parameter name and braces - (( i += $#MATCH )) # skip past it - else - continue - fi - ;; - "\\") style=back-double-quoted-argument - if [[ \\\`\"\$ == *$arg[$i+1]* ]]; then - (( k += 1 )) # Color following char too. - (( i += 1 )) # Skip parsing the escaped char. - else - continue - fi - ;; - *) continue ;; - - esac - -hsmw-add-highlight $j $k $style - done -} - -# Highlight special chars inside dollar-quoted strings --hsmw-highlight-dollar-string() -{ - setopt localoptions noksharrays - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - local i j k style - local AA - integer c - # Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string. - for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do - (( j = i + start_pos - 1 )) - (( k = j + 1 )) - case "$arg[$i]" in - "\\") style=back-dollar-quoted-argument - for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do - [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break - done - AA=$arg[$i+1,$c-1] - # Matching for HEX and OCT values like \0xA6, \xA6 or \012 - if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}" - || "$AA" =~ "^[0-7]{1,3}" - || "$AA" =~ "^u[0-9a-fA-F]{1,4}" - || "$AA" =~ "^U[0-9a-fA-F]{1,8}" - ]]; then - (( k += $#MATCH )) - (( i += $#MATCH )) - else - if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then - # \x not followed by hex digits is probably an error - style=unknown-token - fi - (( k += 1 )) # Color following char too. - (( i += 1 )) # Skip parsing the escaped char. - fi - ;; - *) continue ;; - - esac - -hsmw-add-highlight $j $k $style - done -} - -# Called with a single positional argument. -# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value. -# Does not perform filename generation (globbing). --hsmw-highlight-expand-path() -{ - (( $# == 1 )) || print -r -- >&2 "hsmw-highlight: BUG: -hsmw-highlight-expand-path: called without argument" - - # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}. - setopt localoptions nonomatch - unset REPLY - : ${REPLY:=${(Q)~1}} -} - -# ------------------------------------------------------------------------------------------------- -# Main highlighter initialization -# ------------------------------------------------------------------------------------------------- - --hsmw-highlight-init() { - __hsmw_highlight_main__command_type_cache=() -} - --hsmw-add-highlight() -{ - local -i start end - local highlight - start=$1 - end=$2 - shift 2 - for highlight; do - if (( $+HSMW_HIGHLIGHT_STYLES[$highlight] )); then - reply+=("$start $end $HSMW_HIGHLIGHT_STYLES[$highlight]") - break - fi - done -} - -__HSMW_MH_SOURCED=1 - -# vim:ft=zsh diff --git a/.config/zsh/.zsh/fsh/tests/_output/.gitkeep b/.config/zsh/.zsh/fsh/tests/_output/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.config/zsh/.zsh/fsh/tests/_support/.gitkeep b/.config/zsh/.zsh/fsh/tests/_support/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.config/zsh/.zsh/fsh/tests/_support/bootstrap b/.config/zsh/.zsh/fsh/tests/_support/bootstrap deleted file mode 100644 index 0107661..0000000 --- a/.config/zsh/.zsh/fsh/tests/_support/bootstrap +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env zsh -# Write your bootstrap code here diff --git a/.config/zsh/.zsh/fsh/tests/example.zunit b/.config/zsh/.zsh/fsh/tests/example.zunit deleted file mode 100644 index 910f840..0000000 --- a/.config/zsh/.zsh/fsh/tests/example.zunit +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env zunit -@setup { - load "../fast-highlight" -} - -@test 'ls /usr/bin' { - PREBUFFER="" - BUFFER="ls /usr/bin" - run -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 \; print -rl -- \$reply - - assert "$lines[1]" same_as "0 2 fg=green" - assert "$lines[2]" same_as "3 11 fg=magenta,underline" -} - -# vim:ft=zsh:sw=4:sts=4:et diff --git a/.config/zsh/.zsh/fsh/tests/main.zunit b/.config/zsh/.zsh/fsh/tests/main.zunit deleted file mode 100644 index 110f34c..0000000 --- a/.config/zsh/.zsh/fsh/tests/main.zunit +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env zunit -@setup { - load "../fast-highlight" - setopt interactive_comments - -fast-highlight-fill-option-variables -} - -@test 'ls /usr/bin' { -reply=() - PREBUFFER="" - BUFFER="ls /usr/bin" - evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - - assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" - assert "$reply[2]" same_as "3 11 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path-to-dir]}" - assert "$reply[3]" same_as "" -} - -@test 'ls /bin/df' { - reply=() - PREBUFFER="" - BUFFER="ls /bin/df" - evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - - assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" - assert "$reply[2]" same_as "3 10 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}" - assert "$reply[3]" same_as "" -} - - -@test 'ls /bin/ls\\n # a comment\\nls /usr/bin' { - reply=() - PREBUFFER="" - BUFFER=$'ls /bin/df\n # a comment\nls /usr/bin' - evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - - assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" - assert "$reply[2]" same_as "3 10 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}" - assert "$reply[3]" same_as "12 23 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}comment]}" - assert "$reply[4]" same_as "24 26 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" - assert "$reply[5]" same_as "27 35 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path-to-dir]}" - assert "$reply[6]" same_as "" -} - - -@test 'exec {FD}< <( ls /bin )' { - reply=() - PREBUFFER="" - BUFFER=$'exec {FD}< <( ls /bin )' - evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - - assert "$reply[1]" same_as "0 4 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}precommand]}" - assert "$reply[2]" same_as "5 9 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}exec-descriptor]}" - assert "$reply[3]" same_as "" -} - - -@test 'case x in x) a;; (y) ;; esac' { - reply=() - PREBUFFER="" - BUFFER=$'case x in\nx) a;;\n(y)\n;;\nesac' - evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 - - assert "$reply[1]" same_as "0 4 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}" - assert "$reply[2]" same_as "5 6 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-input]}" - assert "$reply[3]" same_as "7 9 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" - assert "$reply[4]" same_as "10 11 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}" - assert "$reply[5]" same_as "11 12 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" - assert "$reply[6]" same_as "13 14 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}unknown-token]}" - assert "$reply[7]" same_as "17 18 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" - assert "$reply[8]" same_as "18 19 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}" - assert "$reply[9]" same_as "19 20 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" - assert "$reply[10]" same_as "24 28 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}" - assert "$reply[11]" same_as "" -} - -@test '-fast-highlight-process "$PREBUFFER" "$BUFFER" 0' { - reply=() - PREBUFFER="" - BUFFER='-fast-highlight-process "$PREBUFFER" "$BUFFER" 0' - evl -fast-highlight-process "\$PREBUFFER" "\$BUFFER" 0 - - assert "$reply[1]" same_as "0 23 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}function]}" - assert "$reply[2]" same_as "24 36 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}" - assert "$reply[3]" same_as "25 35 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}" - assert "$reply[4]" same_as "37 46 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}" - assert "$reply[5]" same_as "38 45 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}" - assert "$reply[6]" same_as "" -} - -@test 'tr : \\\\n <<<$PATH' { - reply=() - PREBUFFER="" - BUFFER='command tr : \\n << 59 -> CIELab: 241 -; comment: -; #434749 -> 16 -> CIELab: 238 -; keyword: -; #b77c4b -> 137 -> CIELab: 173 -; number, string: -; #5794a2 -> 67 -> CIELab: 66 -; title, section, name, selector-id: -; #778ce0 -> 104 -> CIELab: 104 -; attribute, variable, type: -; #d55383 -> 168 -> CIELab: 168 -; symbol, link: -; #e66493 -> 168 -> CIELab: 168 -; builtin, deletion: -; #bd5ac0 -> 133 -> CIELab: 170 -; formula-bg: -; #363a3b -> 16 -> CIELab: 237 -; -; Token.Literal: "#dc5be0" -> CIELab: 170 (Orchid; naive: 170) -; Token.Operator: "#677dcf" -> CIELab: 68 (SteelBlue3; naive: 68) -; - -[base] -default = none -unknown-token = 196 -secondary = sv-orple -recursive-base = 183 - -[background] -correct-subtle = bg:18 -incorrect-subtle = bg:238 -subtle-bg = bg:17 -global-alias = bg:20 - -;; -;; COLOR-GROUPS -;; - -[gray] -comment = 243 - - - -[pastel] -here-string-tri = 217 - - - -[no-color] -assign = none -back-quoted-argument = none -redirection = none -variable = none - - - - -[magenta-3] -dollar-quoted-argument = 173 -double-quoted-argument = 173 -history-expansion = 173 -globbing-ext = 173 -precommand = 173 - -[light-salmon-3] -builtin = 137 -subcommand = 137 -single-quoted-argument = 137 - -[steel-blue-3] -command = 68 -double-sq-bracket = 68 -double-paren = 68 -single-sq-bracket = 68 - -[steel-blue] -reserved-word = 67 - - - -[medium-purple] -; backslash in $'...' -back-dollar-quoted-argument = 104 -commandseparator = 104 -single-hyphen-option = 104 - -[dark-khaki] -double-hyphen-option = 143 - - - -[hot-pink-3] -alias = 168 -exec-descriptor = 168 -function = 168 -hashed-command = 168 -here-string-var = 168 -suffix-alias = 168 - -[pale-green-3] -assign-array-bracket = 114 -; variable $... or backslash in "..." (i.e. variable in string) -back-or-dollar-double-quoted-argument = 114 -globbing = 114 -here-string-text = 114 - - - -[orchid] -path = 170 -path-to-dir = 170,underline -pathseparator = - - - -;; -;; FUNCTIONALITY-GROUPS -;; - -[brackets] -paired-bracket = black,bg:216 -bracket-level-1 = 117 -bracket-level-2 = 217 -bracket-level-3 = 220 - -[math] -mathvar = 68 -mathnum = 173 -matherr = 124 - -[for-loop] -forvar = 68 -fornum = 173 -; operator -foroper = 133 -; separator -forsep = 104 - -[case] -case-input = 168 -case-parentheses = 217 -case-condition = bg:25 diff --git a/.config/zsh/.zsh/fsh/themes/safari.ini b/.config/zsh/.zsh/fsh/themes/safari.ini deleted file mode 100644 index e103c4d..0000000 --- a/.config/zsh/.zsh/fsh/themes/safari.ini +++ /dev/null @@ -1,83 +0,0 @@ -; Light theme with colors of a Sahara oasis - -[base] -default = none -unknown-token = red,bold -commandseparator = none -redirection = none -here-string-tri = yellow -here-string-text = bg:19 -here-string-var = 153,bg:19 -exec-descriptor = yellow,bold -comment = black,bold -correct-subtle = bg:55 -incorrect-subtle = bg:52 -subtle-bg = bg:18 -secondary = zdharma -recursive-base = 183 - -[command-point] -reserved-word = 150 -subcommand = 150 -alias = 185 -suffix-alias = 185 -global-alias = bg:19 -builtin = 185 -function = 185 -command = 185 -precommand = 185 -hashed-command = 185 -single-sq-bracket = 185 -double-sq-bracket = 185 -double-paren = 150 - -[paths] -path = 187 -pathseparator = -path-to-dir = 187,underline -globbing = 180 -globbing-ext = 184 - -[brackets] -paired-bracket = bg:blue -bracket-level-1 = 178 -bracket-level-2 = 148 -bracket-level-3 = 141 - -[arguments] -single-hyphen-option = 152 -double-hyphen-option = 152 -back-quoted-argument = none -single-quoted-argument = 151 -double-quoted-argument = 151 -dollar-quoted-argument = 151 - -[in-string] -; backslash in $'...' -back-dollar-quoted-argument = 153 -; backslash or $... in "..." (i.e. variable inside a string) -back-or-dollar-double-quoted-argument = 153 - -[other] -variable = none -assign = none -assign-array-bracket = 185 -history-expansion = blue,bold - -[math] -mathvar = blue,bold -mathnum = 187 -matherr = red - -[for-loop] -forvar = none -fornum = 187 -; operator -foroper = 151 -; separator -forsep = 109 - -[case] -case-input = 185 -case-parentheses = 116 -case-condition = bg:19 diff --git a/.config/zsh/.zsh/fsh/themes/spa.ini b/.config/zsh/.zsh/fsh/themes/spa.ini deleted file mode 100644 index 651acdb..0000000 --- a/.config/zsh/.zsh/fsh/themes/spa.ini +++ /dev/null @@ -1,82 +0,0 @@ -; 144, 187, 110, 203 -[base] -default = none -unknown-token = 196 -commandseparator = 150 -redirection = none -here-string-tri = yellow -here-string-text = bg:19 -here-string-var = 186,bg:19 -exec-descriptor = yellow,bold -comment = black,bold -correct-subtle = bg:55 -incorrect-subtle = bg:52 -subtle-bg = bg:17 -secondary = zdharma -recursive-base = 183 - -[command-point] -reserved-word = 144 -subcommand = 144 -alias = 187 -suffix-alias = 187 -global-alias = bg:19 -builtin = 150 -function = 187 -command = 187 -precommand = 187 -hashed-command = 187 -single-sq-bracket = 150 -double-sq-bracket = 150 -double-paren = 144 - -[paths] -path = 110 -pathseparator = -path-to-dir = 110,underline -globbing = 220 -globbing-ext = 225 - -[brackets] -paired-bracket = bg:blue -bracket-level-1 = 115 -bracket-level-2 = 177 -bracket-level-3 = 220 - -[arguments] -single-hyphen-option = 185 -double-hyphen-option = 185 -back-quoted-argument = none -single-quoted-argument = 110 -double-quoted-argument = 110 -dollar-quoted-argument = 110 - -[in-string] -; backslash in $'...' -back-dollar-quoted-argument = 186 -; backslash or $... in "..." (i.e. variable in string) -back-or-dollar-double-quoted-argument = 186 - -[other] -variable = none -assign = none -assign-array-bracket = 187 -history-expansion = blue,bold - -[math] -mathvar = 150 -mathnum = 110 -matherr = 196 - -[for-loop] -forvar = 71 -fornum = 110 -; operator -foroper = 203 -; separator -forsep = 147 - -[case] -case-input = 187 -case-parentheses = 116 -case-condition = bg:19 diff --git a/.config/zsh/.zsh/fsh/themes/sv-orple.ini b/.config/zsh/.zsh/fsh/themes/sv-orple.ini deleted file mode 100644 index f7e8fc5..0000000 --- a/.config/zsh/.zsh/fsh/themes/sv-orple.ini +++ /dev/null @@ -1,100 +0,0 @@ -; https://www.syntaxenvy.com/0073437 -; -; comment: -; #363355 -> 61 -; keyword: -; #dda69f -> 181 (138) -; number, string: -; #ca887e -> 174 (173) -; title, section, name, selector-id: -; #b3afd9 -> 146 (146) -; attribute, variable, type: -; #be85c0 -> 139 (140) -; symbol, link: -; #d6a2d8 -> 182 (182) -; builtin, deletion: -; #969c77 -> 108 (108) -; formula-bg: -; #211f37 -> 16 (17) - -[base] -default = none -unknown-token = 124 -commandseparator = 146 -redirection = none -here-string-tri = 138 -here-string-text = bg:25 -here-string-var = 140,bg:25 -exec-descriptor = 140 -comment = 61 -correct-subtle = bg:55 -incorrect-subtle = bg:52 -subtle-bg = bg:17 -secondary = clean -recursive-base = 186 - -[command-point] -reserved-word = 138 -subcommand = 182 -alias = 140 -suffix-alias = 140 -global-alias = bg:17 -builtin = 173 -function = 140 -command = 108 -precommand = 138 -hashed-command = 140 -single-sq-bracket = 173 -double-sq-bracket = 173 -double-paren = 138 - -[paths] -path = 182 -pathseparator = -path-to-dir = 182,underline -globbing = 138 -globbing-ext = 141 - -[brackets] -paired-bracket = bg:blue -bracket-level-1 = 173 -bracket-level-2 = 177 -bracket-level-3 = 220 - -[arguments] -single-hyphen-option = 140 -double-hyphen-option = 140 -back-quoted-argument = none -single-quoted-argument = 173 -double-quoted-argument = 173 -dollar-quoted-argument = 173 - -[in-string] -; backslash in $'...' -back-dollar-quoted-argument = 146 -; backslash or $... in "..." (i.e. variable in string) -back-or-dollar-double-quoted-argument = 140 - -[other] -variable = none -assign = none -assign-array-bracket = 182 -history-expansion = blue,bold - -[math] -mathvar = 140 -mathnum = 173 -matherr = 124 - -[for-loop] -forvar = 140 -fornum = 173 -; operator -foroper = 147 -; separator -forsep = 182 - -[case] -case-input = 140 -case-parentheses = 17 -case-condition = bg:25 diff --git a/.config/zsh/.zsh/fsh/themes/sv-plant.ini b/.config/zsh/.zsh/fsh/themes/sv-plant.ini deleted file mode 100644 index 2191b21..0000000 --- a/.config/zsh/.zsh/fsh/themes/sv-plant.ini +++ /dev/null @@ -1,100 +0,0 @@ -; https://www.syntaxenvy.com/0854668 -; -; comment: -; #5b4e3f -> 58 -; keyword: -; #a1f2b2 -> 157 -; number, string: -; #91cf9e -> 115 (114) -; title, section, name, selector-id: -; #dadff0 -> 189 -; attribute, variable, type: -; #debb91 -> 180 -; symbol, link: -; #f1dcc6 -> 224 -; builtin, deletion: -; #95cbc1 -> 115 -; formula: -; #3f352a -> 16 - -[base] -default = none -unknown-token = 124 -commandseparator = 189 -redirection = none -here-string-tri = 157 -here-string-text = bg:25 -here-string-var = 180,bg:25 -exec-descriptor = 180 -comment = 58 -correct-subtle = bg:55 -incorrect-subtle = bg:52 -subtle-bg = bg:17 -secondary = zdharma -recursive-base = 183 - -[command-point] -reserved-word = 157 -subcommand = 224 -alias = 180 -suffix-alias = 180 -global-alias = bg:58 -builtin = 115 -function = 180 -command = 180 -precommand = 157 -hashed-command = 180 -single-sq-bracket = 115 -double-sq-bracket = 115 -double-paren = 157 - -[paths] -path = 224 -pathseparator = -path-to-dir = 224,underline -globbing = 157 -globbing-ext = 159 - -[brackets] -paired-bracket = bg:blue -bracket-level-1 = 115 -bracket-level-2 = 177 -bracket-level-3 = 220 - -[arguments] -single-hyphen-option = 180 -double-hyphen-option = 180 -back-quoted-argument = none -single-quoted-argument = 114 -double-quoted-argument = 114 -dollar-quoted-argument = 114 - -[in-string] -; backslash in $'...' -back-dollar-quoted-argument = 189 -; backslash or $... in "..." (i.e. variable in string) -back-or-dollar-double-quoted-argument = 180 - -[other] -variable = none -assign = none -assign-array-bracket = 224 -history-expansion = blue,bold - -[math] -mathvar = 180 -mathnum = 114 -matherr = 124 - -[for-loop] -forvar = 180 -fornum = 114 -; operator -foroper = 147 -; separator -forsep = 224 - -[case] -case-input = 180 -case-parentheses = 58 -case-condition = bg:25 diff --git a/.config/zsh/.zsh/fsh/themes/zdharma.ini b/.config/zsh/.zsh/fsh/themes/zdharma.ini deleted file mode 100644 index 95e3e7e..0000000 --- a/.config/zsh/.zsh/fsh/themes/zdharma.ini +++ /dev/null @@ -1,81 +0,0 @@ -[base] -default = none -unknown-token = red,bold -commandseparator = none -redirection = none -here-string-tri = 141 -here-string-text = bg:19 -here-string-var = 177,bg:19 -exec-descriptor = yellow,bold -comment = black,bold -correct-subtle = bg:55 -incorrect-subtle = bg:52 -subtle-bg = bg:17 -secondary = safari -recursive-base = 186 - -[command-point] -reserved-word = 146 -reserved-word = 146 -alias = 63 -suffix-alias = 63 -global-alias = bg:19 -builtin = 63 -function = 63 -command = 63 -precommand = 63 -hashed-command = 63 -single-sq-bracket = 63 -double-sq-bracket = 63 -double-paren = 146 - -[paths] -path = 154 -pathseparator = -path-to-dir = 154,underline -globbing = 114 -globbing-ext = 153 - -[brackets] -paired-bracket = bg:blue -bracket-level-1 = 117 -bracket-level-2 = 141 -bracket-level-3 = 90 - -[arguments] -single-hyphen-option = 177 -double-hyphen-option = 177 -back-quoted-argument = none -single-quoted-argument = 146 -double-quoted-argument = 146 -dollar-quoted-argument = 146 - -[in-string] -; backslash in $'...' -back-dollar-quoted-argument = 177 -; backslash or $... in "..." -back-or-dollar-double-quoted-argument = 177 - -[other] -variable = none -assign = none -assign-array-bracket = 63 -history-expansion = blue,bold - -[math] -mathvar = blue,bold -mathnum = 154 -matherr = red - -[for-loop] -forvar = none -fornum = 154 -; operator -foroper = 146 -; separator -forsep = 109 - -[case] -case-input = 63 -case-parentheses = 141 -case-condition = bg:19 diff --git a/.config/zsh/.zsh/fsh/→chroma/-alias.ch b/.config/zsh/.zsh/fsh/→chroma/-alias.ch deleted file mode 100644 index d581341..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-alias.ch +++ /dev/null @@ -1,29 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -local __first_call="$1" __wrd="${2%%=*}" __start_pos="$3" __end_pos="$4" - -if (( __first_call )) || [[ "$2" = -* ]]; then - return 1 -else - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - elif (( $+aliases[(e)$__wrd] )) || (( ${+galiases[(e)$__wrd]} )); then - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - elif (( $+functions[(e)$__wrd] )) || (( $+builtins[(e)$__wrd] )) || (( $+commands[(e)$__wrd] )) || (( $reswords[(Ie)$__wrd] )); then - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - else - return 1 - fi - if [[ "$__wrd" != "$2" ]]; then - return 1 - fi -fi - -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-autoload.ch b/.config/zsh/.zsh/fsh/→chroma/-autoload.ch deleted file mode 100644 index 78a8924..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-autoload.ch +++ /dev/null @@ -1,104 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Tracks autoload command - highlights function names if they exist somewhere -# in $fpath. Also warns that the autoloaded function is already defined. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars -integer __idx1 __idx2 -local -a __results __deserialized __noshsplit - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-autoload-counter]=0 - FAST_HIGHLIGHT[chroma-autoload-counter-all]=1 - FAST_HIGHLIGHT[chroma-autoload-message]="" - #FAST_HIGHLIGHT[chroma-autoload-message-shown]="" - [[ -z ${FAST_HIGHLIGHT[chroma-autoload-message-shown-at]} ]] && FAST_HIGHLIGHT[chroma-autoload-message-shown-at]=0 - FAST_HIGHLIGHT[chroma-autoload-elements]="" - __style=${FAST_THEME_NAME}command - -} || { - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - (( FAST_HIGHLIGHT[chroma-autoload-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-autoload-counter-all] )) - - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = [-+]* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-autoload-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-autoload-counter] )) - - if [[ $__wrd != (\$|\"\$)* && $__wrd != (/|\"/|\'/)* && $__wrd != \`* ]]; then - __results=( ${^fpath}/$__wrd(N) ) - __deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-fpath_peq-elements]}}" ) - __results+=( ${^__deserialized}/$__wrd(N) ) - [[ "${#__results}" -gt 0 ]] && { - __style=${FAST_THEME_NAME}correct-subtle - __deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-autoload-elements]}}" ) - [[ -z "${__deserialized[1]}" && ${#__deserialized} -eq 1 ]] && __deserialized=() - # Cannot use ${abc:+"$abc"} trick with ${~...}, so handle most - # cases of the possible shwordsplit through an additional array - __noshsplit=( ${~__wrd} ) - __deserialized+=( "${(j: :)__noshsplit}" ) - FAST_HIGHLIGHT[chroma-autoload-elements]="${(j: :)${(q@)__deserialized}}" - # Make the function defined for big-loop's *main-type mechanism - __fast_highlight_main__command_type_cache[${(j: :)__noshsplit}]="function" - } || __style=${FAST_THEME_NAME}incorrect-subtle - fi - - if (( ${+functions[${(Q)__wrd}]} )); then - FAST_HIGHLIGHT[chroma-autoload-message]+="Warning: Function ${(Q)__wrd} already defined (e.g. loaded)"$'\n' - fi - fi - - # Display only when processing last autoload argument - if (( ${#${(z)BUFFER}} == FAST_HIGHLIGHT[chroma-autoload-counter-all] )); then - # Display only if already shown message differs or when it timeouts - if [[ ${FAST_HIGHLIGHT[chroma-autoload-message]} != ${FAST_HIGHLIGHT[chroma-autoload-message-shown]} || - $(( EPOCHSECONDS - FAST_HIGHLIGHT[chroma-autoload-message-shown-at] )) -gt 7 - ]]; then - FAST_HIGHLIGHT[chroma-autoload-message-shown]=${FAST_HIGHLIGHT[chroma-autoload-message]} - FAST_HIGHLIGHT[chroma-autoload-message-shown-at]=$EPOCHSECONDS - zle -M "${FAST_HIGHLIGHT[chroma-autoload-message]}" - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above code -# can do it itself and skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-autorandr.ch b/.config/zsh/.zsh/fsh/→chroma/-autorandr.ch deleted file mode 100644 index 9687db3..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-autorandr.ch +++ /dev/null @@ -1,22 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" - -if (( __first_call )) || [[ "$__wrd" = -* ]]; then - return 1 -else - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - if [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr/$__wrd" ]] then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - fi -fi - -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-awk.ch b/.config/zsh/.zsh/fsh/→chroma/-awk.ch deleted file mode 100644 index 47b3ec7..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-awk.ch +++ /dev/null @@ -1,108 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars __val __style2 -integer __idx1 __idx2 - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-awk-counter]=0 - FAST_HIGHLIGHT[chroma-awk-f-seen]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - [[ "$__wrd" = "-f" ]] && FAST_HIGHLIGHT[chroma-awk-f-seen]=1 - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-awk-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-awk-counter] )) - - # First non-option token is the pattern (regex), we will - # highlight it. - if (( FAST_HIGHLIGHT[chroma-awk-counter] == 1 && FAST_HIGHLIGHT[chroma-awk-f-seen] == 0 )); then - if print -r -- "${(Q)__wrd}" | gawk --source 'BEGIN { exit } END { exit 0 }' -f - >/dev/null 2>&1; then - __style2="${FAST_THEME_NAME}subtle-bg" - else - __style2="${FAST_THEME_NAME}incorrect-subtle" - fi - - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style2]}") - - # Highlight keywords - FSH_LIST=() - : "${__wrd//(#m)(BEGIN|END|FIELDWIDTHS|RS|ARGC|ARGV|ENVIRON|NF|NR|IGNORECASE|FILENAME|if|then|else|while|toupper|tolower|function|print|sub)/$(( fsh_sy_h_append($MBEGIN, $MEND) ))}"; - for __val in "${FSH_LIST[@]}" ; do - [[ ${__wrd[${__val%%;;*}]} = [a-zA-Z0-9_] || ${__wrd[${__val##*;;}+1]} = [a-zA-Z0-9_] ]] && continue - __idx1=$(( __start_pos + ${__val%%;;*} )) - __idx2=__idx1+${__val##*;;}-${__val%%;;*}+1 - (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]},${FAST_HIGHLIGHT_STYLES[$__style2]}") - done - - # Highlight regex characters - __chars="*+\\)(\{\}[]^" - __idx1=__start_pos - __idx2=__start_pos - while [[ "$__wrd" = (#b)[^$__chars]#([\\][\\])#((+|\*|\[|\]|\)|\(|\^|\}|\{)|[\\](+|\*|\[|\]|\)|\(|\^|\{|\}))(*) ]]; do - if [[ -n "${match[3]}" ]]; then - __idx1+=${mbegin[3]}-1 - __idx2=__idx1+${mend[3]}-${mbegin[3]}+1 - (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]},${FAST_HIGHLIGHT_STYLES[$__style2]}") - __idx1=__idx2 - else - __idx1+=${mbegin[5]}-1 - fi - __wrd="${match[5]}" - done - elif (( FAST_HIGHLIGHT[chroma-awk-counter] >= 2 || FAST_HIGHLIGHT[chroma-awk-f-seen] == 1 )); then - FAST_HIGHLIGHT[chroma-awk-f-seen]=0 - # Handle paths, etc. normally - just pass-through to the big - # highlighter (the main FSH highlighter, used before chromas). - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-docker.ch b/.config/zsh/.zsh/fsh/→chroma/-docker.ch deleted file mode 100644 index 31772f2..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-docker.ch +++ /dev/null @@ -1,90 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for command `docker'. It verifies command line, by denoting -# wrong and good arguments by color. Currently implemented: verification of -# image IDs passed to: docker image rm . -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 -local -a __lines_list - -(( __first_call )) && { - # Called for the first time - new command - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables - FAST_HIGHLIGHT[chroma-docker-counter]=0 - FAST_HIGHLIGHT[chroma-docker-got-subcommand]=0 - FAST_HIGHLIGHT[chroma-docker-subcommand]="" - FAST_HIGHLIGHT[chrome-docker-got-msg1]=0 - return 1 -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-docker-got-subcommand]} -eq 0 ]]; then - __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - else - if (( FAST_HIGHLIGHT[chroma-docker-got-subcommand] == 0 )); then - FAST_HIGHLIGHT[chroma-docker-got-subcommand]=1 - FAST_HIGHLIGHT[chroma-docker-subcommand]="$__wrd" - __style=${FAST_THEME_NAME}subcommand - (( FAST_HIGHLIGHT[chroma-docker-counter] += 1 )) - else - __wrd="${__wrd//\`/x}" - __arg="${__arg//\`/x}" - __wrd="${(Q)__wrd}" - if [[ "${FAST_HIGHLIGHT[chroma-docker-subcommand]}" = "image" ]]; then - [[ "$__wrd" != -* ]] && { - (( FAST_HIGHLIGHT[chroma-docker-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-docker-counter] )) - - if (( __idx1 == 2 )); then - __style=${FAST_THEME_NAME}subcommand - elif (( __idx1 == 3 )); then - .fast-run-command "docker images -q" chroma-docker-list "" - [[ -n "${__lines_list[(r)$__wrd]}" ]] && { - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - } || { - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - } - fi - } || __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - else - return 1 - fi - fi - fi -} - -# Add region_highlight entry (via `reply' array) -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-example.ch b/.config/zsh/.zsh/fsh/→chroma/-example.ch deleted file mode 100644 index 8814922..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-example.ch +++ /dev/null @@ -1,120 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Example chroma function. It colorizes first two arguments as `builtin' style, -# third and following arguments as `globbing' style. First two arguments may -# be "strings", they will be passed through to normal higlighter (by returning 1). -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# -# -# Overall functioning is: when command "example" is occured, this function -# is called with $1 == 1, it ("example") is the first token ($2), then for any -# following token, this function is called with $1 == 0, until end of command -# is occured (i.e. till enter is pressed or ";" is put into source, or the -# command line simply ends). -# -# Other tips are: -# - $CURSOR holds cursor position -# - $BUFFER holds whole command line buffer -# - $LBUFFER holds command line buffer that is left from the cursor, i.e. it's a -# BUFFER substring 1 .. $CURSOR -# - $RBUFFER is the same as LBUFFER but holds part of BUFFER right to the cursor -# -# The function receives $BUFFER but via sequence of tokens, which are shell words, -# e.g. "a b c" is a shell word, while a b c are 3 shell words. -# -# FAST_HIGHLIGHT is a friendly hash array which allows to store strings without -# creating global parameters (variables). If you need hash, just use it first -# declaring, under some distinct name like: typeset -gA CHROMA_EXPLE_DICT. -# Remember to reset the hash and others at __first_call == 1, so that you have -# a fresh state for new command. - -# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. -# So the below 8192 assignment takes care that next token will be routed to chroma. -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global string variables. - FAST_HIGHLIGHT[chroma-example-counter]=0 - - # Set style for region_highlight entry. It is used below in - # '[[ -n "$__style" ]] ...' line, which adds highlight entry, - # like "10 12 fg=green", through `reply' array. - # - # Could check if command `example' exists and set `unknown-token' - # style instead of `command' - __style=${FAST_THEME_NAME}command - -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - else - # Count non-option tokens - (( FAST_HIGHLIGHT[chroma-example-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-example-counter] )) - - # Colorize 1..2 as builtin, 3.. as glob - if (( FAST_HIGHLIGHT[chroma-example-counter] <= 2 )); then - if [[ "$__wrd" = \"* ]]; then - # Pass through, fsh main code will do the highlight! - return 1 - else - __style=${FAST_THEME_NAME}builtin - fi - else - __style=${FAST_THEME_NAME}globbing - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# If 1 will be added to __start_pos, this will highlight "oken". -# If 1 will be subtracted from __end_pos, this will highlight "toke". -# $PREBUFFER is for specific situations when users does command \ -# i.e. when multi-line command using backslash is entered. -# -# This is a common place of adding such entry, but any above code can do -# it itself (and it does in other chromas) and skip setting __style to -# this way disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves. -# _start_pos=$_end_pos advainces pointers in command line buffer. -# -# To pass through means to `return 1'. The highlighting of -# this single token is then done by fast-syntax-highlighting's -# main code and chroma doesn't have to do anything. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-fast-theme.ch b/.config/zsh/.zsh/fsh/→chroma/-fast-theme.ch deleted file mode 100644 index 15bc210..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-fast-theme.ch +++ /dev/null @@ -1,40 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -local __first_call="$1" __wrd="${(Q)2}" __start_pos="$3" __end_pos="$4" -local __style - -if (( __first_call )); then - FAST_HIGHLIGHT[chroma-fast-theme-first]=0 - return 1 -elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -elif (( ${FAST_HIGHLIGHT[chroma-fast-theme-first]} )) || [[ $__wrd = -* ]]; then - return 1 -else - FAST_HIGHLIGHT[chroma-fast-theme-first]=1 -fi - -if [[ "$__wrd" = */* || "$__wrd" = (XDG|LOCAL|HOME|OPT):* ]]; then - __wrd="${${__wrd/(#s)XDG:/${${XDG_CONFIG_HOME:-$HOME/.config}%/}/fsh/}%.ini}.ini" - __wrd="${${__wrd/(#s)LOCAL://usr/local/share/fsh/}%.ini}.ini" - __wrd="${${__wrd/(#s)HOME:/$HOME/.fsh/}%.ini}.ini" - __wrd="${${__wrd/(#s)OPT://opt/local/share/fsh/}%.ini}.ini" - __wrd=${~__wrd} # allow user to quote ~ -else - __wrd="$FAST_BASE_DIR/themes/$__wrd.ini" -fi - -if [[ -f $__wrd ]]; then - __style=${FAST_THEME_NAME}path -else - __style=${FAST_THEME_NAME}incorrect-subtle -fi - -(( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-fpath_peq.ch b/.config/zsh/.zsh/fsh/→chroma/-fpath_peq.ch deleted file mode 100644 index 072cee3..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-fpath_peq.ch +++ /dev/null @@ -1,61 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# This chroma does a narrow, obscure but prestigious parsing of fpath+=( elem1 -# elem2 ... ) construct to provide *the* *future* contents of $fpath to -# -autoload.ch, so that it can detect functions in those provided directories -# `elem1', `elem2', etc. and highlight the functions with `correct-subtle' -# instead of `incorrect-subtle'. Basically all thit is for command-lines like: -# -# % fpath+=( `pwd` ); autoload my-fun-from-PWD - -# Keep chroma-takever state meaning: until ; or similar (see $__arg_type below) -# The 8192 sum takes care that the next token will be routed to this chroma -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local -a deserialized - -(( __first_call )) && { - case $__wrd in - (fpath=\() - FAST_HIGHLIGHT[fpath_peq_mode]=1 - ;; - (fpath+=\() - FAST_HIGHLIGHT[fpath_peq_mode]=2 - ;; - (FPATH=) - FAST_HIGHLIGHT[fpath_peq_mode]=4 - ;; - (FPATH+=) - FAST_HIGHLIGHT[fpath_peq_mode]=8 - ;; - esac - if (( FAST_HIGHLIGHT[fpath_peq_mode] & 5 )); then - FAST_HIGHLIGHT[chroma-fpath_peq-elements]="! ${FAST_HIGHLIGHT[chroma-fpath_peq-elements]}" - fi - return 1 -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - [[ "$__wrd" != ")" ]] && { - deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-fpath_peq-elements]}}" ) - [[ -z "${deserialized[1]}" && ${#deserialized} -eq 1 ]] && deserialized=() - # Support ~ and $VAR, for [a-zA-Z_][a-ZA-Z0-9_]# characters in "VAR" - deserialized+=( "${(Q)${${(j: :)__wrd}//(#b)((\$([0-9]##|[a-zA-Z_][a-zA-Z0-9_]#))|(\$\{([0-9]##|[a-zA-Z_][a-zA-Z0-9_]#)\})|(#s)~)/${(P)${${${${match[1]##\$\{(#c0,1)}%\}}:#\~}:-HOME}}}}" ) - FAST_HIGHLIGHT[chroma-fpath_peq-elements]="${(j: :)${(q@)deserialized}}" - } - - return 1 -} - -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-git.ch b/.config/zsh/.zsh/fsh/→chroma/-git.ch deleted file mode 100644 index 12a97b3..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-git.ch +++ /dev/null @@ -1,954 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for command `git'. It colorizes the part of command -# line that holds `git' invocation. - -(( FAST_HIGHLIGHT[-git.ch-chroma-def] )) && return 1 - -FAST_HIGHLIGHT[-git.ch-chroma-def]=1 - -typeset -gA fsh__git__chroma__def -fsh__git__chroma__def=( - ## - ## No subcommand - ## - ## {{{ - - subcmd:NULL "NULL_0_opt" - NULL_0_opt "(-C|--exec-path=|--git-dir=|--work-tree=|--namespace=|--super-prefix=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || -c - <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP - <<>> __style=\${FAST_THEME_NAME}optarg-string // NO-OP - || (--version|--help|--html-path|--man-path|--info-path|-p|--paginate| - -P|--no-pager|--no-replace-objects|--bare) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - - "subcommands" "::→chroma/-git-get-subcommands" # run a function (the :: causes this) and use `reply' - #"subcommands" "(fetch|pull)" # run a function (the :: causes this) and use `reply' - - "subcmd-hook" "→chroma/-git-check-if-alias" - - "subcommands-blacklist" "mv,other" - - ## }}} - - ## - ## `FETCH' - ## - ## {{{ - - subcmd:fetch "FETCH_MULTIPLE_0_opt^ // FETCH_ALL_0_opt^ // FETCH_0_opt // - REMOTE_GR_1_arg // REF_#_arg // NO_MATCH_#_opt" - - # Special options (^ - has directives, currently - an :add and :del directive) - "FETCH_MULTIPLE_0_opt^" " - --multiple - <<>> __style=\${FAST_THEME_NAME}double-hyphen-option // NO-OP - || --multiple:add - <<>> REMOTE_GR_#_arg - || --multiple:del - <<>> REMOTE_GR_1_arg // REF_#_arg" # when --multiple is passed, then - # there is no refspec argument, only remotes-ids - # follow unlimited # of them, hence the # in the - # REMOTE_GR_#_arg - - # Special options (^ - has directives - an :del-directive) - "FETCH_ALL_0_opt^" " - --all - <<>> __style=\${FAST_THEME_NAME}double-hyphen-option // NO-OP - || --all:del - <<>> REMOTE_GR_1_arg // REF_#_arg" # --all can be only followed by options - - # FETCH_0_opt. FETCH-options (FETCH is an identifier) at position 0 -> - # -> before any argument - FETCH_0_opt " - (--depth=|--deepen=|--shallow-exclude=|--shallow-since=|--receive-pack=| - --refmap=|--recurse-submodules=|-j|--jobs=|--submodule-prefix=| - --recurse-submodules-default=|-o|--server-option=|--upload-pack| - --negotiation-tip=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (--help|--all|-a|--append|--unshallow|--update-shallow|--dry-run|-f|--force| - -k|--keep|--multiple|-p|--prune|-n|--no-tags|-t|--tags|--no-recurse-submodules| - -u|--update-head-ok|-q|--quiet|-v|--verbose|--progress| - -4|--ipv4|-6|--ipv6) - <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" - # Above: note the two <<>>-separated blocks for options that have - # some arguments – the second pair of action/handler is being - # run when an option argument is occurred (first one: the option - # itself). If there is only one <<>>-separated block, then the option - # is set to be argument-less. The argument is a) -o/--option argument - # and b) -o/--option=argument. - - REMOTE_GR_1_arg "NO-OP // ::→chroma/-git-verify-remote-or-group" # This definition is generic, reused later - "REF_#_arg" "NO-OP // ::→chroma/-git-verify-ref" # This too - "REMOTE_GR_#_arg" "NO-OP // ::→chroma/-git-verify-remote-or-group" # and this too - # The hash `#' above denotes: an argument at any position - # It will nicely match any following (above the first explicitly - # numbered ones) arguments passed when using --multiple - - # A generic action - NO_MATCH_\#_opt "* <<>> __style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" - NO_MATCH_\#_arg "__style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" - - ## }}} - - ## - ## PUSH - ## - ## {{{ - - subcmd:push "PUSH_0_opt // REMOTE_1_arg // REF_#_arg // NO_MATCH_#_opt" - - PUSH_0_opt " - (--receive-pack=|--exec=|--repo=|--push-option=|--signed=| - --force-with-lease=|--signed=|--recurse-submodules=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (--help|--all|--mirror|--tags|--follow-tags|--atomic|-n|--dry-run| - --porcelain|--delete|--tags|--follow-tags|--signed|--no-signed| - --atomic|--no-atomic|-o|--push-option|--force-with-lease| - --no-force-with-lease|-f|--force|-u|--set-upstream|--thin| - --no-thin|-q|--quiet|-v|--verbose|--progress|--no-recurse-submodules| - --verify|--no-verify|-4|--ipv4|-6|--ipv6) - <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" - - REMOTE_1_arg "NO-OP // ::→chroma/-git-verify-remote" # This definition is generic, reused later - - ### }}} - - ## - ## PULL - ## - ## {{{ - - subcmd:pull "PULL_0_opt // REMOTE_1_arg // REF_#_arg // NO_MATCH_#_opt" - - PULL_0_opt " - (--recurse-submodules=|-S|--gpg-sign=|--log=|-s|--strategy=|-X| - --strategy-option=|--rebase=|--depth=|--deepen=|--shallow-exclude=| - --shallow-since=|--negotiation-tip|--upload-pack|-o|--server-option=| - --no-recurse-submodules=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (--help|-q|--quiet|-v|--verbose|--progress|--no-recurse-submodules| - --commit|--no-commit|--edit|--no-edit|--ff|--no-ff|--ff-only| - --log|--no-log|--signoff|--no-signoff|--stat|-n|--no-stat|--squash| - --no-squash|--verify-signatures|--no-verify-signatures|--summary| - --no-summary|--allow-unrelated-histories|-r|--rebase|--no-rebase| - --autostash|--no-autostash|--all|-a|--append|--unshallow| - --update-shallow|-f|--force|-k|--keep|--no-tags|-u|--update-head-ok| - --progress|-4|--ipv4|-6|--ipv6|--recurse-submodules) - <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" - - ## }}} - - ## - ## COMMIT - ## - ## {{{ - - subcmd:commit "COMMIT_#_opt // FILE_#_arg // NO_MATCH_#_opt" - - "COMMIT_#_opt" " - (-m|--message=|-am) - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action - || (--help|-a|--all|-p|--patch|--reset-author|--short|--branch| - --porcelain|--long|-z|--null|-s|--signoff|-n|--no-verify| - --allow-empty|--allow-empty-message|-e|--edit|--no-edit| - --amend|--no-post-rewrite|-i|--include|-o|--only|--untracked-files| - -v|--verbose|-q|--quiet|--dry-run|--status|--no-status|--no-gpg-sign) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (-C|--reuse-message=|-c|--reedit-message=|--fixup=|--squash=| - -F|--file=|--author=|--date=|-t|--template=|--cleanup=| - -u|--untracked-files=|-S|--gpg-sign=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action" - - # A generic action - "FILE_#_arg" "NO-OP // ::→chroma/-git-verify-file" - - ## }}} - - ## - ## MERGE - ## - ## {{{ - - subcmd:merge "MERGE_0_opt // COMMIT_#_arg" - MERGE_0_opt - "(-m) - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action - (-S|--gpg-sign=|--log=|-e|--strategy=|-X|--strategy-option=|-F| - --file) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (--help|--commit|--no-commit|-e|--edit|--no-edit|--ff|--no-ff|--ff-only| - --log|--no-log|--signoff|--no-signoff|-n|--stat|--no-stat|--squash| - --no-squash|--verify-signatures|--no-verify-signatures|--summary| - --no-summary|-q|--quiet|-v|--verbose|--progress|--no-progress| - --allow-unrelated-histories|--rerere-autoupdate|--no-rerere-autoupdate| - --abort|--continue) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - COMMIT_\#_arg "NO-OP // ::→chroma/-git-verify-commit" - - ## }}} - - ## - ## RESET - ## - ## {{{ - - subcmd:reset "RESET_0_opt^ // RESET_0_opt // RESET_#_arg // NO_MATCH_#_opt" - "RESET_0_opt^" " - (--soft|--mixed|--hard|--merge|--keep) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (--soft|--mixed|--hard|--merge|--keep):del - <<>> RESET_0_opt // RESET_#_arg - || (--soft|--mixed|--hard|--merge|--keep):add - <<>> RESET_1_arg // NO_MATCH_#_arg - " - - RESET_0_opt " - (-q|-p|--patch) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - RESET_1_arg "NO-OP // ::→chroma/-git-verify-commit" - - "RESET_#_arg" "NO-OP // ::→chroma/-git-RESET-verify-commit-or-file" - - - ## }}} - - ## - ## REVERT - ## - ## {{{ - - subcmd:revert "REVERT_SEQUENCER_0_opt^ // REVERT_0_opt // REVERT_#_arg // NO_MATCH_#_opt" - REVERT_0_opt " - (-m|--mainline|-S|--gpg-sign=|--strategy=|-X|--strategy-option=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (-e|--edit|--no-edit|-n|--no-commit|-s|--signoff) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - "REVERT_SEQUENCER_0_opt^" " - (--continue|--quit|--abort) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (--continue|--quit|--abort):del - <<>> REVERT_0_opt // REVERT_#_arg - || (--continue|--quit|--abort):add - <<>> NO_MATCH_#_arg" - - "REVERT_#_arg" "NO-OP // ::→chroma/-git-verify-commit" - - ## }}} - - ## - ## DIFF - ## - ## TODO: When a second argument is also a path and it points to a directory, then - ## git appends the previous file name to it – good to implement this too - ## {{{ - - subcmd:diff "DIFF_NO_INDEX_0_opt^ // DIFF_0_opt // COMMIT_FILE_DIR_#_arg // NO_MATCH_#_opt" - - "DIFF_NO_INDEX_0_opt^" " - --no-index - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || --no-index:del - <<>> COMMIT_FILE_DIR_#_arg - || --no-index:add - <<>> FILE_1_arg // FILE_2_arg // NO_MATCH_#_arg" - DIFF_0_opt " - (-U|--unified=|--anchored=|--diff-algorithm=|--stat=|--dirstat| - --submodule=|--color=|--color-moved=|--color-moved-ws=|--word-diff=| - --word-diff-regex=|--color-words=|--ws-error-highlight=|--abbrev=| - -B|--break-rewrites=|-M|--find-renames=|-C|--find-copies=|-l| - --diff-filter=|-S|-G|--find-object=|--relative=|-O|--relative=| - --inter-hunk-context=|--ignore-submodules=|--src-prefix=|--dst-prefix=| - --line-prefix=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (-p|--patch|-u|-s|--no-patch|--raw|--patch-with-raw|--indent-heuristic| - --no-indent-heuristic|--minimal|--patience|--histogram|--stat| - --compact-summary|--numstat|--shortstat|--dirstat|--summary| - --patch-with-stat|-z|--name-only|--name-status|--submodule|--no-color| - --color-moved|--word-diff|--color-words|--no-renames|--check| - --full-index|--binary|--abbrev|--break-rewrites|--find-renames| - --find-copies|--find-copies-harder|-D|--pickaxe-all|--pickaxe-regex| - --irreversible-delete|-R|--relative|-a|--text|--ignore-cr-at-eol| - --ignore-space-at-eol|-b|--ignore-space-change|-w|--ignore-all-space| - --ignore-blank-lines|-W|--function-context|--exit-code|--quiet| - --ext-diff|--no-ext-diff|--textconv|--no-textconv|--ignore-submodules| - --no-prefix|--ita-invisible-in-index|-1|--base|-2|--ours|-3|--theirs| - -0|--cached) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - # A generic action - "COMMIT_FILE_DIR_#_arg" "NO-OP // ::→chroma/-git-verify-commit-or-file-or-dir" - - # A generic action - "FILE_1_arg" "NO-OP // ::→chroma/-git-verify-file" - - # A generic action - "FILE_2_arg" "NO-OP // ::→chroma/-git-verify-file" - - ## }}} - - ## - ## ADD - ## - ## {{{ - - subcmd:add "ADD_0_opt // FILE_OR_DIR_#_arg // NO_MATCH_#_opt" - - ADD_0_opt " - --chmod= - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (-v|--verbose|-f|--force|-i|--interactive|-n|--dry-run| - -p|--patch|-e|--edit|--all|--no-all|-A|--all|--no-all| - --ignore-removal|--no-ignore-removal|-u|--update|-N| - --intent-to-add|--refresh|--ignore-errors|--ignore-missing| - --renormalize|--no-warn-embedded-repo) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - FILE_OR_DIR_#_arg "NO-OP // ::→chroma/-git-verify-file-or-dir" - - ## }}} - - ## - ## CHECKOUT - ## - ## {{{ - - subcmd:checkout "CHECKOUT_BRANCH_0_opt^ // - CHECKOUT_0_opt // FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg // FILE_#_arg // - FILE_#_arg // NO_MATCH_#_opt" - - "CHECKOUT_BRANCH_0_opt^" " - (-b|-B|--orphan) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (-b|-B|--orphan):del - <<>> FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg // FILE_#_arg // FILE_#_arg - || (-b|-B|--orphan):add - <<>> NEW_BRANCH_1_arg // COMMIT_2_arg // NO_MATCH_#_arg" - - NEW_BRANCH_1_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" - - COMMIT_2_arg "NO-OP // ::→chroma/-git-verify-commit" - - CHECKOUT_0_opt " - --conflict= - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (-q|--quiet|--progress|--no-progress|-f|--force|--ours|--theirs| - -b|-B|-t|--track|--no-track|-l|--detach|--orphan| - --ignore-skip-worktree-bits|-m|--merge|-p|--patch| - --ignore-other-worktrees|--no-ignore-other-worktrees) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - # A generic action - COMMIT_1_arg "NO-OP // ::→chroma/-git-verify-commit" - - # Unused - FILE_OR_BRANCH_OR_COMMIT_1_arg "NO-OP // ::→chroma/-git-file-or-ubranch-or-commit-verify" - FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg "NO-OP // ::→chroma/-git-file-or-dir-or-ubranch-or-commit-verify" - - ## }}} - - ## - ## REMOTE - ## - ## {{{ - - subcmd:remote "REMOTE_0_opt // REMOTE_ADD_1_arg // REMOTE_RENAME_1_arg // REMOTE_REMOVE_1_arg // - REMOTE_SET_HEAD_1_arg // REMOTE_SET_BRANCHES_1_arg // - REMOTE_GET_URL_1_arg // REMOTE_SET_URL_1_arg // REMOTE_SHOW_1_arg // - REMOTE_PRUNE_1_arg // REMOTE_UPDATE_1_arg" - - REMOTE_0_opt "(-v|--verbose) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_ADD_1_arg "add ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_ADD_OPTS_1_opt // REMOTE_A_NAME_2_arg // - REMOTE_A_URL_3_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_RENAME_1_arg "rename ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_2_arg // REMOTE_A_NAME_3_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_REMOVE_1_arg "remove ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_SET_HEAD_1_arg "set-head ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_2_arg // BRANCH_3_arg // - REMOTE_SET_HEAD_OPTS_1_opt // REMOTE_SET_HEAD_OPTS_2_opt // - NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_SET_BRANCHES_1_arg "set-branches ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_SET_BRANCHES_OPTS_1_opt // REMOTE_2_arg // - BRANCH_#_arg // NO_MATCH_#_opt" - - REMOTE_GET_URL_1_arg "get-url ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_GET_URL_OPTS_1_opt // REMOTE_2_arg // - NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_SET_URL_1_arg "set-url ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_SET_URL_OPTS_1_opt^ // - REMOTE_2_arg // REMOTE_A_URL_3_arg // REMOTE_A_URL_4_arg // - NO_MATCH_#_opt // NO_MATCH_#_arg" - - REMOTE_SHOW_1_arg "show ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_SHOW_OPTS_1_opt // REMOTE_#_arg // NO_MATCH_#_opt" - - REMOTE_PRUNE_1_arg "prune ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_PRUNE_OPTS_1_opt // REMOTE_#_arg // NO_MATCH_#_opt" - - REMOTE_UPDATE_1_arg "update ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> - add:REMOTE_UPDATE_OPTS_1_opt // REMOTE_GR_#_arg // NO_MATCH_#_opt" - - REMOTE_ADD_OPTS_1_opt " - (-t|-m|--mirror=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (-f|--tags|--no-tags) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_SET_HEAD_OPTS_1_opt " - (-a|--auto|-d|--delete) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_SET_HEAD_OPTS_2_opt " - (-a|--auto|-d|--delete) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_SET_BRANCHES_OPTS_1_opt " - --add - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_GET_URL_OPTS_1_opt " - (--push|--all) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - "REMOTE_SET_URL_OPTS_1_opt^" " - --push|--add|--delete - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (--add|--delete):del - <<>> REMOTE_A_URL_4_arg" - - REMOTE_SHOW_OPTS_1_opt " - -n - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_PRUNE_OPTS_1_opt " - (-n|--dry-run) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_UPDATE_OPTS_1_opt " - (-p|--prune) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - REMOTE_A_NAME_2_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" - REMOTE_A_NAME_3_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" - REMOTE_A_URL_3_arg "NO-OP // ::→chroma/main-chroma-std-verify-url" - REMOTE_A_URL_4_arg "NO-OP // ::→chroma/main-chroma-std-verify-url" - BRANCH_3_arg "NO-OP // ::→chroma/-git-verify-branch" - BRANCH_\#_arg "NO-OP // ::→chroma/-git-verify-branch" - REMOTE_2_arg "NO-OP // ::→chroma/-git-verify-remote" - REMOTE_\#_arg "NO-OP // ::→chroma/-git-verify-remote" - - ## }}} - - ## - ## LOG - ## - - subcmd:log "LOG_0_opt // LOG_1_arg // FILE_#_arg // NO_MATCH_#_opt" - - LOG_0_opt " - (--decorate=|--decorate-refs=|--decorate-refs-exclude=|-L|-n|--max-count=| - --skip=|--since=|--after=|--until=|--before=|--author=|--committer=| - --grep-reflog=|--grep=|--min-parents=|--max-parents=|--branches=|--tags=| - --remotes=|--glob=|--exclude=|--no-walk=|--pretty=|--format=|--encoding=| - --expand-tabs=|--notes=|--show-notes=|--date=|--show-linear-break=|-U| - --unified=|--anchored=|--diff-algorithm=|--stat=|--dirstat=|--submodule=| - --color=|--color-moved=|--color-moved-ws=|--word-diff=|--word-diff-regex=| - --color-words=|--ws-error-highlight=|--abbrev=|-B|--break-rewrites=|-M| - --find-renames=|-C|--find-copies=|-l|--diff-filter=|-S|-G|--find-object=| - --relative=|-O|--relative=|--inter-hunk-context=|--ignore-submodules=| - --src-prefix=|--dst-prefix=|--line-prefix=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - - || (--follow|--decorate|--no-decorate|--source|--use-mailmap|--full-diff| - --log-size|--all-match|--invert-grep|-i|--regexp-ignore-case|--basic-regexp| - -E|--extended-regexp|-F|--fixed-strings|-P|--perl-regexp|--remove-empty| - --merges|--no-merges|--no-min-parents|--no-max-parents|--first-parent| - --not|--all|--branches|--tags|--remotes|--reflog|--single-worktree| - --ignore-missing|--bisect|--stdin|--cherry-mark|--cherry-pick|--left-only| - --right-only|--cherry|-g|--walk-reflogs|--merge|--boundary|--simplify-by-decoration| - --full-history|--dense|--sparse|--simplify-merges|--ancestry-path|--date-order| - --author-date-order|--topo-order|--reverse|--no-walk|--do-walk|--pretty| - --abbrev-commit|--no-abbrev-commit|--oneline|--expand-tabs|--no-expand-tabs| - --notes|--no-notes|--show-notes|--no-standard-notes|--show-signature| - --relative-date|--parents|--children|--left-right|--graph|--show-linear-break| - -c|--cc|-m|-r|-t|-p|-u|--patch|-s|--no-patch|--raw|--patch-with-raw| - --indent-heuristic|--no-indent-heuristic|--minimal|--patience|--histogram| - --stat|--compact-summary|--numstat|--shortstat|--dirstat|--summary| - --patch-with-stat|-z|--name-only|--name-status|--submodule|--color|--no-color| - --color-moved|--word-diff|--color-words|--no-renames|--check|--full-index| - --binary|--abbrev|--break-rewrites|--find-renames| - --find-copies|--find-copies-harder|-D|--irreversible-delete| - --pickaxe-all|--pickaxe-regex|-R|--relative|-a|--text|--ignore-cr-at-eol| - --ignore-space-at-eol|-b|--ignore-space-change|-w|--ignore-all-space| - --ignore-blank-lines|-W|--function-context|--ext-diff|--no-ext-diff| - --textconv|--no-textconv|--ignore-submodules|--no-prefix| - --ita-invisible-in-index) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - LOG_1_arg "NO-OP // ::→chroma/-git-verify-rev-range-or-file" - - ## - ## TAG - ## - - subcmd:tag "TAG_D_0_opt^ // TAG_L_0_opt^ // TAG_V_0_opt^ // TAG_0_opt^" - - "TAG_0_opt^" " - (-u|--local-user=|--cleanup=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || -m - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action - <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action - || (-F|--file) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/-git-verify-file - || (-a|--annotate|-s|--sign|-f|-e|--edit) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || (-u|--local-user=|--cleanup=|-m|-F|--file|-a|--annotate|-s|--sign| - -f|-e|--edit):add - <<>> TAG_NEW_1_arg // COMMIT_2_arg // NO_MATCH_#_arg // - NO_MATCH_#_opt" - - TAG_NEW_1_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" - - TAG_1_arg "NO-OP // ::→chroma/-git-verify-tag-name" - - "TAG_D_0_opt^" " - (-d) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || -d:add - <<>> TAG_#_arg // NO_MATCH_#_opt - || -d:del - <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" - - "TAG_#_arg" "NO-OP // ::→chroma/-git-verify-tag-name" - - "TAG_L_0_opt^" " - (-l) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || -l:add - <<>> TAG_L_0_opt // TAG_PAT_#_arg // NO_MATCH_#_opt - || -l:del - <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" - - TAG_L_0_opt " - (-n|--contains|--no-contains|--points-at|--column=|--sort=|--format=| - --color=) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action - || (--column|--no-column|--create-reflog|--merged|--no-merged|--color|-i) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - "TAG_PAT_#_arg" "NO-OP // ::→chroma/main-chroma-std-verify-pattern" - - "TAG_V_0_opt^" " - (-v) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - || -v:add - <<>> TAG_V_0_opt // TAG_#_arg // NO_MATCH_#_opt - || -v:del - <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" - - TAG_V_0_opt " - --format= - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action" - - ## - ## All remaining subcommands - ## - ## {{{ - - "subcmd:*" "CATCH_ALL_#_opt" - "CATCH_ALL_#_opt" "* <<>> NO-OP // ::→chroma/main-chroma-std-aopt-SEMI-action" - - ## }}} -) - -# Called after entering just "git" on the command line -→chroma/-git-first-call() { - # Called for the first time - new command - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables - FAST_HIGHLIGHT[chroma-git-counter]=0 - FAST_HIGHLIGHT[chroma-git-got-subcommand]=0 - FAST_HIGHLIGHT[chroma-git-subcommand]="" - FAST_HIGHLIGHT[chrome-git-got-msg1]=0 - FAST_HIGHLIGHT[chrome-git-got-anymsg]=0 - FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=0 - FAST_HIGHLIGHT[chroma-git-checkout-new]=0 - FAST_HIGHLIGHT[chroma-git-fetch-multiple]=0 - FAST_HIGHLIGHT[chroma-git-branch-change]=0 - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 - FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit]=0 - FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=0 - return 1 -} - -→chroma/-git-check-if-alias() { - local _wrd="$1" - local -a _result - - typeset -ga fsh__chroma__git__aliases - _result=( ${(M)fsh__chroma__git__aliases[@]:#${_wrd}[[:space:]]##*} ) - →chroma/main-chroma-print "Got is-alias-_result: $_result" - [[ -n "$_result" ]] && \ - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="${${${_result#* }## ##}%% *}" -} - -# A hook that returns the list of git's -# available subcommands in $reply -→chroma/-git-get-subcommands() { - local __svalue - integer __ivalue - LANG=C .fast-run-command "git help -a" chroma-${FAST_HIGHLIGHT[chroma-current]}-subcmd-list "" $(( 15 * 60 )) - if [[ "${__lines_list[1]}" = See* ]]; then - # (**) - # git >= v2.20, the aliases in the `git help -a' command - __lines_list=( ${${${${(M)__lines_list[@]:#([[:space:]](#c3,3)[a-zA-Z0-9_]*|Command aliases)}##[[:space:]]##}//(#s)Command\ aliases(#e)/Command_aliases}} ) - __svalue="+${__lines_list[(I)Command_aliases]}" - __lines_list[1,__svalue-1]=( ${(@)__lines_list[1,__svalue-1]%%[[:space:]]##*} ) - else - # (**) - # git < v2.20, add aliases through extra code - __lines_list=( ${(s: :)${(M)__lines_list[@]:# [a-z]*}} ) - - __svalue=${#__lines_list} - # This allows to check if the command is an alias - we want to - # highlight the aliased command just like the target command of - # the alias - .fast-run-command "+git config --get-regexp 'alias.*'" chroma-${FAST_HIGHLIGHT[chroma-current]}-alias-list "[[:space:]]#alias." $(( 15 * 60 )) - fi - - __tmp=${#__lines_list} - typeset -ga fsh__chroma__git__aliases - fsh__chroma__git__aliases=( ${__lines_list[__svalue+1,__tmp]} ) - [[ ${__lines_list[__svalue]} != "Command_aliases" ]] && (( ++ __svalue, __ivalue=0, 1 )) || (( __ivalue=1 )) - __lines_list[__svalue,__tmp]=( ${(@)__lines_list[__svalue+__ivalue,__tmp]%%[[:space:]]##*} ) - reply=( "${__lines_list[@]}" ) -} - -# A generic handler -→chroma/-git-verify-remote() { - local _wrd="$4" - .fast-run-git-command "git remote" "chroma-git-remotes-$PWD" "" 10 - [[ -n ${__lines_list[(r)$_wrd]} ]] && { - __style=${FAST_THEME_NAME}correct-subtle; return 0 - } || { - [[ $_wrd != *:* ]] && { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } - } -} - -# A generic handler - checks if given ref is correct -→chroma/-git-verify-ref() { - local _wrd="$4" - _wrd="${_wrd%%:*}" - .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-refs-$PWD" "refs/heads" 10 - [[ -n ${__lines_list[(r)$_wrd]} ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } -} - -# A generic handler - checks if given remote or group is correct -→chroma/-git-verify-remote-or-group() { - →chroma/-git-verify-remote "$@" && return 0 - # The check for a group is to follow below - integer _start="$2" _end="$3" - local _scmd="$1" _wrd="$4" -} - -# A generic handler - checks whether the file exists -→chroma/-git-verify-file() { - integer _start="$2" _end="$3" __pos __start __end - local _wrd="$4" bg - - [[ -f $_wrd ]] && { - (( __start=_start, __end=_end, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]%bg=*} - ((1)) - } || { - (( __start=_start, __end=_end, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]%bg=*} - } - - [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && \ - ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != \ - ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} - ]] && \ - for (( __pos = 1; __pos <= (_end-_start); __pos++ )) { - [[ ${_wrd[__pos]} == "/" ]] && { - [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} = *bg=* ]] && { - (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") - ((1)) - } || { - (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}${bg:+,$bg}") - } - } - } -} - -# A generic handler - checks whether the file exists -→chroma/-git-verify-file-or-dir() { - integer _start="$2" _end="$3" __pos __start __end retval - local _wrd="$4" bg - - __style= - [[ -f $_wrd || -d $_wrd ]] && { - (( __start=_start, __end=_end, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]%bg=*} - ((1)) - } || { - (( __start=_start, __end=_end, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]%bg=*} - retval=1 - } - - [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && \ - ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != \ - ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} - ]] && \ - for (( __pos = 1; __pos <= (_end-_start); __pos++ )) { - [[ ${_wrd[__pos]} == "/" ]] && { - [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} = *bg=* ]] && { - (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") - ((1)) - } || { - (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ - reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}${bg:+,$bg}") - } - } - } - return $retval -} - -→chroma/-git-verify-branch() { - local _wrd="$4" - .fast-run-git-command "git for-each-ref --format='%(refname:short)'" "chroma-git-branches-$PWD" "refs/heads" 10 - if [[ -n ${__lines_list[(r)$_wrd]} ]] { - __style=${FAST_THEME_NAME}correct-subtle; return 0 - } elif [[ -n ${__lines_list[(r)origin/$_wrd]} ]] { - __style=${FAST_THEME_NAME}correct-subtle; return 0 - } else { - __style=${FAST_THEME_NAME}incorrect-subtle; return 1 - } -} - -→chroma/-git-verify-also-unfetched-ref() { - local _wrd="$4" - .fast-run-git-command "git config --get checkout.defaultRemote" \ - "chroma-git-defaultRemote-$PWD" "" 10 - local remote="${__lines_list[1]:-origin}" - .fast-run-git-command "git rev-list --count --no-walk - --glob=\"refs/remotes/$remote/$_wrd\"" \ - "chroma-git-unfetched-ref-$PWD" "" 10 - - (( __lines_list[1] )) && { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } -} - -# A generic handler -→chroma/-git-file-or-ubranch-or-commit-verify() { - →chroma/-git-verify-commit "$@" && return - →chroma/-git-verify-file "$@" && return - →chroma/-git-verify-branch "$@" && return - →chroma/-git-verify-also-unfetched-ref "$@" -} - -# A generic handler -→chroma/-git-file-or-dir-or-ubranch-or-commit-verify() { - →chroma/-git-verify-commit "$@" && return - →chroma/-git-verify-file-or-dir "$@" && return - →chroma/-git-verify-branch "$@" && return - →chroma/-git-verify-also-unfetched-ref "$@" -} - -# A generic handler -→chroma/-git-verify-correct-branch-name() { - local _wrd="$4" - →chroma/-git-verify-commit "$@" && \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 0; } - - →chroma/-git-verify-remote "$@" && \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 0; } - - [[ "$_wrd" != ./* && "$_wrd" != *..* && "$_wrd" != *[~\^\ $'\t']* && - "$_wrd" != */ && "$_wrd" != *.lock && "$_wrd" != *\\* ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } -} - -# A generic handler that checks if given commit reference is correct -→chroma/-git-verify-commit() { - local _wrd="$4" - __lines_list=() - .fast-run-git-command --status "git rev-parse --verify --quiet \"$_wrd\"" \ - "chroma-git-commits-$PWD-$_wrd" "" $(( 1.5 * 60 )) - if (( __lines_list[1] == 0 )); then - __style=${FAST_THEME_NAME}correct-subtle - return 0 - fi - __style=${FAST_THEME_NAME}incorrect-subtle - return 1 -} - -# A generic handler that checks if given commit reference -# is correct or if it's a file that exists -→chroma/-git-verify-commit-or-file() { - →chroma/-git-verify-commit "$@" && return - →chroma/-git-verify-file "$@" -} - -# A generic handler that checks if given commit reference -# is correct or if it's a file or directives that exists -→chroma/-git-verify-commit-or-file-or-dir() { - →chroma/-git-verify-commit "$@" && return - →chroma/-git-verify-file-or-dir "$@" -} - -# A generic handler that checks if given revision range -# is correct or if a file of that name exists -→chroma/-git-verify-rev-range-or-file() { - local _wrd="$4" - - →chroma/-git-verify-commit "$@" && return 0 - - if [[ "$_wrd" = *..* ]]; then - (( FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file] )) && { - →chroma/-git-verify-file "$@" && return 0 - __style=${FAST_THEME_NAME}unknown-token - return 1 - } - - __style="" - return 0 - fi - - →chroma/-git-verify-file "$@" && \ - { FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1; return 0; } - - __style="" - return 1 -} - -→chroma/-git-verify-tag-name() { - local _wrd="$4" - .fast-run-git-command "git tag" "chroma-git-tags-$PWD" "" $(( 2*60 )) - [[ -n ${__lines_list[(r)$_wrd]} ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - __style=${FAST_THEME_NAME}incorrect-subtle -} - -# A handler for the commit's -m/--message options.Currently -# does the same what →chroma/main-chroma-std-aopt-action does -→chroma/-git-commit-msg-opt-action() { - →chroma/main-chroma-std-aopt-action "$@" -} - -# A handler for the commit's -m/--message options' argument -→chroma/-git-commit-msg-opt-ARG-action() { - integer _start="$2" _end="$3" - local _scmd="$1" _wrd="$4" - - (( __start >= 0 )) || return - - # Match the message body in case of an --message= option - if [[ "$_wrd" = (#b)(--message=)(*) && -n "${match[2]}" ]]; then - _wrd="${(Q)${match[2]//\`/x}}" - # highlight --message=>>something<< - reply+=("$(( __start+10 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") - elif [[ "$_wrd" != --message ]]; then - # highlight the message's body - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") - fi - - integer length=${FAST_HIGHLIGHT[git-cmsg-len]:-50} - - if (( ${#_wrd} > length )); then - for (( __idx1 = 1, __idx2 = 1; __idx1 <= length; ++ __idx1, ++ __idx2 )); do - # Use __arg from the fast-highlight-process's scope - while [[ "${__arg[__idx2]}" != "${_wrd[__idx1]}" ]]; do - (( ++ __idx2 )) - (( __idx2 > __asize )) && { __idx2=-1; break; } - done - (( __idx2 == -1 )) && break - done - if (( __idx2 != -1 )); then - if [[ -n "${match[1]}" ]]; then - reply+=("$(( __start+__idx2 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - else - reply+=("$(( __start+__idx2-1 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - fi - fi -} - -# A RESET handler -# TODO: differentiate tree-ish from commit -→chroma/-git-RESET-verify-commit-or-file() { - →chroma/-git-verify-commit "$@" && { - →chroma/-git-verify-file "$@" && { - # TODO: with -p/--patch, the are optional, - # and this argument will be taken as a commit in a - # specific circumstances - FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1 - return 0 - } - - (( FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file] || - FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit] )) && \ - { __style=${FAST_THEME_NAME}unknown-token; return 1; } - - FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit]=1 - - __style=${FAST_THEME_NAME}correct-subtle - - return 0 - } - - →chroma/-git-verify-file "$@" && \ - { FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1; return 0; } - - return 1 -} - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-grep.ch b/.config/zsh/.zsh/fsh/→chroma/-grep.ch deleted file mode 100644 index 54309bf..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-grep.ch +++ /dev/null @@ -1,89 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars -integer __idx1 __idx2 - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-grep-counter]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-grep-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-grep-counter] )) - - # First non-option token is the pattern (regex), we will - # highlight it. - if (( FAST_HIGHLIGHT[chroma-grep-counter] == 1 )); then - [[ "$__wrd" = \"* ]] && __style=${FAST_THEME_NAME}double-quoted-argument - [[ "$__wrd" = \'* ]] && __style=${FAST_THEME_NAME}single-quoted-argument - [[ "$__wrd" = \$\'* ]] && __style=${FAST_THEME_NAME}dollar-quoted-argument - [[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - __style="" - - __chars="*+\\)([]^\$" - __idx1=__start_pos - __idx2=__start_pos - while [[ "$__wrd" = (#b)[^$__chars]#([\\][\\])#((+|\*|\[|\]|\)|\(|\^|\$)|[\\](+|\*|\[|\]|\)|\(|\^|\$))(*) ]]; do - if [[ -n "${match[3]}" ]]; then - __idx1+=${mbegin[3]}-1 - __idx2=__idx1+${mend[3]}-${mbegin[3]}+1 - (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-operator]}") - __idx1=__idx2 - else - __idx1+=${mbegin[5]}-1 - fi - __wrd="${match[5]}" - done - elif (( FAST_HIGHLIGHT[chroma-grep-counter] == 2 )); then - # Handle paths, etc. normally - just pass-through to the big - # highlighter (the main FSH highlighter, used before chromas). - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-hub.ch b/.config/zsh/.zsh/fsh/→chroma/-hub.ch deleted file mode 100644 index 2f0626a..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-hub.ch +++ /dev/null @@ -1,51 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" - -if (( __first_call )); then - chroma/-git.ch $* - return 1 -fi -[[ "$__arg_type" = 3 ]] && return 2 - -if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -fi - -if [[ "$__wrd" != -* ]] && (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then - .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 5 * 60 )) - # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix - __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) - - if (( ${#__lines_list} > 0 )); then - # (*) - # First remove alias name (#*[[:space:]]) and the space after it, then - # remove any leading spaces from what's left (##[[:space:]]##), then - # remove everything except the first word that's in the left line - # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") - FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" - else - FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" - fi - if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "browse" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci-status" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "compare" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "create" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "delete" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fork" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "issue" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pr" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull-request" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "release" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "sync" ]]; then - FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") - (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) - (( this_word = next_word )) - _start_pos=$4 - return 0 - fi -fi - -chroma/-git.ch $* diff --git a/.config/zsh/.zsh/fsh/→chroma/-ionice.ch b/.config/zsh/.zsh/fsh/→chroma/-ionice.ch deleted file mode 100644 index f328f83..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-ionice.ch +++ /dev/null @@ -1,117 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) -# All rights reserved. -# -# The only licensing for this file follows. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- - -setopt local_options extendedglob warn_create_global typeset_silent - -# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. -# So the below 8192 assignment takes care that next token will be routed to chroma. -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style option_start=0 option_end=0 number_start=0 number_end=0 -local -a match mbegin mend - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global string variables. - FAST_HIGHLIGHT[ionice-option-argument]=0 - - # Set style for region_highlight entry. It is used below in - # '[[ -n "$__style" ]] ...' line, which adds highlight entry, - # like "10 12 fg=green", through `reply' array. - # - # Could check if command `example' exists and set `unknown-token' - # style instead of `command' - __style=${FAST_THEME_NAME}precommand - -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if (( FAST_HIGHLIGHT[ionice-option-argument] )); then - (( FAST_HIGHLIGHT[ionice-option-argument] = 0 )) - [[ $__wrd == [0-9]# ]] && __style=${FAST_THEME_NAME}mathnum || __style=${FAST_THEME_NAME}incorrect-subtle - else - case $__wrd in - --(class(data|)|(u|p(g|))id)) - __style=${FAST_THEME_NAME}double-hyphen-option - FAST_HIGHLIGHT[ionice-option-argument]=1 - ;; - -[cnpPu]) - __style=${FAST_THEME_NAME}single-hyphen-option - FAST_HIGHLIGHT[ionice-option-argument]=1 - ;; - --*) - __style=${FAST_THEME_NAME}double-hyphen-option - ;; - -*) - __style=${FAST_THEME_NAME}single-hyphen-option - ;; - *) - this_word=1 - next_word=2 - return 1 - ;; - esac - fi -} - -# Add region_highlight entry (via `reply' array). -# If 1 will be added to __start_pos, this will highlight "oken". -# If 1 will be subtracted from __end_pos, this will highlight "toke". -# $PREBUFFER is for specific situations when users does command \ -# i.e. when multi-line command using backslash is entered. -# -# This is a common place of adding such entry, but any above code can do -# it itself (and it does in other chromas) and skip setting __style to -# this way disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves. -# _start_pos=$_end_pos advainces pointers in command line buffer. -# -# To pass through means to `return 1'. The highlighting of -# this single token is then done by fast-syntax-highlighting's -# main code and chroma doesn't have to do anything. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-lab.ch b/.config/zsh/.zsh/fsh/→chroma/-lab.ch deleted file mode 100644 index 9c76e03..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-lab.ch +++ /dev/null @@ -1,59 +0,0 @@ -# vim:ft=zsh:et:sw=4 -# -# The `lab' tool after which this chroma is modeled after: -# https://github.com/zaquestion/lab -# -(( next_word = 2 | 8192 )) -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" - -if (( __first_call )); then - chroma/-git.ch $* - return 1 -fi -[[ "$__arg_type" = 3 ]] && return 2 - -if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -fi - -if [[ "$__wrd" != -* ]] && (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then - .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 5 * 60 )) - # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix - __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) - - if (( ${#__lines_list} > 0 )); then - # (*) - # First remove alias name (#*[[:space:]]) and the space after it, then - # remove any leading spaces from what's left (##[[:space:]]##), then - # remove everything except the first word that's in the left line - # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") - FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" - else - FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" - fi - if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "browse" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "mr" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "project" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "snippet" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci-status" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "compare" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "create" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "delete" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fork" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "issue" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pr" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull-request" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "release" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "sync" ]]; then - FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") - (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) - (( this_word = next_word )) - _start_pos=$4 - return 0 - fi -fi - -chroma/-git.ch $* diff --git a/.config/zsh/.zsh/fsh/→chroma/-make.ch b/.config/zsh/.zsh/fsh/→chroma/-make.ch deleted file mode 100644 index e91746d..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-make.ch +++ /dev/null @@ -1,105 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for command `make'. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 -local -a __lines_list reply2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables. - FAST_HIGHLIGHT[chroma-make-counter]=0 - FAST_HIGHLIGHT[chroma-make-skip-two]=0 - FAST_HIGHLIGHT[chroma-make-custom-dir]="./" - FAST_HIGHLIGHT[chroma-make-custom-file]="Makefile" - FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=0 - FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* || "$__wrd" = *=* ]]; then - [[ "$__wrd" = *=* ]] && { - __style=${FAST_THEME_NAME}variable - } || { - __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - } - - if [[ "$__wrd" = (-I|-o|-W) ]]; then - FAST_HIGHLIGHT[chroma-make-skip-two]=1 - elif [[ "$__wrd" = "-C" ]]; then - FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=1 - elif [[ "$__wrd" = "-f" ]]; then - FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=1 - fi - else - if (( FAST_HIGHLIGHT[chroma-make-skip-two] )); then - FAST_HIGHLIGHT[chroma-make-skip-two]=0 - elif (( FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt] )); then - FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=0 - FAST_HIGHLIGHT[chroma-make-custom-dir]="$__wrd" - elif (( FAST_HIGHLIGHT[chroma-make-got-custom-file-opt] )); then - FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=0 - FAST_HIGHLIGHT[chroma-make-custom-file]="$__wrd" - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-make-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-make-counter] )) - if (( FAST_HIGHLIGHT[chroma-make-counter] == 1 )); then - __wrd="${__wrd//\`/x}" - __wrd="${(Q)__wrd}" - - if [[ -f "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" ]] && \ - .fast-make-targets < "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" - then - if [[ "${reply2[(r)$__wrd]}" ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - else - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - fi - else - # Pass-through to the big-loop outside - return 1 - fi - fi - fi -} - -# Add region_highlight entry (via `reply' array) -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-nice.ch b/.config/zsh/.zsh/fsh/→chroma/-nice.ch deleted file mode 100644 index 7fa8a94..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-nice.ch +++ /dev/null @@ -1,138 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) -# All rights reserved. -# -# The only licensing for this file follows. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- - -setopt local_options extendedglob warn_create_global typeset_silent - -# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. -# So the below 8192 assignment takes care that next token will be routed to chroma. -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style option_start=0 option_end=0 number_start=0 number_end=0 -local -a match mbegin mend - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global string variables. - FAST_HIGHLIGHT[nice-arg-count]=0 - FAST_HIGHLIGHT[nice-increment-argument]=0 - - # Set style for region_highlight entry. It is used below in - # '[[ -n "$__style" ]] ...' line, which adds highlight entry, - # like "10 12 fg=green", through `reply' array. - # - # Could check if command `example' exists and set `unknown-token' - # style instead of `command' - __style=${FAST_THEME_NAME}precommand - -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if (( FAST_HIGHLIGHT[nice-increment-argument] )); then - (( FAST_HIGHLIGHT[nice-increment-argument] = 0 )) - [[ $__wrd = (-|+|)[0-9]## ]] \ - && __style=${FAST_THEME_NAME}mathnum \ - || __style=${FAST_THEME_NAME}incorrect-subtle - else - case $__wrd in - -(-|+|)[0-9]##) - (( option_start = __start_pos-${#PREBUFFER} , - option_end = option_start+1 , - number_start = option_end , - number_end = __end_pos-${#PREBUFFER} )) - option_style=${FAST_THEME_NAME}single-hyphen-option - ;; - (#b)(--adjustment)(=(-|+|)[0-9]#|)) - (( option_start = __start_pos-${#PREBUFFER} , - option_end = option_start+mend[1] )) - option_style=${FAST_THEME_NAME}double-hyphen-option - [[ -z $match[2] ]] \ - && (( FAST_HIGHLIGHT[nice-increment-argument] = 1 )) \ - || (( option_end += 1 , - number_start = option_start+mbegin[2]-mbegin[1]+1 , - number_end = __end_pos-${#PREBUFFER} )) - ;; - -n) - __style=${FAST_THEME_NAME}double-hyphen-option - FAST_HIGHLIGHT[nice-increment-argument]=1 - ;; - --*) - __style=${FAST_THEME_NAME}double-hyphen-option - ;; - -*) - __style=${FAST_THEME_NAME}single-hyphen-option - ;; - *) - this_word=1 - next_word=2 - return 1 - ;; - esac - - (( option_start > 0 && option_end )) \ - && reply+=("$option_start $option_end ${FAST_HIGHLIGHT_STYLES[$option_style]}") - (( number_start > 0 && number_end )) \ - && reply+=("$number_start $number_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]}") - fi -} - -# Add region_highlight entry (via `reply' array). -# If 1 will be added to __start_pos, this will highlight "oken". -# If 1 will be subtracted from __end_pos, this will highlight "toke". -# $PREBUFFER is for specific situations when users does command \ -# i.e. when multi-line command using backslash is entered. -# -# This is a common place of adding such entry, but any above code can do -# it itself (and it does in other chromas) and skip setting __style to -# this way disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves. -# _start_pos=$_end_pos advainces pointers in command line buffer. -# -# To pass through means to `return 1'. The highlighting of -# this single token is then done by fast-syntax-highlighting's -# main code and chroma doesn't have to do anything. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-nmcli.ch b/.config/zsh/.zsh/fsh/→chroma/-nmcli.ch deleted file mode 100644 index be444e5..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-nmcli.ch +++ /dev/null @@ -1,58 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -typeset -A subcommands -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" subcommand -subcommands=( - help "_" - general "help status hostname permissions logging _" - networking "help on off connectivity _" - radio "help all wifi wwan _" - connection "help show up down add modify clone edit delete monitor reload load import export _" - device "help status show set connect reapply modify disconnect delete monitor wifi lldp _" - agent "help secret polkit all _" - monitor "help _" - _ "_" -) - -if (( __first_call )); then - FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]="" - FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]="" - return 1 -elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -elif [[ "$2" = -* ]]; then - return 1 -elif [[ -z ${FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]} ]]; then - for subcommand in ${(@k)subcommands}; do - [[ $subcommand = $__wrd* ]] && break || subcommand="_" - done - if [[ $subcommand = _ ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - else - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") - fi - FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]="$subcommand" -elif [[ -z ${FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]} ]]; then - for subcommand in ${(s. .)subcommands[${FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]}]}; do - [[ "$subcommand" = $__wrd* ]] && break || subcommand="_" - done - if [[ $subcommand = _ ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - else - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") - fi - FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]="$subcommand" -else - return 1 -fi - -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-node.ch b/.config/zsh/.zsh/fsh/→chroma/-node.ch deleted file mode 100644 index 65f214c..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-node.ch +++ /dev/null @@ -1,37 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style - -if (( __first_call )); then - FAST_HIGHLIGHT[chroma-node-file]=1 -elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -elif [[ "$__wrd" = -- ]]; then - FAST_HIGHLIGHT[chroma-node-file]=2 -elif (( FAST_HIGHLIGHT[chroma-node-file] != 2 )) && [[ "$__wrd" = -* ]]; then - if [[ "$__wrd" = -*e* || "$__wrd" = --eval ]]; then - FAST_HIGHLIGHT[chroma-node-file]=0 - fi -elif (( FAST_HIGHLIGHT[chroma-node-file] )); then - if [[ "$__wrd" = debug || "$__wrd" = inspect ]]; then - __style=${FAST_THEME_NAME}subcommand - else - FAST_HIGHLIGHT[chroma-node-file]=0 - if [[ -f ${~__wrd} || -f ${~__wrd}.js || -f ${~__wrd}/index.js ]]; then - __style=${FAST_THEME_NAME}path - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - fi - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - (( this_word = next_word )) - _start_pos=$_end_pos - - return 0 -fi - -return 1 diff --git a/.config/zsh/.zsh/fsh/→chroma/-ogit.ch b/.config/zsh/.zsh/fsh/→chroma/-ogit.ch deleted file mode 100644 index 6f76674..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-ogit.ch +++ /dev/null @@ -1,383 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (c) 2018 plexigras -# -# The old chroma function for command `git'. It colorizes the part of command -# line that holds `git' invocation. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 -local -a __lines_list chroma_git_remote_subcommands -chroma_git_remote_subcommands=(add rename remove set-head set-branches get-url set-url set-url set-url show prune update) - -if (( __first_call )); then - # Called for the first time - new command - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables - FAST_HIGHLIGHT[chroma-git-counter]=0 - FAST_HIGHLIGHT[chroma-git-got-subcommand]=0 - FAST_HIGHLIGHT[chroma-git-subcommand]="" - FAST_HIGHLIGHT[chrome-git-got-msg1]=0 - FAST_HIGHLIGHT[chrome-git-got-anymsg]=0 - FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=0 - FAST_HIGHLIGHT[chroma-git-checkout-new]=0 - FAST_HIGHLIGHT[chroma-git-fetch-multiple]=0 - FAST_HIGHLIGHT[chroma-git-branch-change]=0 - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 - return 1 -else - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = "--" ]]; then - FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=1 - __style=${FAST_THEME_NAME}double-hyphen-option - elif [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-git-got-subcommand]} -eq 0 ]]; then - # Options occuring before a subcommand - if (( FAST_HIGHLIGHT[chroma-git-option-with-argument-active] == 0 )); then - if [[ "$__wrd" = -[^[:space:]-]#C ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=2 - elif [[ "$__wrd" = -[^[:space:]-]#c ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=1 - fi - fi - return 1 - else - # If at e.g. '>' or destination/source spec (of the redirection) - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - # If at main git option taking argument in a separate word (-C and -c) - elif (( FAST_HIGHLIGHT[chroma-git-option-with-argument-active] > 0 && \ - 0 == FAST_HIGHLIGHT[chroma-git-got-subcommand] )) - then - # Remember the value - __idx2=${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]} - # Reset the is-argument mark-field - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 - - (( __idx2 == 2 )) && return 1 - # Other options' args (i.e. arg of -c) aren't routed to the big-loop - # as they aren't paths and aren't handled in any special way there - elif (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then - FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 - - # Check if the command is an alias - we want to highlight the - # aliased command just like the target command of the alias - .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 10 * 60 )) - # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix - __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) - - if (( ${#__lines_list} > 0 )); then - # (*) - # First remove alias name (#*[[:space:]]) and the space after it, then - # remove any leading spaces from what's left (##[[:space:]]##), then - # remove everything except the first word that's in the left line - # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") - FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" - else - FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" - fi - if (( __start_pos >= 0 )); then - # if subcommand exists - LANG=C .fast-run-command "git help -a" chroma-git-subcmd-list "" $(( 10 * 60 )) - # (s: :) will split on every space, but because the expression - # isn't double-quoted, the empty elements will be eradicated - # Some further knowledge-base: s-flag is special, it skips - # empty elements and creates an array (not a concatenated - # string) even when double-quoted. The normally needed @-flag - # that logically breaks the concaetnated string back into array - # in case of double-quoting has additional effect for s-flag: - # it finally blocks empty-elements eradication. - if [[ "${__lines_list[1]}" = See* ]]; then - # (**) - # git >= v2.20 - __lines_list=( ${(M)${${${(M)__lines_list[@]:# [[:blank:]]#[a-z]*}##[[:blank:]]##}%%[[:blank:]]##*}:#${FAST_HIGHLIGHT[chroma-git-subcommand]}} ) - else - # (**) - # git < v2.20 - __lines_list=( ${(M)${(s: :)${(M)__lines_list[@]:# [a-z]*}}:#${FAST_HIGHLIGHT[chroma-git-subcommand]}} ) - fi - - # Above we've checked: - # 1) If given subcommand is an alias (*) - # 2) If the command, or command pointed by the alias, exists (**) - # 3) There's little problem, git v2.20 outputs aliases in git help -a, - # which means that alias will be recognized as correct if it will - # point at another alias or on itself. That's a minor problem, a - # TODO for future planned optimization for v2.20 Git - # 4) Notice that the above situation is better than the previous - the - # alias is being verified to point to a valid git subcommand - # That's all that's needed to decide on the correctnes: - if (( ${#__lines_list} > 0 )); then - __style=${FAST_THEME_NAME}subcommand - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - fi - # The counter includes the subcommand itself - (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) - else - __wrd="${__wrd//\`/x}" - __arg="${__arg//\`/x}" - __wrd="${(Q)__wrd}" - if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "push" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fetch" ]] \ - && (( ${FAST_HIGHLIGHT[chroma-git-fetch-multiple]} == 0 )); then - # if not option - if [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" -eq 1 ]]; then - (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) - if (( __idx1 == 2 )); then - .fast-run-git-command "git remote" "chroma-git-remotes" "" - else - __wrd="${__wrd%%:*}" - .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" - fi - # if remote/ref exists - if [[ -n ${__lines_list[(r)$__wrd]} ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - # if ref (__idx1 == 3) does not exist and subcommand is push - elif (( __idx1 != 2 )) && [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "push" ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - # if not existing remote name, because not an URL (i.e. no colon) - elif [[ $__idx1 -eq 2 && $__wrd != *:* ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - # if option - else - if [[ "$__wrd" = "--multiple" && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fetch" ]]; then - FAST_HIGHLIGHT[chroma-git-fetch-multiple]=1 - __style=${FAST_THEME_NAME}double-hyphen-option - else - return 1 - fi - fi - elif (( ${FAST_HIGHLIGHT[chroma-git-fetch-multiple]} )) \ - && [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" -eq 1 ]]; then - .fast-run-git-command "git remote" "chroma-git-remotes" "" - if [[ -n ${__lines_list[(r)$__wrd]} ]]; then - __style=${FAST_THEME_NAME}correct-subtle - fi - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "commit" ]]; then - match[1]="" - match[2]="" - # if previous argument is -m or current argument is --message=something - if (( FAST_HIGHLIGHT[chrome-git-got-msg1] == 1 && ! FAST_HIGHLIGHT[chrome-git-got-anymsg] )) \ - || [[ "$__wrd" = (#b)(--message=)(*) && "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 ]]; then - FAST_HIGHLIGHT[chrome-git-got-msg1]=0 - FAST_HIGHLIGHT[chrome-git-got-anymsg]=1 - if [[ -n "${match[1]}" ]]; then - __wrd="${(Q)${match[2]//\`/x}}" - # highlight (--message=)something - (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos-${#PREBUFFER}+10, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") - # highlight --message=(something) - (( __start=__start_pos-${#PREBUFFER}+10, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") - else - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") - fi - local __firstline=${__wrd%%$'\n'*} - if (( ${#__firstline} > 50 )); then - for (( __idx1 = 1, __idx2 = 1; __idx1 <= 50; ++ __idx1, ++ __idx2 )); do - while [[ "${__arg[__idx2]}" != "${__firstline[__idx1]}" ]]; do - (( ++ __idx2 )) - (( __idx2 > __asize )) && { __idx2=-1; break; } - done - (( __idx2 == -1 )) && break - done - if (( __idx2 != -1 )); then - if [[ -n "${match[1]}" ]]; then - (( __start=__start_pos-${#PREBUFFER}+__idx2, __end=__end_pos-${#PREBUFFER}-$#__wrd+$#__firstline-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - else - (( __start=__start_pos-${#PREBUFFER}+__idx2-1, __end=__end_pos-${#PREBUFFER}-$#__wrd+$#__firstline-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - fi - fi - # if before -- - elif [[ "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 ]]; then - if [[ "$__wrd" = -[^[:space:]-]#m ]]; then - FAST_HIGHLIGHT[chrome-git-got-msg1]=1 - __style=${FAST_THEME_NAME}single-hyphen-option - else - return 1 - fi - # if after -- is file - elif [[ -e "$__wrd" ]]; then - __style=${FAST_THEME_NAME}path - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" ]] \ - || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "revert" ]] \ - || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "merge" ]] \ - || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]] \ - || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "reset" ]] \ - || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "rebase" ]]; then - - # if doing `git checkout -b ...' - if [[ "$__wrd" = -[^[:space:]-]#b && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" ]]; then - FAST_HIGHLIGHT[chroma-git-checkout-new]=1 - __style=${FAST_THEME_NAME}single-hyphen-option - # if command is not checkout -b something - elif [[ "${FAST_HIGHLIGHT[chroma-git-checkout-new]}" = 0 ]]; then - # if not option - if [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 1 ]]; then - (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) - if (( __idx1 == 2 )) || \ - [[ "$__idx1" = 3 && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]]; then - # if is ref - if command git rev-parse --verify --quiet "$__wrd" >/dev/null 2>&1; then - __style=${FAST_THEME_NAME}correct-subtle - # if is file and subcommand is checkout or diff - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "reset" \ - || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]] && [[ -e ${~__wrd} ]]; then - __style=${FAST_THEME_NAME}path - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" && \ - "1" = "$(command git rev-list --count --no-walk --glob="refs/remotes/${$(git \ - config --get checkout.defaultRemote):-*}/$__wrd")" ]] - then - __style=${FAST_THEME_NAME}correct-subtle - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - fi - # if option - else - return 1 - fi - # if option - elif [[ "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 && "$__wrd" = -* ]]; then - return 1 - fi - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "remote" && "$__wrd" != -* ]]; then - (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) - if [[ "$__idx1" = 2 ]]; then - if (( ${chroma_git_remote_subcommands[(I)$__wrd]} )); then - FAST_HIGHLIGHT[chroma-git-remote-subcommand]="$__wrd" - __style=${FAST_THEME_NAME}subcommand - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - elif [[ "$__idx1" = 3 && "$FAST_HIGHLIGHT[chroma-git-remote-subcommand]" = "add" ]]; then - .fast-run-git-command "git remote" "chroma-git-remotes" "" - if [[ -n ${__lines_list[(r)$__wrd]} ]]; then - __style=${FAST_THEME_NAME}incorrect-subtle - fi - elif [[ "$__idx1" = 3 && -n "$FAST_HIGHLIGHT[chroma-git-remote-subcommand]" ]]; then - .fast-run-git-command "git remote" "chroma-git-remotes" "" - if [[ -n ${__lines_list[(r)$__wrd]} ]]; then - __style=${FAST_THEME_NAME}correct-subtle - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - fi - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "branch" ]]; then - if [[ "$__wrd" = --delete \ - || "$__wrd" = --edit-description \ - || "$__wrd" = --set-upstream-to=* \ - || "$__wrd" = --unset-upstream \ - || "$__wrd" = -[^[:space:]-]#d \ - || "$__wrd" = -[^[:space:]-]#D ]]; then - FAST_HIGHLIGHT[chroma-git-branch-change]=1 - return 1 - elif [[ "$__wrd" != -* ]]; then - .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" - if [[ -n ${__lines_list[(r)$__wrd]} ]]; then - __style=${FAST_THEME_NAME}correct-subtle - elif (( FAST_HIGHLIGHT[chroma-git-branch-change] )); then - __style=${FAST_THEME_NAME}incorrect-subtle - fi - else - return 1 - fi - elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "tag" ]]; then - if [[ "${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]}" -le 0 ]]; then - if [[ "$__wrd" = -[^[:space:]-]#(u|m) ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=1 - elif [[ "$__wrd" = -[^[:space:]-]#F ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=2 - elif [[ "$__wrd" = -[^[:space:]-]#d ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=3 - elif [[ "$__wrd" = (--contains|--no-contains|--points-at|--merged|--no-merged) ]]; then - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=4 - fi - if [[ "$__wrd" != -* ]]; then - (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) - if [[ ${FAST_HIGHLIGHT[chroma-git-counter]} -eq 2 ]]; then - .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" - .fast-run-git-command "+git tag" "chroma-git-tags" "" - [[ -n ${__lines_list[(r)$__wrd]} ]] && __style=${FAST_THEME_NAME}incorrect-subtle - elif [[ ${FAST_HIGHLIGHT[chroma-git-counter]} -eq 3 ]]; then - fi - else - return 1 - fi - else - case "${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]}" in - (1) - __style=${FAST_THEME_NAME}optarg-string - ;; - (2) - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 - return 1; - ;; - (3) - .fast-run-git-command "git tag" "chroma-git-tags" "" - [[ -n ${__lines_list[(r)$__wrd]} ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - __style=${FAST_THEME_NAME}incorrect-subtle - ;; - (4) - if git rev-parse --verify --quiet "$__wrd" >/dev/null 2>&1; then - __style=${FAST_THEME_NAME}correct-subtle - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - ;; - esac - FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 - fi - else - return 1 - fi - fi - fi -fi - -# Add region_highlight entry (via `reply' array) -if [[ -n "$__style" ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") -fi - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-perl.ch b/.config/zsh/.zsh/fsh/→chroma/-perl.ch deleted file mode 100644 index 49f0ad3..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-perl.ch +++ /dev/null @@ -1,80 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for command `perl'. It highlights code passed to perl -# with -e option - does syntax check by calling `perl -ce', then highlights -# as correct or incorrect code. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables. - FAST_HIGHLIGHT[chrome-perl-got-eswitch]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-perl-got-subcommand]} -eq 0 ]]; then - __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - - if [[ "$__wrd" = "-e" || ("$__wrd" = -*e* && "$__wrd" != --*) ]]; then - FAST_HIGHLIGHT[chrome-perl-got-eswitch]=1 - fi - else - __wrd="${__wrd//\`/x}" - __arg="${__arg//\`/x}" - __wrd="${(Q)__wrd}" - if (( FAST_HIGHLIGHT[chrome-perl-got-eswitch] == 1 )); then - FAST_HIGHLIGHT[chrome-perl-got-eswitch]=0 - if perl -ce "$__wrd" >/dev/null 2>&1; then - # Add correct-subtle style - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - else - # Add incorrect-subtle style - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - else - # Pass-through to the big-loop outside - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array) -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-precommand.ch b/.config/zsh/.zsh/fsh/→chroma/-precommand.ch deleted file mode 100644 index 7e85a06..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-precommand.ch +++ /dev/null @@ -1,17 +0,0 @@ -# vim:ft=zsh:et:sw=4 - -local __first_call="$1" __start_pos="$3" __end_pos="$4" - -[[ "$__arg_type" = 3 ]] && return 2 - -(( __first_call )) && { - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}precommand]}") - (( next_word = (next_word & ~2) | 4 | 1 )) -} || { - return 1 -} - -(( this_word = next_word )) -_start_pos=$_end_pos -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-printf.ch b/.config/zsh/.zsh/fsh/→chroma/-printf.ch deleted file mode 100644 index 89d2789..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-printf.ch +++ /dev/null @@ -1,86 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Highlights the special sequences like "%s" in string passed to `printf'. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __val -integer __idx1 __idx2 - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-printf-counter]=0 - FAST_HIGHLIGHT[chroma-printf-counter-all]=1 - FAST_HIGHLIGHT[chroma-printf-message]="" - FAST_HIGHLIGHT[chroma-printf-skip-two]=0 - return 1 -# Following call (not first one). -} || { - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - (( FAST_HIGHLIGHT[chroma-printf-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-printf-counter-all] )) - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if [[ "$__wrd" = -* ]]; then - if [[ "$__wrd" = "-v" ]]; then - FAST_HIGHLIGHT[chroma-printf-skip-two]=1 - fi - return 1 - else - # Count non-option tokens. - if (( FAST_HIGHLIGHT[chroma-printf-skip-two] )); then - FAST_HIGHLIGHT[chroma-printf-skip-two]=0 - return 1 - else - (( FAST_HIGHLIGHT[chroma-printf-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-printf-counter] )) - if [[ "$__idx1" -eq 1 ]]; then - [[ "$__wrd" = \"* ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") - [[ "$__wrd" = \'* ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}single-quoted-argument]}") - FSH_LIST=() # use fsh_sy_h_append function to write to FSH_LIST - : "${__wrd//(#m)\%[\#\+\ 0-]#[0-9]#([.][0-9]#)(#c0,1)[diouxXfFeEgGaAcsb]/$(( fsh_sy_h_append($MBEGIN, $MEND) ))}"; - for __val in "${FSH_LIST[@]}" ; do - __idx1=$(( __start_pos + ${__val%%;;*} )) - __idx2=__idx1+${__val##*;;}-${__val%%;;*}+1 - (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}-1, __start >= 0 )) && \ - reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]}") - done - else - return 1 - fi - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above code -# can do it itself and skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-ruby.ch b/.config/zsh/.zsh/fsh/→chroma/-ruby.ch deleted file mode 100644 index 3495cc8..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-ruby.ch +++ /dev/null @@ -1,81 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for command `ruby'. It highlights code passed to ruby -# with -e option - does syntax check by calling `ruby -ce', then highlights -# as correct or incorrect code. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global variables. - FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-ruby-got-subcommand]} -eq 0 ]]; then - __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - - if [[ "$__wrd" = "-e" || ("$__wrd" = -*e* && "$__wrd" != --*) ]]; then - FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=1 - fi - else - __wrd="${__wrd//\`/x}" - __arg="${__arg//\`/x}" - __wrd="${(Q)__wrd}" - if (( FAST_HIGHLIGHT[chrome-ruby-got-eswitch] == 1 )); then - FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 - if ruby -ce "$__wrd" >/dev/null 2>&1; then - # Add correct-subtle style - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") - else - # Add incorrect-subtle style - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") - fi - else - # Pass-through to the big-loop outside - return 1 - fi - FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 - fi -} - -# Add region_highlight entry (via `reply' array) -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-scp.ch b/.config/zsh/.zsh/fsh/→chroma/-scp.ch deleted file mode 100644 index d162284..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-scp.ch +++ /dev/null @@ -1,87 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Tracks scp command and emits message when one tries to pass port to hostspec. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars -integer __idx1 __idx2 -local -a __results - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-scp-counter]=0 - FAST_HIGHLIGHT[chroma-scp-counter-all]=1 - FAST_HIGHLIGHT[chroma-scp-message]="" - FAST_HIGHLIGHT[chroma-scp-skip-two]=0 - return 1 -} || { - (( FAST_HIGHLIGHT[chroma-scp-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-scp-counter-all] )) - - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - if [[ "$__wrd" = (-c|-F|-i|-l|-o|-P|-S) ]]; then - FAST_HIGHLIGHT[chroma-scp-skip-two]=1 - fi - else - # Count non-option tokens. - if (( FAST_HIGHLIGHT[chroma-scp-skip-two] )); then - FAST_HIGHLIGHT[chroma-scp-skip-two]=0 - else - (( FAST_HIGHLIGHT[chroma-scp-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-scp-counter] )) - if [[ "${FAST_HIGHLIGHT[chroma-scp-counter]}" -eq 1 ]]; then - if [[ "$__arg" = [^:]##:[0-9]## ]]; then - FAST_HIGHLIGHT[chroma-scp-message]+="Format of hostname incorrect, use -P to pass port number" - else - return 1 - fi - else - return 1 - fi - fi - fi - - if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-scp-counter-all] )); then - [[ -n "${FAST_HIGHLIGHT[chroma-scp-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-scp-message]}" - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above code -# can do it itself and skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-sh.ch b/.config/zsh/.zsh/fsh/→chroma/-sh.ch deleted file mode 100644 index 43fa8f9..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-sh.ch +++ /dev/null @@ -1,72 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma function for `sh' shell. It colorizes string passed with -c option. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call=$1 __wrd=$2 __start_pos=$3 __end_pos=$4 -local __style -integer __idx1 __idx2 -local -a __lines_list - -(( __first_call )) && { - # Called for the first time - new command - FAST_HIGHLIGHT[chrome-git-got-c]=0 - return 1 -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ $__arg_type = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - __wrd=${${${(Q)__wrd}#[\"\']}%[\"\']} - if [[ $__wrd = -* && $__wrd != -*c* ]]; then - __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} - else - if (( FAST_HIGHLIGHT[chrome-git-got-c] == 1 )); then - for (( __idx1 = 1, __idx2 = 1; __idx2 <= __asize; ++ __idx1 )); do - [[ ${__arg[__idx2]} = ${__wrd[__idx1]} ]] && break - while [[ ${__arg[__idx2]} != ${__wrd[__idx1]} ]]; do - (( ++ __idx2 )) - (( __idx2 > __asize )) && { __idx2=0; break; } - done - (( __idx2 == 0 )) && break - [[ ${__arg[__idx2]} = ${__wrd[__idx1]} ]] && break - done - - FAST_HIGHLIGHT[chrome-git-got-c]=0 - (( _start_pos-__PBUFLEN >= 0 )) && \ - -fast-highlight-process "$PREBUFFER" "${__wrd}" "$(( __start_pos + __idx2 - 1 ))" - elif [[ $__wrd = -*c* ]]; then - FAST_HIGHLIGHT[chrome-git-got-c]=1 - else - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array) -[[ -n $__style ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-source.ch b/.config/zsh/.zsh/fsh/→chroma/-source.ch deleted file mode 100644 index dc27e76..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-source.ch +++ /dev/null @@ -1,75 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma for `source' builtin - verifies if file to be sourced compiles -# correctly. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars __home=${XDG_CACHE_HOME:-$HOME/.cache}/fsh -integer __idx1 __idx2 - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-src-counter]=0 - __style=${FAST_THEME_NAME}builtin - -} || { - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-src-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-src-counter] )) - - if (( FAST_HIGHLIGHT[chroma-src-counter] == 1 )); then - command mkdir -p "$__home" - command cp -f "${__wrd}" "$__home" 2>/dev/null && { - zcompile "$__home"/"${__wrd:t}" 2>/dev/null 1>&2 && __style=${FAST_THEME_NAME}correct-subtle || __style=${FAST_THEME_NAME}incorrect-subtle - } - elif (( FAST_HIGHLIGHT[chroma-src-counter] == 2 )); then - # Handle paths, etc. normally - just pass-through to the big - # highlighter (the main FSH highlighter, used before chromas). - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does) and skip setting __style -# to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-ssh.ch b/.config/zsh/.zsh/fsh/→chroma/-ssh.ch deleted file mode 100644 index 879158f..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-ssh.ch +++ /dev/null @@ -1,156 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) -# -# Tracks ssh command and emits message when one tries to pass port to hostspec. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -emulate -LR zsh -setopt extended_glob warn_create_global typeset_silent - -# This chroma guards that port number isn't passed in hostname (no :{port} occurs). - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style check_port=0 host_start_offset host_style user_style possible_host -local -a match mbegin mend completions_user completions_host - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-ssh-counter]=0 - FAST_HIGHLIGHT[chroma-ssh-counter-all]=1 - FAST_HIGHLIGHT[chroma-ssh-message]="" - FAST_HIGHLIGHT[chroma-ssh-skip-two]=0 - return 1 -} || { - # Following call, i.e. not the first one. - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - (( FAST_HIGHLIGHT[chroma-ssh-counter-all] += 1 )) - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - if [[ "$__wrd" = (-b|-c|-D|-E|-e|-F|-I|-i|-J|-L|-l|-m|-O|-o|-p|Q|R|-S|-W|-w) ]]; then - FAST_HIGHLIGHT[chroma-ssh-skip-two]=1 - fi - else - if (( FAST_HIGHLIGHT[chroma-ssh-skip-two] )); then - FAST_HIGHLIGHT[chroma-ssh-skip-two]=0 - else - # Count non-option tokens. - (( FAST_HIGHLIGHT[chroma-ssh-counter] += 1 )) - if [[ "${FAST_HIGHLIGHT[chroma-ssh-counter]}" -eq 1 ]]; then - if [[ $__arg = (#b)(([^@]#)(@)|)(*) ]] - then - [[ -n $match[2] ]] \ - && { - user_style= - () { - # Zstyle clobbers reply for sure - zstyle -a ":completion:*:users" users completions_users - } - (( ! $#completions_users )) && completions_users=(${(k)userdirs}) - if (( $#completions_users )); then - [[ $match[2] = ${~${:-(${(j:|:)completions_users})}} ]] \ - && user_style=${FAST_THEME_NAME}correct-subtle \ - || user_style=${FAST_THEME_NAME}incorrect-subtle - fi - [[ -n $user_style ]] \ - && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}-(mend[5]-mend[2]), __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$user_style]}") - } - [[ -n $match[3] ]] \ - && (( __start=__start_pos-${#PREBUFFER}+(mbegin[3]-mbegin[1]), __end=__end_pos-${#PREBUFFER}-(mend[5]-mend[3]), __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subtle-separator]}") - - host_style= - case $match[4] in - (<->|<0-255>.<0-255>.<0-255>.<0-255>) - host_style=${FAST_THEME_NAME}mathnum - check_port=1 - ;; - (([0-9a-fA-F][0-9a-fA-F:]#|)::([0-9a-fA-F:]#[0-9a-fA-F]|)|[0-9a-fA-F]##:[0-9a-fA-F:]#[0-9a-fA-F]) - host_style=${FAST_THEME_NAME}mathnum - ;; - (*) - check_port=1 - ;; - esac - possible_host=$match[4] - (( host_start_offset = mbegin[4] - mbegin[1], host_end_offset = 0 )) - - if (( check_port )) && [[ $possible_host = (#b)(*)(:[0-9]##) ]]; then - (( __start=__start_pos-${#PREBUFFER}+(host_start_offset+mbegin[2]-mbegin[1]), __end=__end_pos-host_end_offset-${#PREBUFFER}, __start >= 0, - host_end_offset+=mend[2]-mend[1] )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") \ - && possible_host=$match[1] \ - && FAST_HIGHLIGHT[chroma-ssh-message]+="Format of hostname incorrect, use -p to pass port number" - - fi - - if [[ -z $host_style ]]; then - () { - # Zstyle clobbers reply for sure - local mbegin mend match reply - zstyle -a ":completion:*:hosts" hosts completions_host - } - (( ! $#completions_host && $+_cache_hosts )) && completions_host=($_cache_hosts[*]) - if (( $#completions_host )); then - [[ $possible_host = ${~${:-(${(j:|:)completions_host})}} ]] \ - && host_style=${FAST_THEME_NAME}correct-subtle \ - || host_style=${FAST_THEME_NAME}incorrect-subtle - fi - fi - - [[ -n $host_style ]] \ - && (( __start=__start_pos-${#PREBUFFER}+host_start_offset, __end=__end_pos-${#PREBUFFER}-host_end_offset, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$host_style]}") - else - __style=${FAST_THEME_NAME}incorrect-subtle - fi - - (( next_word = 1 )) - - fi - fi - fi - - if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-ssh-counter-all] )); then - [[ -n "${FAST_HIGHLIGHT[chroma-ssh-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-ssh-message]}" - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above code -# can do it itself and skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-subcommand.ch b/.config/zsh/.zsh/fsh/→chroma/-subcommand.ch deleted file mode 100644 index 0665548..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-subcommand.ch +++ /dev/null @@ -1,25 +0,0 @@ -# vim:ft=zsh:et:sw=4 -(( next_word = 2 | 8192 )) -[[ "$__arg_type" = 3 ]] && return 2 - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" - -if (( __first_call )); then - FAST_HIGHLIGHT[chroma-subcommand]="" - return 1 -elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -elif [[ "$2" = -* ]]; then - return 1 -elif [[ -z "${FAST_HIGHLIGHT[chroma-subcommand]}" ]]; then - FAST_HIGHLIGHT[chroma-subcommand]="$__wrd" - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") -else - return 1 -fi - -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 diff --git a/.config/zsh/.zsh/fsh/→chroma/-subversion.ch b/.config/zsh/.zsh/fsh/→chroma/-subversion.ch deleted file mode 100644 index 4149cc6..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-subversion.ch +++ /dev/null @@ -1,250 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 Sebastian Gniazdowski -# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) -# All rights reserved. -# -# The only licensing for this file follows. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- - -→chroma/-subversion.ch/parse-revision() { - setopt local_options extendedglob warn_create_global typeset_silent - local __wrd="$1" __start_pos="$2" __end_pos="$3" __style __start __end - case $__wrd in - (r|)[0-9]##) __style=${FAST_THEME_NAME}mathnum ;; - (HEAD|BASE|COMITTED|PREV)) __style=${FAST_THEME_NAME}correct-subtle ;; - '{'[^}]##'}') __style=${FAST_THEME_NAME}subtle-bg ;; - *) __style=${FAST_THEME_NAME}incorrect-subtle ;; - esac - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") -} - -→chroma/-subversion.ch/parse-target() { - setopt local_options extendedglob warn_create_global typeset_silent - local __wrd="$1" __start_pos="$2" __end_pos="$3" __style __start __end - if [[ $__wrd == *@[^/]# ]] - then - local place=${__wrd%@[^/]#} - local rev=$__wrd[$(($#place+2)),$#__wrd] - if [[ -e $place ]]; then - local __style - [[ -d $place ]] && __style="${FAST_THEME_NAME}path-to-dir" || __style="${FAST_THEME_NAME}path" - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}-$#rev-1, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - fi - (( __start=__start_pos-${#PREBUFFER}+$#place, __end=__end_pos-${#PREBUFFER}-$#rev, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") - →chroma/-subversion.ch/parse-revision $rev $((__start_pos+$#place+1)) $__end_pos - else - return 1 - fi -} - -setopt local_options extendedglob warn_create_global - -# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. -# So the below 8192 assignment takes care that next token will be routed to chroma. -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style -integer __idx1 __idx2 - -(( __first_call )) && { - # Called for the first time - new command. - # FAST_HIGHLIGHT is used because it survives between calls, and - # allows to use a single global hash only, instead of multiple - # global string variables. - FAST_HIGHLIGHT[subversion-command]=$__wrd - FAST_HIGHLIGHT[subversion-option-argument]= - FAST_HIGHLIGHT[subversion-subcommand]= - FAST_HIGHLIGHT[subversion-subcommand-arguments]=0 - - # Set style for region_highlight entry. It is used below in - # '[[ -n "$__style" ]] ...' line, which adds highlight entry, - # like "10 12 fg=green", through `reply' array. - # - # Could check if command `example' exists and set `unknown-token' - # style instead of `command' - __style=${FAST_THEME_NAME}command - -} || { - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - case $FAST_HIGHLIGHT[subversion-command]/$FAST_HIGHLIGHT[subversion-subcommand] in - svn/) - case $__wrd in - --username|-u) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --password|-p) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --config-(dir|option)) FAST_HIGHLIGHT[subversion-option-argument]=any;; - esac - ;; - svn/?*) - case $__wrd in - --accept) FAST_HIGHLIGHT[subversion-option-argument]=accept;; - --change|-c) FAST_HIGHLIGHT[subversion-option-argument]=revision;; - --changelist|--cl) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --(set-|)depth) FAST_HIGHLIGHT[subversion-option-argument]=depth;; - --diff(3|)-cmd) FAST_HIGHLIGHT[subversion-option-argument]=cmd;; - --editor-cmd) FAST_HIGHLIGHT[subversion-option-argument]=cmd;; - --encoding) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --file) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --limit|-l) FAST_HIGHLIGHT[subversion-option-argument]=number;; - --message|-m) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --native-eol) FAST_HIGHLIGHT[subversion-option-argument]=eol;; - --new|--old) FAST_HIGHLIGHT[subversion-option-argument]=target;; - --revision|-r) FAST_HIGHLIGHT[subversion-option-argument]=revision-pair;; - --show-revs) FAST_HIGHLIGHT[subversion-option-argument]=show-revs;; - --strip) FAST_HIGHLIGHT[subversion-option-argument]=number;; - --with-revprop) FAST_HIGHLIGHT[subversion-option-argument]=revprop;; - esac - ;; - svnadmin/*) - case $__wrd in - --config-dir) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --fs-type) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --memory-cache-size|-M) FAST_HIGHLIGHT[subversion-option-argument]=number;; - --parent-dir) FAST_HIGHLIGHT[subversion-option-argument]=any;; - --revision|-r) FAST_HIGHLIGHT[subversion-option-argument]=revision-pair;; - esac - ;; - svndumpfilter/*) - case $__wrd in - --targets) FAST_HIGHLIGHT[subversion-option-argument]=any;; - esac - ;; - esac - elif [[ -n $FAST_HIGHLIGHT[subversion-option-argument] ]]; then - case $FAST_HIGHLIGHT[subversion-option-argument] in - any) - FAST_HIGHLIGHT[subversion-option-argument]= - return 1 - ;; - accept) - [[ $__wrd = (p(|ostpone)|e(|dit)|l(|aunch)|base|working|recommended|[mt][cf]|(mine|theirs)-(conflict|full)) ]] \ - && __style=${FAST_THEME_NAME}correct-subtle \ - || __style=${FAST_THEME_NAME}incorrect-subtle - ;; - depth) - [[ $__wrd = (empty|files|immediates|infinity) ]] \ - && __style=${FAST_THEME_NAME}correct-subtle \ - || __style=${FAST_THEME_NAME}incorrect-subtle - ;; - number) - [[ $__wrd = [0-9]## ]] \ - && __style=${FAST_THEME_NAME}mathnum \ - || __style=${FAST_THEME_NAME}incorrect-subtle - ;; - eol) - [[ $__wrd = (CR(|LF)|LF) ]] \ - && __style=${FAST_THEME_NAME}correct-subtle \ - || __style=${FAST_THEME_NAME}incorrect-subtle - ;; - show-revs) - [[ $__wrd = (merged|eligible) ]] \ - && __style=${FAST_THEME_NAME}correct-subtle \ - || __style=${FAST_THEME_NAME}incorrect-subtle - ;; - revision) - →chroma/-subversion.ch/parse-revision $__wrd $__start_pos $__end_pos - ;; - revision-pair) - local -a match mbegin mend - if [[ $__wrd = (#b)(\{[^}]##\}|[^:]##)(:)(*) ]]; then - →chroma/-subversion.ch/parse-revision $match[1] $__start_pos $(( __end_pos - ( mend[3]-mend[2] ) - 1 )) - →chroma/-subversion.ch/parse-revision $match[3] $(( __start_pos + ( mbegin[3]-mbegin[1] ) )) $__end_pos - (( __start=__start_pos-${#PREBUFFER}+(mbegin[2]-mbegin[1]), __end=__end_pos-${#PREBUFFER}-(mend[3]-mend[2]), __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") - else - →chroma/-subversion.ch/parse-revision $__wrd $__start_pos $__end_pos - fi - ;; - target) - →chroma/-subversion.ch/parse-target $__wrd $__start_pos $__end_pos || return $? - ;; - cmd) - this_word=1 - return 1 - ;; - esac - FAST_HIGHLIGHT[subversion-option-argument]= - elif [[ -z $FAST_HIGHLIGHT[subversion-subcommand] ]] - then - FAST_HIGHLIGHT[subversion-subcommand]=$__wrd - local subcmds - case $FAST_HIGHLIGHT[subversion-command] in - svn) subcmds='(add|auth|blame|praise|annotate|ann|cat|changelist|cl|checkout|co|cleanup|commit|ci|copy|cp|delete|del|remove|rm|diff|di|export|help|\?|h|import|info|list|ls|lock|log|merge|mergeinfo|mkdir|move|mv|rename|ren|patch|propdel|pdel|pd|propedit|pedit|pe|propget|pget|pg|proplist|plist|pl|propset|pset|ps|relocate|resolve|resolved|revert|status|stat|st|switch|sw|unlock|update|up|upgrade|x-shelf-diff|x-shelf-drop|x-shelf-list|x-shelves|x-shelf-list-by-paths|x-shelf-log|x-shelf-save|x-shelve|x-unshelve)' ;; - svnadmin) subcmds="(crashtest|create|delrevprop|deltify|dump|dump-revprops|freeze|help|\?|h|hotcopy|info|list-dblogs|list-unused-dblogs|load|load-revprops|lock|lslocks|lstxns|pack|recover|rmlocks|rmtxns|setlog|setrevprop|setuuid|unlock|upgrade|verify)";; - svndumpfilter) subcmds='(include|exclude|help|\?)';; - esac - [[ $FAST_HIGHLIGHT[subversion-subcommand] = $~subcmds ]] \ - && __style=${FAST_THEME_NAME}subcommand \ - || __style=${FAST_THEME_NAME}incorrect-subtle - FAST_HIGHLIGHT[subversion-subcommand-arguments]=0 - else - (( FAST_HIGHLIGHT[subversion-subcommand-arguments]+=1 )) - if [[ ( $FAST_HIGHLIGHT[subversion-subcommand] == (checkout|co|export|log|merge|switch|sw) && $FAST_HIGHLIGHT[subversion-subcommand-arguments] -eq 1 ) \ - || $FAST_HIGHLIGHT[subversion-subcommand] == (blame|praise|annotate|ann|cat|copy|cp|diff|info|list|ls|mergeinfo) ]]; then - →chroma/-subversion.ch/parse-target $__wrd $__start_pos $__end_pos || return $? - else - return 1 - fi - fi -} - -# Add region_highlight entry (via `reply' array). -# If 1 will be added to __start_pos, this will highlight "oken". -# If 1 will be subtracted from __end_pos, this will highlight "toke". -# $PREBUFFER is for specific situations when users does command \ -# i.e. when multi-line command using backslash is entered. -# -# This is a common place of adding such entry, but any above code can do -# it itself (and it does in other chromas) and skip setting __style to -# this way disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through, do obligatory things ourselves. -# _start_pos=$_end_pos advainces pointers in command line buffer. -# -# To pass through means to `return 1'. The highlighting of -# this single token is then done by fast-syntax-highlighting's -# main code and chroma doesn't have to do anything. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-vim.ch b/.config/zsh/.zsh/fsh/→chroma/-vim.ch deleted file mode 100644 index b3fecd1..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-vim.ch +++ /dev/null @@ -1,51 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Chroma for vim, shows last opened files under prompt. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __chars -integer __idx1 __idx2 -local -a __viminfo - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - (( ${+commands[vim]} )) && __style=${FAST_THEME_NAME}command || __style=${FAST_THEME_NAME}unknown-token - - { __viminfo=( ${(f)"$(<$HOME/.viminfo)"} ); } >> /dev/null - __viminfo=( "${${(M)__viminfo[@]:#>*}[@]:t}" ) - __viminfo=( "${__viminfo[@]:#COMMIT_EDITMSG}" ) - zle -M "Last opened:"$'\n'"${(F)__viminfo[1,5]}" -} || { - # Pass almost everything to big loop - return 1 -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above -# code can do it itself (and it does, see other chromas) and -# skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-whatis.ch b/.config/zsh/.zsh/fsh/→chroma/-whatis.ch deleted file mode 100644 index 993f989..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-whatis.ch +++ /dev/null @@ -1,138 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018-2019 Sebastian Gniazdowski - -(( next_word = 2 | 8192 )) -local THEFD check __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style - -(( ! ${+FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]} )) && \ - FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=0 - -(( ! ${+FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]} )) && { - is-at-least 5.0.6 && local __res=1 || local __res=0 - FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]="$__res" -} - --fast-whatis-chroma-callback() { - emulate -L zsh - setopt extendedglob warncreateglobal typesetsilent - - local THEFD="$1" input check=2 nl=$'\n' __wrd __style - - .fast-zts-read-all "$THEFD" input - - zle -F "$THEFD" - exec {THEFD}<&- - - __wrd="${${input#[^$nl]#$nl}%%$nl*}" - if [[ "$input" = test* ]]; then - if [[ "${input%$nl}" = *[^0-9]'0' ]]; then - if [[ "${input#test$nl}" = *nothing\ appropriate* ]]; then - FAST_HIGHLIGHT[whatis_chroma_type]=2 - else - FAST_HIGHLIGHT[whatis_chroma_type]=0 - fi - else - FAST_HIGHLIGHT[whatis_chroma_type]=1 - fi - elif [[ "$input" = type2* ]]; then - [[ "$input" != *nothing\ appropriate* ]] && check=1 || check=0 - elif [[ "$input" = type1* ]]; then - [[ "${input%$nl}" = *0 ]] && check=1 || check=0 - fi - - if (( check != 2 )); then - FAST_HIGHLIGHT[whatis-cache-$__wrd]=$check - if (( check )) then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]} - elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} - else - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} - fi - local -a start_end - start_end=( ${(s:/:)${${(M)${${input#type?${nl}[^$nl]#$nl}}#*$nl}%$nl}} ) - (( start_end[1] >= 0 )) && region_highlight+=("$start_end[1] $start_end[2] $__style") - zle -R - fi - - FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=1 - return 0 -} - -zle -N -- -fast-whatis-chroma-callback - -if (( __first_call )) && [[ -z "${FAST_HIGHLIGHT[whatis_chroma_type]}" ]] ;then - if ! command -v whatis > /dev/null; then - FAST_HIGHLIGHT[whatis_chroma_type]=0 - return 1 - fi - - exec {THEFD}< <( - print "test" - LANG=C whatis "osx whatis fallback check" - print "$?" - ) - command true # a workaround of Zsh bug - zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback -fi - -[[ "$__arg_type" = 3 ]] && return 2 - -if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 -fi - -if (( __first_call )) || [[ "$__wrd" = -* ]]; then - return 1 -elif (( ! FAST_HIGHLIGHT[whatis_chroma_type] )); then - # Return 1 (i.e. treat the argument as a path) only if the callback have - # had a chance to establish the whatis_chroma_type field - (( FAST_HIGHLIGHT[whatis_chroma_callback_was_ran] )) && return 1 -else - if [[ -z "${FAST_HIGHLIGHT[whatis-cache-$__wrd]}" ]]; then - if (( FAST_HIGHLIGHT[whatis_chroma_type] == 2 )); then - exec {THEFD}< <( - print "type2" - print "$__wrd" - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} )) - print "$__start/$__end" - LANG=C whatis "$__wrd" 2>/dev/null - ) - command true # see above - zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback - else - exec {THEFD}< <( - print "type1" - print "$__wrd" - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} )) - print "$__start/$__end" - LANG=C whatis "$__wrd" &> /dev/null - print "$?" - ) - command true - zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback - fi - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end $__style") - else - check=${FAST_HIGHLIGHT[whatis-cache-$__wrd]} - if (( check )) then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]} - elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} - elif (( FAST_HIGHLIGHT[whatis_chroma_type] )); then - __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} - fi - [[ -n "$__style" ]] && \ - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ - reply+=("$__start $__end $__style") - fi -fi -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4:sts=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-which.ch b/.config/zsh/.zsh/fsh/→chroma/-which.ch deleted file mode 100644 index 5a5d7b3..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-which.ch +++ /dev/null @@ -1,96 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Outputs (under prompt) result of query done with `which', `type -w', -# `whence -v', `whereis', `whatis'. -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg; the token can be eg.: "grep" -# -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" -local __style __output __chars -integer __idx1 __idx2 -local -a __results - -# First call, i.e. command starts, i.e. "grep" token etc. -(( __first_call )) && { - FAST_HIGHLIGHT[chroma-which-counter]=0 - FAST_HIGHLIGHT[chroma-which-counter-all]=1 - FAST_HIGHLIGHT[chroma-which-message]="" - FAST_HIGHLIGHT[chroma-which-skip-two]=0 - __style=${FAST_THEME_NAME}command - __output="" - -# Following call (not first one). -} || { - (( FAST_HIGHLIGHT[chroma-which-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-which-counter-all] )) - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - fi - - if [[ "$__wrd" = -* ]]; then - # Detected option, add style for it. - [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - if [[ "$__wrd" = "-x" ]]; then - FAST_HIGHLIGHT[chroma-which-skip-two]=1 - fi - else - # Count non-option tokens. - if (( FAST_HIGHLIGHT[chroma-which-skip-two] )); then - FAST_HIGHLIGHT[chroma-which-skip-two]=0 - else - (( FAST_HIGHLIGHT[chroma-which-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-which-counter] )) - if [[ "$__idx1" -eq 1 ]]; then - __chars="{" - __output="$(command which "$__wrd" 2>/dev/null)" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"command which: $__output" - __output="$(builtin which "$__wrd" 2>/dev/null)" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"builtin which: ${${${${__output[1,100]}//$'\n'/;}//$'\t'/ }//$__chars;/$__chars}${__output[101,101]:+...}" - __output="$(builtin type -w "$__wrd" 2>/dev/null)" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"type -w: $__output" - __output="$(builtin whence -v "$__wrd" 2>/dev/null)" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whence -v: $__output" - __output="$(command whereis "$__wrd" 2>/dev/null)" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whereis: $__output" - __output="$(command whatis "$__wrd" 2>/dev/null)" - __output="${${__output%%$'\n'*}//[[:blank:]]##/ }" - FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whatis: $__output" - fi - fi - fi - - if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-which-counter-all] )); then - [[ -n "${FAST_HIGHLIGHT[chroma-which-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-which-message]#$'\n'}" - fi -} - -# Add region_highlight entry (via `reply' array). -# -# This is a common place of adding such entry, but any above code -# can do it itself and skip setting __style to disable this code. -[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") - -# We aren't passing-through (no return 1 occured), do obligatory things ourselves. -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/-zinit.ch b/.config/zsh/.zsh/fsh/→chroma/-zinit.ch deleted file mode 100644 index 06637a8..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/-zinit.ch +++ /dev/null @@ -1,378 +0,0 @@ -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# Copyright (c) 2018-2019 Sebastian Gniazdowski -# -# Chroma function for command `git'. It colorizes the part of command -# line that holds `git' invocation. - -(( FAST_HIGHLIGHT[-zinit.ch-chroma-def] )) && return 1 - -FAST_HIGHLIGHT[-zinit.ch-chroma-def]=1 - -typeset -gA fsh__zinit__chroma__def -fsh__zinit__chroma__def=( - ## - ## No subcommand - ## - ## {{{ - - subcmd:NULL "NULL_0_opt" - NULL_0_opt "(-help|--help|-h) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - "subcommands" "(help|man|self-update|cd|times|zstatus|load|light|unload|snippet|ls|ice||update|status|report|delete|loaded|list|cd|create|edit|glance|stress|changes|recently|clist|completions|cdisable|cname|cenable|cname|creinstall|cuninstall|csearch|compinit|dtrace|dstart|dstop|dunload|dreport|dclear|compile|uncompile|compiled|cdlist|cdreplay|cdclear|srv|recall|env-whitelist|bindkeys|module)" - - ## }}} - - # Generic actions - NO_MATCH_\#_opt "* <<>> __style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" - NO_MATCH_\#_arg "__style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" - - - ## - ## `ice' - ## - ## {{{ - - subcmd:ice "ICE_#_arg // NO_MATCH_#_opt" - - "ICE_#_arg" "NO-OP // ::→chroma/-zinit-check-ice-mod" - - ## }}} - - ## - ## `snippet' - ## - ## {{{ - - subcmd:snippet "SNIPPET_0_opt // SNIPPET_1_arg // NO_MATCH_#_opt // - NO_MATCH_#_arg" - - SNIPPET_0_opt "(-f|--command) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - SNIPPET_1_arg "NO-OP // ::→chroma/-zinit-verify-snippet" - - ## }}} - - ## - ## `load' - ## - ## {{{ - - "subcmd:load" - "LOAD_1_arg // LOAD_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - LOAD_1_arg "NO-OP // ::→chroma/-zinit-verify-plugin" - - LOAD_2_arg "NO-OP // ::→chroma/-zinit-verify-plugin" - - ## }}} - - ## - ## `compile|uncompile|stress|edit|glance|recall|status|cd|changes` - ## - ## {{{ - - "subcmd:(compile|uncompile|stress|edit|glance|recall|status|cd|changes)" - "PLGSNP_1_arg // PLGSNP_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - PLGSNP_1_arg "NO-OP // ::→chroma/-zinit-verify-plugin-or-snippet" - - PLGSNP_2_arg "NO-OP // ::→chroma/-zinit-verify-plugin-or-snippet" - - ## }}} - - ## - ## `update' - ## - ## {{{ - - subcmd:update "UPDATE_0_opt // PLGSNP_1_arg // PLGSNP_2_arg // - NO_MATCH_#_opt // NO_MATCH_#_arg" - - UPDATE_0_opt " - (--all|-r|--reset|-q|--quiet|-p|--parallel) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - ## }}} - - ## - ## `light' - ## - ## {{{ - - subcmd:light "LIGHT_0_opt // LOAD_1_arg // LOAD_2_arg // NO_MATCH_#_opt // - NO_MATCH_#_arg" - - LIGHT_0_opt "-b - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - ## }}} - - ## - ## `unload' - ## - ## {{{ - - subcmd:unload "UNLOAD_0_opt // UNLOAD_1_arg // UNLOAD_2_arg // NO_MATCH_#_opt // - NO_MATCH_#_arg" - - UNLOAD_0_opt "-q - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - UNLOAD_1_arg "NO-OP // ::→chroma/-zinit-verify-loaded-plugin" - - UNLOAD_2_arg "NO-OP // ::→chroma/-zinit-verify-loaded-plugin" - - ## }}} - - ## - ## `report' - ## - ## {{{ - - subcmd:report "REPORT_0_opt // UNLOAD_1_arg // UNLOAD_2_arg // NO_MATCH_#_opt // - NO_MATCH_#_arg" - - REPORT_0_opt "--all - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - ## }}} - - ## - ## `delete' - ## - ## {{{ - - "subcmd:delete" - "DELETE_0_opt // PLGSNP_1_arg // PLGSNP_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - DELETE_0_opt " - (--all|--clean|-y|--yes|-q|--quiet) - <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" - - ## }}} - - ## - ## `cenable' - ## - ## {{{ - - subcmd:cenable "COMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - COMPLETION_1_arg "NO-OP // ::→chroma/-zinit-verify-disabled-completion" - - ## }}} - - ## - ## `cdisable' - ## - ## {{{ - - subcmd:cdisable "DISCOMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - DISCOMPLETION_1_arg "NO-OP // ::→chroma/-zinit-verify-completion" - - ## }}} - - - ## - ## `light' - ## - ## {{{ - - subcmd:uncompile "UNCOMPILE_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - UNCOMPILE_1_arg "NO-OP // ::→chroma/-zinit-verify-compiled-plugin" - - ## }}} - - ## - ## `*' - ## - ## {{{ - - "subcmd:*" "CATCH_ALL_#_opt" - "CATCH_ALL_#_opt" "* <<>> NO-OP // ::→chroma/main-chroma-std-aopt-SEMI-action" - - ## }}} -) - -#→chroma/-zinit-first-call() { - # This is being done in the proper place - in -fast-highlight-process - #FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=0 -#} - -→chroma/-zinit-verify-plugin() { - local _scmd="$1" _wrd="$4" - - [[ -d "$_wrd" ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } - - typeset -a plugins - plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N:t) ) - plugins=( "${plugins[@]//---//}" ) - plugins=( "${plugins[@]:#_local/zinit}" ) - plugins=( "${plugins[@]:#custom}" ) - - [[ -n "${plugins[(r)$_wrd]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - #__style=${FAST_THEME_NAME}incorrect-subtle - return 0 -} - -→chroma/-zinit-verify-plugin-or-snippet() { - →chroma/-zinit-verify-plugin "$1" "" "" "$4" || \ - →chroma/-zinit-verify-snippet "$1" "" "" "$4" - return $? -} - -→chroma/-zinit-verify-loaded-plugin() { - local _scmd="$1" _wrd="$4" - typeset -a plugins absolute1 absolute2 absolute3 normal - plugins=( "${ZINIT_REGISTERED_PLUGINS[@]:#_local/zinit}" ) - normal=( "${plugins[@]:#%*}" ) - absolute1=( "${(M)plugins[@]:#%*}" ) - absolute1=( "${absolute1[@]/\%\/\//%/}" ) - local hm="${HOME%/}" - absolute2=( "${absolute1[@]/$hm/HOME}" ) - absolute3=( "${absolute1[@]/\%/}" ) - plugins=( $absolute1 $absolute2 $absolute3 $normal ) - - [[ -n "${plugins[(r)$_wrd]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - #__style=${FAST_THEME_NAME}incorrect-subtle - - return 0 -} - -→chroma/-zinit-verify-completion() { - local _scmd="$1" _wrd="$4" - # Find enabled completions - typeset -a completions - completions=( "${ZINIT[COMPLETIONS_DIR]}"/_*(N:t) ) - completions=( "${completions[@]#_}" ) - - [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - - return 0 -} - -→chroma/-zinit-verify-disabled-completion() { - local _scmd="$1" _wrd="$4" - # Find enabled completions - typeset -a completions - completions=( "${ZINIT[COMPLETIONS_DIR]}"/[^_]*(N:t) ) - - [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - - return 0 -} - -→chroma/-zinit-verify-compiled-plugin() { - local _scmd="$1" _wrd="$4" - - typeset -a plugins - plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N) ) - - typeset -a show_plugins p matches - for p in "${plugins[@]}"; do - matches=( $p/*.zwc(N) ) - if [ "$#matches" -ne "0" ]; then - p="${p:t}" - [[ "$p" = (_local---zinit|custom) ]] && continue - p="${p//---//}" - show_plugins+=( "$p" ) - fi - done - - [[ -n "${show_plugins[(r)$_wrd]}" ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - return 1 -} - -→chroma/-zinit-verify-snippet() { - local _scmd="$1" url="$4" dirname local_dir - url="${${url#"${url%%[! $'\t']*}"}%/}" - id_as="${FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]:-${ZINIT_ICE[id-as]:-$url}}" - - filename="${${id_as%%\?*}:t}" - dirname="${${id_as%%\?*}:t}" - local_dir="${${${id_as%%\?*}:h}/:\/\//--}" - [[ "$local_dir" = "." ]] && local_dir="" || local_dir="${${${${${local_dir#/}//\//--}//=/--EQ--}//\?/--QM--}//\&/--AMP--}" - local_dir="${ZINIT[SNIPPETS_DIR]}${local_dir:+/$local_dir}" - - (( ${+ZINIT_ICE[svn]} || ${FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]} )) && { - # TODO: handle the SVN path's specifics - [[ -d "$local_dir/$dirname" ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - return 1 - } || { - # TODO: handle the non-SVN path's specifics - [[ -d "$local_dir/$dirname" ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - return 1 - } -} - -→chroma/-zinit-check-ice-mod() { - local _scmd="$1" _wrd="$4" - [[ "$_wrd" = (svn(\'|\")*|svn) ]] && \ - FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=1 - [[ "$_wrd" = (#b)(id-as(:|)(\'|\")(*)(\'|\")|id-as:(*)|id-as(*)) ]] && \ - FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]="${match[4]}${match[6]}${match[7]}" - - # Copy from zinit-autoload.zsh / -zplg-recall - local -a ice_order nval_ices ext_val_ices - ext_val_ices=( ${(@)${(@Ms.|.)ZINIT_EXTS[ice-mods]:#*\'\'*}//\'\'/} ) - - ice_order=( - svn proto from teleid bindmap cloneopts id-as depth if wait load - unload blockf pick bpick src as ver silent lucid notify mv cp - atinit atclone atload atpull nocd run-atpull has cloneonly make - service trackbinds multisrc compile nocompile nocompletions - reset-prompt wrap-track reset sh \!sh bash \!bash ksh \!ksh csh - \!csh aliases countdown ps-on-unload ps-on-update trigger-load - light-mode is-snippet atdelete pack git verbose on-update-of - subscribe param extract - # Include all additional ices – after - # stripping them from the possible: '' - ${(@s.|.)${ZINIT_EXTS[ice-mods]//\'\'/}} - ) - nval_ices=( - blockf silent lucid trackbinds cloneonly nocd run-atpull - nocompletions sh \!sh bash \!bash ksh \!ksh csh \!csh - aliases countdown light-mode is-snippet git verbose - - # Include only those additional ices, - # don't have the '' in their name, i.e. - # aren't designed to hold value - ${(@)${(@s.|.)ZINIT_EXTS[ice-mods]}:#*\'\'*} - - # Must be last - svn - ) - - if [[ "$_wrd" = (#b)(${(~j:|:)${ice_order[@]:#(${(~j:|:)nval_ices[@]:#(${(~j:|:)ext_val_ices[@]})})}})(*) ]]; then - reply+=("$(( __start )) $(( __start+${mend[1]} )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") - reply+=("$(( __start+${mbegin[2]} )) $(( __end )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-string]}") - -fast-highlight-string - return 0 - elif [[ "$_wrd" = (#b)(${(~j:|:)nval_ices[@]}) ]]; then - __style=${FAST_THEME_NAME}single-hyphen-option - return 0 - else - __style=${FAST_THEME_NAME}incorrect-subtle - return 1 - fi -} - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/fsh/→chroma/main-chroma.ch b/.config/zsh/.zsh/fsh/→chroma/main-chroma.ch deleted file mode 100644 index 323a978..0000000 --- a/.config/zsh/.zsh/fsh/→chroma/main-chroma.ch +++ /dev/null @@ -1,460 +0,0 @@ -# Copyright (c) 2018 Sebastian Gniazdowski -# -# Main chroma function. It allows to create the command-dedicated chromas -# (like -git.ch) through a definition provided by `chroma_def' array (read -# from the upper scope). -# -# $1 - 0 or 1, denoting if it's first call to the chroma, or following one -# $2 - the current token, also accessible by $__arg from the above scope - -# basically a private copy of $__arg -# $3 - a private copy of $_start_pos, i.e. the position of the token in the -# command line buffer, used to add region_highlight entry (see man), -# because Zsh colorizes by *ranges* in command line buffer -# $4 - a private copy of $_end_pos from the above scope -# - -(( next_word = 2 | 8192 )) - -→chroma/main-chroma-print() { - (( FAST_HIGHLIGHT[DEBUG] )) && print "$@" >> /tmp/fsh-dbg -} - -local __chroma_name="${1#\%}" __first_call="$2" __wrd="$3" __start_pos="$4" __end_pos="$5" - -# Not a well formed chroma name -[[ -z "$__chroma_name" ]] && return 1 - -# Load the fsh_{name-of-the-chroma}_chroma_def array -(( !FAST_HIGHLIGHT[-${__chroma_name}.ch-chroma-def] )) && →chroma/-${__chroma_name}.ch - -→chroma/main-chroma-print -r -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -→chroma/main-chroma-print -r -- @@@@@@@ local __chroma_name="${1#\%}" __first_call="$2" __wrd="$3" __start_pos="$4" __end_pos="$5" @@@@@@@ -local __style __entry __value __action __handler __tmp __svalue __hspaces=$'\t ' __nl=$'\n' __ch_def_name -integer __idx1 __idx2 __start __end __ivalue __have_value=0 -local -a __lines_list __avalue -local -A map -map=( "#" "_H" "^" "_D" "*" "_S" ) - -(( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN )) - -# Handler that highlights the options -→chroma/main-chroma-std-aopt-action() { - integer _start="$2" _end="$3" - local _scmd="$1" _wrd="$4" - - [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { - reply+=("$_start $(( _end - mend[2] + mbegin[2] - 1 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") - } || { - [[ "$_wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - } -} - -# Handler that highlights the options' arguments -→chroma/main-chroma-std-aopt-ARG-action() { - integer _start="$2" _end="$3" - local _scmd="$1" _wrd="$4" - - [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { - reply+=("$(( _start + 1 + mend[1] )) $_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") - } || __style=${FAST_THEME_NAME}optarg-${${${(M)_wrd:#(-|)<->}:+number}:-string} -} - -# This handler also highlights explicit arguments, i.e. --opt=the-explicit-arg -→chroma/main-chroma-std-aopt-SEMI-action() { - integer _start="$2" _end="$3" - local _scmd="$1" _wrd="$4" - - [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { - reply+=("$_start $(( _end - mend[2] + mbegin[2] - 1 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") - reply+=("$(( _start + 1 + mend[1] )) $_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") - } || { - [[ "$_wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ - __style=${FAST_THEME_NAME}single-hyphen-option - } -} - -# A handler which verifies the token as an GIT url -→chroma/main-chroma-std-verify-url() { - setopt localoptions extendedglob - local _wrd="$4" - integer url_correct=0 - # Correct matches - # Correct matches - if [[ "$_wrd" = (#b)(git|http|https|ftp|ftps|file)://([a-zA-Z0-9._~-]##)(:[0-9]##)(#c0,1)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then - url_correct=1 - elif [[ "$_wrd" = (#b)rsync://([a-zA-Z0-9._~-]##)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then - url_correct=1 - elif [[ "$_wrd" = (#b)ssh://([a-zA-Z0-9._~-]##@)(#c0,1)([a-zA-Z0-9._~-]##)(:[0-9]##)(#c0,1)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then - url_correct=1 - elif [[ "$_wrd" = (#b)([a-zA-Z0-9._~-]##@)(#c0,1)([a-zA-Z0-9._~-]##):([a-zA-Z0-9./_~:-](#c0,1)[a-zA-Z0-9._~:-][a-zA-Z0-9./_~:-]#)(#c0,1) ]]; then - url_correct=1 - elif [[ "$_wrd" = (#b)[[:alnum:]/_~:.-]## ]]; then - url_correct=1 - fi - - (( url_correct )) && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } -} - -# A handler which verifies the token as a shell wildcard -→chroma/main-chroma-std-verify-pattern() { - setopt localoptions extendedglob - local _wrd="$4" - __style=${FAST_THEME_NAME}globbing-ext -} - -# Creates a hash table for given option set (an *_opt field in the chroma def.) -→chroma/main-create-OPTION-hash.ch() { - local __subcmd="$1" __option_set_id="$2" __the_hash_name="$3" __ __e __el __the_hash_name __var_name - local -a __split __sp __s - - →chroma/main-chroma-print -rl "======================" " **## STARTING ##** →chroma/main-##CREATE##-option-HASH.ch // subcmd:$__subcmd // option_set_id:$__option_set_id // h-nam:$__the_hash_name" - →chroma/main-chroma-print "[D] Got option-set: ${(j:,:)__option_set_id}" - typeset -gA "$__the_hash_name" - →chroma/main-chroma-print "[E] __the_hash_name ${__the_hash_name}:[$__option_set_id]" - - # Split on || - __ch_def_name="fsh__${__chroma_name}__chroma__def[${__option_set_id}]" - __split=( "${(P@s:||:)__ch_def_name}" ) - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() - # Remove only leading and trailing whitespace - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - - →chroma/main-chroma-print -rl "[F] Got ||-__split: _________" ${${(@)${${__split[@]##[[:space:]]##}[@]//[${__hspaces}]##/ }[@]//[${__nl}]##/$__nl}[@]//(#s)/:::} "_________" - for __el in $__split; do - __sp=( "${(@s:<<>>:)__el}" ) - [[ ${#__sp} -eq 1 && -z "${__sp[1]}" ]] && __sp=() - __sp=( "${__sp[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - - →chroma/main-chroma-print -l -- "Processing an ||-part - got <<>>-split: _________" "${${__sp[@]}[@]/(#s)/-\\t}" "_________" - __e="${__sp[1]}" - local __e1=${${__e#\(}%\)(:add|:del|)} - local __e2=${(M)__e##\(*\)(:add|:del)} - # Split on | with the ( and ) and :add/:del stripped and then append - # the :add or :del depending on what's on the input line - __s=() - for __ in ${(@s:|:)__e1}; do - __s+=( $__${__e2:+${(M)__e%(:add|:del)}} ) - done - [[ ${#__s} -eq 1 && -z "${__s[1]}" ]] && __s=() - __s=( "${__s[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - shift __sp - - for __ in $__s; do - __=${__%\^} - [[ "$__" = -*:(add|del) ]] && __var_name="${__the_hash_name}[${__}-directive]" || __var_name="${__the_hash_name}[${__}-opt-action]" - →chroma/main-chroma-print "${(r:70:: :):-${__var_name}} := >>${__sp[1]}${${${#__sp}:#(0|1)}:+ +}<<" - : ${(P)__var_name::=${__sp[1]}${${${#__sp}:#(0|1)}:+ +}} - - if (( ${#__sp} >= 2 )); then - __var_name="${__the_hash_name}[${__}-opt-arg-action]" - →chroma/main-chroma-print "${(r:70:: :):-${__var_name}} := >>${__sp[2]}<<}" - : ${(P)__var_name::=$__sp[2]} - fi - done - done -} - -# Processes given token -→chroma/main-process-token.ch() { - local __subcmd="$1" __wrd="$2" __val __var_name __main_hash_name __the_hash_name __i __size - local -a __splitted __split __added - - →chroma/main-chroma-print "\n******************* Starting →chroma/main-process-token <<$__wrd>>// subcmd:${(qq)__subcmd}" - __main_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^\*])/${map[${match[1]}]}}" - __var_name="${__main_hash_name}[subcmd:$__subcmd]" - __splitted=( "${(@s://:P)__var_name}" ) - [[ ${#__splitted} -eq 1 && -z "${__splitted[1]}" ]] && __splitted=() - __splitted=( "${__splitted[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - - →chroma/main-chroma-print -rl -- "[B] MAIN-PROCESS-TOKEN: got [OPTION/ARG-**S-E-T-S**] //-splitted from subcmd:$__subcmd: ${${(j:, :)__splitted}:-EMPTY-SET!}" "----- __splitted\\Deleted: -----" ${${(j:, :)${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}}:-EMPTY-SET (deleted)!} "----- Added\\Deleted: -----" ${${(j:, :)${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}}:-EMPTY-SET (added)!} -----\ Deleted:\ ----- ${(j:, :)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}} >> /tmp/reply - - (( ! ${#__splitted} )) && { - __var_name="${__main_hash_name}[subcmd:*]" - __splitted=( "${(@s://:P)__var_name}" ) - [[ ${#__splitted} -eq 1 && -z "${__splitted[1]}" ]] && __splitted=() - __splitted=( "${__splitted[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - (( ! ${#__splitted} )) && return 1 - } - - →chroma/main-chroma-print -rl -- "---NO-HASH-CREATE-FROM-NOW-ON---" - - if [[ -z "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" ]]; then - →chroma/main-chroma-print -rl -- "-z OPT-WITH-ARG-ACTIVE == true" - if [[ "$__wrd" = -* ]]; then - →chroma/main-chroma-print "1st-PATH (-z opt-with-arg-active, non-opt-arg branch, i.e. OPTION BRANCH) [#${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}]" - for __val in ${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})} ${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}; do - [[ "${__val}" != "${__val%%_([0-9]##|\#)##*}"_${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}_opt(\*|\^|) && "${__val}" != "${__val%%_([0-9]##|\#)*}"_"#"_opt(\*|\^|) ]] && { →chroma/main-chroma-print "DIDN'T MATCH $__val / arg counter:${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" ; continue; } || →chroma/main-chroma-print "Got candidate: $__val" - # Create the hash cache-parameter if needed - __the_hash_name="fsh__chroma__${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}__${__subcmd//[^a-zA-Z0-9_]/_}__${${__val//(#b)([\#\^\*])/${map[${match[1]}]}}//[^a-zA-Z0-9_]/_}" - [[ "$__val" = *_opt(\*|\^|) && "${(P)+__the_hash_name}" -eq 0 ]] && →chroma/main-create-OPTION-hash.ch "$__subcmd" "$__val" "$__the_hash_name" || →chroma/main-chroma-print "Not creating, the hash already exists..." - # Try dedicated-entry for the option - __var_name="${__the_hash_name}[${${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}-opt-action]" - __split=( "${(@s://:P)__var_name}" ) - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() - # If no result, then try with catch-all entry - (( ! ${#__split} )) && { - →chroma/main-chroma-print "% no ${(q-)${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}-opt-action, retrying with *-opt-action" "|__var_name|:$__var_name" - __var_name="${__the_hash_name}[*-opt-action]" - __split=( "${(@s://:P)__var_name}" ) - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() - } - __svalue="$__var_name" - # Remove whitespace - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - →chroma/main-chroma-print -l -- "\`$__val' // ${#__split} // $__wrd: (ch.run #${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]}), deref. of \`$__var_name'" - if (( ${#__split} )); then - →chroma/main-chroma-print -l -- "Got split of {\$#__split:$#__split} ${__wrd}-opt-action or *-opt-action" "${${(q-)__split[@]}[@]/(#s)/->\\t}" - if [[ "${__split[2]}" = *[[:blank:]]+ ]]; then - →chroma/main-chroma-print "YES handling the value (the OPT.ARGUMENT)! [${__split[2]}]" - if [[ "$__wrd" = *=* ]]; then - →chroma/main-chroma-print "The-immediate Arg-Acquiring, of option" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="${__svalue%-opt-action\]}-opt-arg-action]" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="${__wrd#*=}" - __have_value=2 - else - →chroma/main-chroma-print "Enable Arg-Awaiting, of option" - →chroma/main-chroma-print "FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]=\"${__svalue%-opt-action\]}-opt-arg-action]\"" - __have_value=0 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="${__svalue%-opt-action\]}-opt-arg-action]" - fi - fi - - __action="${__split[1]}" - __handler="${__split[2]%[[:blank:]]+}" - - # Check for directives (like :add) - if [[ "$__val" = *_opt\^ ]]; then - __var_name="${__the_hash_name}[${${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}:add-directive]" - (( ${(P)+__var_name} )) && __split=( "${(@s://:P)__var_name}" ) || __split=() - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split[1]=() - __ivalue=${#__split} - __var_name="${__var_name%:add-*}:del-directive]" - (( ${(P)+__var_name} )) && __split+=( "${(@s://:P)__var_name}" ) - [[ ${#__split} -eq $(( __ivalue + 1 )) && -z "${__split[__ivalue+1]}" ]] && __split[__ivalue+1]=() - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - __tmp=${#__split} - - # First: del-directive - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]+="${(j: :)__split[__ivalue+1,__tmp]} " - - →chroma/main-chroma-print -rl ":add / :del directives: __ivalue:$__ivalue, THE __SPLIT[#$__tmp]: " "${__split[@]}" "//" "The FAST_HIGHLIGHT[chroma-*deleted-nodes]: " ${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]} >> /tmp/reply - - # Second: add-directive - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]+="${(j: :)__split[1,__ivalue]} " - fi - [[ "$__handler" = ::[^[:space:]]* ]] && __handler="${__handler#::}" || __handler="" - [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(1): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } - [[ "$__have_value" -ne 2 && -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl "Running action (1): $__action" ; eval "() { $__action; }"; } - [[ "$__val" != *\* ]] && break - else - →chroma/main-chroma-print -rl -- "NO-MATCH ROUTE TAKEN" - fi - done - else - →chroma/main-chroma-print "1st-PATH-B (-z opt-with-arg-active, non-opt-arg branch, ARGUMENT BRANCH [#${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}]) //// added-nodes: ${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}" - for __val in ${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})} ${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}; do - [[ "${__val}" != "${__val%%_([0-9]##|\#)*}"_"${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}"_arg(\*|\^|) && "${__val}" != "${__val%%_([0-9]##|\#)*}"_"#"_arg(\*|\^|) ]] && { →chroma/main-chroma-print "Continuing for $__val / arg counter ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" ; continue } - # Create the hash cache-parameter if needed - __the_hash_name="fsh__chroma__${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}__${__subcmd//[^a-zA-Z0-9_]/_}__${${__val//\#/H}//[^a-zA-Z0-9_]/_}" - __action="" __handler="" - →chroma/main-chroma-print "A hit, chosen __val:$__val!" - __ch_def_name="fsh__${__chroma_name}__chroma__def[$__val]" - __split=( "${(P@s:<<>>:)__ch_def_name}" ) - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - - __sp=( "${(@s://:)__split[1]}" ) - __sp=( "${__sp[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - __action="${__sp[1]#*::::: ##}" - - # Verify if it's the expected argument - [[ "${__sp[1]}" = *:::::* && "$__wrd" != ${~${__sp[1]%% ##:::::*}} ]] && \ - { →chroma/main-chroma-print -r "mismatch ${__sp[1]%% ##:::::*} != $__wrd, continuing" ; continue; } - - →chroma/main-chroma-print -l -- "Got action record for $__val, i.e. the split:" "${__sp[@]//(#s)/-\t}" "_________" - - [[ "${__sp[2]}" = ::[^[:space:]]* ]] && __handler="${__sp[2]#::}" || { [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && →chroma/main-chroma-print "=== Error === In chroma definition: a handler entry ${(q)__sp[2]} without leading \`::'" ; } - [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(3): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } - [[ -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running action(3): $__action" ; eval "() { $__action; } \"${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}\" \"$__start\" \"$__end\" \"$__wrd\""; } - - # Check for argument directives (like :add) - if (( ${#__split} >= 2 )); then - for __ in "${(@)__split[2,-1]}"; do - __splitted=( "${(@s://:)__}" ) - if [[ "${__splitted[1]}" = add:* ]]; then - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]+="${__splitted[1]#add:} ${(j: :)__splitted[2,-1]} " - elif [[ "${__splitted[1]}" = del:* ]]; then - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]+="${__splitted[1]#del:} ${(j: :)__splitted[2,-1]} " - fi - done - →chroma/main-chroma-print -l "ARGUMENT :add / :del directives: THE __SPLIT[#${#__split}]: " "${__split[@]//(#s)/-\\t}" "//" "The FAST_HIGHLIGHT[chroma-*deleted-nodes]: " ${(@)${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}//(#s)/-\\t} "The FAST_HIGHLIGHT[chroma-*added-nodes]: " ${(@)${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}//(#s)/-\\t} - fi - - [[ "$__val" != *\* ]] && break - done - fi - else - →chroma/main-chroma-print -- "2nd-PATH (-n opt-with-arg-active) NON-EMPTY arg-active:\nThe actual opt-val <<< \$__wrd:$__wrd >>> store (after the \`Arg-Awaiting' in the chroma-run: #$(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]-1 )) [current: #$(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr] ))])" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="$__wrd" - __have_value=1 - fi - - # Execute the action if not during simulated opt-argument (--opt=...) - →chroma/main-chroma-print "** BEFORE: \`if (( __have_value ))'" - if (( __have_value )); then - →chroma/main-chroma-print "In the \`if (( __have_value ))' [have_value: $__have_value]" - # Split - __var_name="${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="" - __split=( "${(@s://:P)__var_name}" ) - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && { →chroma/main-chroma-print -rl "NULL at __var_name:$__var_name" ; __split=(); } - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - - # Remember 1st level action - (( __have_value == 2 )) && __value="$__action" || __value="" - - if (( ${#__split} )); then - →chroma/main-chroma-print -l -- "Got //-split (3, for opt-ARG-action, from [$__var_name]):" "${${(q-)__split[@]}[@]/(#s)/+\\t}" - __action="${__split[1]}" - __handler="${__split[2]}" - [[ "$__handler" = ::[^[:space:]]* ]] && __handler="${__handler#::}" - - [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(2): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } - [[ -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running action(2): $__action" ; eval "$__action"; } - →chroma/main-chroma-print -rl -- "The __action value: [$__value]" - [[ "$__have_value" -eq 2 && -n "$__value" && "$__value" != "NO-OP" ]] && { →chroma/main-chroma-print -rl "Running action (of 1, at 2): $__value" ; eval "$__value"; } - fi - fi - →chroma/main-chroma-print -- "_________ Exiting →chroma/main-process-token.ch $__subcmd / $__wrd _________" -} - -# Iterates over the chroma def. fields and creates initial -# fields in the fsh__${__chroma_name}__chroma__def hash -→chroma/-pre_process_chroma_def.ch() { - local __key __value __ke _val __the_hash_name="$1" __var_name - local -a __split - - →chroma/main-chroma-print -rl -- "Starting PRE_PROCESS for __the_hash_name:$__the_hash_name" - - __ch_def_name="fsh__${__chroma_name}__chroma__def[subcommands]" - local __subcmds="${(P)__ch_def_name}" - if [[ "$__subcmds" = "::"* ]]; then - ${__subcmds#::} - __var_name="${__the_hash_name}[subcommands]" - : ${(P)__var_name::=(${(j:|:)reply})} - else - __var_name="${__the_hash_name}[subcommands]" - : ${(P)__var_name::=$__subcmds} - fi - →chroma/main-chroma-print "Got SUBCOMMANDS: ${(P)__var_name}" - - __ch_def_name="fsh__${__chroma_name}__chroma__def[subcmd-hook]" - local __subcmd_hook="${(P)__ch_def_name}" - if [[ -n "$__subcmd_hook" ]]; then - __var_name="${__the_hash_name}[subcmd-hook]" - : ${(P)__var_name::=$__subcmd_hook} - fi - - __ch_def_name="fsh__${__chroma_name}__chroma__def[(I)subcmd:*]" - for __key in "${(P@)__ch_def_name}"; do - __split=( "${(@s:|:)${${__key##subcmd:\((#c0,1)}%\)}}" ) - [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() - __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) - for __ke in "${__split[@]}"; do - __var_name="${__the_hash_name}[subcmd:$__ke]" - __ch_def_name="fsh__${__chroma_name}__chroma__def[$__key]" - : ${(P)__var_name::=${(P)__ch_def_name}} - →chroma/main-chroma-print -rl -- "Storred ${__var_name}=chroma_def[$__key], i.e. = ${(P)__ch_def_name}" - done - done -} - -if (( __first_call )); then - →chroma/-${__chroma_name}-first-call - FAST_HIGHLIGHT[chroma-current]="$__wrd" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]=0 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand]=0 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="" - FAST_HIGHLIGHT[chrome-${FAST_HIGHLIGHT[chroma-current]}-occurred-double-hyphen]=0 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]=1 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]="" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]="" - __the_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^])/${map[${match[1]}]}}" - (( 0 == ${(P)+__the_hash_name} )) && { - typeset -gA "$__the_hash_name" - →chroma/-pre_process_chroma_def.ch "$__the_hash_name" - } || →chroma/main-chroma-print "...No... [\${+$__the_hash_name} ${(P)+__the_hash_name}]" - return 1 -else - (( ++ FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr] )) - # Following call, i.e. not the first one - - # Check if chroma should end – test if token is of type - # "starts new command", if so pass-through – chroma ends - [[ "$__arg_type" = 3 ]] && return 2 - - →chroma/main-chroma-print "== @@ Starting @@ #${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]} Main-Chroma-call == // << __WORD:$__wrd >> ## Subcommand: ${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL} //@@// -n option-with-arg-active:${(q-)FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" - if [[ "$__wrd" = -* || -n "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" - ]]; then - →chroma/main-chroma-print "## The \`if -*' i.e. \`IF OPTION' MAIN branch" - →chroma/main-process-token.ch "${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL}" "$__wrd" - else - # If at e.g. '>' or destination/source spec (of the redirection) - if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then - return 1 - elif (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand] == 0 )) { - __the_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^])/${map[${match[1]}]}}" - __var_name="${__the_hash_name}[subcommands]" - if [[ "$__wrd" = ${(P)~__var_name} ]]; then - →chroma/main-chroma-print "GOT-SUBCOMMAND := $__wrd, subcmd verification / OK" - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand]=1 - FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="$__wrd" - __var_name="${__the_hash_name}[subcmd-hook]" - (( ${(P)+__var_name} )) && { →chroma/main-chroma-print -r -- "Running subcmd-hook: ${(P)__var_name}" ; "${(P)__var_name}" "$__wrd"; } - __style="${FAST_THEME_NAME}subcommand" - else - →chroma/main-chroma-print "subcmd verif / NOT OK; Incrementing the COUNTER-ARG ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]} -> $(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] + 1 ))" >> /tmp/fsh-dbg - (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] += 1 )) - →chroma/main-chroma-print "UNRECOGNIZED ARGUMENT ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" - →chroma/main-process-token.ch "${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL}" "$__wrd" - fi - } else { - __wrd="${__wrd//\`/x}" - __arg="${__arg//\`/x}" - __wrd="${(Q)__wrd}" - - local __tmp_def_name="fsh__${__chroma_name}__chroma__def[subcommands-blacklist]" - if [[ ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]} = \ - (${(~j:|:)${(@s:,:)${(PA)__tmp_def_name}}}) - ]] { - return 1 - } - - →chroma/main-chroma-print "Incrementing the COUNTER-ARG ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]} -> $(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] + 1 ))" - (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] += 1 )) - →chroma/main-chroma-print "ARGUMENT ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" - - →chroma/main-chroma-print "ELSE *-got-subcommand == 1 is TRUE" - →chroma/main-process-token.ch "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}" "$__wrd" - } - fi -fi - - -# Add region_highlight entry (via `reply' array) -if [[ -n "$__style" ]]; then - (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ - && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") -fi - -# We aren't passing-through, do obligatory things ourselves -(( this_word = next_word )) -_start_pos=$_end_pos - -return 0 - -# vim:ft=zsh:et:sw=4 diff --git a/.config/zsh/.zsh/git-completion.bash b/.config/zsh/.zsh/git-completion.bash deleted file mode 100644 index 1ed0362..0000000 --- a/.config/zsh/.zsh/git-completion.bash +++ /dev/null @@ -1,3516 +0,0 @@ -# bash/zsh completion support for core Git. -# -# Copyright (C) 2006,2007 Shawn O. Pearce -# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/). -# Distributed under the GNU General Public License, version 2.0. -# -# The contained completion routines provide support for completing: -# -# *) local and remote branch names -# *) local and remote tag names -# *) .git/remotes file names -# *) git 'subcommands' -# *) git email aliases for git-send-email -# *) tree paths within 'ref:path/to/file' expressions -# *) file paths within current working directory and index -# *) common --long-options -# -# To use these routines: -# -# 1) Copy this file to somewhere (e.g. ~/.git-completion.bash). -# 2) Add the following line to your .bashrc/.zshrc: -# source ~/.git-completion.bash -# 3) Consider changing your PS1 to also show the current branch, -# see git-prompt.sh for details. -# -# If you use complex aliases of form '!f() { ... }; f', you can use the null -# command ':' as the first command in the function body to declare the desired -# completion style. For example '!f() { : git commit ; ... }; f' will -# tell the completion to use commit completion. This also works with aliases -# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '". -# -# Compatible with bash 3.2.57. -# -# You can set the following environment variables to influence the behavior of -# the completion routines: -# -# GIT_COMPLETION_CHECKOUT_NO_GUESS -# -# When set to "1", do not include "DWIM" suggestions in git-checkout -# and git-switch completion (e.g., completing "foo" when "origin/foo" -# exists). -# -# GIT_COMPLETION_SHOW_ALL -# -# When set to "1" suggest all options, including options which are -# typically hidden (e.g. '--allow-empty' for 'git commit'). - -case "$COMP_WORDBREAKS" in -*:*) : great ;; -*) COMP_WORDBREAKS="$COMP_WORDBREAKS:" -esac - -# Discovers the path to the git repository taking any '--git-dir=' and -# '-C ' options into account and stores it in the $__git_repo_path -# variable. -__git_find_repo_path () -{ - if [ -n "${__git_repo_path-}" ]; then - # we already know where it is - return - fi - - if [ -n "${__git_C_args-}" ]; then - __git_repo_path="$(git "${__git_C_args[@]}" \ - ${__git_dir:+--git-dir="$__git_dir"} \ - rev-parse --absolute-git-dir 2>/dev/null)" - elif [ -n "${__git_dir-}" ]; then - test -d "$__git_dir" && - __git_repo_path="$__git_dir" - elif [ -n "${GIT_DIR-}" ]; then - test -d "${GIT_DIR-}" && - __git_repo_path="$GIT_DIR" - elif [ -d .git ]; then - __git_repo_path=.git - else - __git_repo_path="$(git rev-parse --git-dir 2>/dev/null)" - fi -} - -# Deprecated: use __git_find_repo_path() and $__git_repo_path instead -# __gitdir accepts 0 or 1 arguments (i.e., location) -# returns location of .git repo -__gitdir () -{ - if [ -z "${1-}" ]; then - __git_find_repo_path || return 1 - echo "$__git_repo_path" - elif [ -d "$1/.git" ]; then - echo "$1/.git" - else - echo "$1" - fi -} - -# Runs git with all the options given as argument, respecting any -# '--git-dir=' and '-C ' options present on the command line -__git () -{ - git ${__git_C_args:+"${__git_C_args[@]}"} \ - ${__git_dir:+--git-dir="$__git_dir"} "$@" 2>/dev/null -} - -# Removes backslash escaping, single quotes and double quotes from a word, -# stores the result in the variable $dequoted_word. -# 1: The word to dequote. -__git_dequote () -{ - local rest="$1" len ch - - dequoted_word="" - - while test -n "$rest"; do - len=${#dequoted_word} - dequoted_word="$dequoted_word${rest%%[\\\'\"]*}" - rest="${rest:$((${#dequoted_word}-$len))}" - - case "${rest:0:1}" in - \\) - ch="${rest:1:1}" - case "$ch" in - $'\n') - ;; - *) - dequoted_word="$dequoted_word$ch" - ;; - esac - rest="${rest:2}" - ;; - \') - rest="${rest:1}" - len=${#dequoted_word} - dequoted_word="$dequoted_word${rest%%\'*}" - rest="${rest:$((${#dequoted_word}-$len+1))}" - ;; - \") - rest="${rest:1}" - while test -n "$rest" ; do - len=${#dequoted_word} - dequoted_word="$dequoted_word${rest%%[\\\"]*}" - rest="${rest:$((${#dequoted_word}-$len))}" - case "${rest:0:1}" in - \\) - ch="${rest:1:1}" - case "$ch" in - \"|\\|\$|\`) - dequoted_word="$dequoted_word$ch" - ;; - $'\n') - ;; - *) - dequoted_word="$dequoted_word\\$ch" - ;; - esac - rest="${rest:2}" - ;; - \") - rest="${rest:1}" - break - ;; - esac - done - ;; - esac - done -} - -# The following function is based on code from: -# -# bash_completion - programmable completion functions for bash 3.2+ -# -# Copyright © 2006-2008, Ian Macdonald -# © 2009-2010, Bash Completion Maintainers -# -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# The latest version of this software can be obtained here: -# -# http://bash-completion.alioth.debian.org/ -# -# RELEASE: 2.x - -# This function can be used to access a tokenized list of words -# on the command line: -# -# __git_reassemble_comp_words_by_ref '=:' -# if test "${words_[cword_-1]}" = -w -# then -# ... -# fi -# -# The argument should be a collection of characters from the list of -# word completion separators (COMP_WORDBREAKS) to treat as ordinary -# characters. -# -# This is roughly equivalent to going back in time and setting -# COMP_WORDBREAKS to exclude those characters. The intent is to -# make option types like --date= and : easy to -# recognize by treating each shell word as a single token. -# -# It is best not to set COMP_WORDBREAKS directly because the value is -# shared with other completion scripts. By the time the completion -# function gets called, COMP_WORDS has already been populated so local -# changes to COMP_WORDBREAKS have no effect. -# -# Output: words_, cword_, cur_. - -__git_reassemble_comp_words_by_ref() -{ - local exclude i j first - # Which word separators to exclude? - exclude="${1//[^$COMP_WORDBREAKS]}" - cword_=$COMP_CWORD - if [ -z "$exclude" ]; then - words_=("${COMP_WORDS[@]}") - return - fi - # List of word completion separators has shrunk; - # re-assemble words to complete. - for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do - # Append each nonempty word consisting of just - # word separator characters to the current word. - first=t - while - [ $i -gt 0 ] && - [ -n "${COMP_WORDS[$i]}" ] && - # word consists of excluded word separators - [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ] - do - # Attach to the previous token, - # unless the previous token is the command name. - if [ $j -ge 2 ] && [ -n "$first" ]; then - ((j--)) - fi - first= - words_[$j]=${words_[j]}${COMP_WORDS[i]} - if [ $i = $COMP_CWORD ]; then - cword_=$j - fi - if (($i < ${#COMP_WORDS[@]} - 1)); then - ((i++)) - else - # Done. - return - fi - done - words_[$j]=${words_[j]}${COMP_WORDS[i]} - if [ $i = $COMP_CWORD ]; then - cword_=$j - fi - done -} - -if ! type _get_comp_words_by_ref >/dev/null 2>&1; then -_get_comp_words_by_ref () -{ - local exclude cur_ words_ cword_ - if [ "$1" = "-n" ]; then - exclude=$2 - shift 2 - fi - __git_reassemble_comp_words_by_ref "$exclude" - cur_=${words_[cword_]} - while [ $# -gt 0 ]; do - case "$1" in - cur) - cur=$cur_ - ;; - prev) - prev=${words_[$cword_-1]} - ;; - words) - words=("${words_[@]}") - ;; - cword) - cword=$cword_ - ;; - esac - shift - done -} -fi - -# Fills the COMPREPLY array with prefiltered words without any additional -# processing. -# Callers must take care of providing only words that match the current word -# to be completed and adding any prefix and/or suffix (trailing space!), if -# necessary. -# 1: List of newline-separated matching completion words, complete with -# prefix and suffix. -__gitcomp_direct () -{ - local IFS=$'\n' - - COMPREPLY=($1) -} - -# Similar to __gitcomp_direct, but appends to COMPREPLY instead. -# Callers must take care of providing only words that match the current word -# to be completed and adding any prefix and/or suffix (trailing space!), if -# necessary. -# 1: List of newline-separated matching completion words, complete with -# prefix and suffix. -__gitcomp_direct_append () -{ - local IFS=$'\n' - - COMPREPLY+=($1) -} - -__gitcompappend () -{ - local x i=${#COMPREPLY[@]} - for x in $1; do - if [[ "$x" == "$3"* ]]; then - COMPREPLY[i++]="$2$x$4" - fi - done -} - -__gitcompadd () -{ - COMPREPLY=() - __gitcompappend "$@" -} - -# Generates completion reply, appending a space to possible completion words, -# if necessary. -# It accepts 1 to 4 arguments: -# 1: List of possible completion words. -# 2: A prefix to be added to each possible completion word (optional). -# 3: Generate possible completion matches for this word (optional). -# 4: A suffix to be appended to each possible completion word (optional). -__gitcomp () -{ - local cur_="${3-$cur}" - - case "$cur_" in - --*=) - ;; - --no-*) - local c i=0 IFS=$' \t\n' - for c in $1; do - if [[ $c == "--" ]]; then - continue - fi - c="$c${4-}" - if [[ $c == "$cur_"* ]]; then - case $c in - --*=|*.) ;; - *) c="$c " ;; - esac - COMPREPLY[i++]="${2-}$c" - fi - done - ;; - *) - local c i=0 IFS=$' \t\n' - for c in $1; do - if [[ $c == "--" ]]; then - c="--no-...${4-}" - if [[ $c == "$cur_"* ]]; then - COMPREPLY[i++]="${2-}$c " - fi - break - fi - c="$c${4-}" - if [[ $c == "$cur_"* ]]; then - case $c in - *=|*.) ;; - *) c="$c " ;; - esac - COMPREPLY[i++]="${2-}$c" - fi - done - ;; - esac -} - -# Clear the variables caching builtins' options when (re-)sourcing -# the completion script. -if [[ -n ${ZSH_VERSION-} ]]; then - unset ${(M)${(k)parameters[@]}:#__gitcomp_builtin_*} 2>/dev/null -else - unset $(compgen -v __gitcomp_builtin_) -fi - -# This function is equivalent to -# -# __gitcomp "$(git xxx --git-completion-helper) ..." -# -# except that the output is cached. Accept 1-3 arguments: -# 1: the git command to execute, this is also the cache key -# 2: extra options to be added on top (e.g. negative forms) -# 3: options to be excluded -__gitcomp_builtin () -{ - # spaces must be replaced with underscore for multi-word - # commands, e.g. "git remote add" becomes remote_add. - local cmd="$1" - local incl="${2-}" - local excl="${3-}" - - local var=__gitcomp_builtin_"${cmd/-/_}" - local options - eval "options=\${$var-}" - - if [ -z "$options" ]; then - local completion_helper - if [ "$GIT_COMPLETION_SHOW_ALL" = "1" ]; then - completion_helper="--git-completion-helper-all" - else - completion_helper="--git-completion-helper" - fi - # leading and trailing spaces are significant to make - # option removal work correctly. - options=" $incl $(__git ${cmd/_/ } $completion_helper) " || return - - for i in $excl; do - options="${options/ $i / }" - done - eval "$var=\"$options\"" - fi - - __gitcomp "$options" -} - -# Variation of __gitcomp_nl () that appends to the existing list of -# completion candidates, COMPREPLY. -__gitcomp_nl_append () -{ - local IFS=$'\n' - __gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }" -} - -# Generates completion reply from newline-separated possible completion words -# by appending a space to all of them. -# It accepts 1 to 4 arguments: -# 1: List of possible completion words, separated by a single newline. -# 2: A prefix to be added to each possible completion word (optional). -# 3: Generate possible completion matches for this word (optional). -# 4: A suffix to be appended to each possible completion word instead of -# the default space (optional). If specified but empty, nothing is -# appended. -__gitcomp_nl () -{ - COMPREPLY=() - __gitcomp_nl_append "$@" -} - -# Fills the COMPREPLY array with prefiltered paths without any additional -# processing. -# Callers must take care of providing only paths that match the current path -# to be completed and adding any prefix path components, if necessary. -# 1: List of newline-separated matching paths, complete with all prefix -# path components. -__gitcomp_file_direct () -{ - local IFS=$'\n' - - COMPREPLY=($1) - - # use a hack to enable file mode in bash < 4 - compopt -o filenames +o nospace 2>/dev/null || - compgen -f /non-existing-dir/ >/dev/null || - true -} - -# Generates completion reply with compgen from newline-separated possible -# completion filenames. -# It accepts 1 to 3 arguments: -# 1: List of possible completion filenames, separated by a single newline. -# 2: A directory prefix to be added to each possible completion filename -# (optional). -# 3: Generate possible completion matches for this word (optional). -__gitcomp_file () -{ - local IFS=$'\n' - - # XXX does not work when the directory prefix contains a tilde, - # since tilde expansion is not applied. - # This means that COMPREPLY will be empty and Bash default - # completion will be used. - __gitcompadd "$1" "${2-}" "${3-$cur}" "" - - # use a hack to enable file mode in bash < 4 - compopt -o filenames +o nospace 2>/dev/null || - compgen -f /non-existing-dir/ >/dev/null || - true -} - -# Execute 'git ls-files', unless the --committable option is specified, in -# which case it runs 'git diff-index' to find out the files that can be -# committed. It return paths relative to the directory specified in the first -# argument, and using the options specified in the second argument. -__git_ls_files_helper () -{ - if [ "$2" == "--committable" ]; then - __git -C "$1" -c core.quotePath=false diff-index \ - --name-only --relative HEAD -- "${3//\\/\\\\}*" - else - # NOTE: $2 is not quoted in order to support multiple options - __git -C "$1" -c core.quotePath=false ls-files \ - --exclude-standard $2 -- "${3//\\/\\\\}*" - fi -} - - -# __git_index_files accepts 1 or 2 arguments: -# 1: Options to pass to ls-files (required). -# 2: A directory path (optional). -# If provided, only files within the specified directory are listed. -# Sub directories are never recursed. Path must have a trailing -# slash. -# 3: List only paths matching this path component (optional). -__git_index_files () -{ - local root="$2" match="$3" - - __git_ls_files_helper "$root" "$1" "${match:-?}" | - awk -F / -v pfx="${2//\\/\\\\}" '{ - paths[$1] = 1 - } - END { - for (p in paths) { - if (substr(p, 1, 1) != "\"") { - # No special characters, easy! - print pfx p - continue - } - - # The path is quoted. - p = dequote(p) - if (p == "") - continue - - # Even when a directory name itself does not contain - # any special characters, it will still be quoted if - # any of its (stripped) trailing path components do. - # Because of this we may have seen the same directory - # both quoted and unquoted. - if (p in paths) - # We have seen the same directory unquoted, - # skip it. - continue - else - print pfx p - } - } - function dequote(p, bs_idx, out, esc, esc_idx, dec) { - # Skip opening double quote. - p = substr(p, 2) - - # Interpret backslash escape sequences. - while ((bs_idx = index(p, "\\")) != 0) { - out = out substr(p, 1, bs_idx - 1) - esc = substr(p, bs_idx + 1, 1) - p = substr(p, bs_idx + 2) - - if ((esc_idx = index("abtvfr\"\\", esc)) != 0) { - # C-style one-character escape sequence. - out = out substr("\a\b\t\v\f\r\"\\", - esc_idx, 1) - } else if (esc == "n") { - # Uh-oh, a newline character. - # We cannot reliably put a pathname - # containing a newline into COMPREPLY, - # and the newline would create a mess. - # Skip this path. - return "" - } else { - # Must be a \nnn octal value, then. - dec = esc * 64 + \ - substr(p, 1, 1) * 8 + \ - substr(p, 2, 1) - out = out sprintf("%c", dec) - p = substr(p, 3) - } - } - # Drop closing double quote, if there is one. - # (There is not any if this is a directory, as it was - # already stripped with the trailing path components.) - if (substr(p, length(p), 1) == "\"") - out = out substr(p, 1, length(p) - 1) - else - out = out p - - return out - }' -} - -# __git_complete_index_file requires 1 argument: -# 1: the options to pass to ls-file -# -# The exception is --committable, which finds the files appropriate commit. -__git_complete_index_file () -{ - local dequoted_word pfx="" cur_ - - __git_dequote "$cur" - - case "$dequoted_word" in - ?*/*) - pfx="${dequoted_word%/*}/" - cur_="${dequoted_word##*/}" - ;; - *) - cur_="$dequoted_word" - esac - - __gitcomp_file_direct "$(__git_index_files "$1" "$pfx" "$cur_")" -} - -# Lists branches from the local repository. -# 1: A prefix to be added to each listed branch (optional). -# 2: List only branches matching this word (optional; list all branches if -# unset or empty). -# 3: A suffix to be appended to each listed branch (optional). -__git_heads () -{ - local pfx="${1-}" cur_="${2-}" sfx="${3-}" - - __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ - "refs/heads/$cur_*" "refs/heads/$cur_*/**" -} - -# Lists branches from remote repositories. -# 1: A prefix to be added to each listed branch (optional). -# 2: List only branches matching this word (optional; list all branches if -# unset or empty). -# 3: A suffix to be appended to each listed branch (optional). -__git_remote_heads () -{ - local pfx="${1-}" cur_="${2-}" sfx="${3-}" - - __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ - "refs/remotes/$cur_*" "refs/remotes/$cur_*/**" -} - -# Lists tags from the local repository. -# Accepts the same positional parameters as __git_heads() above. -__git_tags () -{ - local pfx="${1-}" cur_="${2-}" sfx="${3-}" - - __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ - "refs/tags/$cur_*" "refs/tags/$cur_*/**" -} - -# List unique branches from refs/remotes used for 'git checkout' and 'git -# switch' tracking DWIMery. -# 1: A prefix to be added to each listed branch (optional) -# 2: List only branches matching this word (optional; list all branches if -# unset or empty). -# 3: A suffix to be appended to each listed branch (optional). -__git_dwim_remote_heads () -{ - local pfx="${1-}" cur_="${2-}" sfx="${3-}" - local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers - - # employ the heuristic used by git checkout and git switch - # Try to find a remote branch that cur_es the completion word - # but only output if the branch name is unique - __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \ - --sort="refname:strip=3" \ - "refs/remotes/*/$cur_*" "refs/remotes/*/$cur_*/**" | \ - uniq -u -} - -# Lists refs from the local (by default) or from a remote repository. -# It accepts 0, 1 or 2 arguments: -# 1: The remote to list refs from (optional; ignored, if set but empty). -# Can be the name of a configured remote, a path, or a URL. -# 2: In addition to local refs, list unique branches from refs/remotes/ for -# 'git checkout's tracking DWIMery (optional; ignored, if set but empty). -# 3: A prefix to be added to each listed ref (optional). -# 4: List only refs matching this word (optional; list all refs if unset or -# empty). -# 5: A suffix to be appended to each listed ref (optional; ignored, if set -# but empty). -# -# Use __git_complete_refs() instead. -__git_refs () -{ - local i hash dir track="${2-}" - local list_refs_from=path remote="${1-}" - local format refs - local pfx="${3-}" cur_="${4-$cur}" sfx="${5-}" - local match="${4-}" - local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers - - __git_find_repo_path - dir="$__git_repo_path" - - if [ -z "$remote" ]; then - if [ -z "$dir" ]; then - return - fi - else - if __git_is_configured_remote "$remote"; then - # configured remote takes precedence over a - # local directory with the same name - list_refs_from=remote - elif [ -d "$remote/.git" ]; then - dir="$remote/.git" - elif [ -d "$remote" ]; then - dir="$remote" - else - list_refs_from=url - fi - fi - - if [ "$list_refs_from" = path ]; then - if [[ "$cur_" == ^* ]]; then - pfx="$pfx^" - fer_pfx="$fer_pfx^" - cur_=${cur_#^} - match=${match#^} - fi - case "$cur_" in - refs|refs/*) - format="refname" - refs=("$match*" "$match*/**") - track="" - ;; - *) - for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD; do - case "$i" in - $match*) - if [ -e "$dir/$i" ]; then - echo "$pfx$i$sfx" - fi - ;; - esac - done - format="refname:strip=2" - refs=("refs/tags/$match*" "refs/tags/$match*/**" - "refs/heads/$match*" "refs/heads/$match*/**" - "refs/remotes/$match*" "refs/remotes/$match*/**") - ;; - esac - __git_dir="$dir" __git for-each-ref --format="$fer_pfx%($format)$sfx" \ - "${refs[@]}" - if [ -n "$track" ]; then - __git_dwim_remote_heads "$pfx" "$match" "$sfx" - fi - return - fi - case "$cur_" in - refs|refs/*) - __git ls-remote "$remote" "$match*" | \ - while read -r hash i; do - case "$i" in - *^{}) ;; - *) echo "$pfx$i$sfx" ;; - esac - done - ;; - *) - if [ "$list_refs_from" = remote ]; then - case "HEAD" in - $match*) echo "${pfx}HEAD$sfx" ;; - esac - __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \ - "refs/remotes/$remote/$match*" \ - "refs/remotes/$remote/$match*/**" - else - local query_symref - case "HEAD" in - $match*) query_symref="HEAD" ;; - esac - __git ls-remote "$remote" $query_symref \ - "refs/tags/$match*" "refs/heads/$match*" \ - "refs/remotes/$match*" | - while read -r hash i; do - case "$i" in - *^{}) ;; - refs/*) echo "$pfx${i#refs/*/}$sfx" ;; - *) echo "$pfx$i$sfx" ;; # symbolic refs - esac - done - fi - ;; - esac -} - -# Completes refs, short and long, local and remote, symbolic and pseudo. -# -# Usage: __git_complete_refs [