rev |
line source |
pankso@553
|
1 #!/bin/sh
|
pankso@553
|
2 #
|
pankso@569
|
3 # SliTaz tiny GUI boxes for the desktop (su, logout, locale, etc)
|
pankso@569
|
4 # and as usual, please: KISS
|
pankso@553
|
5 #
|
pascal@821
|
6 # Copyright (C) 2011-2014 SliTaz GNU/Linux - GNU GPL v3
|
pankso@553
|
7 # - Christophe Lincoln <pankso@slitaz.org>
|
al@845
|
8 # - Aleksej Bobylev <al.bobylev@gmail.com>
|
pankso@553
|
9 #
|
al@813
|
10 . /lib/libtaz.sh
|
al@813
|
11 export TEXTDOMAIN='tazbox' # i18n
|
pankso@553
|
12
|
al@813
|
13 # download dir (may be in a config file)
|
pankso@562
|
14 DOWNLOADS=$HOME/Downloads
|
pankso@562
|
15
|
claudinei@611
|
16 # some constants to be used inside functions
|
al@845
|
17 tmp=/tmp/keymap.list
|
al@845
|
18 db=/usr/share/i18n/locales
|
al@845
|
19 zi=/usr/share/zoneinfo/
|
al@845
|
20 ztab=${zi}zone-mini.tab
|
al@845
|
21 csv=/tmp/freegeoip.csv
|
claudinei@611
|
22
|
pankso@553
|
23 #
|
pankso@553
|
24 # Functions
|
pankso@553
|
25 #
|
pankso@553
|
26
|
pankso@553
|
27 usage() {
|
al@813
|
28 newline; _ 'SliTaz tiny GUI boxes for the desktop'
|
pankso@553
|
29
|
al@813
|
30 newline; boldify $(_ 'Usage:')
|
al@813
|
31 echo " $(basename $0) [$(_n 'command')]"
|
pankso@553
|
32
|
al@813
|
33 newline; boldify $(_ 'Commands:')
|
al@813
|
34 optlist "\
|
al@813
|
35 usage $(_ 'Display this short help usage')
|
al@813
|
36 su $(_ 'Execute a command as super-user')
|
al@813
|
37 logout $(_ 'Desktop logout box with actions')
|
al@813
|
38 out $(_ 'Pipe a command output into a GTK window')
|
al@813
|
39 out-dl $(_ 'Pipe wget output into a GTK window')
|
al@813
|
40 locale $(_ 'Configure system language (root)')
|
al@813
|
41 keymap $(_ 'Configure system keymap (root)')
|
al@813
|
42 tz $(_ 'Configure system timezone (root)')
|
al@813
|
43 setup $(_ 'System initial setup (locale, keymap & timezone)')
|
al@813
|
44 new-file $(_ 'Create a new file or folder on the desktop')
|
al@813
|
45 all-apps $(_ 'Display icons of all installed applications')
|
al@813
|
46 notify $(_ 'Notify user with a desktop centered box')
|
al@813
|
47 tazapps $(_ 'Configure SliTaz default applications')"
|
al@813
|
48 newline
|
pankso@553
|
49 }
|
pankso@553
|
50
|
al@813
|
51 # try to find icon in .desktop files
|
al@813
|
52 find_icon() {
|
al@813
|
53 local desktop
|
al@813
|
54 desktop=$(find $HOME/.local/share/applications /usr/share/applications \
|
al@880
|
55 -name ${1##*/}.desktop 2&>/dev/null | head -n1)
|
al@813
|
56 [ x$desktop != x ] && cat $desktop | sed '/\[Desktop\ Entry\]/,/^\[/!d' | \
|
al@813
|
57 sed '/^Icon=/!d' | head -n1 | cut -d= -f2
|
al@813
|
58 }
|
al@813
|
59
|
paul@835
|
60 # su frontend GUIs
|
pankso@587
|
61 su_main() {
|
al@813
|
62 CMD1="$1"; shift; CMD2="$(echo $@ | sed 's|&|&|g')"
|
al@813
|
63 : ${icon=$(find_icon $CMD1)}
|
al@813
|
64 [ x$icon == x ] && icon=gtk-dialog-authentication
|
al@813
|
65
|
al@813
|
66 yad --title="$(_n 'SliTaz admin password')" --window-icon=$icon \
|
al@813
|
67 --width=520 --on-top --center \
|
al@813
|
68 --image=$icon --image-on-top \
|
al@813
|
69 --text="$(_n 'Please enter root password (default root) to execute:')\n
|
al@813
|
70 <span foreground=\"red\"><tt><b>$CMD1</b> $CMD2</tt></span>\n" \
|
al@813
|
71 --form \
|
al@813
|
72 --field="$(_n 'Password:'):H" $PASSWD \
|
al@813
|
73 --field="$(_n 'Autosave password'):CHK" $CHECKED
|
pankso@587
|
74 }
|
pankso@587
|
75
|
pankso@587
|
76 su_error() {
|
al@813
|
77 icon=gtk-dialog-error
|
al@813
|
78 yad --title="$(_n 'Error')" --window-icon=$icon \
|
al@813
|
79 --width=320 --on-top --center \
|
al@813
|
80 --image=$icon --image-on-top \
|
al@813
|
81 --text="\n<b>$(_n 'Error: wrong password!')</b>\n" \
|
al@813
|
82 --button="gtk-close:1"
|
pankso@587
|
83 }
|
pankso@587
|
84
|
al@813
|
85 # user may press cancel on download.
|
pankso@562
|
86 cancel_dl() {
|
pankso@562
|
87 if [ "$?" == 1 ]; then
|
al@813
|
88 _ "CANCEL"
|
pankso@562
|
89 rm -f $DOWNLOADS/$(basename $url)
|
pankso@562
|
90 fi
|
pankso@562
|
91 }
|
pankso@562
|
92
|
al@813
|
93 # output a command in a GTK window
|
pankso@744
|
94 output_command() {
|
al@813
|
95 : ${title=$(_n 'TazBox Output')}
|
al@813
|
96 : ${icon=gtk-dialog-info}
|
al@813
|
97
|
al@813
|
98 yad --title="$title" --window-icon=$icon \
|
al@813
|
99 --geometry="600x220+0-24" --fore="#ffffff" --back="#000000" \
|
al@813
|
100 --text-info --fontname=monospace --wrap $opts \
|
al@813
|
101 --button="gtk-close:1"
|
pankso@562
|
102 }
|
pankso@562
|
103
|
al@813
|
104 # logout GUI function
|
pankso@553
|
105 logout_main() {
|
pankso@823
|
106 icon=/usr/share/pixmaps/slitaz-icon.png
|
al@813
|
107 yad --title="$(_n 'SliTaz Logout')" --window-icon=$icon \
|
pankso@823
|
108 --on-top --center --height=130 \
|
al@813
|
109 --image=$icon --image-on-top \
|
pankso@823
|
110 --text="<b>$(_n 'SliTaz Logout - Please choose an action:')</b>" \
|
al@813
|
111 --always-print-result \
|
al@878
|
112 --button "$(_n 'Close X session')!system-log-out:4" \
|
al@878
|
113 --button "$(_n 'Reboot system')!reload:3" \
|
al@878
|
114 --button "$(_n 'Shutdown system')!system-shutdown:2"
|
al@813
|
115 }
|
pankso@553
|
116
|
al@813
|
117 # generate keymap list
|
pankso@610
|
118 gen_kmap_list() {
|
pankso@610
|
119 echo > $tmp
|
pankso@610
|
120 cd /usr/share/kbd/keymaps/i386
|
al@813
|
121 # we first need a list to sort and then use \n for Yad list.
|
al@813
|
122 for i in $(find -type f | sed '/include/d; s|./||'); do
|
al@813
|
123 echo "$(basename $i .map.gz)|$(dirname $i)" >> $tmp
|
pankso@610
|
124 done
|
pankso@610
|
125 }
|
pankso@610
|
126
|
pankso@610
|
127 # Initial Config functions
|
pankso@610
|
128 setup_main() {
|
al@813
|
129 icon=locale
|
pankso@610
|
130 gen_kmap_list
|
al@813
|
131 locale=$(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z] | tr "\n" "!")
|
al@813
|
132 keymap=$(cat $tmp | sort | tr "\n" "!")
|
al@880
|
133 timezone=$(find $zi -type f | sed s,$zi,,g | grep -v -F '.tab' | tr "\n" "!")
|
al@813
|
134 yad --title="$(_n 'SliTaz Initial Setup')" --window-icon=$icon \
|
al@813
|
135 --width=500 \
|
al@813
|
136 --image=$icon --image-on-top \
|
al@813
|
137 --text="<big>$(_n 'Here you can set your preferences \n for <b>locale, keymap and timezone</b>.')</big>" \
|
al@813
|
138 --form \
|
al@813
|
139 --field "$(_n 'Locale'):CB" $locale \
|
al@813
|
140 --field "$(_n 'Keymap'):CB" $keymap \
|
al@813
|
141 --field "$(_n 'Timezone'):CB" $timezone
|
pankso@610
|
142 }
|
pankso@610
|
143
|
pankso@610
|
144 setup() {
|
pankso@610
|
145 choices=$(setup_main)
|
pankso@610
|
146 locale=$(echo $choices | cut -d"|" -f1)
|
pankso@610
|
147 keymap=$(echo $choices | cut -d"|" -f2)
|
pankso@610
|
148 timezone=$(echo $choices | cut -d"|" -f3)
|
pankso@610
|
149 [ $locale ] && tazlocale init $locale
|
pankso@610
|
150 [ $keymap ] && tazkeymap init $keymap
|
pankso@610
|
151 [ $timezone ] && echo $timezone > /etc/TZ
|
pankso@610
|
152 }
|
pankso@610
|
153
|
al@880
|
154
|
al@880
|
155 #
|
pankso@569
|
156 # Locale functions
|
al@880
|
157 #
|
al@880
|
158
|
pankso@569
|
159 locale_main() {
|
al@813
|
160 icon=preferences-desktop-locale
|
al@813
|
161 for locale in $(ls -1 $db | grep '[a-z]_[A-Z]'); do
|
al@813
|
162 desc=$(fgrep -m1 title $db/$locale | cut -d'"' -f2)
|
al@886
|
163 ll_CC=${locale%%@*}
|
al@886
|
164 echo -e "${ll_CC##*_}\n$locale\n$desc"
|
pankso@569
|
165 done | \
|
al@813
|
166 yad --title="$(_n 'SliTaz locale')" --window-icon=$icon \
|
al@813
|
167 --width=600 --height=380 --sticky --on-top --center \
|
al@813
|
168 --image=$icon --image-on-top \
|
al@880
|
169 --text="<b>$(_n 'Language configuration')</b> \
|
paul@884
|
170 \n\n$(_ 'Tip: manage locales list by installing/removing locale packages.')" \
|
al@880
|
171 --list --column="$(_n 'Flag'):IMG" --column $(_n 'Name') \
|
al@880
|
172 --column $(_n 'Description') \
|
al@880
|
173 --print-column=2 --separator='' \
|
al@880
|
174 --button="$(_n 'Manage')!stock_properties:2" \
|
al@880
|
175 --button="gtk-cancel:1" --button="gtk-ok:0"
|
pankso@569
|
176 }
|
pankso@569
|
177
|
pankso@569
|
178 locale() {
|
pankso@569
|
179 locale=$(locale_main)
|
pankso@569
|
180 # Deal with --button values
|
pankso@569
|
181 case $? in
|
al@880
|
182 2) tazbox manage_i18n main ;;
|
pankso@569
|
183 1) exit 0 ;;
|
pankso@569
|
184 *) continue ;;
|
pankso@569
|
185 esac
|
pankso@573
|
186 # System language configuration.
|
al@880
|
187 if [ "$locale" ]; then
|
al@880
|
188 tazlocale $locale
|
al@880
|
189 tazbox notify "$(_ 'Locale was set to $locale')" \
|
al@880
|
190 preferences-desktop-locale 3
|
al@880
|
191 fi
|
pankso@569
|
192 }
|
pankso@569
|
193
|
pankso@569
|
194 # Keymap functions
|
pankso@569
|
195 keymap_main() {
|
al@813
|
196 #icon=preferences-desktop-keyboard
|
al@813
|
197 icon=input-keyboard
|
pankso@610
|
198 gen_kmap_list
|
al@813
|
199 for i in $(sort $tmp); do
|
al@813
|
200 echo "$i" | tr '|' '\n'
|
pankso@569
|
201 done | \
|
al@813
|
202 yad --title="$(_ 'SliTaz keymap')" --window-icon=$icon \
|
al@813
|
203 --width=500 --height=380 --sticky --on-top --center \
|
al@813
|
204 --image=$icon --image-on-top \
|
al@813
|
205 --text="<b>$(_n 'Keyboard configuration')</b>" \
|
al@813
|
206 --list --column $(_n 'Keymap') --column $(_n 'Type') \
|
al@813
|
207 --print-column=1 --separator=''
|
pankso@573
|
208 rm -f $tmp
|
pankso@569
|
209 }
|
pankso@569
|
210
|
pankso@569
|
211 keymap() {
|
pankso@569
|
212 keymap=$(keymap_main)
|
pankso@569
|
213 # Deal with --button values
|
al@813
|
214 [ x$? == x1 ] && exit 0
|
pankso@573
|
215 # System keymap configuration
|
pankso@752
|
216 [ "$keymap" ] && tazkeymap $keymap
|
pankso@569
|
217 }
|
pankso@569
|
218
|
al@845
|
219 # Free GeoIP service
|
al@938
|
220 # Response: IP,CountryCode,CountryName, ...
|
al@845
|
221 geoip() {
|
al@845
|
222 [ ! -e $csv ] && wget -q -T3 -O $csv http://freegeoip.net/csv/ 2&>/dev/null
|
al@938
|
223 [ -e $csv ] && cut -d, -f2 $csv
|
al@845
|
224 }
|
al@845
|
225
|
al@880
|
226 #
|
pankso@604
|
227 # TZ functions
|
al@880
|
228 #
|
al@880
|
229
|
al@880
|
230 # list of all existing available locations for country
|
al@880
|
231 tz_list() {
|
al@880
|
232 find $zi | \
|
al@880
|
233 grep -E "$(cat $ztab | grep "^$1 " | cut -d' ' -f2 | tr ' ' '|')" | \
|
al@880
|
234 grep -v -E "posix|right" | \
|
al@880
|
235 sed 's|.*/||g' | sort
|
al@880
|
236 }
|
al@880
|
237
|
al@880
|
238 # ask for confirmation only if we have what to choose
|
al@845
|
239 tz_suggest() {
|
al@845
|
240 CountryCode=$(geoip)
|
al@880
|
241 if [ "x$CountryCode" != x ]; then
|
al@880
|
242 if [ "x$(tz_list $CountryCode)" != x ]; then
|
al@845
|
243 CountryName=$(cut -d'"' -f6 $csv)
|
al@845
|
244 yad --title="$(_ 'SliTaz TZ')" --window-icon=$icon \
|
al@845
|
245 --on-top --center \
|
al@845
|
246 --image=$CountryCode --image-on-top \
|
al@845
|
247 --text="$(_ 'Suggested location:') <b>$CountryName</b>\n
|
paul@861
|
248 $(_ 'Are you agreed?')" \
|
al@880
|
249 --button="gtk-yes:0" --button="gtk-no:1"
|
al@845
|
250 [ $? == 0 ] && echo $CountryCode
|
al@880
|
251 fi
|
al@845
|
252 fi
|
al@813
|
253 }
|
al@813
|
254
|
al@813
|
255 tz_select() {
|
al@813
|
256 case x$1 in
|
al@813
|
257 x)
|
al@813
|
258 # first pass - country
|
al@845
|
259 tmpcc=$(mktemp)
|
al@845
|
260
|
al@845
|
261 for tzfile in $(find $zi -type f -regex '.*info/[ABCEIMP].*'); do
|
al@845
|
262 grep -m1 $(basename $tzfile) $ztab
|
al@845
|
263 done | cut -d' ' -f1 | sort -u > $tmpcc
|
al@845
|
264
|
al@845
|
265 for CC in $(cat $tmpcc); do
|
al@813
|
266 cat << EOT
|
al@813
|
267 $CC
|
al@813
|
268 $CC
|
al@880
|
269 $(grep -m1 "$CC " ${zi}iso3166.tab | cut -d' ' -f2)
|
al@813
|
270 EOT
|
al@813
|
271 done | \
|
al@813
|
272 yad --title="$(_ 'SliTaz TZ')" --window-icon=$icon \
|
al@813
|
273 --width=500 --height=380 --on-top --center \
|
al@813
|
274 --image=$icon --image-on-top \
|
al@880
|
275 --text="<b>$(_ 'TimeZone Configuration')</b> \
|
paul@884
|
276 \n$(_ 'Select country and press "Forward" or manually select timezone file.') \
|
paul@884
|
277 \n\n$(_ 'Tip: manage timezones list by installing/removing locale packages.')" \
|
al@813
|
278 --list \
|
al@813
|
279 --column="$(_n 'Flag'):IMG" --column=$(_n 'Code') --column=$(_n 'Country') \
|
al@880
|
280 --button="$(_n 'Manage')!stock_properties:4" \
|
al@880
|
281 --button="$(_n 'Manual')!gtk-index:2" \
|
al@880
|
282 --button="gtk-go-forward:0" \
|
al@813
|
283 --button="gtk-cancel:1" --always-print-result \
|
al@813
|
284 --print-column=2 --separator=''
|
al@813
|
285 ;;
|
al@813
|
286 xindex)
|
al@813
|
287 # manual selection of file with timezone info
|
al@813
|
288 yad --title="$(_ 'SliTaz TZ')" --window-icon=$icon \
|
al@813
|
289 --width=500 --on-top --center \
|
al@813
|
290 --image=$icon --image-on-top \
|
al@813
|
291 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select time zone')" \
|
al@845
|
292 --form --field=":FL" ${zi}UTC --separator='' | \
|
al@845
|
293 sed "s|$zi||"
|
al@813
|
294 ;;
|
al@813
|
295 *)
|
al@813
|
296 # second pass - city/place
|
al@880
|
297 list=$(tz_list $1)
|
al@813
|
298 icon=$1
|
al@813
|
299 if [ $(echo "$list" | wc -l) != 1 ]; then
|
al@813
|
300 echo "$list" | \
|
al@813
|
301 yad --title="$(_ 'SliTaz TZ')" --window-icon=$icon \
|
al@813
|
302 --width=500 --height=380 --on-top --center \
|
al@813
|
303 --image=$icon --image-on-top \
|
al@813
|
304 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select location')" \
|
al@813
|
305 --list --column $(_n 'Location/City') --separator=''
|
al@813
|
306 else
|
al@813
|
307 echo $list
|
al@813
|
308 fi
|
al@813
|
309 ;;
|
al@813
|
310 esac
|
pankso@604
|
311 }
|
pankso@604
|
312
|
pankso@604
|
313 tz() {
|
al@880
|
314 icon=clock
|
al@845
|
315 arg=$(tz_suggest)
|
al@845
|
316
|
al@845
|
317 timezone=$(tz_select $arg)
|
al@813
|
318 case $? in
|
al@813
|
319 1) exit 0 ;;
|
al@880
|
320 0) [ x$arg == x ] && timezone=$(tz_select "$timezone")
|
al@880
|
321 [ x$timezone == x ] && exit 0
|
al@880
|
322 timezone=$(find $zi -name $timezone | grep -v -E "posix|right" | \
|
al@845
|
323 sed "s|$zi||") ;;
|
al@813
|
324 2) timezone=$(tz_select "index") ;;
|
al@880
|
325 4) tazbox manage_i18n main;;
|
al@813
|
326 esac
|
al@845
|
327
|
al@880
|
328 [ "x$timezone" == x ] && exit 0
|
al@813
|
329 echo $timezone > /etc/TZ
|
al@813
|
330 export TZ=$timezone
|
al@880
|
331 tazbox notify "$(_ 'TimeZone was set to $timezone')" $icon 3
|
al@845
|
332 rm -f $tmpcc
|
pankso@604
|
333 }
|
pankso@604
|
334
|
al@880
|
335 #
|
al@880
|
336 # Manage i18n packages
|
al@880
|
337 #
|
al@880
|
338
|
al@880
|
339 # if installed
|
al@880
|
340 if_installed() {
|
al@880
|
341 [ -d /var/lib/tazpkg/installed/$1 ]
|
al@880
|
342 }
|
al@880
|
343
|
al@880
|
344 # get package's description, install flag and sizes
|
al@880
|
345 desc_etc()
|
al@880
|
346 {
|
al@880
|
347 INFO="$(grep -m1 -A3 -x -F $1 /var/lib/tazpkg/packages.txt)"
|
al@880
|
348 DESC=$(echo "$INFO" | sed -n 3p)
|
al@880
|
349 if if_installed $1; then
|
al@880
|
350 INST="TRUE"; echo $1 >> $ORIG_LIST
|
al@880
|
351 else
|
al@880
|
352 INST="FALSE"
|
al@880
|
353 fi
|
al@880
|
354 SIZES=$(echo "$INFO" | sed -n 4p)
|
al@880
|
355 SIZE1=${SIZES%% *}
|
al@880
|
356 SIZE2=$(echo $SIZES | cut -d' ' -f2 | tr -d '(')
|
al@880
|
357 echo -e "$INST\n$1\n$DESC\n${SIZE1//.0}\n${SIZE2//.0}" >> $PKGS_LIST
|
al@880
|
358 }
|
al@880
|
359
|
al@880
|
360 # remove temp
|
al@880
|
361 rm_temp() {
|
al@880
|
362 rm -f $PKGS_LIST $ORIG_LIST $ANSWER $NEW_LIST $LIST1 $LIST2
|
al@880
|
363 }
|
al@880
|
364
|
al@880
|
365 # install/remove locale packages
|
al@880
|
366 manage_i18n() {
|
al@880
|
367 tazbox notify "$(_ 'Please wait')" appointment-soon &
|
al@880
|
368
|
al@880
|
369 PKGS_LIST=$(mktemp)
|
al@880
|
370 ORIG_LIST=$(mktemp)
|
al@880
|
371 ANSWER=$(mktemp)
|
al@880
|
372 NEW_LIST=$(mktemp)
|
al@880
|
373 LIST1=$(mktemp)
|
al@880
|
374 LIST2=$(mktemp)
|
al@880
|
375 PLIST=/var/lib/tazpkg/packages.list
|
al@880
|
376
|
al@880
|
377 for i in $(grep -E '^locale' $PLIST | grep -v 'extra' | \
|
al@880
|
378 sed 's|\(locale-[a-zA-Z_]*\).*|\1|'); do
|
al@880
|
379 desc_etc $i
|
al@880
|
380 done
|
al@880
|
381
|
al@880
|
382 if [ "x$1" != xmain ]; then
|
al@880
|
383 for i in $(grep -E '^locale' $PLIST | grep 'extra' | \
|
al@880
|
384 sed 's|\(locale-[a-zA-Z_]*-extra\).*|\1|'); do
|
al@880
|
385 desc_etc $i
|
al@880
|
386 done
|
al@880
|
387 if if_installed libQtCore; then
|
al@880
|
388 for i in $(grep -E '^qt-locale' $PLIST | \
|
al@880
|
389 sed 's|\(qt-locale-[a-zA-Z_]*\).*|\1|'); do
|
al@880
|
390 desc_etc $i
|
al@880
|
391 done
|
al@880
|
392 fi
|
al@880
|
393 if if_installed razorqt; then
|
al@880
|
394 for i in $(grep -E '^razorqt-locale' $PLIST | \
|
al@880
|
395 sed 's|\(razorqt-locale-[a-zA-Z_]*\).*|\1|'); do
|
al@880
|
396 desc_etc $i
|
al@880
|
397 done
|
al@880
|
398 fi
|
al@880
|
399 if if_installed firefox; then
|
al@880
|
400 for i in $(grep -E '^firefox-langpack' $PLIST | \
|
al@880
|
401 sed 's|\(firefox-langpack-[a-zA-Z_]*\).*|\1|'); do
|
al@880
|
402 desc_etc $i
|
al@880
|
403 done
|
al@880
|
404 fi
|
al@880
|
405 if if_installed thunderbird; then
|
al@880
|
406 for i in $(grep -E '^thunderbird-langpack' $PLIST | \
|
al@880
|
407 sed 's|\(thunderbird-langpack-[a-zA-Z_]*\).*|\1|'); do
|
al@880
|
408 desc_etc $i
|
al@880
|
409 done
|
al@880
|
410 fi
|
al@880
|
411 if if_installed squirrelmail; then
|
al@880
|
412 for i in $(grep -E '^squirrelmail' $PLIST | \
|
al@880
|
413 grep -E '^squirrelmail-[a-z][a-z][_-]' | \
|
al@880
|
414 sed 's|\(squirrelmail-[a-zA-Z_]*\)-.*|\1|'); do
|
al@880
|
415 desc_etc $i
|
al@880
|
416 done
|
al@880
|
417 fi
|
al@880
|
418 if if_installed aspell; then
|
al@880
|
419 for i in $(grep -E '^aspell' $PLIST | \
|
al@880
|
420 grep -E 'aspell-[a-z][a-z][^a-z]' | \
|
al@880
|
421 sed 's|\(aspell-[a-zA-Z_]*\)-.*|\1|'); do
|
al@880
|
422 desc_etc $i
|
al@880
|
423 done
|
al@880
|
424 fi
|
al@880
|
425 OTHER_LOCALE="gnome-commander|-i18n gnome-vfs|-i18n gpa|-langpack \
|
al@880
|
426 gucharmap|-i18n lxterminal|-locales lyx|-locales rox-filer|-locales \
|
al@880
|
427 ufraw|-locales qupzilla|-locales"
|
al@880
|
428 for i in $OTHER_LOCALE; do
|
al@880
|
429 if if_installed ${i%%|*}; then desc_etc ${i/|/}; fi
|
al@880
|
430 done
|
al@880
|
431 fi
|
al@880
|
432
|
al@880
|
433 icon=stock_properties
|
al@880
|
434 cat $PKGS_LIST | \
|
al@880
|
435 {
|
al@880
|
436 yad --title="$(_n 'Manage locale packages')" --window-icon=$icon \
|
al@880
|
437 --width=600 --height=400 --on-top --center \
|
al@880
|
438 --image=$icon --image-on-top \
|
al@880
|
439 --text="$(_n 'Check only locale packages you need and press "Install/Remove".')" \
|
al@880
|
440 --list --multiple --ellipsize=END --expand-column=3 \
|
al@880
|
441 --column="$(_n 'Inst.'):CHK" --column="$(_n 'Package Name'):TEXT" \
|
al@880
|
442 --column="$(_n 'Description'):TEXT" --column="$(_n 'Size'):TEXT" \
|
al@880
|
443 --column="$(_n 'Installed'):TEXT" \
|
al@880
|
444 --button="$(_n 'Recharge list')!reload:tazbox recharge" \
|
al@880
|
445 --button="$(_n 'Install/Remove')!system-upgrade:2" \
|
al@880
|
446 --button="gtk-cancel:1" \
|
al@880
|
447 --print-all
|
al@880
|
448 } > $ANSWER
|
al@880
|
449
|
al@880
|
450 if [ "x$?" == "x1" ]; then rm_temp; exit 0; fi
|
al@880
|
451
|
al@880
|
452 grep -e 'TRUE' $ANSWER | cut -d'|' -f2 > $NEW_LIST
|
al@880
|
453
|
al@880
|
454 # check difference between ORIG_LIST and NEW_LIST
|
al@880
|
455 sort -o $LIST1 $ORIG_LIST
|
al@880
|
456 sort -o $LIST2 $NEW_LIST
|
al@880
|
457 DIFF=$(diff $LIST1 $LIST2 | sed '/---/d;/+++/d;/@@/d')
|
al@880
|
458 if [ "x$DIFF" == "x" ]; then rm_temp; exit 0; fi
|
al@880
|
459
|
al@880
|
460 # output log to gtk window
|
al@880
|
461 title="$(_n 'TazPkg log')"; icon="tazpkg"; opts="--tail"
|
al@880
|
462 {
|
al@880
|
463 for pkg in $(echo "$DIFF" | grep -e '^-' | sed 's|^-||g'); do
|
al@880
|
464 _ 'REMOVE: $pkg'
|
al@880
|
465 yes | tazpkg -r $pkg --output="raw"
|
al@880
|
466 done
|
al@880
|
467 for pkg in $(echo "$DIFF" | grep -e '^+' | sed 's|^+||g'); do
|
al@880
|
468 _ 'INSTALL: $pkg'
|
al@880
|
469 tazpkg -gi $pkg --output="raw"
|
al@880
|
470 done
|
al@880
|
471 echo -e "\n\n$(_n 'Done!')\n"
|
al@880
|
472 } | output_command
|
al@880
|
473 rm_temp
|
al@880
|
474 }
|
al@880
|
475
|
al@880
|
476
|
al@880
|
477
|
pankso@632
|
478 # New file functions
|
pankso@632
|
479 newfile_main() {
|
al@813
|
480 icon=gtk-new
|
al@813
|
481 yad --title="$(_n 'New file')" --window-icon=$icon \
|
al@813
|
482 --width=460 --height=160 --on-top --center \
|
al@813
|
483 --image=$icon --image-on-top \
|
al@813
|
484 --text="<b>$(_n 'Create a new file or folder on your desktop')</b>" \
|
al@813
|
485 --entry --entry-label="$(_n 'File name')" \
|
al@813
|
486 --ricon=editclear \
|
al@813
|
487 --always-print-result \
|
al@878
|
488 --button="$(_n 'SHell script')!application-x-shellscript:4" \
|
al@878
|
489 --button="$(_n 'Folder')!stock_folder:3" \
|
al@813
|
490 --icon="gtk-new" \
|
al@878
|
491 --button="$(_n 'File')!application-text:2" \
|
pankso@632
|
492 --button="gtk-cancel:1"
|
pankso@632
|
493 }
|
pankso@632
|
494
|
pankso@632
|
495 newfile() {
|
pankso@632
|
496 file=$(newfile_main)
|
pankso@700
|
497 ret=$?
|
pankso@632
|
498 [ "$file" ] || exit 0
|
pankso@700
|
499 case $ret in
|
pankso@700
|
500 4)
|
pankso@632
|
501 cat > $HOME/Desktop/$file << EOT
|
pankso@632
|
502 #!/bin/sh
|
pankso@632
|
503 #
|
pankso@632
|
504
|
pankso@632
|
505 EOT
|
pankso@632
|
506 chmod +x $HOME/Desktop/$file ;;
|
pankso@700
|
507 3) mkdir -p $HOME/Desktop/$file ;;
|
pankso@700
|
508 2) touch $HOME/Desktop/$file ;;
|
pankso@700
|
509 1) exit 0 ;;
|
pankso@632
|
510 esac
|
pankso@632
|
511 }
|
pankso@632
|
512
|
pankso@637
|
513 # All applications
|
pankso@637
|
514 all_apps() {
|
al@813
|
515 icon=stock_bookmark
|
al@813
|
516 yad --title="$(_n 'All Applications')" --window-icon=$icon \
|
al@813
|
517 --width=400 --height=400 \
|
al@813
|
518 --icons --compact \
|
al@813
|
519 --read-dir=/usr/share/applications \
|
pankso@637
|
520 --button="gtk-close:0"
|
pankso@637
|
521 }
|
pankso@637
|
522
|
al@813
|
523 # Ask root permissions for system settings
|
al@813
|
524 ask_root() {
|
al@813
|
525 if [ $(id -u) != 0 ]; then
|
al@813
|
526 exec tazbox su $0 $@
|
al@813
|
527 exit 0
|
al@813
|
528 fi
|
al@813
|
529 }
|
al@810
|
530
|
pankso@553
|
531 #
|
pankso@553
|
532 # Commands
|
pankso@553
|
533 #
|
pankso@553
|
534 case "$1" in
|
pankso@553
|
535 su)
|
al@813
|
536 # Don't show dialog if we are root
|
pascal@786
|
537 test $(id -u) = 0 && exec ${@:2}
|
al@813
|
538 SU_CMD="${@:2}"
|
paul@593
|
539 # Check if a password has been saved before launching main dialog
|
pankso@744
|
540 if [ -s $HOME/.config/slitaz/subox.conf ]; then
|
pankso@587
|
541 PASSWD=$(cat $HOME/.config/slitaz/subox.conf)
|
pankso@587
|
542 CHECKED="TRUE"
|
pankso@587
|
543 fi
|
pankso@744
|
544 # Display the main dialog (ask for password)
|
al@813
|
545 main=$(su_main $SU_CMD)
|
paul@593
|
546 # Deal with --button values and exit if cancelled to avoid erasing
|
pankso@587
|
547 # saved password.
|
al@813
|
548 [ $? == 1 ] && exit 0
|
pankso@587
|
549 # Save or erase Autosaved password
|
pankso@744
|
550 if [ $(echo $main | cut -f2 -d"|") == "TRUE" ]; then
|
pankso@587
|
551 echo $main | cut -f 1 -d "|" > $HOME/.config/slitaz/subox.conf
|
pankso@744
|
552 chmod 0600 $HOME/.config/slitaz/subox.conf
|
pankso@587
|
553 else
|
pankso@587
|
554 cat /dev/null > $HOME/.config/slitaz/subox.conf
|
pankso@587
|
555 fi
|
pankso@744
|
556 # Try to login & execute. If password is wrong execute error dialog
|
psychomaniak@914
|
557 SU_CMD_QUOTED="$(echo "dbus-launch --exit-with-session $SU_CMD" | sed 's|&|\\&|g')"
|
al@813
|
558 echo $main | cut -f 1 -d "|" | su -c "$SU_CMD_QUOTED &" || su_error ;;
|
pankso@553
|
559 logout)
|
paul@593
|
560 # Logout window with actions
|
al@813
|
561 if [ "$oldstyle" ]; then
|
al@813
|
562 answer=$(logout_oldstyle)
|
al@813
|
563 else
|
al@813
|
564 logout_main; answer=$?
|
al@813
|
565 fi
|
pankso@553
|
566 # Deal with --button values
|
paul@763
|
567 # DE and WM started with a custom -session script should export
|
pankso@736
|
568 # XDG_CURRENT_DESKTOP
|
al@813
|
569 case $answer in
|
al@813
|
570 4|*exit)
|
pankso@736
|
571 case $XDG_CURRENT_DESKTOP in
|
pankso@736
|
572 LXDE)
|
pankso@736
|
573 [ "$_LXSESSION_PID" ] && kill $_LXSESSION_PID
|
al@813
|
574 [ "$DESKTOP_SESSION" == "compiz" ] && killall compiz
|
pankso@736
|
575 openbox --exit ;;
|
pankso@736
|
576 openbox) openbox --exit ;;
|
pankso@736
|
577 compiz) killall compiz ;;
|
pankso@736
|
578 *)
|
pankso@736
|
579 # Try to kill other WM that dont set XDG var.
|
pankso@736
|
580 jwm -exit 2>/dev/null ;;
|
pankso@736
|
581 esac ;;
|
al@813
|
582 3|*reboot)
|
al@813
|
583 reboot || reboot -f ;;
|
al@813
|
584 2|*halt)
|
al@813
|
585 poweroff ;;
|
pankso@553
|
586 esac ;;
|
pankso@562
|
587 out)
|
pankso@562
|
588 # Pipe a command into a GTK window
|
al@813
|
589 sed 's|\[.m||g; s|\[[0-9][0-9]*G| |g' | output_command ;;
|
paul@593
|
590 out-dl)
|
pankso@562
|
591 # A tiny GTK window for Busybox wget output
|
al@813
|
592 url=$2; opts="--tail --button=gtk-cancel:1"
|
al@813
|
593 icon=folder-downloads; title="$(_ 'Downloading...')"
|
slaxemulator@594
|
594 [ -d $DOWNLOADS ] || mkdir -p $DOWNLOADS
|
pascal@648
|
595 busybox wget -c -P $DOWNLOADS $url 2>&1 | output_command
|
pankso@562
|
596 cancel_dl ;;
|
pankso@569
|
597 locale)
|
al@813
|
598 ask_root $@ && locale ;;
|
pankso@569
|
599 keymap)
|
al@813
|
600 ask_root $@ && keymap ;;
|
al@813
|
601 tz)
|
al@845
|
602 ask_root $@ && tz ;;
|
al@880
|
603 manage_i18n)
|
al@880
|
604 ask_root $@ && manage_i18n $2 ;;
|
al@880
|
605 recharge)
|
al@880
|
606 ask_root $@; opts="--on-top"; tazpkg recharge | output_command ;;
|
al@813
|
607 setup)
|
al@813
|
608 ask_root $@ && setup ;;
|
pankso@632
|
609 new-file)
|
pankso@632
|
610 newfile ;;
|
pankso@637
|
611 all-apps)
|
pankso@637
|
612 all_apps ;;
|
pankso@689
|
613 notify|-n)
|
pankso@689
|
614 # On screen notification box.
|
pankso@721
|
615 icon="$3"
|
pankso@721
|
616 time="$4"
|
pankso@721
|
617 [ "$icon" ] || icon=info
|
pankso@689
|
618 [ "$time" ] || time=4
|
al@813
|
619 yad --width=520 --height=80 --timeout=$time --timeout-indicator=right \
|
al@813
|
620 --on-top --center --no-buttons --borders=12 --undecorated \
|
al@813
|
621 --skip-taskbar --image=$icon --image-on-top --text="<b>$2</b>" ;;
|
al@807
|
622 tazapps)
|
al@807
|
623 # Default applications configuration script. System wide config file
|
al@807
|
624 # is /etc/slitaz/applications.conf and each user can have personal
|
al@807
|
625 # settings. System wide for root and personal config for user.
|
al@807
|
626 export CONFIG="$HOME/.config/slitaz/applications.conf"
|
psychomaniak@912
|
627 if [ "$(id -u)" = 0 ]; then
|
psychomaniak@912
|
628 [ ! -f $CONFIG ] || mv -f $CONFIG /etc/slitaz/applications.conf
|
psychomaniak@912
|
629 export CONFIG="/etc/slitaz/applications.conf"
|
al@807
|
630 fi
|
psychomaniak@912
|
631
|
psychomaniak@912
|
632 for a in FILE_MANAGERS BROWSERS EDITORS TERMINALS WINDOW_MANAGERS;
|
psychomaniak@912
|
633 do
|
psychomaniak@918
|
634 eval $(expr $a=$(echo $(LC_ALL=C tazx get-applist ${a%%S} \
|
psychomaniak@912
|
635 only-installed yad) | sed 's/ /!/g ; s/!!//g; s/ //g'))
|
psychomaniak@912
|
636 done
|
psychomaniak@912
|
637
|
psychomaniak@912
|
638 # Missing file was created by slitaz_apps_conf function from tazx
|
al@807
|
639 . $CONFIG
|
al@810
|
640
|
al@813
|
641 icon=preferences-desktop-default-applications
|
al@813
|
642 eval $(yad --title="$(_n 'SliTaz default applications')" \
|
al@813
|
643 --window-icon=$icon --image=$icon --image-on-top \
|
al@813
|
644 --text="<b>$(_n 'SliTaz default applications configuration')</b>" \
|
al@807
|
645 --form \
|
al@813
|
646 --field="$(_n 'File manager:'):CBE" "$FILE_MANAGERS" \
|
al@813
|
647 --field="$(_n 'Web browser:'):CBE" "$BROWSERS" \
|
al@813
|
648 --field="$(_n 'Text editor:'):CBE" "$EDITORS" \
|
al@813
|
649 --field="$(_n 'Terminal:'):CBE" "$TERMINALS" \
|
al@813
|
650 --field="$(_n 'Window manager:'):CBE" "$WINDOW_MANAGERS" | \
|
al@807
|
651 awk -F'|' '{printf "FILE_MANAGER=\"%s\"\nBROWSER=\"%s\"\nEDITOR=\"%s\"\
|
al@807
|
652 TERMINAL=\"%s\"\nWINDOW_MANAGER=\"%s\"\n", $1, $2, $3, $4, $5}')
|
al@810
|
653
|
al@807
|
654 sed '/FILE_MANAGER=/s|"\([^"]*\)"|"'$FILE_MANAGER'"|; \
|
al@807
|
655 /BROWSER=/s|"\([^"]*\)"|"'$BROWSER'"|; \
|
al@807
|
656 /EDITOR=/s|"\([^"]*\)"|"'$EDITOR'"|; \
|
al@807
|
657 /TERMINAL=/s|"\([^"]*\)"|"'$TERMINAL'"|; \
|
al@807
|
658 /WINDOW_MANAGER=/s|"\([^"]*\)"|"'$WINDOW_MANAGER'"|' \
|
al@810
|
659 -i $CONFIG ;;
|
al@807
|
660 gpl)
|
al@813
|
661 yad --title="GNU General Public License" --window-icon=text-x-generic \
|
al@813
|
662 --geometry="650x500" \
|
al@810
|
663 --image=/usr/share/pixmaps/gpl3.png --image-on-top \
|
al@813
|
664 --center \
|
al@813
|
665 --text-info \
|
al@813
|
666 --fontname=monospace \
|
al@813
|
667 --button "OK" < /usr/share/licenses/gpl.txt ;;
|
pankso@553
|
668 *)
|
pankso@553
|
669 usage ;;
|
pankso@553
|
670 esac
|
pankso@553
|
671
|
pankso@553
|
672 exit 0
|