Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: Re: NUMERIC_GLOB_SORT wish



[ Sorry for sending a patch to -users, but it's quite small... ]

Nemeth Ervin wrote:

> Hi,
> 
> I don't know if zsh 3.1.* has this feature, but in 3.0.* it is not documented:
> 
> It would be splendid to turn on NUMERIC_GLOB_SORT in any globbing with a
> globbing qualifier.
> 
> What do you think?

Hm, it's a bit irritating that we can't do that yet, given that we can 
set the other globbing specific options via qualifiers. It's quite
easy to implement, though.

To -workers:

The patch below implements that for 3.1.6-bart-7 (it will not work for 
any 3.0.x, I think). For now I took the letter `n'. This is a bit ugly
because all other qualifiers that locally set options use upper case
letters. The other free upper case letters are: BCFHJKPQVYZ. Any suggestions?

Bye
 Sven

diff -u oldsrc/glob.c Src/glob.c
--- oldsrc/glob.c	Fri Oct 29 21:15:13 1999
+++ Src/glob.c	Fri Oct 29 20:56:26 1999
@@ -139,6 +139,7 @@
     int gd_qualct, gd_qualorct;
     int gd_range, gd_amc, gd_units;
     int gd_gf_nullglob, gd_gf_markdirs, gd_gf_noglobdots, gd_gf_listtypes;
+    int gd_gf_numsort;
     int gd_gf_follow, gd_gf_sorts, gd_gf_nsorts, gd_gf_sortlist[11];
 
     char *gd_glob_pre, *gd_glob_suf;
@@ -165,6 +166,7 @@
 #define gf_markdirs   (curglobdata.gd_gf_markdirs)
 #define gf_noglobdots (curglobdata.gd_gf_noglobdots)
 #define gf_listtypes  (curglobdata.gd_gf_listtypes)
+#define gf_numsort    (curglobdata.gd_gf_numsort)
 #define gf_follow     (curglobdata.gd_gf_follow)
 #define gf_sorts      (curglobdata.gd_gf_sorts)
 #define gf_nsorts     (curglobdata.gd_gf_nsorts)
@@ -899,6 +901,7 @@
     gf_markdirs = isset(MARKDIRS);
     gf_listtypes = gf_follow = 0;
     gf_noglobdots = unset(GLOBDOTS);
+    gf_numsort = isset(NUMERICGLOBSORT);
     gf_sorts = gf_nsorts = 0;
 
     /* Check for qualifiers */
@@ -1176,6 +1179,10 @@
 			/* Glob dots: match leading dots implicitly */
 			gf_noglobdots = sense & 1;
 			break;
+		    case 'n':
+			/* Numeric glob sort */
+			gf_numsort = !(sense & 1);
+			break;
 		    case 'a':
 			/* Access time in given range */
 			g_amc = 0;
@@ -1413,7 +1420,7 @@
 #ifndef HAVE_STRCOLL
     cmp = (int)STOUC(*c) - (int)STOUC(*d);
 #endif
-    if (isset(NUMERICGLOBSORT) && (idigit(*c) || idigit(*d))) {
+    if (gf_numsort && (idigit(*c) || idigit(*d))) {
 	for (; c > *b && idigit(c[-1]); c--, d--);
 	if (idigit(*c) && idigit(*d)) {
 	    while (*c == '0')
diff -u olddoc/Zsh/expn.yo Doc/Zsh/expn.yo
--- olddoc/Zsh/expn.yo	Fri Oct 29 21:15:35 1999
+++ Doc/Zsh/expn.yo	Fri Oct 29 21:02:07 1999
@@ -1598,6 +1598,10 @@
 sets the tt(GLOB_DOTS) option for the current pattern
 pindex(GLOB_DOTS, setting in pattern)
 )
+item(tt(n))(
+sets the tt(NUMERIC_GLOB_SORT) option for the current pattern
+pindex(NUMERIC_GLOB_SORT, setting in pattern)
+)
 item(tt(o)var(c))(
 specifies how the names of the files should be sorted. If var(c) is
 tt(n) they are sorted by name (the default), if it is tt(L) they

--
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author