about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2009-03-10 11:12:02 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2009-03-10 11:12:02 +0000
commite391f09457c5ce71df740aac17bedd833e64e74b (patch)
tree778e12ad9ae6e2426d981fd5cf8faf9bc3130a32
parent6f3f3c6a010c43881b394cbb60c5f4938a8f43b3 (diff)
downloadzsh-e391f09457c5ce71df740aac17bedd833e64e74b.tar.gz
zsh-e391f09457c5ce71df740aac17bedd833e64e74b.tar.xz
zsh-e391f09457c5ce71df740aac17bedd833e64e74b.zip
26705: multibyte characters with Meta in ${(%)foo} etc.
-rw-r--r--ChangeLog8
-rw-r--r--Src/subst.c10
-rw-r--r--Test/D07multibyte.ztst17
3 files changed, 27 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index ee5fec451..f6250b694 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-10  Peter Stephenson  <pws@csr.com>
+
+	* 26705: Src/subst.c, Test/D07multibyte.ztst: still problems
+	with multibyte characters with Meta in prompt expansion within
+	parameter expansion.
+
 2009-03-09  Peter Stephenson  <pws@csr.com>
 
 	* 26702: Src/init.c: lexsave()/lexrestore() needed around
@@ -11361,5 +11367,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4606 $                         
+* $Revision: 1.4607 $                         
 *****************************************************
diff --git a/Src/subst.c b/Src/subst.c
index 89e9e46eb..9e3f06fe3 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -2734,7 +2734,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
      */
     if (presc) {
 	int ops = opts[PROMPTSUBST], opb = opts[PROMPTBANG];
-	int opp = opts[PROMPTPERCENT], len;
+	int opp = opts[PROMPTPERCENT];
 
 	if (presc < 2) {
 	    opts[PROMPTPERCENT] = 1;
@@ -2756,10 +2756,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	    ap = aval;
 	    for (; *ap; ap++) {
 		char *tmps;
-		unmetafy(*ap, &len);
 		untokenize(*ap);
-		tmps = promptexpand(metafy(*ap, len, META_NOALLOC),
-				    0, NULL, NULL, NULL);
+		tmps = promptexpand(*ap, 0, NULL, NULL, NULL);
 		*ap = dupstring(tmps);
 		free(tmps);
 	    }
@@ -2767,10 +2765,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	    char *tmps;
 	    if (!copied)
 		val = dupstring(val), copied = 1;
-	    unmetafy(val, &len);
 	    untokenize(val);
-	    tmps = promptexpand(metafy(val, len, META_NOALLOC),
-					0, NULL, NULL, NULL);
+	    tmps = promptexpand(val, 0, NULL, NULL, NULL);
 	    val = dupstring(tmps);
 	    free(tmps);
 	}
diff --git a/Test/D07multibyte.ztst b/Test/D07multibyte.ztst
index 1d440ee30..fb3161d97 100644
--- a/Test/D07multibyte.ztst
+++ b/Test/D07multibyte.ztst
@@ -410,3 +410,20 @@
 0:Metafied characters in prompt expansion
 >梶浦由記
 >Пётр Ильич Чайковский
+
+  (
+  setopt nonomatch
+  tmp1=Ą
+  tmpA=(Ą 'Пётр Ильич Чайковский' 梶浦由記)
+  print ${tmp1} ${(%)tmp1} ${(%%)tmp1}
+  print ${#tmp1} ${#${(%)tmp1}} ${#${(%%)tmp1}}
+  print ${tmpA}
+  print ${(%)tmpA}
+  print ${(%%)tmpA}
+  )
+0:More metafied characters in prompt expansion
+>Ą Ą Ą
+>1 1 1
+>Ą Пётр Ильич Чайковский 梶浦由記
+>Ą Пётр Ильич Чайковский 梶浦由記
+>Ą Пётр Ильич Чайковский 梶浦由記