wok annotate slim/stuff/slim-theme @ rev 16198

Up: pidgin (2.10.9) due to security issues
author Alexander Medvedev <devl547@gmail.com>
date Sun Mar 30 21:11:56 2014 +0000 (2014-03-30)
parents d0948455b365
children bc9334796734
rev   line source
pankso@16119 1 #!/bin/sh
al@14601 2 # slim-theme: manage SLiM themes
al@14601 3 # Aleksej Bobylev <al.bobylev@gmail.com>, 2013
al@14601 4
al@14601 5 ME=$(basename $0)
al@14601 6 VERSION=20130525
al@14601 7 CONF=/etc/slim.conf
al@14601 8
al@14601 9 help()
al@14601 10 {
al@14601 11 cat >&2 << EOT
al@14601 12 $ME: Manage SLiM themes
al@14601 13
al@14601 14 Usage: $ME OPTION [NAME]
al@14601 15
al@14601 16 Options:
al@14601 17 -h Display this short help and exit
al@14601 18 -l List available themes (comma separated)
al@14601 19 -g Get the name of current theme (note, it can be comma separated list)
al@14601 20 -s NAME Set NAME theme as current; name of previous theme will be stored
al@14601 21 (note, you can set comma separated list for random theme behavior)
al@14601 22 -f NAME Forget about NAME theme and return to previous used theme
al@14601 23 -V Display information about $ME version
al@14601 24 -t Translate current theme's strings according to global LANG value
al@14601 25 (note, its done auto when -s processed)
al@14601 26 -T LANG Same as above, but use specified language
al@14601 27
al@14601 28 Set option works like stack: you can "set" theme several times (every time you
al@14601 29 install new SLiM theme). Use "forget" option at every theme uninstall to revert
al@14601 30 to previous theme, if it was current.
al@14601 31 EOT
al@14601 32 exit 0
al@14601 33 }
al@14601 34
al@14601 35 get_current() awk '/current_theme/ { print $2 }' $CONF
al@14601 36 get_prev() awk '/previous_theme/ { print $2 }' $CONF
al@14601 37 set_current() sed -i 's|^current_theme .*$|current_theme '$1'|' $CONF
al@14601 38 set_prev()
al@14601 39 {
al@14601 40 sed -i '/^previous_theme/d' $CONF
al@14601 41 [ x$1 != x ] && echo "previous_theme $1" >> $CONF
al@14601 42 }
al@14601 43 find_theme()
al@14601 44 {
al@14601 45 cd /usr/share/slim/themes
al@14601 46 theme=$(ls -Ad $1 2>/dev/null | head -n1)
al@14601 47 [ x$theme == x ] && echo "Theme \"$1\" not exist!" >&2 && exit 1
al@14601 48 echo $theme
al@14601 49 }
al@14601 50 i18n()
al@14601 51 {
al@14601 52 lang=$1
al@14601 53 curr=$(get_current)
al@14601 54 strings=/usr/share/slim/themes/$curr/strings
al@14601 55 [ ! -e $strings ] && exit 0
al@14601 56 conf=/usr/share/slim/themes/$curr/slim.theme
al@14601 57 for str in welcome_msg username_msg password_msg; do
al@14601 58 # ll_CC.UTF-8@euro ; ll_CC.UTF-8 ; ll_CC ; ll ; en
al@14601 59 for langtry in $lang ${lang%@*} ${lang%\.*} ${lang%_*} en; do
al@14601 60 try="$(grep '^'${str:0:1}':'$langtry' ' $strings | cut -d' ' -f2)"
al@14601 61 [ x"$try" != x ] && break
al@14601 62 done
al@14601 63 sed -i 's|^\('$str'\).*$|\1 '"$try"'|' $conf
al@14601 64 echo "$str[$langtry]=$try" >&2
al@14601 65 done
al@14601 66 }
al@14601 67
al@14601 68 set_theme()
al@14601 69 {
al@14601 70 theme=$(find_theme "$1")
al@14601 71 curr=$(get_current)
al@14601 72 prev=$(get_prev)
al@14601 73 if [ x$theme != x$curr ]; then
al@14601 74 echo "Set theme $theme" >&2
al@14601 75 [ x$prev != x ] && curr=$curr:$prev
al@14601 76 set_prev $curr
al@14601 77 set_current $theme
al@14601 78 else
al@14601 79 echo "Already set" >&2
al@14601 80 fi
al@14601 81
al@14601 82 i18n $LANG
al@14601 83 exit 0
al@14601 84 }
al@14601 85
al@14601 86 forget_theme()
al@14601 87 {
al@14601 88 theme=$(find_theme "$1")
al@14601 89 curr=$(get_current)
al@14601 90 prev=$(get_prev)
al@14601 91 echo "Forget theme \"$theme\"" >&2
al@14601 92 if [ x$theme == x$curr ]; then
al@14601 93 last=$(echo $prev | cut -d: -f1); [ x$last == x ] && last=base
al@14601 94 rest=${prev#*:}; [ x$rest == x$prev ] && rest=
al@14601 95 prev=$rest; set_prev $prev
al@14601 96 echo "Back to \"$last\" theme" >&2
al@14601 97 set_current $last
al@14601 98 fi
al@14601 99 prev=$(echo $(echo $prev | tr ':' '\n' | sed "/$theme/d") | tr ' ' ':')
al@14601 100 set_prev $prev
al@14601 101
al@14601 102 exit 0
al@14601 103 }
al@14601 104
al@14601 105
al@14601 106 # parse only first option
al@14601 107 getopts ":lgs:f:VhtT:" opt
al@14601 108 case $opt in
al@14601 109 l)
al@14601 110 list=$(find /usr/share/slim/themes/*/slim.theme | sort | awk -F/ '{ print $6 }')
al@14601 111 echo $list | tr ' ' ','; exit 0 ;;
al@14601 112 g)
al@14601 113 get_current; exit 0 ;;
al@14601 114 s)
al@14601 115 set_theme "$OPTARG" ;;
al@14601 116 f)
al@14601 117 forget_theme "$OPTARG" ;;
al@14601 118 V)
al@14601 119 echo $VERSION; exit 0 ;;
al@14601 120 h)
al@14601 121 help; exit 0 ;;
al@14601 122 t)
al@14601 123 i18n $LANG; exit 0 ;;
al@14601 124 T)
al@14601 125 i18n $OPTARG; exit 0 ;;
al@14601 126 *)
al@14601 127 if [ x$OPTARG == xs -o x$OPTARG == xf -o x$OPTARG == xT ]; then
al@14601 128 echo "Option \"$OPTARG\" requires an argument."
al@14601 129 else
al@14601 130 [ x$OPTARG != x ] && echo "Illegal option \"$OPTARG\"."
al@14601 131 fi
al@14601 132 echo "$ME -h for help."; exit 1 ;;
al@14601 133 esac
al@14601 134
al@14601 135 help