45 lines
935 B
Bash
45 lines
935 B
Bash
export ZCALC_HISTFILE="${HOME}/.zcalc_history"
|
|
|
|
autoload -U zcalc
|
|
|
|
function __format_number() {
|
|
local num="${1}"
|
|
if [[ "${num}" =~ ^[-]?[0-9]+$ ]]; then
|
|
LC_NUMERIC=en_US.UTF-8 printf "%'d\n" "${num}" | sed "s/,/_/g"
|
|
else
|
|
echo "${num}"
|
|
fi
|
|
}
|
|
|
|
function __calc {
|
|
# Получаем результат от zcalc
|
|
local result
|
|
result="$(ZDOTDIR="${HOME}" zcalc -f -e "$*" 2>/dev/null)"
|
|
|
|
result="${result%.*}"
|
|
if [[ "$result" =~ ^[-]?[0-9]+$ ]]; then
|
|
__format_number "$result"
|
|
else
|
|
echo "$result"
|
|
fi
|
|
}
|
|
|
|
aliases[calc]='noglob __calc'
|
|
aliases[=]='noglob __calc'
|
|
|
|
|
|
function accept-line() {
|
|
if [[ ${BUFFER} =~ '^[ ]?\(?[-+]?[0-9]+[^a-zA-Z]+' ]]; then
|
|
echo
|
|
test "${BUFFER[1]}" != " " && print -S -- "${BUFFER}" # saving the command to history
|
|
__calc "${BUFFER}"
|
|
BUFFER=
|
|
fi
|
|
|
|
zle .${WIDGET}
|
|
}
|
|
|
|
zle -N accept-line
|
|
|
|
# vim: ft=zsh
|