From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22983 invoked by alias); 12 Jun 2015 11:30:56 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 35450 Received: (qmail 10230 invoked from network); 12 Jun 2015 11:30:54 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no autolearn_force=no version=3.4.0 Date: Fri, 12 Jun 2015 13:30:50 +0200 From: Vincent Lefevre To: zsh-workers@zsh.org Subject: Re: printf, left-justification ignored in 5.0.8 Message-ID: <20150612113050.GA21806@ypig.lip.ens-lyon.fr> Mail-Followup-To: zsh-workers@zsh.org References: <20150607081142.GF15174@isis.sigpipe.cz> <30271.1433709564@thecus.kiddle.eu> <20150607211529.GA13370@chaz.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20150607211529.GA13370@chaz.gmail.com> X-Mailer-Info: https://www.vinc17.net/mutt/ User-Agent: Mutt/1.5.23-6449-vl-r76280 (2015-05-18) On 2015-06-07 22:15:29 +0100, Stephane Chazelas wrote: > BTW, there was a discussion lately on the Austin group mailing > list confirming that the %20s should count bytes, not > characters. > > That is in a UTF-8 locale > > printf '|%3s|\n' e é € > > should print: > > | e| > | é| > |€| > > not: > > | e| > | é| > | €| > > I find the zsh behaviour more useful though, Well, it depends on the context. As I've said in http://www.zsh.org/mla/workers/2012/msg00151.html Yes, the number is the size in bytes, not in characters. I think that the intent is to deal with internal structures (e.g. with file formats where some fields have a fixed or limited size, and the same syntax can be used in C to avoid buffer overflows). I don't know if this is the real reason. > especially considering that in zsh we can get the POSIX behaviour > with: > > $ LC_ALL=C printf '|%3s|\n' e é € > | e| > | é| > |€| However the change of locale may affect other format specifiers, like %f, and error messages. > But note that to get proper alignment, rather than number of > characters, the width of the glyphs should be considered > instead anyway: > > $ printf '|%3b|\n' e '\ue9' 'e\u301' '\uff45' > | e| > | é| > | é| > | e| > > ksh93 has %3Ls for that: > > $ printf '|%3Ls|\n' e $'\ue9' $'e\u301' $'\uff45' > | e| > | é| > | é| > | e| > > (possibly uses wcswidth()). This could be useful in zsh, and its support would be needed for "emulate ksh". -- Vincent Lefèvre - Web: 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)