slitaz-tools annotate tazbox/tazbox @ rev 938

tazbox tz: freegeoip.net not uses quotes in the CSV response anymore.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Apr 11 16:46:26 2015 +0300 (2015-04-11)
parents 66fe58497f47
children 5d80f6fdbdb7
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|&|&amp;|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