3 if [[ "$(type -t _gsu_setup)" != "function" ]]; then
4 gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}}
5 . $gsu_dir/common || exit 1
9 _gsu_node_name_pattern='[a-zA-Z_]'
16 gsu_msg "fatal: could not get terminal geometry"
25 # Open a dialog box which asks the user to input a text
27 # Usage: gsu_input_box <text> <init>
29 # <text> is displayed above of the input field, which is is preset to <init>.
30 # The entered text is returned in $result. On success (user pressed OK)
31 # the function returns zero. If the user selected Cancel, the return value is
32 # one. On dialog errors, a negative error code is returned.
35 local g text="$1" init="$2"
39 result="$(dialog --inputbox "$text" $g "$init" 3>&1 1>&2 2>&3 3>&-)"
48 # Show the given file in a text box
50 # Usage: gsu_textbox <path>
52 # The box has an OK button which closes the box when activated.
62 dialog --textbox "$file" $g || return
66 # Show a message in a text box
68 # Usage: gsu_msgbox <text>
70 # This is like gsu_textbox() but the text is passed as a string.
73 # Some versions of dialog segfault if the text is too long. Hence we
74 # always use a temporary file.
75 local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)"
79 result='temp file for textbox'
84 rm -f "$tmp" # ignore errors
89 local header="${1:-root}"
91 local i state opts num=0
99 result="$(dialog --menu "$gsu_banner_txt ($header)" $opts 3>&1 1>&2 2>&3 3>&-)"
101 0) ret=$GSU_SUCCESS;;
102 1) ret=1;; # cancelled
104 result="menu error $ret"
111 local tmp="${1%%$_gsu_node_name_pattern*}"
117 local tree="$1" root="${2%/}"
120 ret=-$E_GSU_MENU_TREE
121 result="subtree grep failed"
122 first="$(grep -n "$TAB\{1,\}$root/" <<< "$tree")" || return
123 [[ -z "$first" ]] && return
125 line_num="${first%%:*}"
126 _get_level "${first#*:}"
129 #echo "line: $line_num, root: $root, indent level: $level"
130 result="$(sed -e "1,${line_num}d;" <<< "$tree" \
131 | sed -e "/^$TAB\{1,$level\}$_gsu_node_name_pattern/,\$d" \
132 | sed -e "/^$TAB\{$(($level + 2))\}/d")"
134 ret=-$E_GSU_MENU_TREE
135 result="sed command for subtree $root failed"
143 local tree="$1" TAB=' '
145 result="$(grep "^${TAB}${_gsu_node_name_pattern}" <<< "$tree")"
147 ret=-$E_GSU_MENU_TREE
148 result="root node grep failed"
156 local header="$1" old_header
157 local tree="$2" subtree="$3"
160 _gsu_menu "$header" "$subtree"
161 (($ret < 0)) && return
162 [[ -z "$result" ]] && return # menu was cancelled
163 if [[ "${result%/}" != "$result" ]]; then
166 _get_subtree "$tree" "$header"
167 (($ret < 0)) && return
168 _browse "$header" "$tree" "$result"
169 (($ret < 0)) && return
173 eval ${gsu_name}_$result
179 local tree="$1" subtree
181 type -t dialog &> /dev/null
183 gsu_msg "dialog executable not found"
186 _get_root_nodes "$tree"
188 _browse "main menu" "$tree" "$subtree"