diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | Completion/Unix/Type/_path_files | 2 | ||||
-rw-r--r-- | Src/Zle/compcore.c | 14 |
3 files changed, 18 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index d73b34355..cbc9dece3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-08-17 Sven Wischnowsky <wischnow@zsh.org> + + * 15650: Completion/Unix/Type/_path_files, Src/Zle/compcore.c: fix + test for expanded paths in _path_files; more intelligently move + glob flags (in particular those added by _approximate) after a + tilde + 2001-08-16 Peter Stephenson <pws@csr.com> * 15647: Functions/Misc/zcalc: with output not showing the diff --git a/Completion/Unix/Type/_path_files b/Completion/Unix/Type/_path_files index b635a8ab9..805f6993e 100644 --- a/Completion/Unix/Type/_path_files +++ b/Completion/Unix/Type/_path_files @@ -653,7 +653,7 @@ done if zstyle -t ":completion:${curcontext}:paths" expand prefix && [[ nm -eq compstate[nmatches] && $#exppaths -ne 0 && - "$exppaths" != "$eorig" ]]; then + "$linepath$exppaths" != "$eorig" ]]; then PREFIX="${opre}" SUFFIX="${osuf}" compadd -Q "$mopts[@]" -S '' -M "r:|/=* r:|=*" -p "$linepath" -a exppaths diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c index d3f720478..f75c8dc20 100644 --- a/Src/Zle/compcore.c +++ b/Src/Zle/compcore.c @@ -1782,21 +1782,23 @@ addmatches(Cadata dat, char **argv) } else lsl = 0; if (dat->aflags & CAF_MATCH) { - int ml, gfl = 0; + int ml, gfl = 0, tildepat = 0; char *globflag = NULL; if (comppatmatch && *comppatmatch && - dat->ppre && lpre[0] == '(' && lpre[1] == '#') { + lpre[0] == '(' && lpre[1] == '#') { char *p; for (p = lpre + 2; *p && *p != ')'; p++); - if (*p == ')') { + if (*p == ')' && (dat->ppre || p[1] == '~')) { char sav = p[1]; p[1] = '\0'; globflag = dupstring(lpre); gfl = p - lpre + 1; + if (!dat->ppre) + tildepat = 1; p[1] = sav; lpre = p + 1; @@ -1859,7 +1861,11 @@ addmatches(Cadata dat, char **argv) int is = (*comppatmatch == '*'); char *tmp = (char *) zhalloc(2 + llpl + llsl + gfl); - if (gfl) { + if (tildepat) { + tmp[0] = '~'; + strcpy(tmp + 1, globflag); + strcat(tmp, lpre + 1); + } else if (gfl) { strcpy(tmp, globflag); strcat(tmp, lpre); } else |