2 # Copyright 2009, Roberto Previdi
7 export ZENITY
="zenity --width=800 --height=400"
8 export MSGBOX
="$ZENITY --info --text "
9 export ERROR
="$ZENITY --error --text "
10 export ENTRY
="$ZENITY --entry --text "
11 export EDITFILE
="$ZENITY --text-info --editable --filename "
13 USER_MENU_DIR
="$HOME/.scripta/menu"
14 SYS_MENU_DIRS
="/usr/share/scripta/menu"
16 MENU_DIRS
="$USER_MENU_DIR"
18 export SEP
="==================="
25 # arg1: relative/absolute path to switch to
35 NAME
="$($ENTRY "enter the name of the menu
" | sed 's/ /_/')"
37 $MSGBOX operation cancelled
45 NAME
="$($ENTRY "enter the name of the
script"| sed 's/ /_/')"
47 $MSGBOX operation cancelled
51 cat >> "$NAME" << _END
61 #arg1: the file/dir to rename
62 function rename_file
()
64 NEW_NAME
=$
($ZENITY --entry --text "enter new name" --entry-text $1)
66 $MSGBOX operation cancelled
75 ACTION
=$
($ZENITY --column "Select action" --list rename remove
)
77 $MSGBOX operation cancelled
78 elif [ "$ACTION" == "remove" ]; then
79 PASSWORD
=$
($ZENITY --entry --text "enter \"DELETE this MENU\"" --entry-text "pleeease, don't kill meeee")
80 if [ $?
-gt 0 -o $PASSWORD != "DELETE this MENU"]; then
81 $MSGBOX "operation cancelled"
85 elif [ "$ACTION" == "rename" ]; then
93 ACTION
=$
($ZENITY --column "Select action" --list edit rename remove
)
95 $MSGBOX "operation cancelled"
96 elif [ "$ACTION" == "edit" ]; then
97 $EDITFILE $1 --title $1 > $1.tmp
99 elif [ "$ACTION" == "remove" ]; then
100 PASSWORD
="$($ZENITY --entry --text "enter
\"DELETE this FILE
\"" --entry-text "noooo
, save meeee
")"
101 if [ $?
-gt 0 -o $PASSWORD != "DELETE this FILE"]; then
102 $MSGBOX "operation cancelled"
107 elif [ "$ACTION" == "rename" ]; then
112 #edit the menus in the current path
116 TITLE
="scripta - EDIT"
117 menu_items
--desc-prefix "edit--" back new_submenu new_script quit
119 if [ "$SELECTED" == $SEP ]; then
121 elif [ "$SELECTED" == "back" ]; then
123 elif [ "$SELECTED" == "new_submenu" ]; then
125 elif [ "$SELECTED" == "new_script" ]; then
127 elif [ -d $SELECTED ]; then
129 elif [ -f $SELECTED ]; then
136 # arg1: bash script which defines a "run" function
143 $ERROR "Error, the file doesn't define a run() function"
147 # if [ $NEED_SUDO == "yes" ]; then
158 function do_nothing
()
163 # arg1: return value of zenity
164 # arg2: selected command
165 function parse_menu_commons
()
167 if [ $1 -gt 0 ]; then
168 echo exiting with status
$1
172 if [ "$2" == "quit" ]; then
179 VALUE
=$
(echo $1 |
sed 's/[/]/\\\//g')
182 #arg1: prefix for the description part
183 #arg2: absolute path of choosen root
186 # per eliminare i path sed 's/.*\/\([^/]*\)/\1/' |
187 # per eliminare i caporiga sed -e :a -e '$ P; /$/N; s/\n/ /; ta;'|
188 # tiene solo la prima riga head -n 1 |
189 # aggiunge uno spazio alla fine sed 's/$/ /' |
190 # duplica e modifica sed "s/\([a-z]\+\) /\1 $1\1... /g"
193 SUBMENUS
="$SUBMENUS \
195 find `pwd`/ -maxdepth 1 -mindepth 1 -type d |
198 sed -e :a -e '$ P; /$/N; s/\n/ /; ta;'|
201 sed "s
/\
([/_a-z
]\
+\
) /\
1 $1\
1...
$ROOT /g
"
204 MENU_ITEMS
="$MENU_ITEMS \
206 find `pwd`/ -maxdepth 1 -mindepth 1 -type f |
209 sed -e :a -e '$ P; /$/N; s/\n/ /; ta;'|
212 sed "s
/\
([/_a-z
]\
+\
) /\
1 $1\
1 $ROOT /g
"
217 # arg1-n: additional menu entries
218 function menu_items
()
224 while [ $# -gt 0 ]; do
225 if [ "$1" == "--desc-prefix" ]; then
228 elif [ "$1" == "--enable-override" ]; then
229 ENABLE_OVERRIDE
="TRUE"
231 ADDITIONAL
="$ADDITIONAL $1 $1 $1"
239 for ACTUAL_ROOT
in $MENU_DIRS; do
240 change_dir
"$ACTUAL_ROOT/$RELATIVE_PATH"
242 get_items
"$DESC_PREFIX" $ACTUAL_ROOT
245 ITEMS
="$SUBMENUS $MENU_ITEMS"
247 if [ "$ENABLE_OVERRIDE" == "TRUE" ]; then
248 ITEMS_ARRAY
=( $ITEMS )
251 for i
in $
(seq 0 $
( let "v=${#ITEMS_ARRAY[@]} / 3 - 1"; echo $v)); do
252 DESC_ARRAY
[$i]=$ITEMS_ARRAY[$
( let "v=${i} * 3 + 1"; echo $v)]
255 for i
in $
(seq 0 $
( let "v=${#DESC_ARRAY[@]} - 1"; echo $v)); do
256 # HEAD is ${DESC_ARRAY[@]:0:$i}
257 if [ $DESC_ARRAY[$i] == "----" ]; then
260 DESC_TAIL
=( ${DESC_ARRAY[@]:$( let "v=$i + 1"; echo $v)} )
261 DESC_TAIL
=( ${DESC_TAIL[@]//${DESC_ARRAY[$i]}/----} )
262 DESC_ARRAY
=( ${DESC_ARRAY[@]:0:$i} ${DESC_TAIL[@]} )
265 for i
in $
(seq 0 $
( let "v=${#ITEMS_ARRAY[@]} / 3 - 1"; echo $v)); do
266 if [ $DESC_ARRAY[$i] == "----" ]; then
267 ITEMS_ARRAY
[$
( let "v=${i}*3"; echo $v)]=""
268 ITEMS_ARRAY
[$
( let "v=${i}*3+1"; echo $v)]=""
269 ITEMS_ARRAY
[$
( let "v=${i}*3+2"; echo $v)]=""
273 ITEMS
=${DESC_ARRAY[@]}
277 SELSTRUCT
=( $
($ZENITY --title "$TITLE" --print-column ALL
--column Command
--column Operation
--column Root
--list $ITEMS $SEP $SEP $SEP $ADDITIONAL |
sed 's/|/ /g') )
279 echo "SELSTRUCT=${SELSTRUCT[@]}"
280 SELECTED
=${SELSTRUCT[0]}
281 escape
${SELSTRUCT[2]}
284 echo "SELECTED=$SELECTED"
285 RELATIVE_PATH
=$
( if [ -f $SELECTED ]; then dirname $SELECTED; elif [ -d $SELECTED ]; then echo $SELECTED; else echo ""; fi |
sed "s/$ROOT\/\(.*\)$/\1/")
286 echo "RELATIVE_PATH=$RELATIVE_PATH"
287 parse_menu_commons $?
"$SELECTED"
290 function parse_options
()
292 while [ $# -gt 0 ]; do
293 #if [ "$1" == "--menu-dir" -o "$1" == "-m" ]; then
295 #CMD_MENU_DIRS="$CMD_MENU_DIRS $1"
296 #elif [ "$1" == "--menu-dir" -o "$1" == "-" ]; then
312 menu_items back edit quit
314 if [ "$SELECTED" == $SEP ]; then
316 elif [ "$SELECTED" == "edit" ]; then
318 elif [ "$SELECTED" == "back" ]; then
320 elif [ -d $SELECTED ]; then
321 echo "Entering in $SELECTED"
323 elif [ -f $SELECTED ]; then
324 echo "Executing $SELECTED"