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 } |