Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Justifying text output



* Peter Stephenson (2004-03-12 11:59 +0100)
> Thorsten Kampe wrote:
>> I wrote a little script[1] that compiles the main zsh config files. Is
>> there any way to make the "[ ok ]"/"[ failed ]" messages on the right
>> justified?
> 
> There are various ways; most involve assigning the variable-length part
> of the message to a string.  You should probably not put any escape
> characters in there so it doesn't include them in the length
> calculation (though if the escape sequences are all the same you would
> get away with it).
> 
> The standard ksh way is (using a simplified example) to specify left
> justification for a parameter:

A "parameter" is a variable in "zshspeak"? And typeset declares the
type of the variable because Bourne shells "think" everything is a
string? ("Unlike many other programming languages, Bash does not
segregate its variables by "type". Essentially, Bash variables are
character strings" -- Advanced bash scripting Guide)
 
>  typeset -L 40 msg
>  for msg in "message one" "a longer message here" "short"; do
>  print ${msg} "[ WOW ]"
>  done
> [...]
> You can avoid using the `-L 40' if you change ${msg} to ${(r.40.)msg}.
> That's a zsh extension which pads to the given width with spaces.  The
> `r' appears instead of `l' because it indicates where the padding goes,
> not where the justification is.

Where is that documented?
 
> However, you can actually get away without assigning the message to a
> parameter:
> 
>  print ${(r.40.):-"message one"} "WOW"
>  print ${(r.40.):-"a longer message here"} "WOW"
>  print ${(r.40.):-"short"} "WOW"

Again: I couldn't find anything about than in the manpage (man
zshbuiltins for "printf"). What does ":-" do? Substring selection.
String formatting?

> That works because zsh treats the absence of a parameter name as an
> unset parameter, so it uses the normal logic for :-.  In other words,
> `if the length of the parameter is zero, substitute the following string
> instead'.   The (r.40.) padding flag works just the same.  You can
> include further substitutions in the text, so this would still work in
> your case.

Plain magic to me.

Thorsten



Messages sorted by: Reverse Date, Date, Thread, Author