slitaz-base-files annotate rootfs/lib/libtaz.sh @ rev 187

libtaz.sh: cols should be fixes now
author Christophe Lincoln <pankso@slitaz.org>
date Sat May 26 00:37:54 2012 +0200 (2012-05-26)
parents d8adb319ac56
children 0933e039429b
rev   line source
pankso@125 1 #!/bin/sh
pankso@125 2 #
pankso@125 3 # SliTaz Base functions used from boot scripts to end user tools. Use
pankso@125 4 # gettext and not echo for messages. Keep output suitable for GTK boxes
pankso@125 5 # and Ncurses dialog. LibTaz should not depend on any configuration file.
paul@166 6 # No bloated code here, functions must be used by at least 3-4 tools.
pankso@139 7 #
pankso@139 8 # Documentation: man libtaz or /usr/share/doc/slitaz/libtaz.txt
pankso@125 9 #
pankso@125 10 # Copyright (C) 2012 SliTaz GNU/Linux - BSD License
pankso@125 11 #
pankso@125 12
pankso@187 13 # Internationalization. We can't export TEXTDOMAIN because this script
pankso@187 14 # includes to other scripts with other TEXTDOMAIN exported
pankso@125 15 . /usr/bin/gettext.sh
al@177 16
al@177 17 # xgettext (from Makefile) can't extract strings from above example:
pankso@187 18 # gettext -d 'slitaz-base' 'Done'
al@177 19 # so, I define own function (and add it as option to xgettext to Makefile)
al@177 20 lgettext() {
al@177 21 gettext -d 'slitaz-base' $1
al@177 22 }
pankso@125 23
pankso@125 24 # Internal variables.
al@177 25 okmsg="$(lgettext 'Done')"
al@177 26 ermsg="$(lgettext 'Failed')"
pankso@174 27 : ${okcolor=32}
pankso@174 28 : ${ercolor=31}
pankso@174 29 : ${decolor=36}
pankso@125 30
pankso@137 31 # Parse cmdline options and store values in a variable.
pankso@125 32 for opt in "$@"
pankso@125 33 do
pankso@125 34 case "$opt" in
pankso@137 35 --*=*) export ${opt#--} ;;
pankso@137 36 --*) export ${opt#--}="yes" ;;
pankso@125 37 esac
pankso@125 38 done
pankso@131 39 [ "$HTTP_REFERER" ] && output="html"
pankso@125 40
pankso@187 41 # Get terminal columns
pankso@187 42 get_cols() {
pankso@187 43 stty -a 2>/dev/null | head -n 1 | cut -d ";" -f 3 | awk '{print $2}'
pankso@187 44 }
pankso@187 45
pankso@125 46 # Return command status. Default to colored console output.
pankso@125 47 status() {
pankso@125 48 local check=$?
pankso@131 49 case $output in
pankso@161 50 raw|gtk)
pankso@161 51 done=" $okmsg"
pankso@131 52 error=" $ermsg" ;;
pankso@131 53 html)
pankso@167 54 done=" <span style='color: $okcolor;'>$okmsg</span>"
pankso@167 55 error=" <span style='color: $ercolor;'>$ermsg</span>" ;;
pankso@136 56 *)
pankso@187 57 local cols=$(get_cols)
pankso@187 58 [ "$cols" ] || cols=80
pankso@131 59 local scol=$(($cols - 10))
pankso@131 60 done="\\033[${scol}G[ \\033[1;${okcolor}m${okmsg}\\033[0;39m ]"
pankso@131 61 error="\\033[${scol}G[ \\033[1;${ercolor}m${ermsg}\\033[0;39m ]" ;;
pankso@131 62 esac
pankso@125 63 if [ $check = 0 ]; then
pankso@125 64 echo -e "$done"
pankso@125 65 else
pankso@125 66 echo -e "$error"
pankso@125 67 fi
pankso@125 68 }
pankso@125 69
pankso@125 70 # Line separator.
pankso@125 71 separator() {
pankso@132 72 local sepchar="="
pankso@132 73 [ "$HTTP_REFERER" ] && local sepchar="<hr />"
pankso@132 74 case $output in
pankso@132 75 raw|gtk) local sepchar="-" && local cols="8" ;;
pankso@132 76 html) local sepchar="<hr />" ;;
pankso@187 77 *)
pankso@187 78 local cols=$(get_cols)
pankso@187 79 [ "$cols" ] || cols=80 ;;
pankso@132 80 esac
pankso@125 81 for c in $(seq 1 $cols); do
pankso@131 82 echo -n "$sepchar"
pankso@125 83 done && echo ""
pankso@125 84 }
pankso@125 85
pankso@164 86 # New line for echo -n or gettext.
pankso@164 87 newline() {
pankso@164 88 echo ""
pankso@164 89 }
pankso@164 90
pankso@125 91 # Display a bold message. GTK Yad: Works only in --text=""
pankso@125 92 boldify() {
pankso@125 93 case $output in
meshca@149 94 raw) echo "$@" ;;
meshca@149 95 gtk) echo "<b>$@</b>" ;;
meshca@149 96 html) echo "<strong>$@</strong>" ;;
meshca@149 97 *) echo -e "\\033[1m$@\\033[0m" ;;
pankso@125 98 esac
pankso@125 99 }
pankso@125 100
al@180 101 # Better to keep messages unsplitted
al@180 102 # Example: unboldify "My <b>pretty</b> function ;)"
al@180 103 unboldify() {
al@180 104 case $output in
al@180 105 raw) echo "$@" | sed -e 's|<b>||g;s|</b>||g' ;;
al@180 106 gtk) echo "$@" ;;
al@180 107 html) echo "$@" | sed -e 's|<b>|<strong>|g;s|</b>|</strong>|g' ;;
al@180 108 *) echo -e "$(echo "$@" | sed -e 's|<b>|\\033[1m|g;s|</b>|\\033[0m|g')" ;;
al@180 109 esac
al@180 110 }
al@180 111
pankso@167 112 # Usage: colorize "Message" colorNB or use --color=NB option
pankso@167 113 # when running a tool. Default to white/38 and no html or gtk.
pankso@167 114 colorize() {
meshca@175 115 : ${color=$1}
meshca@175 116 shift
meshca@175 117 local content="$@"
pankso@167 118 case $output in
meshca@175 119 raw|gtk|html) echo "$content" ;;
pankso@167 120 *)
pankso@168 121 [ "$color" ] || color=38
meshca@175 122 echo -e "\\033[1;${color}m${content}\\033[0;39m" ;;
pankso@167 123 esac
pankso@167 124 unset color
pankso@167 125 }
pankso@167 126
pankso@174 127 # Indent text $1 spaces.
pankso@161 128 indent() {
meshca@158 129 local in="$1"
meshca@158 130 shift
pankso@161 131 echo -e "\033["$in"G $@";
meshca@158 132 }
meshca@158 133
pankso@125 134 # Check if user is logged as root.
pankso@125 135 check_root() {
pankso@125 136 if [ $(id -u) != 0 ]; then
al@177 137 lgettext "You must be root to execute:" && echo " $(basename $0) $@"
pankso@125 138 exit 1
pankso@125 139 fi
pankso@125 140 }
meshca@158 141
pankso@174 142 # Display debug info when --debug is used.
meshca@169 143 debug() {
meshca@176 144 [ "$debug" ] && echo "$(colorize $decolor "DEBUG:") $1"
meshca@169 145 }
meshca@169 146
pankso@161 147 # Gettextize yes/no.
meshca@158 148 translate_query() {
meshca@158 149 case $1 in
al@177 150 y) lgettext "y" ;;
al@177 151 Y) lgettext "Y" ;;
al@177 152 n) lgettext "n" ;;
al@177 153 N) lgettext "N" ;;
meshca@158 154 # Support other cases but keep them untranslated.
meshca@158 155 *) echo "$1" ;;
meshca@158 156 esac
meshca@158 157 }
meshca@160 158
pankso@161 159 # Usage: echo -n "The question" && confirm
pankso@161 160 confirm() {
pankso@161 161 [ "$yes" ] && true
pankso@161 162 echo -n " ($(translate_query y)/$(translate_query N)) ? "
pankso@161 163 read answer
pankso@161 164 [ "$answer" == "$(translate_query y)" ]
meshca@160 165 }
pankso@161 166
pankso@164 167 # Log activities. $activity should be set by the script. The log format
pankso@164 168 # is suitable for web interfaces like cook. Usage: log "String"
pankso@162 169 log() {
pankso@163 170 [ "$activity" ] || activity=/var/log/slitaz/libtaz.log
pankso@164 171 echo "$(date '+%Y-%m-%d %H:%M') : $@" >> $activity
pankso@162 172 }