From 1e204d36c1fab9884f65618ccca019d8cd5f9386 Mon Sep 17 00:00:00 2001 From: kj-sh604 Date: Wed, 16 Jul 2025 22:10:52 -0400 Subject: refactor: update `zsh-fast-syntax-highlighting` plugin --- .../-fast-make-targets | 98 --- .../zsh-fast-syntax-highlighting/-fast-run-command | 37 - .../-fast-run-git-command | 47 - .../-fast-zts-read-all | 17 - .../.fast-make-targets | 132 +++ .../.fast-read-ini-file | 30 + .../zsh-fast-syntax-highlighting/.fast-run-command | 37 + .../.fast-run-git-command | 60 ++ .../.fast-zts-read-all | 17 + .../.github/FUNDING.yml | 4 - .../shell/zsh-fast-syntax-highlighting/.travis.yml | 13 - .../zsh-fast-syntax-highlighting/:chroma/-alias.ch | 29 - .../:chroma/-autoload.ch | 104 --- .../:chroma/-autorandr.ch | 22 - .../zsh-fast-syntax-highlighting/:chroma/-awk.ch | 108 --- .../:chroma/-docker.ch | 90 -- .../:chroma/-example.ch | 120 --- .../:chroma/-fast-theme.ch | 40 - .../:chroma/-fpath_peq.ch | 61 -- .../zsh-fast-syntax-highlighting/:chroma/-git.ch | 945 -------------------- .../zsh-fast-syntax-highlighting/:chroma/-grep.ch | 89 -- .../zsh-fast-syntax-highlighting/:chroma/-hub.ch | 51 -- .../:chroma/-ionice.ch | 117 --- .../zsh-fast-syntax-highlighting/:chroma/-lab.ch | 59 -- .../zsh-fast-syntax-highlighting/:chroma/-make.ch | 105 --- .../zsh-fast-syntax-highlighting/:chroma/-nice.ch | 138 --- .../zsh-fast-syntax-highlighting/:chroma/-nmcli.ch | 58 -- .../zsh-fast-syntax-highlighting/:chroma/-node.ch | 37 - .../zsh-fast-syntax-highlighting/:chroma/-ogit.ch | 383 --------- .../zsh-fast-syntax-highlighting/:chroma/-perl.ch | 80 -- .../:chroma/-precommand.ch | 17 - .../:chroma/-printf.ch | 86 -- .../zsh-fast-syntax-highlighting/:chroma/-ruby.ch | 81 -- .../zsh-fast-syntax-highlighting/:chroma/-scp.ch | 87 -- .../zsh-fast-syntax-highlighting/:chroma/-sh.ch | 72 -- .../:chroma/-source.ch | 75 -- .../zsh-fast-syntax-highlighting/:chroma/-ssh.ch | 156 ---- .../:chroma/-subcommand.ch | 25 - .../:chroma/-subversion.ch | 252 ------ .../zsh-fast-syntax-highlighting/:chroma/-vim.ch | 51 -- .../:chroma/-whatis.ch | 134 --- .../zsh-fast-syntax-highlighting/:chroma/-which.ch | 96 --- .../:chroma/-zplugin.ch | 348 -------- .../:chroma/main-chroma.ch | 453 ---------- .../zsh-fast-syntax-highlighting/CHANGELOG.md | 95 +- .../zsh-fast-syntax-highlighting/DONATIONS.md | 441 ---------- .../shell/zsh-fast-syntax-highlighting/README.md | 121 +-- .../zsh-fast-syntax-highlighting/THEME_GUIDE.md | 47 +- .../shell/zsh-fast-syntax-highlighting/_fast-theme | 6 + .../zsh-fast-syntax-highlighting/fast-highlight | 295 ++++--- .../fast-read-ini-file | 30 - .../fast-string-highlight | 35 +- .../fast-syntax-highlighting.plugin.zsh | 71 +- .../shell/zsh-fast-syntax-highlighting/fast-theme | 4 +- .../share/free_theme.zsh | 61 ++ .../zsh-fast-syntax-highlighting/themes/base16.ini | 82 ++ .../themes/default.ini | 2 +- .../\342\206\222chroma/-alias.ch" | 29 + .../\342\206\222chroma/-autoload.ch" | 104 +++ .../\342\206\222chroma/-autorandr.ch" | 22 + .../\342\206\222chroma/-awk.ch" | 108 +++ .../\342\206\222chroma/-docker.ch" | 90 ++ .../\342\206\222chroma/-example.ch" | 120 +++ .../\342\206\222chroma/-fast-theme.ch" | 40 + .../\342\206\222chroma/-fpath_peq.ch" | 61 ++ .../\342\206\222chroma/-git.ch" | 954 +++++++++++++++++++++ .../\342\206\222chroma/-grep.ch" | 89 ++ .../\342\206\222chroma/-hub.ch" | 51 ++ .../\342\206\222chroma/-ionice.ch" | 117 +++ .../\342\206\222chroma/-lab.ch" | 59 ++ .../\342\206\222chroma/-make.ch" | 105 +++ .../\342\206\222chroma/-nice.ch" | 138 +++ .../\342\206\222chroma/-nmcli.ch" | 58 ++ .../\342\206\222chroma/-node.ch" | 37 + .../\342\206\222chroma/-ogit.ch" | 383 +++++++++ .../\342\206\222chroma/-perl.ch" | 80 ++ .../\342\206\222chroma/-podman.ch" | 90 ++ .../\342\206\222chroma/-precommand.ch" | 17 + .../\342\206\222chroma/-printf.ch" | 86 ++ .../\342\206\222chroma/-ruby.ch" | 81 ++ .../\342\206\222chroma/-scp.ch" | 87 ++ .../\342\206\222chroma/-sh.ch" | 72 ++ .../\342\206\222chroma/-source.ch" | 75 ++ .../\342\206\222chroma/-ssh.ch" | 159 ++++ .../\342\206\222chroma/-subcommand.ch" | 25 + .../\342\206\222chroma/-subversion.ch" | 250 ++++++ .../\342\206\222chroma/-vim.ch" | 51 ++ .../\342\206\222chroma/-whatis.ch" | 149 ++++ .../\342\206\222chroma/-which.ch" | 96 +++ .../\342\206\222chroma/-zinit.ch" | 378 ++++++++ .../\342\206\222chroma/main-chroma.ch" | 460 ++++++++++ .../zsh-syntax-highlighting.plugin.zsh | 1 + 92 files changed, 5528 insertions(+), 5545 deletions(-) delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/-fast-make-targets delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/-fast-run-command delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/-fast-run-git-command delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/-fast-zts-read-all create mode 100644 .config/shell/zsh-fast-syntax-highlighting/.fast-make-targets create mode 100644 .config/shell/zsh-fast-syntax-highlighting/.fast-read-ini-file create mode 100644 .config/shell/zsh-fast-syntax-highlighting/.fast-run-command create mode 100644 .config/shell/zsh-fast-syntax-highlighting/.fast-run-git-command create mode 100644 .config/shell/zsh-fast-syntax-highlighting/.fast-zts-read-all delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/.github/FUNDING.yml delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/.travis.yml delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-alias.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-autoload.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-autorandr.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-awk.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-docker.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-example.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-fast-theme.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-fpath_peq.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-git.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-grep.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-hub.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-ionice.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-lab.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-make.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-nice.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-nmcli.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-node.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-ogit.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-perl.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-precommand.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-printf.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-ruby.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-scp.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-sh.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-source.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-ssh.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-subcommand.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-subversion.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-vim.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-whatis.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-which.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/-zplugin.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/:chroma/main-chroma.ch delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/DONATIONS.md delete mode 100644 .config/shell/zsh-fast-syntax-highlighting/fast-read-ini-file create mode 100644 .config/shell/zsh-fast-syntax-highlighting/share/free_theme.zsh create mode 100644 .config/shell/zsh-fast-syntax-highlighting/themes/base16.ini create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-alias.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autoload.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autorandr.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-awk.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-docker.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-example.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fast-theme.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fpath_peq.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-git.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-grep.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-hub.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ionice.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-lab.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-make.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nice.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nmcli.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-node.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ogit.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-perl.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-podman.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-precommand.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-printf.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ruby.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-scp.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-sh.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-source.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ssh.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subcommand.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subversion.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-vim.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-whatis.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-which.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-zinit.ch" create mode 100644 ".config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/main-chroma.ch" create mode 120000 .config/shell/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh (limited to '.config') diff --git a/.config/shell/zsh-fast-syntax-highlighting/-fast-make-targets b/.config/shell/zsh-fast-syntax-highlighting/-fast-make-targets deleted file mode 100644 index 7f905d6..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/-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/shell/zsh-fast-syntax-highlighting/-fast-run-command b/.config/shell/zsh-fast-syntax-highlighting/-fast-run-command deleted file mode 100644 index e251bcc..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/-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/shell/zsh-fast-syntax-highlighting/-fast-run-git-command b/.config/shell/zsh-fast-syntax-highlighting/-fast-run-git-command deleted file mode 100644 index 604cbea..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/-fast-run-git-command +++ /dev/null @@ -1,47 +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 [[ -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} ) - [[ "$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/shell/zsh-fast-syntax-highlighting/-fast-zts-read-all b/.config/shell/zsh-fast-syntax-highlighting/-fast-zts-read-all deleted file mode 100644 index 96c52ab..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/-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/shell/zsh-fast-syntax-highlighting/.fast-make-targets b/.config/shell/zsh-fast-syntax-highlighting/.fast-make-targets new file mode 100644 index 0000000..10f8d0a --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/.fast-make-targets @@ -0,0 +1,132 @@ +# -*- 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 +} + +# Cache generated parsing for 1sec per session or globally if configured, per Makefile path. +if [[ -n "${FAST_HIGHLIGHT[chroma-make-cache-global]}" ]]; then + # Determine Makefile path. + # TODO: find a way to expand path and resolve alias - this cause deduplicated cache file. + local makefile_path + makefile_path=${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]} + + # If not absolute, resolve to absolute path + [[ $makefile_path != /* ]] && makefile_path="$PWD/$makefile_path" + + # Generate a safe hash for the cache file name using sha1sum + local makefile_hash + makefile_hash=$(print -n -- "$makefile_path" | sha1sum | awk '{print $1}') + + # Generate a sha1sum hash from the input variable + local input var val target dep TAB=$'\t' tmp IFS= + local input_hash + input_hash=$(print -n -- "$input" | sha1sum | awk '{print $1}') + + # Generate the cache file path. + local cache_file + cache_file="/tmp/fast-highlight-make-cache-${makefile_hash}-${input_hash}" + + if [[ ! -f $cache_file ]]; then + # Clean up old cache files. + rm -rf /tmp/fast-highlight-make-cache-${makefile_hash}-* + # Generate new cache file. + .make-parseMakefile "$input" + print -r -- "${(j:;:)TARGETS}" >| "$cache_file" + fi + FAST_HIGHLIGHT[chroma-make-cache]="$(<$cache_file)" + FAST_HIGHLIGHT[chroma-make-cache-born-at]="0" +else + 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 +fi + +reply2=( "${(s:;:)FAST_HIGHLIGHT[chroma-make-cache]}" ) + +# vim:ft=zsh:et diff --git a/.config/shell/zsh-fast-syntax-highlighting/.fast-read-ini-file b/.config/shell/zsh-fast-syntax-highlighting/.fast-read-ini-file new file mode 100644 index 0000000..2e57d10 --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/.fast-read-ini-file @@ -0,0 +1,30 @@ +# 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/shell/zsh-fast-syntax-highlighting/.fast-run-command b/.config/shell/zsh-fast-syntax-highlighting/.fast-run-command new file mode 100644 index 0000000..e251bcc --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/.fast-run-command @@ -0,0 +1,37 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/.fast-run-git-command b/.config/shell/zsh-fast-syntax-highlighting/.fast-run-git-command new file mode 100644 index 0000000..4a42b97 --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/.fast-run-git-command @@ -0,0 +1,60 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/.fast-zts-read-all b/.config/shell/zsh-fast-syntax-highlighting/.fast-zts-read-all new file mode 100644 index 0000000..96c52ab --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/.fast-zts-read-all @@ -0,0 +1,17 @@ +# $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/shell/zsh-fast-syntax-highlighting/.github/FUNDING.yml b/.config/shell/zsh-fast-syntax-highlighting/.github/FUNDING.yml deleted file mode 100644 index 38474bc..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -patreon: psprint -ko_fi: psprint diff --git a/.config/shell/zsh-fast-syntax-highlighting/.travis.yml b/.config/shell/zsh-fast-syntax-highlighting/.travis.yml deleted file mode 100644 index 351b593..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/.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/shell/zsh-fast-syntax-highlighting/:chroma/-alias.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-alias.ch deleted file mode 100644 index d581341..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-autoload.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-autoload.ch deleted file mode 100644 index 78a8924..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-autorandr.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-autorandr.ch deleted file mode 100644 index 9687db3..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-awk.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-awk.ch deleted file mode 100644 index 47b3ec7..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-docker.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-docker.ch deleted file mode 100644 index 0a6a3bb..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-example.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-example.ch deleted file mode 100644 index 8814922..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-fast-theme.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-fast-theme.ch deleted file mode 100644 index 15bc210..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-fpath_peq.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-fpath_peq.ch deleted file mode 100644 index 072cee3..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-git.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-git.ch deleted file mode 100644 index bf5fbe5..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/:chroma/-git.ch +++ /dev/null @@ -1,945 +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" - - ## }}} - - ## - ## `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" "" $(( 2 * 60 )) - [[ -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" $(( 2 * 60 )) - [[ -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)' refs/heads" "chroma-git-branches-$PWD" "refs/heads" $(( 2 * 60 )) - [[ -n ${__lines_list[(r)$_wrd]} ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ - { __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" "" $(( 2 * 60 )) - 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" "" $(( 2 * 60 )) - - (( __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-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-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 "git rev-parse --verify --quiet \"$_wrd\"" "chroma-git-commits-$PWD-$_wrd" "" $(( 1.5 * 60 )) - if (( ${#__lines_list} )); 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/shell/zsh-fast-syntax-highlighting/:chroma/-grep.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-grep.ch deleted file mode 100644 index 54309bf..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-hub.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-hub.ch deleted file mode 100644 index 466d2e5..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-ionice.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-ionice.ch deleted file mode 100644 index f328f83..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-lab.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-lab.ch deleted file mode 100644 index cf3fc95..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-make.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-make.ch deleted file mode 100644 index 91f7324..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-nice.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-nice.ch deleted file mode 100644 index 7fa8a94..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-nmcli.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-nmcli.ch deleted file mode 100644 index be444e5..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-node.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-node.ch deleted file mode 100644 index 65f214c..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-ogit.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-ogit.ch deleted file mode 100644 index 06f0d75..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-perl.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-perl.ch deleted file mode 100644 index 49f0ad3..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-precommand.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-precommand.ch deleted file mode 100644 index 7e85a06..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-printf.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-printf.ch deleted file mode 100644 index 89d2789..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-ruby.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-ruby.ch deleted file mode 100644 index 3495cc8..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-scp.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-scp.ch deleted file mode 100644 index d162284..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-sh.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-sh.ch deleted file mode 100644 index 13c8ded..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-source.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-source.ch deleted file mode 100644 index dc27e76..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-ssh.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-ssh.ch deleted file mode 100644 index 879158f..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-subcommand.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-subcommand.ch deleted file mode 100644 index 0665548..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-subversion.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-subversion.ch deleted file mode 100644 index 57b5674..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/:chroma/-subversion.ch +++ /dev/null @@ -1,252 +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 -} - -chroma/-subversion.ch() { - 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/shell/zsh-fast-syntax-highlighting/:chroma/-vim.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-vim.ch deleted file mode 100644 index b3fecd1..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-whatis.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-whatis.ch deleted file mode 100644 index ce59e8f..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/:chroma/-whatis.ch +++ /dev/null @@ -1,134 +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" - -(( ! ${+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 - 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/shell/zsh-fast-syntax-highlighting/:chroma/-which.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-which.ch deleted file mode 100644 index 5a5d7b3..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/: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/shell/zsh-fast-syntax-highlighting/:chroma/-zplugin.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/-zplugin.ch deleted file mode 100644 index 2302da5..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/:chroma/-zplugin.ch +++ /dev/null @@ -1,348 +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[-zplugin.ch-chroma-def] )) && return 1 - -FAST_HIGHLIGHT[-zplugin.ch-chroma-def]=1 - -typeset -gA fsh__zplugin__chroma__def -fsh__zplugin__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/-zplugin-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/-zplugin-verify-snippet" - - ## }}} - - ## - ## `load' - ## - ## {{{ - - "subcmd:(load|light|compile|stress|edit|glance|recall|status|cd|changes)" - "LOAD_1_arg // LOAD_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - LOAD_1_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - LOAD_2_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - ## }}} - - ## - ## `update' - ## - ## {{{ - - subcmd:update "UPDATE_0_opt // LOAD_1_arg // LOAD_2_arg // - NO_MATCH_#_opt // NO_MATCH_#_arg" - - UPDATE_0_opt " - (--all|-r|--reset|-q|--quiet) - <<>> NO-OP // :::chroma/main-chroma-std-aopt-action" - - LOAD_1_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - LOAD_2_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - ## }}} - - ## - ## `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|report' - ## - ## {{{ - - subcmd:"(unload|report)" "UNLOAD_1_arg // UNLOAD_2_arg // NO_MATCH_#_opt // - NO_MATCH_#_arg" - - UNLOAD_1_arg "NO-OP // :::chroma/-zplugin-verify-loaded-plugin" - - UNLOAD_2_arg "NO-OP // :::chroma/-zplugin-verify-loaded-plugin" - - ## }}} - - ## - ## `delete' - ## - ## {{{ - - "subcmd:delete" - "DELETE_0_opt // LOAD_1_arg // LOAD_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" - - LOAD_1_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - LOAD_2_arg "NO-OP // :::chroma/-zplugin-verify-plugin" - - ## }}} - - ## - ## `cenable' - ## - ## {{{ - - subcmd:cenable "COMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - COMPLETION_1_arg "NO-OP // :::chroma/-zplugin-verify-disabled-completion" - - ## }}} - - ## - ## `cdisable' - ## - ## {{{ - - subcmd:cdisable "DISCOMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - DISCOMPLETION_1_arg "NO-OP // :::chroma/-zplugin-verify-completion" - - ## }}} - - - ## - ## `light' - ## - ## {{{ - - subcmd:uncompile "UNCOMPILE_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" - - UNCOMPILE_1_arg "NO-OP // :::chroma/-zplugin-verify-compiled-plugin" - - ## }}} - - ## - ## `*' - ## - ## {{{ - - "subcmd:*" "CATCH_ALL_#_opt" - "CATCH_ALL_#_opt" "* <<>> NO-OP // :::chroma/main-chroma-std-aopt-SEMI-action" - - ## }}} -) - -#:chroma/-zplugin-first-call() { - # This is being done in the proper place - in -fast-highlight-process - #FAST_HIGHLIGHT[chroma-zplugin-ice-elements-svn]=0 -#} - -:chroma/-zplugin-verify-plugin() { - local _scmd="$1" _wrd="$4" - - [[ -d "$_wrd" ]] && \ - { __style=${FAST_THEME_NAME}correct-subtle; return 0; } - - typeset -a plugins - plugins=( "${ZPLGM[PLUGINS_DIR]}"/*(N:t) ) - plugins=( "${plugins[@]//---//}" ) - plugins=( "${plugins[@]:#_local/zplugin}" ) - plugins=( "${plugins[@]:#custom}" ) - - [[ -n "${plugins[(r)$_wrd]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - #__style=${FAST_THEME_NAME}incorrect-subtle - return 0 -} - -:chroma/-zplugin-verify-loaded-plugin() { - local _scmd="$1" _wrd="$4" - typeset -a plugins absolute1 absolute2 absolute3 normal - plugins=( "${ZPLG_REGISTERED_PLUGINS[@]:#_local/zplugin}" ) - 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/-zplugin-verify-completion() { - local _scmd="$1" _wrd="$4" - # Find enabled completions - typeset -a completions - completions=( "${ZPLGM[COMPLETIONS_DIR]}"/_*(N:t) ) - completions=( "${completions[@]#_}" ) - - [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - - return 0 -} - -:chroma/-zplugin-verify-disabled-completion() { - local _scmd="$1" _wrd="$4" - # Find enabled completions - typeset -a completions - completions=( "${ZPLGM[COMPLETIONS_DIR]}"/[^_]*(N:t) ) - - [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ - __style=${FAST_THEME_NAME}correct-subtle || \ - return 1 - - return 0 -} - -:chroma/-zplugin-verify-compiled-plugin() { - local _scmd="$1" _wrd="$4" - - typeset -a plugins - plugins=( "${ZPLGM[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---zplugin|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/-zplugin-verify-snippet() { - local _scmd="$1" url="$4" dirname local_dir - url="${${url#"${url%%[! $'\t']*}"}%/}" - id_as="${FAST_HIGHLIGHT[chroma-zplugin-ice-elements-id-as]:-${ZPLG_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="${ZPLGM[SNIPPETS_DIR]}${local_dir:+/$local_dir}" - - (( ${+ZPLG_ICE[svn]} || ${FAST_HIGHLIGHT[chroma-zplugin-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/-zplugin-check-ice-mod() { - local _scmd="$1" _wrd="$4" - [[ "$_wrd" = (svn(\'|\")*|svn) ]] && \ - FAST_HIGHLIGHT[chroma-zplugin-ice-elements-svn]=1 - [[ "$_wrd" = (#b)(id-as(:|)(\'|\")(*)(\'|\")|id-as:(*)|id-as(*)) ]] && \ - FAST_HIGHLIGHT[chroma-zplugin-ice-elements-id-as]="${match[4]}${match[6]}${match[7]}" - - # Copy from zplugin-autoload.zsh / -zplg-recall - local -a ice_order nval_ices ext_val_ices - ext_val_ices=( ${(@)${(@Ms.|.)ZPLG_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 - # Include all additional ices – after - # stripping them from the possible: '' - ${(@s.|.)${ZPLG_EXTS[ice-mods]//\'\'/}} - ) - nval_ices=( - blockf silent lucid trackbinds cloneonly nocd run-atpull - nocompletions sh \!sh bash \!bash ksh \!ksh csh \!csh - aliases countdown - - # Include only those additional ices, - # don't have the '' in their name, i.e. - # aren't designed to hold value - ${(@)${(@s.|.)ZPLG_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/shell/zsh-fast-syntax-highlighting/:chroma/main-chroma.ch b/.config/shell/zsh-fast-syntax-highlighting/:chroma/main-chroma.ch deleted file mode 100644 index 842bf8b..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/:chroma/main-chroma.ch +++ /dev/null @@ -1,453 +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 )); then - __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}" - - :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 -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/shell/zsh-fast-syntax-highlighting/CHANGELOG.md b/.config/shell/zsh-fast-syntax-highlighting/CHANGELOG.md index b2a7665..993eaa7 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/CHANGELOG.md +++ b/.config/shell/zsh-fast-syntax-highlighting/CHANGELOG.md @@ -2,14 +2,14 @@ **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). +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) +![image](https://raw.githubusercontent.com/zdharma-continuum/fast-syntax-highlighting/master/images/global-alias.png) **2018-08-01** @@ -27,74 +27,77 @@ set_fast_theme() { } ``` -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)). +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) +![image](https://raw.githubusercontent.com/zdharma-continuum/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). +`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). +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. +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. +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: +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` +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. +[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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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: +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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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). +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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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). +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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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. +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** @@ -110,18 +113,18 @@ FAST_BLIST_PATTERNS[/mount/disk2/*]=1 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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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: +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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/fast-syntax-highlighting/master/images/array-assign.png) **2018-05-22** @@ -131,14 +134,14 @@ Assignments are no more one-colour default-white. When used in assignment, highl - strings (double-quoted and single-quoted), - math-mode (`val=$(( ... ))`). -![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/assign.png) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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. +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) +![animation](https://raw.githubusercontent.com/zdharma-continuum/fast-syntax-highlighting/master/images/math.gif) diff --git a/.config/shell/zsh-fast-syntax-highlighting/DONATIONS.md b/.config/shell/zsh-fast-syntax-highlighting/DONATIONS.md deleted file mode 100644 index fc22058..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/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/shell/zsh-fast-syntax-highlighting/README.md b/.config/shell/zsh-fast-syntax-highlighting/README.md index 6ba4ee0..7f50905 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/README.md +++ b/.config/shell/zsh-fast-syntax-highlighting/README.md @@ -1,16 +1,10 @@ -[![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) +# Fast Syntax Highlighting (F-Sy-H) [![Gitter][gitter-image]][gitter-link] Feature rich syntax highlighting for Zsh.
image could not be loaded @@ -22,22 +16,20 @@ Feature rich syntax highlighting for Zsh. - [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) + +- [License](https://github.com/zdharma-continuum/fast-syntax-highlighting/blob/master/LICENSE) +- [Changelog](https://github.com/zdharma-continuum/fast-syntax-highlighting/blob/master/CHANGELOG.md) +- [Theme Guide](https://github.com/zdharma-continuum/fast-syntax-highlighting/blob/master/THEME_GUIDE.md) +- [Chroma Guide](https://github.com/zdharma-continuum/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) +- 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 @@ -46,20 +38,35 @@ Feature rich syntax highlighting for Zsh. Clone the Repository. ```zsh -git clone https://github.com/zdharma/fast-syntax-highlighting ~/path/to/fsh +git clone https://github.com/zdharma-continuum/fast-syntax-highlighting ~/path/to/fsh ``` And add the following to your `zshrc` file. + ```zsh source ~/path/to/fsh/fast-syntax-highlighting.plugin.zsh ``` -### Zplugin +### Zinit Add the following to your `zshrc` file. ```zsh -zplugin light zdharma/fast-syntax-highlighting +zinit light zdharma-continuum/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-continuum.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-continuum/fast-syntax-highlighting \ + blockf \ + zsh-users/zsh-completions \ + atload"!_zsh_autosuggest_start" \ + zsh-users/zsh-autosuggestions ``` ### Antigen @@ -67,26 +74,33 @@ zplugin light zdharma/fast-syntax-highlighting Add the following to your `zshrc` file. ```zsh -antigen bundle zdharma/fast-syntax-highlighting +antigen bundle zdharma-continuum/fast-syntax-highlighting ``` +### Fig + +[Fig](https://fig.io) adds apps, shortcuts, and autocomplete to your existing terminal. + +Install `fast-syntax-highlighting` in just one click. + + + + ### Zgen -Add the following to your `.zshrc` file in the same place you're doing -your other `zgen load` calls in. +Add the following to your `.zshrc` file in the same place you're doing your other `zgen load` calls in. -``` -zgen load zdharma/fast-syntax-highlighting +```zsh +zgen load zdharma-continuum/fast-syntax-highlighting ``` - ### Oh-My-Zsh Clone the Repository. -``` -git clone https://github.com/zdharma/fast-syntax-highlighting.git \ - ~ZSH_CUSTOM/plugins/fast-syntax-highlighting +```zsh +git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git \ + ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting ``` And add `fast-syntax-highlighting` to your plugin list. @@ -99,7 +113,7 @@ Switch themes via `fast-theme {theme-name}`.
image could not be loaded @@ -115,7 +129,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -123,7 +137,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -133,7 +147,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -145,7 +159,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -157,18 +171,17 @@ Exact highlighting that recognizes quotings.
image could not be loaded
- ### here-strings
image could not be loaded @@ -180,7 +193,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -190,7 +203,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -202,7 +215,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper 2 lines)
image could not be loaded @@ -214,7 +227,7 @@ Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line):
image could not be loaded @@ -226,21 +239,21 @@ 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). +The [chromas](https://github.com/zdharma-continuum/fast-syntax-highlighting/tree/master/%E2%86%92chroma) that are +enabled by default can be found +[here](https://github.com/zdharma-continuum/fast-syntax-highlighting/blob/master/fast-highlight#L166). ### Math-mode highlighting
image could not be loaded @@ -250,13 +263,14 @@ that are enabled by default can be found
image could not be loaded
# Performance + Performance differences can be observed in this Asciinema recording, where a `10 kB` function is being edited.
@@ -265,10 +279,5 @@ Performance differences can be observed in this Asciinema recording, where a `10
-## IRC Channel - -Channel `#zplugin@freenode` is a support place for all author's projects. Connect to: -[chat.freenode.net:6697](ircs://chat.freenode.net:6697/%23zplugin) (SSL) or [chat.freenode.net:6667](irc://chat.freenode.net:6667/%23zplugin) - and join #zplugin. - -Following is a quick access via Webchat [![IRC](https://kiwiirc.com/buttons/chat.freenode.net/zplugin.png)](https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin) +[gitter-image]: https://badges.gitter.im/zdharma-continuum/community.svg +[gitter-link]: https://gitter.im/zdharma-continuum/community diff --git a/.config/shell/zsh-fast-syntax-highlighting/THEME_GUIDE.md b/.config/shell/zsh-fast-syntax-highlighting/THEME_GUIDE.md index 1d66dac..7f53c53 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/THEME_GUIDE.md +++ b/.config/shell/zsh-fast-syntax-highlighting/THEME_GUIDE.md @@ -1,14 +1,13 @@ # 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 +`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: +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 @@ -32,8 +31,8 @@ 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. +So for example, issue `fast-theme XDG:overlay` to load `~/.config/fsh/overlay.ini` as overlay. The `.ini` extension is +optional. ## Secondary Theme @@ -50,27 +49,25 @@ 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: +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) +![sshot](https://raw.githubusercontent.com/zdharma-continuum/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`: +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) +![image](https://raw.githubusercontent.com/zdharma-continuum/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. +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. +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). +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/shell/zsh-fast-syntax-highlighting/_fast-theme b/.config/shell/zsh-fast-syntax-highlighting/_fast-theme index 4c88062..67f8a4d 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/_fast-theme +++ b/.config/shell/zsh-fast-syntax-highlighting/_fast-theme @@ -26,6 +26,12 @@ arguments=( 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 diff --git a/.config/shell/zsh-fast-syntax-highlighting/fast-highlight b/.config/shell/zsh-fast-syntax-highlighting/fast-highlight index c410c23..d82df20 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/fast-highlight +++ b/.config/shell/zsh-fast-syntax-highlighting/fast-highlight @@ -33,7 +33,10 @@ typeset -g FAST_WORK_DIR : ${FAST_WORK_DIR:=$FAST_BASE_DIR} FAST_WORK_DIR=${~FAST_WORK_DIR} () { - setopt localoptions extendedglob + # We must not use emulate -o if we want to keep compatibility with Zsh < v.5.0 + # See https://github.com/zdharma-continuum/fast-syntax-highlighting/pull/7 + emulate -L zsh + setopt extendedglob local -A map map=( "XDG:" "${XDG_CONFIG_HOME:-$HOME/.config}/fsh/" "LOCAL:" "/usr/local/share/fsh/" @@ -107,7 +110,7 @@ zstyle :plugin:fast-syntax-highlighting theme default : ${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]:=} +: ${FAST_HIGHLIGHT_STYLES[secondary]:=free} fi # This can overwrite some of *_STYLES fields @@ -165,107 +168,115 @@ typeset -gA FAST_HIGHLIGHT : ${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-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-zplugin :chroma/main-chroma.ch%zplugin - 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 + 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-podman →chroma/-podman.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-goawk →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 @@ -288,7 +299,7 @@ typeset -ga ZLAST_COMMANDS if zmodload -e zsh/parameter; then if (( $+aliases[(e)$1] )); then REPLY=alias - elif (( ${+galiases[(e)$1]} )); then + elif (( ${+galiases[(e)${(Q)1}]} )); then REPLY="global alias" elif (( $+functions[(e)$1] )); then REPLY=function @@ -360,7 +371,7 @@ typeset -ga ZLAST_COMMANDS -fast-highlight-process() { emulate -L zsh - setopt extendedglob bareglobqual nonomatch noksharrays typesetsilent + setopt extendedglob bareglobqual nonomatch typesetsilent [[ $CONTEXT == "select" ]] && return 0 @@ -434,9 +445,9 @@ typeset -ga ZLAST_COMMANDS FAST_HIGHLIGHT[chroma-autoload-elements]="" # Restart FPATH elements gathering FAST_HIGHLIGHT[chroma-fpath_peq-elements]="" - # Restart svn zplugin's ICE gathering - FAST_HIGHLIGHT[chroma-zplugin-ice-elements-svn]=0 - FAST_HIGHLIGHT[chroma-zplugin-ice-elements-id-as]="" + # 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 @@ -629,11 +640,13 @@ typeset -ga ZLAST_COMMANDS [[ $__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 @@ -641,14 +654,17 @@ typeset -ga ZLAST_COMMANDS _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" @@ -659,6 +675,7 @@ typeset -ga ZLAST_COMMANDS [[ ${__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 )) ) @@ -667,12 +684,17 @@ typeset -ga ZLAST_COMMANDS [[ $__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 ) ]]; then + 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 @@ -716,15 +738,19 @@ typeset -ga ZLAST_COMMANDS } || -fast-highlight-string; (( _start_pos = _start_pos - itmp + 1, 1 > 0 )) } - elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]]; then + + } elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]] { __style=${FAST_THEME_NAME}history-expansion - elif [[ $__arg == ${histchars[2]}* ]]; then + + } elif [[ $__arg == ${histchars[2]}* ]] { __style=${FAST_THEME_NAME}history-expansion - elif (( __arg_type == 3 )); then + + } 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] == '((' ]]; then + + } elif [[ $__arg[1,2] == '((' ]] { # Arithmetic evaluation. # # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} @@ -752,25 +778,30 @@ typeset -ga ZLAST_COMMANDS # Counting complex brackets (for brackets-highlighter): 7. )) for as-command (( _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) } - elif [[ $__arg == '()' ]]; then + + } elif [[ $__arg == '()' ]] { _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) # anonymous function __style=${FAST_THEME_NAME}reserved-word - elif [[ $__arg == $'\x28' ]]; then + } elif [[ $__arg == $'\x28' ]] { # subshell '(', stack: letter 'R' __style=${FAST_THEME_NAME}reserved-word braces_stack='R'$braces_stack - elif [[ $__arg == $'\x29' ]]; then + + } 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 )); then + + } elif (( this_word & 14 )) { __style=${FAST_THEME_NAME}default - elif [[ $__arg = (';;'|';&'|';|') ]] && (( this_word & BIT_case_code )); then + + } 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 = \$\([^\(]* ]]; then + + } elif [[ $__arg = \$\([^\(]* ]] { already_added=1 - fi + } ;; *) # ADD @@ -1035,7 +1066,7 @@ typeset -ga ZLAST_COMMANDS __style=${FAST_THEME_NAME}commandseparator elif (( in_redirection == 2 )); then __style=${FAST_THEME_NAME}redirection - elif (( ${+galiases[(e)$__arg]} )); then + elif (( ${+galiases[(e)${(Q)__arg}]} )); then __style=${FAST_THEME_NAME}global-alias else if [[ ${FAST_HIGHLIGHT[no_check_paths]} != 1 ]]; then @@ -1119,6 +1150,18 @@ typeset -ga ZLAST_COMMANDS 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]))(|[^[:alnum:]]*) || $__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]}") @@ -1373,10 +1416,12 @@ zle -N -- fast-highlight-check-path-handler -fast-highlight-check-path-handler 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 @@ -1384,13 +1429,13 @@ zle -N -- fast-highlight-check-path-handler -fast-highlight-check-path-handler 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}" + 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 += $#MATCH )) - (( i += $#MATCH )) + (( k += MEND )) + (( i += MEND )) else if (( __asize > i+1 )) && [[ $__arg[i+1] == [xXuU] ]]; then # \x not followed by hex digits is probably an error diff --git a/.config/shell/zsh-fast-syntax-highlighting/fast-read-ini-file b/.config/shell/zsh-fast-syntax-highlighting/fast-read-ini-file deleted file mode 100644 index 2e57d10..0000000 --- a/.config/shell/zsh-fast-syntax-highlighting/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/shell/zsh-fast-syntax-highlighting/fast-string-highlight b/.config/shell/zsh-fast-syntax-highlighting/fast-string-highlight index dd8eb4f..cc8d860 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/fast-string-highlight +++ b/.config/shell/zsh-fast-syntax-highlighting/fast-string-highlight @@ -15,18 +15,18 @@ function -fast-highlight-string-process { pair_map=( "(" ")" "{" "}" "[" "]" ) - while [[ $_mybuf = (#b)[^"{}()[]\\\"'"]#((["({[]})\"'"])|[\\](*))(*) ]]; do - [[ -n ${match[3]} ]] && { - __idx+=${mbegin[1]} + while [[ $_mybuf = (#b)([^"{}()[]\\\"'"]#)((["({[]})\"'"])|[\\](*))(*) ]]; do + if [[ -n ${match[4]} ]] { + __idx+=${mbegin[2]} - [[ $__quoting = \' ]] && _mybuf=${match[3]} || { _mybuf=${match[3]:1}; (( ++ __idx )); } - } || { - __idx+=${mbegin[1]} + [[ $__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[1]} = ["({["] ]]; then + if [[ ${match[2]} = ["({["] ]]; then pos_to_level[$__idx]=$(( ++__level )) level_to_pos[$__level]=$__idx - elif [[ ${match[1]} = ["]})"] ]]; then + elif [[ ${match[2]} = ["]})"] ]]; then if (( __level > 0 )); then __pair_idx=${level_to_pos[$__level]} pos_to_level[$__idx]=$(( __level -- )) @@ -40,10 +40,21 @@ function -fast-highlight-string-process { fi } - [[ ${match[1]} = \" && $__quoting != \' ]] && { [[ $__quoting = '"' ]] && __quoting="" || __quoting='"'; } - [[ ${match[1]} = \' && $__quoting != \" ]] && { [[ $__quoting = "'" ]] && __quoting="" || __quoting="'"; } - - _mybuf=${match[4]} + 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 diff --git a/.config/shell/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh b/.config/shell/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh index c5357e1..40b30b5 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +++ b/.config/shell/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh @@ -33,25 +33,30 @@ # 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 +# https://zdharma-continuum.github.io/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:=$FAST_BASE_DIR} +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} -if [[ -z "$ZPLG_CUR_PLUGIN" && "${fpath[(r)$FAST_BASE_DIR]}" != $FAST_BASE_DIR ]]; then - fpath+=( "$FAST_BASE_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 [[ "$FAST_WORK_DIR" = /usr/* || ( "$FAST_WORK_DIR" = /opt/* && ! -w "$FAST_WORK_DIR" ) ]]; then +if [[ ! -w $FAST_WORK_DIR ]]; then FAST_WORK_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/fsh" command mkdir -p "$FAST_WORK_DIR" fi @@ -70,7 +75,9 @@ _zsh_highlight() return $ret fi - setopt localoptions warncreateglobal noksharrays noshwordsplit extendedglob typesetsilent nokshglob + emulate -LR zsh + setopt extendedglob warncreateglobal typesetsilent noshortloops + local REPLY # don't leak $REPLY into global scope local -a reply @@ -232,7 +239,7 @@ _zsh_highlight_bind_widgets() # Override ZLE widgets to make them invoke _zsh_highlight. local -U widgets_to_bind - widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank)}) + widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|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. @@ -245,7 +252,7 @@ _zsh_highlight_bind_widgets() local cur_widget for cur_widget in $widgets_to_bind; do - case $widgets[$cur_widget] in + case ${widgets[$cur_widget]-} in # Already rebound event: do nothing. user:_zsh_highlight_widget_*);; @@ -272,7 +279,7 @@ _zsh_highlight_bind_widgets() # Incomplete or nonexistent widget: Bind to z-sy-h directly. *) - if [[ $cur_widget == zle-* ]] && [[ -z $widgets[$cur_widget] ]]; then + 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 @@ -311,23 +318,23 @@ add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { print -r -- "$@" >>! /tmp/reply } -ZSH_HIGHLIGHT_MAXLENGTH=10000 +typeset -g 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/-zplugin.ch +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/-podman.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" @@ -355,3 +362,23 @@ 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-continuum/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-continuum/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 || true diff --git a/.config/shell/zsh-fast-syntax-highlighting/fast-theme b/.config/shell/zsh-fast-syntax-highlighting/fast-theme index 0bc1188..06ad005 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/fast-theme +++ b/.config/shell/zsh-fast-syntax-highlighting/fast-theme @@ -234,13 +234,13 @@ if [[ "$1" = */* || "$1" = (XDG|LOCAL|HOME|OPT):* ]]; then [[ ! -r "$1" ]] && { print -u2 "Theme \`$1' unreadable, aborting"; return 1; } THEME_NAME="${1:t:r}" - fast-read-ini-file "$1" out "" + .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 "" + .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" diff --git a/.config/shell/zsh-fast-syntax-highlighting/share/free_theme.zsh b/.config/shell/zsh-fast-syntax-highlighting/share/free_theme.zsh new file mode 100644 index 0000000..0f32d66 --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/share/free_theme.zsh @@ -0,0 +1,61 @@ +: ${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/shell/zsh-fast-syntax-highlighting/themes/base16.ini b/.config/shell/zsh-fast-syntax-highlighting/themes/base16.ini new file mode 100644 index 0000000..8c82598 --- /dev/null +++ b/.config/shell/zsh-fast-syntax-highlighting/themes/base16.ini @@ -0,0 +1,82 @@ +[base] +default = none +unknown-token = 1,bold +commandseparator = none +redirection = none +here-string-tri = 14 +here-string-text = bg:11 +here-string-var = 1,bg:11 +exec-descriptor = 9,bold +comment = 8 +correct-subtle = 12 +incorrect-subtle = 1 +subtle-separator = 12 +subtle-bg = bg:10 +; secondary = +; recursive-base = + +[command-point] +reserved-word = 5 +subcommand = 6 +alias = 4 +suffix-alias = 4 +global-alias = 4,bg:11 +builtin = 4 +function = 4 +command = 4 +precommand = 6 +hashed-command = 4 +single-sq-bracket = 4 +double-sq-bracket = 4 +double-paren = 5 + +[paths] +path = 9 +pathseparator = +path-to-dir = 9,underline +globbing = 6 +globbing-ext = 6,bold + +[brackets] +paired-bracket = bg:8 +bracket-level-1 = 3,bold +bracket-level-2 = 6,bold +bracket-level-3 = 2,bold + +[arguments] +single-hyphen-option = 3 +double-hyphen-option = 3 +back-quoted-argument = none +single-quoted-argument = 2 +double-quoted-argument = 2 +dollar-quoted-argument = 2 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 6 +; backslash or $... in "..." +back-or-dollar-double-quoted-argument = 1 + +[other] +variable = 1 +assign = none +assign-array-bracket = 5 +history-expansion = 6,bold + +[math] +mathvar = 1 +mathnum = 9 +matherr = 1,bold + +[for-loop] +forvar = 1 +fornum = 9 +; operator +foroper = none +; separator +forsep = none + +[case] +case-input = 1 +case-parentheses = 5 +case-condition = bg:10 diff --git a/.config/shell/zsh-fast-syntax-highlighting/themes/default.ini b/.config/shell/zsh-fast-syntax-highlighting/themes/default.ini index a5abeab..c0840fb 100644 --- a/.config/shell/zsh-fast-syntax-highlighting/themes/default.ini +++ b/.config/shell/zsh-fast-syntax-highlighting/themes/default.ini @@ -14,7 +14,7 @@ correct-subtle = 12 incorrect-subtle = red subtle-separator = green subtle-bg = bg:18 -secondary = +secondary = free ; recursive-base = [command-point] diff --git "a/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-alias.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-alias.ch" new file mode 100644 index 0000000..d581341 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-alias.ch" @@ -0,0 +1,29 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autoload.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autoload.ch" new file mode 100644 index 0000000..78a8924 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autoload.ch" @@ -0,0 +1,104 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autorandr.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autorandr.ch" new file mode 100644 index 0000000..9687db3 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-autorandr.ch" @@ -0,0 +1,22 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-awk.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-awk.ch" new file mode 100644 index 0000000..47b3ec7 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-awk.ch" @@ -0,0 +1,108 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-docker.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-docker.ch" new file mode 100644 index 0000000..31772f2 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-docker.ch" @@ -0,0 +1,90 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-example.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-example.ch" new file mode 100644 index 0000000..8814922 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-example.ch" @@ -0,0 +1,120 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fast-theme.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fast-theme.ch" new file mode 100644 index 0000000..15bc210 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fast-theme.ch" @@ -0,0 +1,40 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fpath_peq.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fpath_peq.ch" new file mode 100644 index 0000000..072cee3 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-fpath_peq.ch" @@ -0,0 +1,61 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-git.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-git.ch" new file mode 100644 index 0000000..43693ce --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-git.ch" @@ -0,0 +1,954 @@ +# -*- 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=|--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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-grep.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-grep.ch" new file mode 100644 index 0000000..54309bf --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-grep.ch" @@ -0,0 +1,89 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-hub.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-hub.ch" new file mode 100644 index 0000000..2f0626a --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-hub.ch" @@ -0,0 +1,51 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ionice.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ionice.ch" new file mode 100644 index 0000000..f328f83 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ionice.ch" @@ -0,0 +1,117 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-lab.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-lab.ch" new file mode 100644 index 0000000..9c76e03 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-lab.ch" @@ -0,0 +1,59 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-make.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-make.ch" new file mode 100644 index 0000000..33f46bf --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-make.ch" @@ -0,0 +1,105 @@ +# -*- 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]}" ]] && \ + make -f "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" -Rrpq | awk '/^[a-zA-Z0-9][^$#\t=]*:/' | .fast-make-targets + 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nice.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nice.ch" new file mode 100644 index 0000000..7fa8a94 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nice.ch" @@ -0,0 +1,138 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nmcli.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nmcli.ch" new file mode 100644 index 0000000..be444e5 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-nmcli.ch" @@ -0,0 +1,58 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-node.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-node.ch" new file mode 100644 index 0000000..65f214c --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-node.ch" @@ -0,0 +1,37 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ogit.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ogit.ch" new file mode 100644 index 0000000..6f76674 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ogit.ch" @@ -0,0 +1,383 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-perl.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-perl.ch" new file mode 100644 index 0000000..49f0ad3 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-perl.ch" @@ -0,0 +1,80 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-podman.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-podman.ch" new file mode 100644 index 0000000..f74afd6 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-podman.ch" @@ -0,0 +1,90 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `podman'. It verifies command line, by denoting +# wrong and good arguments by color. Currently implemented: verification of +# image IDs passed to: podman 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-podman-counter]=0 + FAST_HIGHLIGHT[chroma-podman-got-subcommand]=0 + FAST_HIGHLIGHT[chroma-podman-subcommand]="" + FAST_HIGHLIGHT[chrome-podman-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-podman-got-subcommand]} -eq 0 ]]; then + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + else + if (( FAST_HIGHLIGHT[chroma-podman-got-subcommand] == 0 )); then + FAST_HIGHLIGHT[chroma-podman-got-subcommand]=1 + FAST_HIGHLIGHT[chroma-podman-subcommand]="$__wrd" + __style=${FAST_THEME_NAME}subcommand + (( FAST_HIGHLIGHT[chroma-podman-counter] += 1 )) + else + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + if [[ "${FAST_HIGHLIGHT[chroma-podman-subcommand]}" = "image" ]]; then + [[ "$__wrd" != -* ]] && { + (( FAST_HIGHLIGHT[chroma-podman-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-podman-counter] )) + + if (( __idx1 == 2 )); then + __style=${FAST_THEME_NAME}subcommand + elif (( __idx1 == 3 )); then + .fast-run-command "podman images -q" chroma-podman-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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-precommand.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-precommand.ch" new file mode 100644 index 0000000..7e85a06 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-precommand.ch" @@ -0,0 +1,17 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-printf.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-printf.ch" new file mode 100644 index 0000000..89d2789 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-printf.ch" @@ -0,0 +1,86 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ruby.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ruby.ch" new file mode 100644 index 0000000..3495cc8 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ruby.ch" @@ -0,0 +1,81 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-scp.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-scp.ch" new file mode 100644 index 0000000..d162284 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-scp.ch" @@ -0,0 +1,87 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-sh.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-sh.ch" new file mode 100644 index 0000000..43fa8f9 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-sh.ch" @@ -0,0 +1,72 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-source.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-source.ch" new file mode 100644 index 0000000..dc27e76 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-source.ch" @@ -0,0 +1,75 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ssh.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ssh.ch" new file mode 100644 index 0000000..1d5e257 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-ssh.ch" @@ -0,0 +1,159 @@ +# -*- 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_users 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 + } + if (( $#completions_users )); then + [[ $match[2] = ${~${:-(${(j:|:)completions_users})}} ]] \ + && user_style=${FAST_THEME_NAME}correct-subtle \ + || user_style=${FAST_THEME_NAME}incorrect-subtle + elif (( $#userdirs )); then + [[ -n $userdirs[$match[2]] ]] \ + && 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subcommand.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subcommand.ch" new file mode 100644 index 0000000..0665548 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subcommand.ch" @@ -0,0 +1,25 @@ +# 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subversion.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subversion.ch" new file mode 100644 index 0000000..4149cc6 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-subversion.ch" @@ -0,0 +1,250 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-vim.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-vim.ch" new file mode 100644 index 0000000..b3fecd1 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-vim.ch" @@ -0,0 +1,51 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-whatis.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-whatis.ch" new file mode 100644 index 0000000..c0c90c6 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-whatis.ch" @@ -0,0 +1,149 @@ +# -*- 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 __term __section __section_flag + +# extact manual subsection +# NOTE: __term should be separated from __wrd to prevent incorrect cache hits +if command -v mandb > /dev/null; then + __term="${__wrd%.[0-8n](|p|type|const|head|perl)}" + __section="${${2#$__term}#.}" +else + __term=$__wrd +fi + +[[ -n $__section ]] && __section_flag="-s $__section" + +(( ! ${+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 "${(z)__section_flag}" "$__term" 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 "${(z)__section_flag}" "$__term" &> /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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-which.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-which.ch" new file mode 100644 index 0000000..5a5d7b3 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-which.ch" @@ -0,0 +1,96 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-zinit.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-zinit.ch" new file mode 100644 index 0000000..06637a8 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/-zinit.ch" @@ -0,0 +1,378 @@ +# -*- 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/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/main-chroma.ch" "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/main-chroma.ch" new file mode 100644 index 0000000..323a978 --- /dev/null +++ "b/.config/shell/zsh-fast-syntax-highlighting/\342\206\222chroma/main-chroma.ch" @@ -0,0 +1,460 @@ +# 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/shell/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh b/.config/shell/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh new file mode 120000 index 0000000..cc95cd4 --- /dev/null +++ b/.config/shell/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh @@ -0,0 +1 @@ +zsh-syntax-highlighting.zsh \ No newline at end of file -- cgit v1.2.3