diff options
Diffstat (limited to '')
-rw-r--r-- | bin/functions.sh | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/bin/functions.sh b/bin/functions.sh new file mode 100644 index 0000000..3dbbb7c --- /dev/null +++ b/bin/functions.sh @@ -0,0 +1,202 @@ +# output handling +coco() { + [[ -z "$1" ]] && echo -ne "\033[0m" || echo -ne "\033[${1}m" +} + +# name all colors to get rid of hieroglyphics +color() { + case $1 in + black) coco '0;30' ;; + dgray) coco '1;30' ;; + red) coco '0;31' ;; + lred) coco '1;31' ;; + green) coco '0;32' ;; + lgreen) coco '1;32' ;; + brown) coco '0;33' ;; + yellow) coco '1;33' ;; + blue) coco '0;34' ;; + lblue) coco '1;34' ;; + purple) coco '0;35' ;; + lpurple) coco '1;35' ;; + cyan) coco '0;36' ;; + lcyan) coco '1;36' ;; + lgray) coco '0;37' ;; + white) coco '1;37' ;; + *) coco '0' ;; + esac +} + +_einfon() { + echo -ne " ${GOOD}*${NORMAL} $*" + return 0 +} + +_einfo() { + echo -e " ${GOOD}*${NORMAL} $*" + return 0 +} + +_ewarn() { + echo -e " ${WARN}*${NORMAL} $*" + return 0 +} + +_eerror() { + echo -e " ${BAD}*${NORMAL} $*" + return 0 +} + +_ewrap() { + local cmd="$1" + shift + + local c="${ENDCOL}" + local p="$* " + local max=$((COLS - 11)) + + # Only use what we have space for + local d="${p%%\\n*}" + if [[ ${d} == "${p}" ]] ; then + d="${p:0:${max}}" + else + d="${d} " + fi + + # Grab the last whole word + [[ ${#d} == "${max}" ]] && d="${d% *}" + + # Print that + _${cmd} "${d}" + + # Recurse on the rest + local r="$*" + d="${d} " + r="${r:${#d}}" + [[ -n ${r} ]] && ${cmd} "${r}" + + return 0 +} + +einfo() { + _ewrap einfo "$*" +} + +ewarn() { + _ewrap ewarn "$*" +} + +eerror() { + _ewrap eerror "$*" + return 1 +} + +eheading() { + echo + echo -n "$(color green)>>> " + echo -n "$@" + echo " <<<$(color)" +} + +# input handling +eask_num() { + local -i reply= + _einfon + read -p "Please enter ${1:-Number} or press CTRL-C to abort> " reply + REPLY=${reply} +} + +eask_str() { + local reply= + _einfon + read -p "Please enter ${1:-String} or press CTRL-C to abort> " reply + REPLY=${reply} +} + +eask_bool() { + local reply= default=${2} str="[y/n]" + + if [[ ${default} == y || ${default} == Y || ${default} == true ]] + then + str="[Y/n]" + elif [[ ${default} == n || ${default} == N || ${default} == false ]] + then + str="[y/N]" + fi + + while [[ "${reply}" != y && "${reply}" != n ]]; do + _einfon + read -p "${1} ${str} " reply + + if [[ -z ${reply} ]] + then + reply=${default} + break + fi + done + + REPLY=${reply} +} + + +echoose() { + einfo ${1:-"Choose something from the following list"} + einfo + shift + + local -a items= + + while true; do + items=() + + for i in "$@"; do + items=( "${items[@]}" "${i}" ) + einfo "${#items[@]}) ${i}" + done + + eask_num + + if [[ ${REPLY} -le 0 || ${REPLY} -gt ${#items[@]} ]]; then + eerror "\nInvalid selection. Try again.\n " || : + else + break + fi + done + + REPLY=${items[$(( ${REPLY} - 1 ))]} +} + +# make-like exec wrapper +eexec() { + einfo "$@" + "$@" +} + +# alway use the right thing, even if EDITOR is not set +editor() { + if [[ -z "${EDITOR}" || ! -x "${EDITOR}" ]]; then + if [[ -x /usr/bin/vim ]]; then + EDITOR=/usr/bin/vim + elif [[ -x /usr/bin/nano ]]; then + EDITOR=/usr/bin/nano + fi + fi + + [[ -x ${EDITOR} ]] && ${EDITOR} "$@" +} + +# Setup a secure $PATH. Just add system defaults. +PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [[ -z ${COLS} || -n ${COLUMNS} ]] ; then + COLS="${COLUMNS:-0}" + (( COLS == 0 )) && COLS=$(set -- `stty size 2>/dev/null` ; echo "$2") + (( COLS > 0 )) || (( COLS = 80 )) +fi + +ENDCOL=$'\e[A\e['$(( COLS - 9 ))'C' +GOOD=$'\e[32;01m' +WARN=$'\e[33;01m' +BAD=$'\e[31;01m' +NORMAL=$'\e[0m' + +# vim: set ts=4 : |