summaryrefslogtreecommitdiffstats
path: root/src/hooks/fancy
blob: a64514e5034faee00d17e52ba685fcf8b9dcfaf0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Fancy output is for terminal output only.
[[ -t 1 ]] || return


### Fancy Logging/Error reporting

function report_err {
    print_prefixed "${FANCY_OTHER}" "${FANCY_HIGHLIGHT}$*"
}

function report_notice {
    print_prefixed "${FANCY_OTHER}" "$*"
}

function report_try {
    printf "${FANCY_OTHER}${PREFIX_BUSY}${FANCY_NORMAL} %s " "$*"
    report_busy
    REPORT_TRYING=1
}

function report_fail {
    if [[ -n "$*" ]]; then
        if [[ -n "$REPORT_TRYING" ]]; then
            report_append "$*"
            report_failed
            REPORT_TRYING=
        else
            print_prefixed "${FANCY_FAILED}" "${FANCY_HIGHLIGHT}$*"
        fi
    elif [[ -n "$REPORT_TRYING" ]]; then
        report_failed
        REPORT_TRYING=
    fi
}

function report_success {
    if [[ -n "$*" ]]; then
        if [[ -n "$REPORT_TRYING" ]]; then
            report_append "$*"
            report_done
            REPORT_TRYING=
        else
            print_prefixed "${FANCY_DONE}" "$*"
        fi
    elif [[ -n "$REPORT_TRYING" ]]; then
        report_done
        REPORT_TRYING=
    fi
}

function report_append {
    printf -- "${RESTORE_POSITION}${FANCY_OTHER}-${FANCY_NORMAL} %s " "$*"
}

function report_busy {
    printf "${CURSOR_STATUS} [${FANCY_BUSY} BUSY ${FANCY_NORMAL}] "
}

function report_failed {
    printf "${CURSOR_STATUS} [${FANCY_FAILED}FAILED${FANCY_NORMAL}]\n"
}

function report_done {
    printf "${CURSOR_STATUS} [${FANCY_DONE} DONE ${FANCY_NORMAL}]\n"
}

function print_prefixed {
    local c_prefix=$1
    shift
    printf "${c_prefix}${PREFIX_ATTENTION}${FANCY_NORMAL} %s${FANCY_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 )) )

FANCY_NORMAL=$(tput sgr0)
FANCY_HIGHLIGHT=${FANCY_NORMAL}$(tput bold)
FANCY_BUSY=${FANCY_NORMAL}$(tput setaf 6)      # cyan
FANCY_FAILED=${FANCY_HIGHLIGHT}$(tput setaf 1) # red
FANCY_DONE=${FANCY_HIGHLIGHT}$(tput setaf 2)   # green
FANCY_OTHER=${FANCY_HIGHLIGHT}$(tput setaf 4)  # blue

PREFIX_BUSY="::"
PREFIX_ATTENTION=" >"

# vim: ft=sh ts=4 et sw=4: