Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Justifying text output
- X-seq: zsh-users 7161
- From: Thorsten Kampe <thorsten@xxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxxxxx
- Subject: Re: Justifying text output
- Date: Fri, 12 Mar 2004 23:33:34 +0100
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <1mm7og67rpkdy.dlg@xxxxxxxxxxxxxxxx> <2136.1079089152@xxxxxxx>
- Sender: news <news@xxxxxxxxxxxxx>
* 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