'main': Break out an anonymous function into a named function.
This is in order to allow it to be reused. No functional change.
This commit is contained in:
parent
5d139fcd94
commit
7678a8a227
@ -420,6 +420,56 @@ _zsh_highlight_highlighter_main_paint()
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Try to expand $1, if it's possible to do so safely.
|
||||||
|
#
|
||||||
|
# Uses two parameters from the caller: $parameter_name_pattern and $res.
|
||||||
|
#
|
||||||
|
# If expansion was done, set $reply to the expansion and return true.
|
||||||
|
# Otherwise, return false.
|
||||||
|
_zsh_highlight_main_highlighter__try_expand_parameter()
|
||||||
|
{
|
||||||
|
local arg="$1"
|
||||||
|
unset reply
|
||||||
|
{
|
||||||
|
# ### For now, expand just '$foo' or '${foo}', possibly with braces, but with
|
||||||
|
# ### no other features of the parameter expansion syntax. (No ${(x)foo},
|
||||||
|
# ### no ${foo[x]}, no ${foo:-x}.)
|
||||||
|
{
|
||||||
|
local -a match mbegin mend
|
||||||
|
local MATCH; integer MBEGIN MEND
|
||||||
|
local parameter_name
|
||||||
|
local -a words
|
||||||
|
if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then
|
||||||
|
parameter_name=${${arg:2}%?}
|
||||||
|
elif [[ $arg[1] == '$' ]]; then
|
||||||
|
parameter_name=${arg:1}
|
||||||
|
fi
|
||||||
|
if [[ $res == none ]] && zmodload -e zsh/parameter &&
|
||||||
|
[[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] &&
|
||||||
|
[[ ${parameters[(e)$MATCH]} != *special* ]]
|
||||||
|
then
|
||||||
|
# Set $arg and update $res.
|
||||||
|
case ${(tP)MATCH} in
|
||||||
|
(*array*|*assoc*)
|
||||||
|
words=( ${(P)MATCH} )
|
||||||
|
;;
|
||||||
|
("")
|
||||||
|
# not set
|
||||||
|
words=( )
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
# scalar, presumably
|
||||||
|
words=( ${(P)MATCH} )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
reply=( "${words[@]}" )
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# $1 is the offset of $4 from the parent buffer. Added to the returned highlights.
|
# $1 is the offset of $4 from the parent buffer. Added to the returned highlights.
|
||||||
# $2 is the initial braces_stack (for a closing paren).
|
# $2 is the initial braces_stack (for a closing paren).
|
||||||
# $3 is 1 if $4 contains the end of $BUFFER, else 0.
|
# $3 is 1 if $4 contains the end of $BUFFER, else 0.
|
||||||
@ -676,42 +726,13 @@ _zsh_highlight_main_highlighter_highlight_list()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Expand parameters.
|
# Expand parameters.
|
||||||
#
|
if _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then
|
||||||
# ### For now, expand just '$foo' or '${foo}', possibly with braces, but with
|
|
||||||
# ### no other features of the parameter expansion syntax. (No ${(x)foo},
|
|
||||||
# ### no ${foo[x]}, no ${foo:-x}.)
|
|
||||||
() {
|
|
||||||
# That's not entirely correct --- if the parameter's value happens to be a reserved
|
# That's not entirely correct --- if the parameter's value happens to be a reserved
|
||||||
# word, the parameter expansion will be highlighted as a reserved word --- but that
|
# word, the parameter expansion will be highlighted as a reserved word --- but that
|
||||||
# incorrectness is outweighed by the usability improvement of permitting the use of
|
# incorrectness is outweighed by the usability improvement of permitting the use of
|
||||||
# parameters that refer to commands, functions, and builtins.
|
# parameters that refer to commands, functions, and builtins.
|
||||||
local -a match mbegin mend
|
() {
|
||||||
local MATCH; integer MBEGIN MEND
|
local -a words; words=( "${reply[@]}" )
|
||||||
local parameter_name
|
|
||||||
local -a words
|
|
||||||
if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then
|
|
||||||
parameter_name=${${arg:2}%?}
|
|
||||||
elif [[ $arg[1] == '$' ]]; then
|
|
||||||
parameter_name=${arg:1}
|
|
||||||
fi
|
|
||||||
if [[ $res == none ]] && zmodload -e zsh/parameter &&
|
|
||||||
[[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] &&
|
|
||||||
[[ ${parameters[(e)$MATCH]} != *special* ]]
|
|
||||||
then
|
|
||||||
# Set $arg and update $res.
|
|
||||||
case ${(tP)MATCH} in
|
|
||||||
(*array*|*assoc*)
|
|
||||||
words=( ${(P)MATCH} )
|
|
||||||
;;
|
|
||||||
("")
|
|
||||||
# not set
|
|
||||||
words=( )
|
|
||||||
;;
|
|
||||||
(*)
|
|
||||||
# scalar, presumably
|
|
||||||
words=( ${(P)MATCH} )
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
if (( $#words == 0 )); then
|
if (( $#words == 0 )); then
|
||||||
# Parameter elision is happening
|
# Parameter elision is happening
|
||||||
(( ++in_redirection ))
|
(( ++in_redirection ))
|
||||||
@ -724,8 +745,8 @@ _zsh_highlight_main_highlighter_highlight_list()
|
|||||||
_zsh_highlight_main__type "$arg" 0
|
_zsh_highlight_main__type "$arg" 0
|
||||||
res=$REPLY
|
res=$REPLY
|
||||||
fi
|
fi
|
||||||
fi
|
}
|
||||||
}
|
fi
|
||||||
|
|
||||||
# Parse the sudo command line
|
# Parse the sudo command line
|
||||||
if (( ! in_redirection )); then
|
if (( ! in_redirection )); then
|
||||||
|
Loading…
Reference in New Issue
Block a user