[pacman-dev] [PATCH] makepkg: use tput for terminal-safe colored and bold text

Allan McRae allan at archlinux.org
Fri Oct 23 07:17:50 EDT 2009


Cedric Staniewski wrote:
> Allan McRae wrote:
>   
>> Dan McGee wrote:
>>     
>>> On Thu, Oct 22, 2009 at 7:41 PM, Allan McRae <allan at archlinux.org> wrote:
>>>  
>>>       
>>>> Cedric Staniewski wrote:
>>>>    
>>>>         
>>>>> Suggested-by: Dan McGee <dan at archlinux.org>
>>>>> Signed-off-by: Cedric Staniewski <cedric at gmx.ca>
>>>>> ---
>>>>>
>>>>> I do not know if this patch is usefull at all, because I do not
>>>>> notice any
>>>>> change. Just grabbed this from Dan's TODO list and wanted to play a bit
>>>>> with tput.
>>>>>
>>>>>       
>>>>>           
>>>> It looks fine to me...
>>>> I just have no idea on the advantage we are achieving with this
>>>> change apart
>>>> from the apparent terminal safeness.  Was the old version not safe?
>>>>
>>>> Dan: comments?
>>>>     
>>>>         
>>> First comment- that TODO list is still huge, wow. :)
>>>       
>
> Hehe. :)
>
>
>   
>>> Anyway, this seems pretty reasonable to me, but not sure it is worth
>>> it. At the least, we should capture these sequences once on script
>>> startup, and then use the global variable in each function. And does
>>> $(tput offbold) make more sense for the reset?
>>>   
>>>       
>> There does not appear to be such a thing as "tput offbold".
>>
>> Anyway, I like the idea of setting these all at the start.
>>
>> if [ $COLORMSG -eq 1 ]; then
>>  BOLD_ON=$(tput bold)
>>  BOLD_OFF=${tput srg0)
>>  GREEN_ON...
>>  ...
>> fi
>>
>> then the messages can just be
>>
>> plain() {
>>     local mesg=$1; shift
>>         printf "${BOLD_ON}    ${mesg}${BOLD_OFF}\n" "$@" >&2
>>     fi
>> }
>>
>>
>> with none of the tests needed.
>>
>> Allan
>>     
>
> That definitely makes sense.
> If you think the attached patch is fine, I plan to change the order of these two ones and resubmit them.
>
>
> >From 50901c551ddefb9a5eca500ac63ab0a0c7eef167 Mon Sep 17 00:00:00 2001
> From: Cedric Staniewski <cedric at gmx.ca>
> Date: Fri, 23 Oct 2009 12:27:54 +0200
> -- 8< --
> Subject: [PATCH] makepkg: define the required escape sequences globally
>
> In doing so, it is possible to get rid of all the tests for colored
> messages except for one global one.
>
> Signed-off-by: Cedric Staniewski <cedric at gmx.ca>
> ---
>  scripts/makepkg.sh.in |   42 +++++++++++++++---------------------------
>  1 files changed, 15 insertions(+), 27 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index a64a867..b89acdb 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -72,7 +72,6 @@ IGNOREARCH=0
>  HOLDVER=0
>  PKGFUNC=0
>  SPLITPKG=0
> -COLORMSG=0
>  
>  # Forces the pkgver of the current PKGBUILD. Used by the fakeroot call
>  # when dealing with svn/cvs/etc PKGBUILDs.
> @@ -84,47 +83,27 @@ PACMAN_OPTS=
>  
>  plain() {
>  	local mesg=$1; shift
> -	if [ $COLORMSG -eq 1 ]; then
> -		printf "$(tput bold)    ${mesg}$(tput sgr0)\n" "$@" >&2
> -	else
> -		printf "    ${mesg}\n" "$@" >&2
> -	fi
> +	printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
>  }
>  
>  msg() {
>  	local mesg=$1; shift
> -	if [ $COLORMSG -eq 1 ]; then
> -		printf "$(echo -e "bold\nsetaf 2" | tput -S)==>$(echo -e "sgr0\nbold" | tput -S) ${mesg}$(tput sgr0)\n" "$@" >&2
> -	else
> -		printf "==> ${mesg}\n" "$@" >&2
> -	fi
> +	printf "${GREEN}==>${ALL_OFF_BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
>  }
>  
>  msg2() {
>  	local mesg=$1; shift
> -	if [ $COLORMSG -eq 1 ]; then
> -		printf "$(echo -e "bold\nsetaf 4" | tput -S)  ->$(echo -e "sgr0\nbold" | tput -S) ${mesg}$(tput sgr0)\n" "$@" >&2
> -	else
> -		printf "  -> ${mesg}\n" "$@" >&2
> -	fi
> +	printf "${BLUE}  ->${ALL_OFF_BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
>  }
>  
>  warning() {
>  	local mesg=$1; shift
> -	if [ $COLORMSG -eq 1 ]; then
> -		printf "$(echo -e "bold\nsetaf 3" | tput -S)==> $(gettext "WARNING:")$(echo -e "sgr0\nbold" | tput -S) ${mesg}$(tput sgr0)\n" "$@" >&2
> -	else
> -		printf "==> $(gettext "WARNING:") ${mesg}\n" "$@" >&2
> -	fi
> +	printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF_BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
>  }
>  
>  error() {
>  	local mesg=$1; shift
> -	if [ $COLORMSG -eq 1 ]; then
> -		printf "$(echo -e "bold\nsetaf 1" | tput -S)==> $(gettext "ERROR:")$(echo -e "sgr0\nbold" | tput -S) ${mesg}$(tput sgr0)\n" "$@" >&2
> -	else
> -		printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
> -	fi
> +	printf "${RED}==> $(gettext "ERROR:")${ALL_OFF_BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
>  }
>  
>  
> @@ -1576,7 +1555,16 @@ fi
>  
>  # check if messages are to be printed using color
>  if [ -t 2 -a ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
> -	COLORMSG=1
> +	readonly ALL_OFF="$(tput sgr0)" \
> +						BOLD="$(tput bold)"
> +	readonly ALL_OFF_BOLD="${ALL_OFF}${BOLD}" \
> +						RED="${BOLD}$(tput setaf 1)" \
> +						BLUE="${BOLD}$(tput setaf 4)" \
> +						GREEN="${BOLD}$(tput setaf 2)" \
> +						YELLOW="${BOLD}$(tput setaf 3)"
> +else
> +	unset ALL_OFF ALL_OFF_BOLD BOLD RED BLUE GREEN YELLOW
> +	readonly ALL_OFF ALL_OFF_BOLD BOLD RED BLUE GREEN YELLOW
>  fi
>  
>  # override settings with an environment variable for batch processing
>   

That looks good to me.  Feel free to tidy it as you see fit and forward 
the patch.

Allan



More information about the pacman-dev mailing list