50 lines
1.0 KiB
Plaintext
50 lines
1.0 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
# https://github.com/onespaceman/menu-calc
|
||
|
# Calculator for use with rofi/dmenu(2)
|
||
|
# Copying to the clipboard requires xclip
|
||
|
|
||
|
usage() {
|
||
|
echo " $(tput bold)menu calc$(tput sgr0)
|
||
|
A calculator for use with Rofi or dmenu(2)
|
||
|
Basic usage:
|
||
|
= 4+2
|
||
|
= (4+2)/(4+3)
|
||
|
= 4^2
|
||
|
= sqrt(4)
|
||
|
= c(2)
|
||
|
|
||
|
The answer can be used for further calculations
|
||
|
|
||
|
The expression may need quotation marks if
|
||
|
launched outside of Rofi/dmenu"
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
case $1 in
|
||
|
-h|--help) usage ;;
|
||
|
esac
|
||
|
|
||
|
# Path to menu application
|
||
|
if [[ -n $(command -v rofi) ]]; then
|
||
|
menu="$(command -v rofi) -dmenu"
|
||
|
elif [[ -n $(command -v dmenu) ]]; then
|
||
|
menu="$(command -v dmenu)"
|
||
|
else
|
||
|
echo >&2 "Rofi or dmenu not found"
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
answer=$(echo "$@" | bc -l | sed '/\./ s/\.\{0,1\}0\{1,\}$//')
|
||
|
|
||
|
action=$(echo -e "Copy to clipboard\nClear\nClose" |
|
||
|
$menu -p "= $answer")
|
||
|
|
||
|
case $action in
|
||
|
"Clear") $0 ;;
|
||
|
"Copy to clipboard") echo -n "$answer" | xclip ;;
|
||
|
"Close") ;;
|
||
|
"") ;;
|
||
|
*) $0 "$answer $action" ;;
|
||
|
esac
|