Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: ${(m)#...}
- X-seq: zsh-workers 24788
- From: Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx (Zsh hackers list)
- Subject: PATCH: ${(m)#...}
- Date: Thu, 03 Apr 2008 22:01:29 +0100
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
I introduced the (m) flag to calculate the width of a multibyte
character for the (l) and (r) padding flags. I'm not sure why I didn't
introduce it for parameter lengths, too, but now I'm finding that
useful. ${(m)#...} now returns the printable width of the string.
Index: Doc/Zsh/expn.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/expn.yo,v
retrieving revision 1.88
diff -u -r1.88 expn.yo
--- Doc/Zsh/expn.yo 1 Feb 2008 19:59:48 -0000 1.88
+++ Doc/Zsh/expn.yo 3 Apr 2008 20:57:32 -0000
@@ -943,11 +943,13 @@
mechanism to be used for generating repetitions of control characters.
)
item(tt(m))(
-Only useful together with tt(l) and tt(r) when the tt(MULTIBYTE) option
+Only useful together with one of the flags tt(l) or tt(r) or with the
+tt(#) length operator when the tt(MULTIBYTE) option
is in effect. Use the character width reported by the system in
-calculating the how much of the string it occupies. Most printable
-characters have a width of one unit, however certain Asian character sets
-and certain special effects use wider characters.
+calculating the how much of the string it occupies or the overall
+length of the string. Most printable characters have a width of one
+unit, however certain Asian character sets and certain special effects
+use wider characters; combining characters have zero width.
)
item(tt(r:)var(expr)tt(::)var(string1)tt(::)var(string2)tt(:))(
As tt(l), but pad the words on the right and insert var(string2)
Index: Src/subst.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/subst.c,v
retrieving revision 1.83
diff -u -r1.83 subst.c
--- Src/subst.c 27 Feb 2008 15:51:27 -0000 1.83
+++ Src/subst.c 3 Apr 2008 20:57:33 -0000
@@ -2589,7 +2589,8 @@
else if (getlen == 2) {
if (*aval)
for (len = -sl, ctr = aval;
- len += sl + MB_METASTRLEN(*ctr), *++ctr;);
+ len += sl + MB_METASTRLEN2(*ctr, multi_width),
+ *++ctr;);
}
else
for (ctr = aval;
@@ -2597,7 +2598,7 @@
len += wordcount(*ctr, spsep, getlen > 3), ctr++);
} else {
if (getlen < 3)
- len = MB_METASTRLEN(val);
+ len = MB_METASTRLEN2(val, multi_width);
else
len = wordcount(val, spsep, getlen > 3);
}
--
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
Messages sorted by:
Reverse Date,
Date,
Thread,
Author