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,77 @@
|
||||
# vim:ft=zsh:sw=4:sts=4
|
||||
|
||||
#
|
||||
# $1 - PREBUFFER
|
||||
# $2 - BUFFER
|
||||
#
|
||||
function -fast-highlight-string-process {
|
||||
emulate -LR zsh
|
||||
setopt extendedglob warncreateglobal typesetsilent
|
||||
|
||||
local -A pos_to_level level_to_pos pair_map final_pairs
|
||||
local input=$1$2 _mybuf=$1$2 __style __quoting
|
||||
integer __idx=0 __pair_idx __level=0 __start __end
|
||||
local -a match mbegin mend
|
||||
|
||||
pair_map=( "(" ")" "{" "}" "[" "]" )
|
||||
|
||||
while [[ $_mybuf = (#b)([^"{}()[]\\\"'"]#)((["({[]})\"'"])|[\\](*))(*) ]]; do
|
||||
if [[ -n ${match[4]} ]] {
|
||||
__idx+=${mbegin[2]}
|
||||
|
||||
[[ $__quoting = \' ]] && _mybuf=${match[4]} || { _mybuf=${match[4]:1}; (( ++ __idx )); }
|
||||
} else {
|
||||
__idx+=${mbegin[2]}
|
||||
[[ -z $__quoting && -z ${_FAST_COMPLEX_BRACKETS[(r)$((__idx-${#PREBUFFER}-1))]} ]] && {
|
||||
if [[ ${match[2]} = ["({["] ]]; then
|
||||
pos_to_level[$__idx]=$(( ++__level ))
|
||||
level_to_pos[$__level]=$__idx
|
||||
elif [[ ${match[2]} = ["]})"] ]]; then
|
||||
if (( __level > 0 )); then
|
||||
__pair_idx=${level_to_pos[$__level]}
|
||||
pos_to_level[$__idx]=$(( __level -- ))
|
||||
[[ ${pair_map[${input[__pair_idx]}]} = ${input[__idx]} ]] && {
|
||||
final_pairs[$__idx]=$__pair_idx
|
||||
final_pairs[$__pair_idx]=$__idx
|
||||
}
|
||||
else
|
||||
pos_to_level[$__idx]=-1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ ${match[2]} = \" && $__quoting != \' ]] {
|
||||
[[ $__quoting = '"' ]] && __quoting="" || __quoting='"';
|
||||
}
|
||||
if [[ ${match[2]} = \' && $__quoting != \" ]] {
|
||||
if [[ $__quoting = ("'"|"$'") ]] {
|
||||
__quoting=""
|
||||
} else {
|
||||
if [[ $match[1] = *\$ ]] {
|
||||
__quoting="\$'";
|
||||
} else {
|
||||
__quoting="'";
|
||||
}
|
||||
}
|
||||
}
|
||||
_mybuf=${match[5]}
|
||||
}
|
||||
done
|
||||
|
||||
for __idx in ${(k)pos_to_level}; do
|
||||
(( ${+final_pairs[$__idx]} )) && __style=${FAST_THEME_NAME}bracket-level-$(( ( (pos_to_level[$__idx]-1) % 3 ) + 1 )) || __style=${FAST_THEME_NAME}unknown-token
|
||||
(( __start=__idx-${#PREBUFFER}-1, __end=__idx-${#PREBUFFER}, __start >= 0 )) && \
|
||||
reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}")
|
||||
done
|
||||
|
||||
# If cursor is on a bracket, then highlight corresponding bracket, if any.
|
||||
if [[ $WIDGET != zle-line-finish ]]; then
|
||||
__idx=$(( CURSOR + 1 ))
|
||||
if (( ${+pos_to_level[$__idx]} )) && (( ${+final_pairs[$__idx]} )); then
|
||||
(( __start=final_pairs[$__idx]-${#PREBUFFER}-1, __end=final_pairs[$__idx]-${#PREBUFFER}, __start >= 0 )) && \
|
||||
reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") && \
|
||||
reply+=("$CURSOR $__idx ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}")
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
Reference in New Issue
Block a user