Fixed some typos
[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 . /etc/grml/sh-lib
10 if ! checkbootparam 'nocolor'; then
11     . /etc/grml_colors
12 fi
13
14 # variable setup {{{
15 # maximum line length
16 MAXLEN=60
17
18 # switch between character sets
19 B="\x0e"
20 N="\x0f"
21
22 set -A info
23 set -A keys
24 typeset -A keymap
25
26 HLINE="$B x $N"
27 VLINE=$(repeat $MAXLEN echo -n q)
28 HIGHLIGHT="$GREEN"
29 HIGHLIGHT_NAME="$MAGENTA"
30 SCRIPTDIR="/usr/share/grml-quickconfig/"
31
32
33 # enable alternate console fonts
34 echo -n "\e(B\e)0"
35 # }}}
36
37
38 # helper functions {{{
39 print_line() {
40     esc=$(printf '\033')
41     ORIG_LEN=$(echo $(printf '%s' "$1" | sed "s#${esc}\[[0-9;]*m##g" | wc -c))
42     echo -n "${BLUE}$HLINE${NORMAL}"
43     echo -n "$1"
44     printf "%$[${MAXLEN}-${ORIG_LEN}-2]s${BLUE}${HLINE}${NORMAL}\n"
45 }
46
47 print_starting_line() {
48     echo $B ${BLUE}l"$VLINE"k${NORMAL} $N
49 }
50
51 print_closing_line() {
52     echo $B ${BLUE}m"$VLINE"j${NORMAL} $N
53 }
54
55 print_delim() {
56    echo $B ${BLUE}t"$VLINE"u${NORMAL} $N
57 }
58
59 highlight_char() {
60     echo $1 | sed -e "s/$2/$HIGHLIGHT$2$NORMAL/"
61 }
62
63 print_menu() {
64     print_starting_line
65     for x in ${info} ; do
66         echo $x
67     done
68     print_closing_line
69 }
70
71 run() {
72    echo Running Command $*
73    $*
74
75 }
76
77 get_key() {
78     stty -echo ; read -kq $1?"Press a key: "
79 }
80 # }}}
81
82 # check boot parameter {{{
83 get_menu_dir() {
84    local TARGET="$1"
85    if [ -d "$TARGET" ] ; then
86       MENUDIR="$TARGET"
87    elif [ -d "$SCRIPTDIR/$TARGET" ] ; then
88       MENUDIR="$SCRIPTDIR/$TARGET"
89    fi
90 }
91 BOOT_PARAM=$(getbootparam menu)
92 if [ -n "$TARGET" ] ; then
93    get_menu_dir "$BOOT_PARAM"
94 fi
95 if [ -n "$1" ] ; then
96    get_menu_dir "$1"
97 fi
98
99 if [ -z "$MENUDIR" ] ; then
100    MENUDIR="$SCRIPTDIR"
101 fi
102
103 # }}}
104
105 # load modules {{{
106 for file in "$MENUDIR"/*.sh ; do
107     LINE=""
108     KEY=""
109     FUNCTION=""
110     NAME=""
111     [ ! -e "$file" ] && break
112     . $file
113     if display_entry ; then
114         setopt noglob
115         if [ -n "$LINE" ] ; then
116             info+="$(eval $LINE)"
117         fi
118
119         for k in ${KEY} ; do
120             keymap[$k]=$FUNCTION
121         done
122         keys+=$KEY
123         setopt glob
124     fi
125 done
126 # }}}
127
128 if [ -z "$info" ] ; then
129    exit 1
130 fi
131 # mainloop {{{
132 while : ; do
133     echo
134     print_menu
135     echo
136     get_key INPUT
137     case $INPUT in
138         [q|Q|$'\n'])
139             echo
140             break
141             ;;
142         [${(k)keys}])
143             eval ${keymap[$INPUT]}
144             ;;
145         *)
146             echo "Unknown key"
147             echo
148             ;;
149
150         esac
151
152 done
153 echo "Happy Hacking"
154 # }}}
155
156 ## END OF FILE #################################################################
157 # vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=3