mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-09-22 03:40:47 +02:00
82 lines
1.7 KiB
Plaintext
82 lines
1.7 KiB
Plaintext
#compdef -zcalc-line-
|
|
|
|
# This handles completion of a zcalc command line read via vared.
|
|
|
|
_zcalc_line_escapes() {
|
|
local -a cmds
|
|
cmds=(
|
|
"!:shell escape"
|
|
"q:quit"
|
|
"norm:normal output format"
|
|
"sci:scientific output format"
|
|
"fix:fixed point output format"
|
|
"eng:engineering (power of 1000) output format"
|
|
"raw:raw output format"
|
|
"local:make variables local"
|
|
"function:define math function (also \:func or \:f)"
|
|
)
|
|
cmds=("\:"${^cmds})
|
|
_describe -t command-escapes "command escape" cmds -Q
|
|
}
|
|
|
|
_zcalc_line() {
|
|
local expl
|
|
|
|
if [[ CURRENT -eq 1 && $words[1] != ":"(\\|)"!"* ]]; then
|
|
local -a alts
|
|
if [[ $words[1] = (|:*) ]]; then
|
|
alts=("command-escapes:command escape:_zcalc_line_escapes")
|
|
fi
|
|
if [[ $words[1] = (|[^:]*) ]]; then
|
|
alts+=("math:math formula:_math")
|
|
fi
|
|
_alternative $alts
|
|
return
|
|
fi
|
|
|
|
case $words[1] in
|
|
(":"(\\|)"!"*)
|
|
if [[ $words[1] = ":"(\\|)"!" && CURRENT -gt 1 ]]; then
|
|
shift words
|
|
(( CURRENT-- ))
|
|
else
|
|
words[1]=${words[1]##:(\\|)\!}
|
|
compset -P ':(\\|)!'
|
|
fi
|
|
_normal
|
|
;;
|
|
|
|
(:function)
|
|
# completing already defined user math functions is in fact exactly
|
|
# the wrong thing to do since currently zmathfuncdef won't overwrite,
|
|
# but it may jog the user's memory...
|
|
if (( CURRENT == 2 )); then
|
|
_wanted math-functions expl 'math function' \
|
|
compadd -- ${${(k)functions:#^zsh_math_func_*}##zsh_math_func_}
|
|
else
|
|
_math
|
|
fi
|
|
;;
|
|
|
|
(:local)
|
|
_parameter
|
|
;;
|
|
|
|
(:(fix|sci|eng))
|
|
if (( CURRENT == 2 )); then
|
|
_message "precision"
|
|
fi
|
|
;&
|
|
|
|
(:*)
|
|
_message "no more arguments"
|
|
;;
|
|
|
|
([^:]*)
|
|
_math
|
|
;;
|
|
esac
|
|
}
|
|
|
|
_zcalc_line "$@"
|