1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-17 13:36:04 +02:00

47913: implement CASE_PATHS option to make NO_CASE_GLOB more sensible

This commit is contained in:
Bart Schaefer 2021-04-10 14:26:46 -07:00
parent 1bec15a010
commit 408a830483
5 changed files with 31 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2021-04-10 Bart Schaefer <schaefer@zsh.org>
* 47913: Doc/Zsh/options.yo, Src/options.c, Src/pattern.c, Src/zsh.h:
implement CASE_PATHS option to make NO_CASE_GLOB more sensible
2021-04-10 dana <dana@dana.is>
* unposted (see 48415): README: Document incompatibility

View File

@ -474,6 +474,22 @@ item(tt(CASE_MATCH) <D>)(
Make regular expressions using the tt(zsh/regex) module (including
matches with tt(=~)) sensitive to case.
)
pindex(CASE_PATHS)
pindex(NO_CASE_PATHS)
pindex(CASEPATHS)
pindex(NOCASEPATHS)
cindex(case-sensitive globbing, option)
item(tt(CASE_PATHS))(
If tt(CASE_PATHS) is not set (the default), tt(CASE_GLOB) affects the
interpretation of em(every) path component, whenever a special
character appears in em(any) component. When tt(CASE_PATHS) is set,
file path components that do em(not) contain special filename
generation characters are always sensitive to case, thus restricting
tt(NO_CASE_GLOB) to components that contain globbing characters.
Note that if the filesystem itself is not sensitive to case, then
tt(CASE_PATHS) has no effect.
)
pindex(CSH_NULL_GLOB)
pindex(NO_CSH_NULL_GLOB)
pindex(CSHNULLGLOB)

View File

@ -105,6 +105,7 @@ static struct optname optns[] = {
{{NULL, "bsdecho", OPT_EMULATE|OPT_SH}, BSDECHO},
{{NULL, "caseglob", OPT_ALL}, CASEGLOB},
{{NULL, "casematch", OPT_ALL}, CASEMATCH},
{{NULL, "casepaths", 0}, CASEPATHS},
{{NULL, "cbases", 0}, CBASES},
{{NULL, "cprecedences", OPT_EMULATE|OPT_NONZSH}, CPRECEDENCES},
{{NULL, "cdablevars", OPT_EMULATE}, CDABLEVARS},

View File

@ -509,7 +509,7 @@ void
patcompstart(void)
{
patcompcharsset();
if (isset(CASEGLOB))
if (isset(CASEGLOB) || isset(CASEPATHS))
patglobflags = 0;
else
patglobflags = GF_IGNCASE;
@ -632,6 +632,13 @@ patcompile(char *exp, int inflags, char **endexp)
p->patmlen = len;
p->patnpar = patnpar-1;
#ifndef __CYGWIN__ /* The filesystem itself is case-insensitive on Cygwin */
if ((patflags & PAT_FILE) && !isset(CASEGLOB) && !(patflags & PAT_PURES)) {
p->globflags |= GF_IGNCASE;
p->globend |= GF_IGNCASE;
}
#endif
if (!strp) {
pscan = (Upat)(patout + startoff);

View File

@ -2387,6 +2387,7 @@ enum {
BSDECHO,
CASEGLOB,
CASEMATCH,
CASEPATHS,
CBASES,
CDABLEVARS,
CDSILENT,