scripts kernel working
[scripta.git] / scripta
blobd89cc302db2415e43e7e778d8d39f4f75ed93e50
1 #!/bin/bash
2 # Copyright 2009, Roberto Previdi
3 # GPL v2 or later
5 DEBUG=1
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 "
12 export TMP="/tmp"
13 USER_MENU_DIR="$HOME/.scripta/menu"
14 SYS_MENU_DIRS="/usr/share/scripta/menu"
15 CMD_MENU_DIRS=""
16 MENU_DIRS="$USER_MENU_DIR"
17 # $SYS_MENU_DIRS
18 export SEP="==================="
19 TITLE="scripta"
22 echo $0
23 pwd
25 # arg1: relative/absolute path to switch to
26 function change_dir()
28 echo "change_dir($1)"
29 cd $1
30 MENU_DIR=$(pwd)
33 function new_menu()
35 NAME="$($ENTRY "enter the name of the menu" | sed 's/ /_/')"
36 if [ $? -gt 0 ]; then
37 $MSGBOX operation cancelled
38 else
39 mkdir "$NAME"
43 function new_script()
45 NAME="$($ENTRY "enter the name of the script"| sed 's/ /_/')"
46 if [ $? -gt 0 ]; then
47 $MSGBOX operation cancelled
48 else
49 touch "$NAME"
50 # ---> #
51 cat >> "$NAME" << _END
52 function run()
54 \$MSGBOX "edit me!"
56 _END
57 # ---> #
61 #arg1: the file/dir to rename
62 function rename_file()
64 NEW_NAME=$($ZENITY --entry --text "enter new name" --entry-text $1)
65 if [ $? -gt 0 ]; then
66 $MSGBOX operation cancelled
67 else
68 mv $1 $NEW_NAME
72 #arg1: menu to edit
73 function edit_menu()
75 ACTION=$($ZENITY --column "Select action" --list rename remove)
76 if [ $? -gt 0 ]; then
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"
82 else
83 rm -rf $1
85 elif [ "$ACTION" == "rename" ]; then
86 rename_file $1
87 fi
90 #arg1: file to edit
91 function edit_file()
93 ACTION=$($ZENITY --column "Select action" --list edit rename remove)
94 if [ $? -gt 0 ]; then
95 $MSGBOX "operation cancelled"
96 elif [ "$ACTION" == "edit" ]; then
97 $EDITFILE $1 --title $1 > $1.tmp
98 mv -f $1.tmp $1
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"
103 else
104 rm -rf $1
107 elif [ "$ACTION" == "rename" ]; then
108 rename_file $1
112 #edit the menus in the current path
113 function edit_fn()
115 while [ 1 ]; do
116 TITLE="scripta - EDIT"
117 menu_items --desc-prefix "edit--" back new_submenu new_script quit
119 if [ "$SELECTED" == $SEP ]; then
120 do_nothing
121 elif [ "$SELECTED" == "back" ]; then
122 return 0
123 elif [ "$SELECTED" == "new_submenu" ]; then
124 new_menu
125 elif [ "$SELECTED" == "new_script" ]; then
126 new_script
127 elif [ -d $SELECTED ]; then
128 edit_menu $SELECTED
129 elif [ -f $SELECTED ]; then
130 edit_file $SELECTED
132 done
136 # arg1: bash script which defines a "run" function
137 function execute()
139 NEED_SUDO="no"
141 function run()
143 $ERROR "Error, the file doesn't define a run() function"
146 source $1
147 # if [ $NEED_SUDO == "yes" ]; then
148 # SUDO_CMD="sudo -E"
149 # else
150 # SUDO_CMD=""
151 # fi
152 # export -f run
153 # $SUDO_CMD ...
158 function do_nothing()
160 DUMMY=$DUMMY
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
169 exit $1
172 if [ "$2" == "quit" ]; then
173 exit 0
177 function escape()
179 VALUE=$(echo $1 | sed 's/[/]/\\\//g')
182 #arg1: prefix for the description part
183 #arg2: absolute path of choosen root
184 function get_items()
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"
191 escape $2
192 local ROOT="$VALUE"
193 SUBMENUS="$SUBMENUS \
195 find `pwd`/ -maxdepth 1 -mindepth 1 -type d |
196 grep -v ".*~" |
197 sort |
198 sed -e :a -e '$ P; /$/N; s/\n/ /; ta;'|
199 head -n 1 |
200 sed 's/$/ /' |
201 sed "s/\([/_a-z]\+\) /\1 $1\1... $ROOT /g"
204 MENU_ITEMS="$MENU_ITEMS \
206 find `pwd`/ -maxdepth 1 -mindepth 1 -type f |
207 grep -v ".*~" |
208 sort |
209 sed -e :a -e '$ P; /$/N; s/\n/ /; ta;'|
210 head -n 1 |
211 sed 's/$/ /' |
212 sed "s/\([/_a-z]\+\) /\1 $1\1 $ROOT /g"
217 # arg1-n: additional menu entries
218 function menu_items()
220 echo "menu_items()"
221 ADDITIONAL=""
222 DESC_PREFIX=""
223 ENABLE_OVERRIDE=""
224 while [ $# -gt 0 ]; do
225 if [ "$1" == "--desc-prefix" ]; then
226 shift
227 DESC_PREFIX="$1"
228 elif [ "$1" == "--enable-override" ]; then
229 ENABLE_OVERRIDE="TRUE"
230 else
231 ADDITIONAL="$ADDITIONAL $1 $1 $1"
233 shift
234 done
236 SUBMENUS=""
237 MENU_ITEMS=""
239 for ACTUAL_ROOT in $MENU_DIRS; do
240 change_dir "$ACTUAL_ROOT/$RELATIVE_PATH"
242 get_items "$DESC_PREFIX" $ACTUAL_ROOT
243 done
245 ITEMS="$SUBMENUS $MENU_ITEMS"
247 if [ "$ENABLE_OVERRIDE" == "TRUE" ]; then
248 ITEMS_ARRAY=( $ITEMS )
249 DESC_ARRAY=( )
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)]
253 done
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
258 continue
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[@]} )
263 done
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)]=""
271 done
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]}
282 local ROOT=$VALUE
283 echo "ROOT=$ROOT"
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
294 #shift
295 #CMD_MENU_DIRS="$CMD_MENU_DIRS $1"
296 #elif [ "$1" == "--menu-dir" -o "$1" == "-" ]; then
297 # implement actions
300 shift
301 done
306 #parse_options
308 while [ 1 ]; do
311 TITLE="scripta"
312 menu_items back edit quit
314 if [ "$SELECTED" == $SEP ]; then
315 do_nothing
316 elif [ "$SELECTED" == "edit" ]; then
317 edit_fn
318 elif [ "$SELECTED" == "back" ]; then
319 change_dir ..
320 elif [ -d $SELECTED ]; then
321 echo "Entering in $SELECTED"
322 change_dir $SELECTED
323 elif [ -f $SELECTED ]; then
324 echo "Executing $SELECTED"
325 execute $SELECTED
327 done