[pacman-dev] [PATCH 1/7] script: Add color to library/output_format.sh

William Giokas 1007380 at gmail.com
Sat Mar 2 16:50:56 EST 2013


Use the same colors as makepkg when printing messages using the
functions in output_format.sh.

Signed-off-by: William Giokas <1007380 at gmail.com>
---
 scripts/library/README           |  6 +++++-
 scripts/library/output_format.sh | 18 +++++++++++++-----
 scripts/library/term_colors.sh   | 21 +++++++++++++++++++++
 3 files changed, 39 insertions(+), 6 deletions(-)
 create mode 100644 scripts/library/term_colors.sh

diff --git a/scripts/library/README b/scripts/library/README
index 0fa0f84..5f2961c 100644
--- a/scripts/library/README
+++ b/scripts/library/README
@@ -6,7 +6,7 @@ Provides basic output formatting functions with levels 'msg', 'msg2',
 'warning' and 'error'.  The 'msg' amd 'msg2' functions print to stdout
 and can be silenced by defining 'QUIET'.  The 'warning' and 'error'
 functions print to stderr with the appropriate prefix added to the
-message.
+message. Also includes optional color output.
 
 parseopts.sh:
 A getopt_long-like parser which portably supports longopts and shortopts
@@ -39,3 +39,7 @@ as mawk or busybox awk.
 size_to_human.sh:
 The reverse of human_to_size, this function takes an integer byte size and
 prints its in human readable format, with SI prefixes (e.g. MiB, TiB).
+
+term_colors.sh
+Set the terminal colors for the common message formats. Uses the variable
+`USE_COLOR` to determine when to be used.
diff --git a/scripts/library/output_format.sh b/scripts/library/output_format.sh
index 9e890e7..5deea50 100644
--- a/scripts/library/output_format.sh
+++ b/scripts/library/output_format.sh
@@ -1,21 +1,29 @@
+# Common message formats
+
+plain() {
+  (( QUIET )) && return
+  local mesg=$1; shift
+  printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
 msg() {
 	(( QUIET )) && return
 	local mesg=$1; shift
-	printf "==> ${mesg}\n" "$@" >&1
+	printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
 }
 
 msg2() {
 	(( QUIET )) && return
 	local mesg=$1; shift
-	printf "  -> ${mesg}\n" "$@" >&1
+	printf "${BLUE}  ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
 }
 
 warning() {
 	local mesg=$1; shift
-	printf "==> $(gettext "WARNING:") ${mesg}\n" "$@" >&2
+	printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
 }
 
 error() {
 	local mesg=$1; shift
-	printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
-}
\ No newline at end of file
+	printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
+}
diff --git a/scripts/library/term_colors.sh b/scripts/library/term_colors.sh
new file mode 100644
index 0000000..a675247
--- /dev/null
+++ b/scripts/library/term_colors.sh
@@ -0,0 +1,21 @@
+# check if messages are to be printed using color
+unset ALL_OFF BOLD BLUE GREEN RED YELLOW
+if [[ -t 2 && ! $USE_COLOR = "n" ]]; then
+	# prefer terminal safe colored and bold text when tput is supported
+	if tput setaf 0 &>/dev/null; then
+		ALL_OFF="$(tput sgr0)"
+		BOLD="$(tput bold)"
+		BLUE="${BOLD}$(tput setaf 4)"
+		GREEN="${BOLD}$(tput setaf 2)"
+		RED="${BOLD}$(tput setaf 1)"
+		YELLOW="${BOLD}$(tput setaf 3)"
+	else
+		ALL_OFF="\e[1;0m"
+		BOLD="\e[1;1m"
+		BLUE="${BOLD}\e[1;34m"
+		GREEN="${BOLD}\e[1;32m"
+		RED="${BOLD}\e[1;31m"
+		YELLOW="${BOLD}\e[1;33m"
+	fi
+fi
+readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
-- 
1.8.2.rc1.24.g06d67b8



More information about the pacman-dev mailing list