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