diff options
author | Jouke Witteveen <j.witteveen@gmail.com> | 2012-04-11 02:07:20 +0200 |
---|---|---|
committer | Jouke Witteveen <j.witteveen@gmail.com> | 2012-04-11 11:40:18 +0200 |
commit | 7fab9eaf848004fd742e0513d620ced9ee7667a2 (patch) | |
tree | 2470a3a6643e5ae2cf3d89c50998b92cfffc86db /src/hooks/fancy | |
parent | fda34d4a6c03e919786b26876d6a9c051119db1d (diff) | |
download | netctl-7fab9eaf848004fd742e0513d620ced9ee7667a2.tar.gz netctl-7fab9eaf848004fd742e0513d620ced9ee7667a2.tar.xz |
Rewrite output hook to not depend on initscripts
/etc/rc.d/functions is owned by initscripts on which netcfg does not explicitly depend.
The revised layout is inspired by systemd.
Diffstat (limited to 'src/hooks/fancy')
-rwxr-xr-x | src/hooks/fancy | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/hooks/fancy b/src/hooks/fancy new file mode 100755 index 0000000..f0ad3bb --- /dev/null +++ b/src/hooks/fancy @@ -0,0 +1,84 @@ +# Fancy output is for terminal output only. +[[ -t 1 ]] || return + + +### Fancy Logging/Error reporting + +function report_err { + print_prefixed "${C_PREFIX}" "${C_HIGHLIGHT}$*" +} + +function report_notice { + print_prefixed "${C_PREFIX}" "$*" +} + +function report_try { + printf "${C_PREFIX}${PREFIX_BUSY}${C_NORMAL} %s " "$*" + report_status " BUSY " "${C_BUSY}" + REPORT_TRYING=1 +} + +function report_fail { + if [[ -n "$*" ]]; then + if [[ -n "$REPORT_TRYING" ]]; then + report_append "$*" + report_status "FAILED" "${C_FAILED}" $'\n' + REPORT_TRYING= + else + print_prefixed "${C_FAILED}" "${C_HIGHLIGHT}$*" + fi + elif [[ -n "$REPORT_TRYING" ]]; then + report_status "FAILED" "${C_FAILED}" $'\n' + REPORT_TRYING= + fi +} + +function report_success { + if [[ -n "$*" ]]; then + if [[ -n "$REPORT_TRYING" ]]; then + report_append "$*" + report_status " DONE " "${C_DONE}" $'\n' + REPORT_TRYING= + else + print_prefixed "${C_DONE}" "$*" + fi + elif [[ -n "$REPORT_TRYING" ]]; then + report_status " DONE " "${C_DONE}" $'\n' + REPORT_TRYING= + fi +} + +function report_append { + printf -- "${RESTORE_POSITION}${C_PREFIX}-${C_NORMAL} %s " "$*" +} + +function report_status { + local status=$1 color=$2 + shift 2 + printf "${CURSOR_STATUS} [${color}%s${C_NORMAL}] %s" "$status" "$*" +} + +function print_prefixed { + local c_prefix=$1 + shift + printf "${c_prefix}${PREFIX_ATTENTION}${C_NORMAL} %s${C_NORMAL}\n" "$*" +} + + +SAVE_POSITION=$(tput sc) +RESTORE_POSITION=$(tput rc) +COLUMNS=$(tput cols) +(( COLUMNS == 0 )) && COLUMNS=80 +CURSOR_STATUS=${SAVE_POSITION}$(tput hpa $(( COLUMNS - 10 )) ) + +C_NORMAL=$(tput sgr0) +C_HIGHLIGHT=${C_NORMAL}$(tput bold) +C_PREFIX=${C_HIGHLIGHT}$(tput setaf 4) # blue +C_BUSY=${C_NORMAL}$(tput setaf 6) # cyan +C_FAILED=${C_HIGHLIGHT}$(tput setaf 1) # red +C_DONE=${C_HIGHLIGHT}$(tput setaf 2) # green + +PREFIX_BUSY="::" +PREFIX_ATTENTION=" >" + +# vim: ft=sh ts=4 et sw=4: |