Index: Completion/Base/Utility/_values =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Base/Utility/_values,v retrieving revision 1.8 diff -u -p -r1.8 _values --- Completion/Base/Utility/_values 16 Apr 2002 07:55:49 -0000 1.8 +++ Completion/Base/Utility/_values 12 Dec 2004 20:44:45 -0000 @@ -10,10 +10,13 @@ zparseopts -D -E -a garbage C=usecc O:=s if compvalues -i "$@"; then local noargs args opts descr action expl sep argsep subc test='*' - local oldcontext="$curcontext" + local oldcontext="$curcontext" compound=$compstate[compound] compvalues -S argsep - compvalues -s sep && [[ -n "$sep" ]] && test="[^${(q)sep}]#" + compvalues -s sep && [[ -n "$sep" ]] && { + test="[^${(q)sep}]#" + compstate[compound_word]=yes + } if ! compvalues -D descr action; then @@ -148,6 +151,7 @@ if compvalues -i "$@"; then fi fi + compstate[compound]=$compound curcontext="$oldcontext" [[ nm -ne "$compstate[nmatches]" ]] Index: Src/Zle/comp.h =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/comp.h,v retrieving revision 1.14 diff -u -p -r1.14 comp.h --- Src/Zle/comp.h 21 May 2002 08:07:51 -0000 1.14 +++ Src/Zle/comp.h 12 Dec 2004 20:44:46 -0000 @@ -375,9 +375,11 @@ typedef void (*CLPrintFunc)(Cmgroup, Cma #define CP_QUOTES (1 << CPN_QUOTES) #define CPN_IGNORED 25 #define CP_IGNORED (1 << CPN_IGNORED) +#define CPN_COMPOUND 26 +#define CP_COMPOUND (1 << CPN_COMPOUND) -#define CP_KEYPARAMS 26 -#define CP_ALLKEYS ((unsigned int) 0x3ffffff) +#define CP_KEYPARAMS 27 +#define CP_ALLKEYS ((unsigned int) 0x7ffffff) /* Hooks. */ Index: Src/Zle/compcore.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/compcore.c,v retrieving revision 1.68 diff -u -p -r1.68 compcore.c --- Src/Zle/compcore.c 5 Nov 2004 16:20:24 -0000 1.68 +++ Src/Zle/compcore.c 12 Dec 2004 20:44:49 -0000 @@ -764,6 +764,8 @@ callcompfunc(char *s, char *fn) compoldlist = compoldins = ""; compoldlist = ztrdup(compoldlist); compoldins = ztrdup(compoldins); + zsfree(compcompound); + compcompound = ztrdup(""); incompfunc = 1; startparamscope(); Index: Src/Zle/complete.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/complete.c,v retrieving revision 1.27 diff -u -p -r1.27 complete.c --- Src/Zle/complete.c 7 Dec 2004 16:55:11 -0000 1.27 +++ Src/Zle/complete.c 12 Dec 2004 20:44:49 -0000 @@ -70,7 +70,8 @@ char *compiprefix, *comptoend, *compoldlist, *compoldins, - *compvared; + *compvared, + *compcompound; /**/ Param *comprpms, *compkpms; @@ -1018,6 +1019,7 @@ static struct compparam compkparams[] = { "list_lines", PM_INTEGER | PM_READONLY, NULL, GSU(listlines_gsu) }, { "all_quotes", PM_SCALAR | PM_READONLY, VAL(compqstack), NULL }, { "ignored", PM_INTEGER | PM_READONLY, VAL(compignored), NULL }, + { "compound_word", PM_SCALAR, VAL(compcompound), NULL }, { NULL, 0, NULL, NULL } }; @@ -1428,7 +1430,7 @@ setup_(UNUSED(Module m)) compquoting = comprestore = complist = compinsert = compexact = compexactstr = comppatmatch = comppatinsert = complastprompt = comptoend = compoldlist = compoldins = - compvared = compqstack = NULL; + compvared = compqstack = compcompound = NULL; complastprefix = ztrdup(""); complastsuffix = ztrdup(""); complistmax = 0; @@ -1508,6 +1510,7 @@ finish_(UNUSED(Module m)) zsfree(compoldlist); zsfree(compoldins); zsfree(compvared); + zsfree(compcompound); hascompmod = 0; Index: Src/Zle/compresult.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/compresult.c,v retrieving revision 1.52 diff -u -p -r1.52 compresult.c --- Src/Zle/compresult.c 12 Jul 2004 10:05:52 -0000 1.52 +++ Src/Zle/compresult.c 12 Dec 2004 20:44:49 -0000 @@ -1243,14 +1243,16 @@ accept_last(void) int l; cs = minfo.pos + minfo.len + minfo.insc; - iremovesuffix(' ', 1); + if (!compcompound || strlen(compcompound) == 0) + iremovesuffix(' ', 1); l = cs; cs = minfo.pos + minfo.len + minfo.insc - (*(minfo.cur))->qisl; if (cs < l) foredel(l - cs); else if (cs > ll) cs = ll; - inststrlen(" ", 1, 1); + if (!compcompound || strlen(compcompound) == 0) + inststrlen(" ", 1, 1); minfo.insc = minfo.len = 0; minfo.pos = cs; minfo.we = 1;