mirror of
https://github.com/tumillanino/miasma-os.git
synced 2026-04-11 07:15:31 +00:00
move to new repo
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 <ID>.
|
||||
#
|
||||
# $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
|
||||
@@ -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 \<ENTER>
|
||||
# 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 <paths> 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
|
||||
@@ -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
|
||||
@@ -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 $*
|
||||
@@ -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 \<ENTER>
|
||||
# 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
|
||||
@@ -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 $*
|
||||
@@ -0,0 +1,109 @@
|
||||
# -*- 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]}" ]]; then
|
||||
if [[ -n "${FAST_HIGHLIGHT[chroma-make-cache-global]}" ]]; then
|
||||
make -f "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" -Rrpq | awk '/^[a-zA-Z0-9][^$#\t=]*:/' | .fast-make-targets
|
||||
else
|
||||
.fast-make-targets < "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}"
|
||||
fi
|
||||
|
||||
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
|
||||
@@ -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 \<ENTER>
|
||||
# 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 `perl'. It highlights code passed to perl
|
||||
# with -e or -E option - does syntax check by calling `perl -ce' or `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
|
||||
elif [[ "$__wrd" = "-E" || ("$__wrd" = -*E* && "$__wrd" != --*) ]]; then
|
||||
FAST_HIGHLIGHT[chrome-perl-got-eswitch]=2
|
||||
fi
|
||||
else
|
||||
__wrd="${__wrd//\`/x}"
|
||||
__arg="${__arg//\`/x}"
|
||||
__wrd="${(Q)__wrd}"
|
||||
|
||||
if (( FAST_HIGHLIGHT[chrome-perl-got-eswitch] )); then
|
||||
if (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )); then
|
||||
if (( FAST_HIGHLIGHT[chrome-perl-got-eswitch] == 1 )); then
|
||||
perl -ce "$__wrd" >/dev/null 2>&1
|
||||
elif (( FAST_HIGHLIGHT[chrome-perl-got-eswitch] == 2 )); then
|
||||
perl -cE "$__wrd" >/dev/null 2>&1
|
||||
fi && {
|
||||
# Add correct-subtle style
|
||||
reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}")
|
||||
} || {
|
||||
# Add incorrect-subtle style
|
||||
reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}")
|
||||
}
|
||||
fi
|
||||
|
||||
FAST_HIGHLIGHT[chrome-perl-got-eswitch]=0
|
||||
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
|
||||
@@ -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 <ID>.
|
||||
#
|
||||
# $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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 \<ENTER>
|
||||
# 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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|<ice|specification>|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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user