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

Small improvements. libtaz.sh: move notes from script to readme, re-organize and simplify code, different separators allowed; libtaz.txt: wrote few new examples.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Thu Apr 30 02:00:25 2015 +0300 (2015-04-30)
parents e9258bc4e858
children 3f16616140ea
rev   line source
pankso@125 1 #!/bin/sh
pankso@125 2 #
al@270 3 # SliTaz Base functions.
al@270 4 # Documentation: `man libtaz` or /usr/share/doc/slitaz/libtaz.txt
pankso@139 5 #
al@270 6 # Copyright (C) 2012-2015 SliTaz GNU/Linux - BSD License
pankso@125 7 #
pankso@125 8
pankso@125 9 . /usr/bin/gettext.sh
al@177 10
al@270 11 # Internal
al@219 12 lgettext() { gettext -d 'slitaz-base' "$@"; }
al@270 13 translate_query() {
al@270 14 case $1 in
al@270 15 y) lgettext "y";;
al@270 16 Y) lgettext "Y";;
al@270 17 n) lgettext "n";;
al@270 18 N) lgettext "N";;
al@270 19 # Support other cases but keep them untranslated.
al@270 20 *) echo "$1" ;;
al@270 21 esac
al@270 22 }
al@177 23 okmsg="$(lgettext 'Done')"
al@177 24 ermsg="$(lgettext 'Failed')"
pankso@174 25 : ${okcolor=32}
pankso@174 26 : ${ercolor=31}
pankso@174 27 : ${decolor=36}
pankso@125 28
pankso@137 29 # Parse cmdline options and store values in a variable.
al@270 30 for opt in "$@"; do
pankso@125 31 case "$opt" in
al@270 32 --*=*) export "${opt#--}";;
al@270 33 --*) export ${opt#--}='yes';;
pankso@125 34 esac
pankso@125 35 done
al@270 36 [ "$HTTP_REFERER" ] && output='html'
al@270 37
al@270 38
al@270 39
al@270 40
al@270 41 # i18n functions
al@270 42 _() { local T="$1"; shift; printf "$(eval_gettext "$T")" "$@"; echo; }
al@270 43 _n() { local T="$1"; shift; printf "$(eval_gettext "$T")" "$@"; }
pankso@125 44
pankso@187 45 # Get terminal columns
al@270 46 get_cols() { stty size 2>/dev/null | busybox cut -d' ' -f2; }
pankso@187 47
al@270 48 # Last command status
pankso@125 49 status() {
pankso@125 50 local check=$?
pankso@131 51 case $output in
pankso@161 52 raw|gtk)
al@270 53 done=" $okmsg"
al@270 54 error=" $ermsg";;
pankso@131 55 html)
al@270 56 done=" <span class=\"float-right color$okcolor\">$okmsg</span>"
al@270 57 error=" <span class=\"float-right color$ercolor\">$ermsg</span>";;
pankso@136 58 *)
pankso@187 59 local cols=$(get_cols)
al@270 60 local scol=$((${cols:-80} - 10))
al@270 61 done="\\033[${scol}G[ \\033[1;${okcolor}m${okmsg}\\033[0;39m ]"
al@270 62 error="\\033[${scol}G[ \\033[1;${ercolor}m${ermsg}\\033[0;39m ]";;
pankso@131 63 esac
al@270 64 case $check in
al@270 65 0) echo -e "$done";;
al@270 66 *) echo -e "$error";;
al@270 67 esac
pankso@125 68 }
pankso@125 69
al@270 70 # Line separator
pankso@125 71 separator() {
pankso@132 72 case $output in
al@270 73 raw|gtk) echo '--------';;
al@270 74 html) echo -n '<hr/>';;
pankso@187 75 *)
pankso@187 76 local cols=$(get_cols)
al@270 77 printf "%${cols:-80}s\n" | tr ' ' "${1:-=}";;
pankso@132 78 esac
pankso@125 79 }
pankso@125 80
al@270 81 # New line
al@270 82 newline() { echo; }
pankso@164 83
al@270 84 # Display a bold message
pankso@125 85 boldify() {
pankso@125 86 case $output in
al@258 87 raw) echo "$@" ;;
al@258 88 gtk) echo "<b>$@</b>" ;;
meshca@149 89 html) echo "<strong>$@</strong>" ;;
meshca@149 90 *) echo -e "\\033[1m$@\\033[0m" ;;
pankso@125 91 esac
pankso@125 92 }
pankso@125 93
al@270 94 # Colorize message
pankso@167 95 colorize() {
meshca@175 96 : ${color=$1}
meshca@175 97 shift
pankso@167 98 case $output in
al@270 99 raw|gtk) echo "$@";;
al@270 100 html) echo -n "<span class=\"color$color\">$@</span>";;
al@270 101 *) echo -e "\\033[1;${color:-38}m$@\\033[0;39m" ;;
pankso@167 102 esac
pankso@167 103 unset color
pankso@167 104 }
pankso@167 105
al@270 106 # Indent text
pankso@161 107 indent() {
meshca@158 108 local in="$1"
meshca@158 109 shift
pankso@161 110 echo -e "\033["$in"G $@";
meshca@158 111 }
meshca@158 112
al@193 113 # Extended MeSsaGe output
al@193 114 emsg() {
al@193 115 local sep="\n--------\n"
al@193 116 case $output in
al@193 117 raw)
al@193 118 echo "$@" | sed -e 's|<b>||g; s|</b>||g; s|<c [0-9]*>||g; \
al@193 119 s|</c>||g; s|<->|'$sep'|g; s|<n>|\n|g; s|<i [0-9]*>| |g' ;;
al@193 120 gtk)
al@193 121 echo "$@" | sed -e 's|<c [0-9]*>||g; s|</c>||g; s|<->|'$sep'|g; \
al@193 122 s|<n>|\n|g; s|<i [0-9]*>| |g' ;;
al@193 123 html)
al@193 124 echo "$@" | sed -e 's|<b>|<strong>|g; s|</b>|</strong>|g; \
al@270 125 s|<c \([0-9]*\)>|<span class="color\1">|g; s|</c>|</span>|g; \
al@193 126 s|<n>|<br/>|g; s|<->|<hr/>|g; s|<i [0-9]*>| |g' ;;
al@193 127 *)
al@193 128 local sep="\n"
al@193 129 local cols=$(get_cols)
al@193 130 [ "$cols" ] || cols=80
al@258 131 for c in $(seq 1 $cols); do
al@193 132 sep="${sep}="
al@193 133 done
al@265 134 echo -en "$(echo "$@" | sed -e 's|<b>|\\033[1m|g; s|</b>|\\033[0m|g;
al@265 135 s|<c \([0-9]*\)>|\\033[1;\1m|g; s|</c>|\\033[0;39m|g; s|<n>|\n|g;
al@193 136 s|<->|'$sep'|g; s|<i \([0-9]*\)>|\\033[\1G|g')"
al@193 137 [ "$1" != "-n" ] && echo
al@193 138 ;;
al@193 139 esac
al@193 140 }
al@193 141
al@270 142 # Check if user is logged as root
pankso@125 143 check_root() {
pankso@125 144 if [ $(id -u) != 0 ]; then
al@258 145 lgettext "You must be root to execute:"; echo " $(basename $0) $@"
pankso@125 146 exit 1
pankso@125 147 fi
pankso@125 148 }
meshca@158 149
pankso@174 150 # Display debug info when --debug is used.
meshca@169 151 debug() {
al@270 152 [ -n "$debug" ] && echo "$(colorize $decolor 'DEBUG:') $1"
meshca@169 153 }
meshca@169 154
al@270 155 # Confirmation
pankso@161 156 confirm() {
al@260 157 if [ -n "$yes" ]; then
al@260 158 true
al@260 159 else
al@260 160 if [ -n "$1" ]; then
al@260 161 echo -n "$1 "
al@260 162 else
al@260 163 echo -n " ($(translate_query y)/$(translate_query N)) ? "
al@260 164 fi
al@260 165 read answer
al@260 166 [ "$answer" == "$(translate_query y)" ]
al@260 167 fi
meshca@160 168 }
pankso@161 169
al@270 170 # Log activities
pankso@162 171 log() {
al@270 172 echo "$(date '+%Y-%m-%d %H:%M') : $@" >> ${activity:-/var/log/slitaz/libtaz.log}
pankso@162 173 }
al@221 174
al@270 175 # Print two-column list of options with descriptions
al@221 176 optlist() {
al@221 177 local in cols col1=1 line
al@221 178 in="$(echo "$1" | sed 's| *| |g')"
al@221 179 cols=$(get_cols); [ "$cols" ] || cols=80
al@258 180 IFS=$'\n'
al@221 181 for line in $in; do
al@221 182 col=$(echo -n "$line" | cut -f1 | wc -m)
al@221 183 [ $col -gt $col1 ] && col1=$col
al@221 184 done
al@221 185 echo "$in" | sed 's|\t|&\n|' | fold -sw$((cols - col1 - 4)) | \
al@221 186 sed "/\t/!{s|^.*$|[$((col1 + 4))G&|g}" | sed "/\t$/{N;s|.*| &|;s|\t\n||}"
al@221 187 }
al@221 188
al@221 189 # Wrap words in long terminal message
al@221 190 longline() {
al@270 191 cols=$(get_cols)
al@270 192 echo -e "$@" | fold -sw${cols:-80}
al@221 193 }