Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] sort: Restore option to ignore back-slashes
- X-seq: zsh-workers 44267
- From: dana <dana@xxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: [PATCH] sort: Restore option to ignore back-slashes
- Date: Thu, 2 May 2019 15:14:22 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dana-is.20150623.gappssmtp.com; s=20150623; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=5jm+CnM6sPao1COi81XKyLf8z1dEHqa0hP/HmslmxNM=; b=Nxm870a0+gusLfy3Te8vH/t37reUckZC0ebk+8M+ycirUtqKGMrs2bTN7QW8IQHGUt CuwyS7eMYL6Zs4ZvHD5jG1kR3BpVAU2Gt/AAFbg1qTMaw5Xy489zQxWPqEKJAZuP/qwN l78qWCSDx+v27Tel3+Yq0QuQ8Zls/dfP5udidXayXBst4i1iK1eOC3tZtPHs5+sMMTLf f91Vx5xc6S5grgkImcfs6+DeuVJkPNFBGPfSGrY6dChxISqjy6cGQNUzuRW6mLTzEKnX DU2IdU5dPgHvoucl/Uoc+wOluyItOFoAAVN5TOVxy9HlD1Y0n8yKgfqe8D6b57Oo5P9k ilJQ==
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
Oliver mentioned to me off-list (and earlier in workers/43842) that
workers/41242 introduced an issue with sorting completion matches, where it no
longer ignores back-slashes like it used to. (e.g., in zsh 5.3 the match
`\!foo` would be sorted ahead of `Afoo`, but now it's the other way around.)
This seems to restore that functionality. I pretty much just copied and
pasted, though, so maybe someone could double-check my thinking...
dana
diff --git a/Src/sort.c b/Src/sort.c
index 92ee1c0d4..562b89491 100644
--- a/Src/sort.c
+++ b/Src/sort.c
@@ -33,6 +33,9 @@
/* Flag for direction of sort: 1 forwards, -1 reverse */
static int sortdir;
+/* Flag that sort ignores backslashes */
+static int sortnobslash;
+
/* Flag that sort is numeric */
static int sortnumeric;
@@ -113,9 +116,24 @@ eltpcmp(const void *a, const void *b)
bs += (laststarta - as);
as += (laststarta - as);
}
+
+ if (sortnobslash) {
+ while (*as && *bs) {
+ if (*as == '\\')
+ as++;
+ if (*bs == '\\')
+ bs++;
+ if (*as != *bs || !*as)
+ break;
+ as++;
+ bs++;
+ }
+ }
+
#ifdef HAVE_STRCOLL
cmp = strcoll(as, bs);
#endif
+
if (sortnumeric) {
for (; *as == *bs && *as; as++, bs++);
#ifndef HAVE_STRCOLL
@@ -162,7 +180,10 @@ mod_export int
zstrcmp(const char *as, const char *bs, int sortflags)
{
struct sortelt ae, be, *aeptr, *beptr;
- int oldsortdir = sortdir, oldsortnumeric = sortnumeric, ret;
+ int oldsortdir = sortdir;
+ int oldsortnobslash = sortnobslash;
+ int oldsortnumeric = sortnumeric;
+ int ret;
ae.cmp = as;
be.cmp = bs;
@@ -173,11 +194,13 @@ zstrcmp(const char *as, const char *bs, int sortflags)
beptr = &be;
sortdir = 1;
+ sortnobslash = (sortflags & SORTIT_IGNORING_BACKSLASHES) ? 1 : 0;
sortnumeric = (sortflags & SORTIT_NUMERICALLY) ? 1 : 0;
ret = eltpcmp(&aeptr, &beptr);
/* Paranoia: I don't think we ever need to restore these. */
+ sortnobslash = oldsortnobslash;
sortnumeric = oldsortnumeric;
sortdir = oldsortdir;
diff --git a/Test/Y01completion.ztst b/Test/Y01completion.ztst
index b1c0e40e5..f1c981f26 100644
--- a/Test/Y01completion.ztst
+++ b/Test/Y01completion.ztst
@@ -99,6 +99,7 @@ F:regression test workers/31611
comptesteval 'cd "A(B)/C"'
comptest $'cd ../\t'
} always {
+ comptesteval 'cd -' # Reset CWD
rmdir 'A(B)/C' 'A(B)'
}
0:directory name is not a glob qualifier
@@ -116,6 +117,27 @@ F:regression test workers/31611
0:allow for suffixes when moving cursor to end of match (without ignored suffix)
>line: {tst word:/}{}
+# Test for regression introduced by workers/41242, raised in workers/43842
+ {
+ mkdir sortnobslash
+ touch sortnobslash/{'!foo','#foo','\foo','|foo','~foo',Afoo,bfoo}
+ comptesteval 'old_LC_ALL=$LC_ALL; LC_ALL=C'
+ comptest $': sortnobslash/\t'
+ } always {
+ comptesteval 'LC_ALL=$old_LC_ALL'
+ rm -rf sortnobslash
+ }
+0:ignore backslashes when sorting completion matches
+>line: {: sortnobslash/}{}
+>DESCRIPTION:{file}
+>FI:{\!foo}
+>FI:{\#foo}
+>FI:{Afoo}
+>FI:{\\foo}
+>FI:{bfoo}
+>FI:{\|foo}
+>FI:{\~foo}
+
%clean
zmodload -ui zsh/zpty
Messages sorted by:
Reverse Date,
Date,
Thread,
Author