Bump Standards-Version to 3.9.2
[grml-quickconfig.git] / grml-quickconfig
1 #!/bin/zsh
2 # Filename:      grml-quickconfig
3 # Purpose:       get fast access to some basic grml-scripts
4 # Authors:       Grml Team <team@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 set -e
10
11 . /etc/grml/script-functions
12 if ! checkbootparam 'nocolor'; then
13     . /etc/grml_colors
14 fi
15
16 # variable setup {{{
17 # maximum line length
18 MAXLEN=60
19
20 # switch between character sets
21 B="\x0e"
22 N="\x0f"
23
24 set -A info
25 set -A keys
26 typeset -A keymap
27
28 HLINE="$B x $N"
29 VLINE=$(repeat $MAXLEN echo -n q)
30 HIGHLIGHT="$GREEN"
31 HIGHLIGHT_NAME="$MAGENTA"
32 SCRIPTDIR="/usr/share/grml-quickconfig/"
33
34
35 # enable alternate console fonts
36 echo -n "\e(B\e)0"
37
38 # set zsh options
39 setopt no_nomatch
40 # }}}
41
42
43 # helper functions {{{
44 print_line() {
45     esc=$(printf '\033')
46     ORIG_LEN=$(echo $(printf '%s' "$1" | sed "s#${esc}\[[0-9;]*m##g" | wc -c))
47     echo -n "${BLUE}$HLINE${NORMAL}"
48     echo -n "$1"
49     printf "%$[${MAXLEN}-${ORIG_LEN}-2]s${BLUE}${HLINE}${NORMAL}\n"
50 }
51
52 print_starting_line() {
53     echo $B ${BLUE}l"$VLINE"k${NORMAL} $N
54 }
55
56 print_closing_line() {
57     echo $B ${BLUE}m"$VLINE"j${NORMAL} $N
58 }
59
60 print_delim() {
61    echo $B ${BLUE}t"$VLINE"u${NORMAL} $N
62 }
63
64 highlight_char() {
65     echo $1 | sed -e "s/$2/$HIGHLIGHT$2$NORMAL/"
66 }
67
68 print_menu() {
69     print_starting_line
70     for x in ${info} ; do
71         echo $x
72     done
73     print_closing_line
74 }
75
76 run() {
77    echo Running Command $*
78    $*
79
80 }
81
82 get_key() {
83     stty -echo ; read -k ${1}?"Press a key: "
84 }
85
86 bailout() {
87    [ -n "$1" ] && RC=$1 || RC=0
88    [ -n "$2" ] && print "$2" >&2
89    exit $RC
90 }
91 # }}}
92
93 trap bailout 1 2 3 3 6 9 14 15
94
95 # check boot parameter {{{
96 get_menu_dir() {
97    local TARGET="$1"
98    if [ -d "./$TARGET" ] ; then
99       MENUDIR="./$TARGET"
100    elif [ -d "$SCRIPTDIR/$TARGET" ] ; then
101       MENUDIR="$SCRIPTDIR/$TARGET"
102    fi
103 }
104 BOOT_PARAM=$(getbootparam menu) || true
105 if [ -n "$TARGET" ] ; then
106    get_menu_dir "$BOOT_PARAM"
107 fi
108 if [ -n "$1" ] ; then
109    get_menu_dir "$1"
110 fi
111
112 if [ -z "$MENUDIR" ] ; then
113    if [ -d "$SCRIPTDIR/local" ] ; then
114       MENUDIR="$SCRIPTDIR/local"
115
116    else
117       MENUDIR="$SCRIPTDIR"
118    fi
119 fi
120
121 # }}}
122
123 # load modules {{{
124 if ! ls "$MENUDIR"/*.sh &>/dev/null ; then
125    bailout 1 "Error: $MENUDIR is empty, exiting."
126 fi
127 ls ${MENUDIR}/*.sh &>/dev/null || exit 1
128 for file in ${MENUDIR}/*.sh ; do
129     LINE=""
130     KEY=""
131     FUNCTION=""
132     NAME=""
133     . $file
134     if display_entry ; then
135         setopt noglob
136         if [ -n "$LINE" ] ; then
137            LINE=$(echo "$LINE" | sed 's#\([^\]\)/\([[:alnum:]_-]*\)/#\1${HIGHLIGHT_NAME}\2${NORMAL}#g')
138            LINE=$(echo "$LINE" | sed 's#\([^\]\)^\([[:alnum:]]\)#\1${HIGHLIGHT}\2${NORMAL}#g')
139            LINE=$(echo "$LINE" | sed 's#\\\([^/]\)#\1#g')
140             info+="$(eval $LINE)"
141         fi
142
143         for k in ${KEY} ; do
144             keymap[$k]=$FUNCTION
145         done
146         keys+=$KEY
147         setopt glob
148     fi
149 done
150 # }}}
151
152 if [ -z "$info" ] ; then
153    bailout 1
154 fi
155 # mainloop {{{
156 while : ; do
157     echo
158     print_menu
159     echo
160     get_key INPUT
161     case $INPUT in
162         [q|Q|$'\n'])
163             echo $INPUT
164             break
165             ;;
166         [${(k)keys}])
167             echo $INPUT
168             eval ${keymap[$INPUT]} || true
169             ;;
170         *)
171             echo "Unknown key"
172             echo
173             ;;
174
175         esac
176
177 done
178 # }}}
179
180 ## END OF FILE #################################################################
181 # vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=3