110 lines
2.6 KiB
Bash
110 lines
2.6 KiB
Bash
# Simple calculator
|
||
calc() {
|
||
local result=""
|
||
result="$(printf "scale=10;%s\\n" "$*" | bc --mathlib | tr -d '\\\n')"
|
||
# └─ default (when `--mathlib` is used) is 20
|
||
|
||
if [[ "$result" == *.* ]]; then
|
||
# improve the output for decimal numbers
|
||
# add "0" for cases like ".5"
|
||
# add "0" for cases like "-.5"
|
||
# remove trailing zeros
|
||
printf "%s" "$result" |
|
||
sed -e 's/^\./0./' \
|
||
-e 's/^-\./-0./' \
|
||
-e 's/0*$//;s/\.$//'
|
||
else
|
||
printf "%s" "$result"
|
||
fi
|
||
printf "\\n"
|
||
}
|
||
|
||
# Create a new directory and enter it
|
||
mkd() {
|
||
mkdir -p "$@"
|
||
cd "$@" || exit
|
||
}
|
||
|
||
# Make a temporary directory and enter it
|
||
tmpd() {
|
||
local dir
|
||
if [ $# -eq 0 ]; then
|
||
dir=$(mktemp -d)
|
||
else
|
||
dir=$(mktemp -d -t "${1}.XXXXXXXXXX")
|
||
fi
|
||
cd "$dir" || exit
|
||
}
|
||
|
||
# Determine size of a file or total size of a directory
|
||
fs() {
|
||
if du -b /dev/null > /dev/null 2>&1; then
|
||
local arg=-sbh
|
||
else
|
||
local arg=-sh
|
||
fi
|
||
# shellcheck disable=SC2199
|
||
if [[ -n "$@" ]]; then
|
||
du $arg -- "$@"
|
||
else
|
||
du $arg -- .[^.]* *
|
||
fi
|
||
}
|
||
|
||
# Use Git’s colored diff when available
|
||
if hash git &>/dev/null ; then
|
||
diff() {
|
||
git diff --no-index --color-words "$@"
|
||
}
|
||
fi
|
||
|
||
# Convert HEX to the nearest color index (0-255)
|
||
fromhex(){
|
||
hex=${1#"#"}
|
||
r=$(printf '0x%0.2s' "$hex")
|
||
g=$(printf '0x%0.2s' ${hex#??})
|
||
b=$(printf '0x%0.2s' ${hex#????})
|
||
echo '%03d' "$(( (r<75?0:(r-35)/40)*6*6 +
|
||
(g<75?0:(g-35)/40)*6 +
|
||
(b<75?0:(b-35)/40) + 16 ))"
|
||
}
|
||
|
||
# Create a new directory and enter it
|
||
mkd() {
|
||
mkdir -p "$@" && cd "$_";
|
||
}
|
||
|
||
# Syntax-highlight JSON strings or files
|
||
# Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
|
||
json() {
|
||
if [ -t 0 ]; then # argument
|
||
python -mjson.tool <<< "$*" | pygmentize -l javascript;
|
||
else # pipe
|
||
python -mjson.tool | pygmentize -l javascript;
|
||
fi;
|
||
}
|
||
|
||
# Get colors in manual pages
|
||
man() {
|
||
env \
|
||
LESS_TERMCAP_mb="$(printf '\e[1;31m')" \
|
||
LESS_TERMCAP_md="$(printf '\e[1;31m')" \
|
||
LESS_TERMCAP_me="$(printf '\e[0m')" \
|
||
LESS_TERMCAP_se="$(printf '\e[0m')" \
|
||
LESS_TERMCAP_so="$(printf '\e[1;44;33m')" \
|
||
LESS_TERMCAP_ue="$(printf '\e[0m')" \
|
||
LESS_TERMCAP_us="$(printf '\e[1;32m')" \
|
||
man "$@"
|
||
}
|
||
|
||
# Check if uri is up
|
||
isup() {
|
||
local uri=$1
|
||
|
||
if curl -s --head --request GET "$uri" | grep "200 OK" > /dev/null ; then
|
||
terminal-notifier -title '$uri' -message 'is down'
|
||
else
|
||
terminal-notifier -title '$uri' -message 'is up'
|
||
fi
|
||
}
|