summaryrefslogtreecommitdiffstats
path: root/bin/functions.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/functions.sh')
-rw-r--r--bin/functions.sh202
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 :