]> git.tuebingen.mpg.de Git - gsu.git/blobdiff - gui
README: Mention that the gui example script must be named "lsi".
[gsu.git] / gui
diff --git a/gui b/gui
index 6003a90ab18a11c51bf4ae4c0a98fa4e74c2bb38..72ddb28b2dd2b21655d834c0b3c193ad096d9d13 100644 (file)
--- a/gui
+++ b/gui
@@ -1,8 +1,10 @@
 #!/bin/bash
+# Copyright (C) 2006 Andre Noll
+# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER.
 
 if [[ "$(type -t _gsu_setup)" != "function" ]]; then
        gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}}
-       . $gsu_dir/common || exit 1
+       . "$gsu_dir/common" || exit 1
        _gsu_setup
 fi
 
@@ -18,7 +20,7 @@ _get_geometry()
        fi
        x="${result#* }"
        y="${result%% *}"
-       (($x > 190)) && x=190
+       ((x > 190)) && x=190
        result="$y $x"
 }
 
@@ -28,7 +30,7 @@ _set_dialog_ret()
 
        case "$ec" in
        0) ret=$GSU_SUCCESS;;
-       1) ret=1;; # cancelled
+       1|255) ret=1;; # cancelled
        *)
                result="dialog exit code $ec"
                ret=-$E_GSU_DIALOG
@@ -78,15 +80,14 @@ gsu_textbox()
 # This is like gsu_textbox() but the text is passed as a string.
 gsu_msgbox()
 {
+       local tmp
+
        # Some versions of dialog segfault if the text is too long. Hence we
        # always use a temporary file.
-       local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)"
-
-       if (($? != 0)); then
-               ret=-$E_GSU_MKTEMP
-               result='temp file for textbox'
-               return
-       fi
+       gsu_make_tempfile 'gsu_msgbox.XXXXXXXXXX'
+       ((ret < 0)) && return
+       tmp="$result"
+       trap "rm -f $tmp" EXIT
        echo "$1" > "$tmp"
        gsu_textbox "$tmp"
        rm -f "$tmp" # ignore errors
@@ -96,15 +97,13 @@ _gsu_menu()
 {
        local header="${1:-root}"
        local items="$2"
-       local i state opts num=0
+       local geom
 
        _get_geometry
-       opts="$result 16"
-       for i in $items; do
-               let num++
-               opts+=" $i $num"
-       done
-       result="$(dialog --menu "$gsu_banner_txt ($header)" $opts 3>&1 1>&2 2>&3 3>&-)"
+       geom=$result
+       result="$(dialog --no-lines --no-items --menu \
+               "$gsu_banner_txt ($header)"  \
+               $geom 16 $items 3>&1 1>&2 2>&3 3>&-)"
        _set_dialog_ret $?
 }
 
@@ -131,7 +130,7 @@ _get_subtree()
        #echo "line: $line_num, root: $root, indent level: $level"
        result="$(sed -e "1,${line_num}d;" <<< "$tree" \
                | sed -e "/^$TAB\{1,$level\}$_gsu_node_name_pattern/,\$d" \
-               | sed -e "/^$TAB\{$(($level + 2))\}/d")"
+               | sed -e "/^$TAB\{$((level + 2))\}/d")"
        if (($? != 0)); then
                ret=-$E_GSU_MENU_TREE
                result="sed command for subtree $root failed"
@@ -160,15 +159,15 @@ _browse()
 
        while :; do
                _gsu_menu "$header" "$subtree"
-               (($ret < 0)) && return
+               ((ret < 0)) && return
                [[ -z "$result" ]] && return # menu was cancelled
                if [[ "${result%/}" != "$result" ]]; then
                        old_header="$header"
                        header="$result"
                        _get_subtree "$tree" "$header"
-                       (($ret < 0)) && return
+                       ((ret < 0)) && return
                        _browse "$header" "$tree" "$result"
-                       (($ret < 0)) && return
+                       ((ret < 0)) && return
                        header="$old_header"
                        continue
                fi