From mboxrd@z Thu Jan 1 00:00:00 1970 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes Date: Wed, 27 Jan 1999 13:53:00 +0100 (MET) Message-Id: <199901271253.NAA31999@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Andrej Borsenkow"'s message of Wed, 27 Jan 1999 12:57:34 +0300 Subject: Re: Completion in braces and accept-and-menu-complete X-Mailing-List: 5060 Andrej Borsenkow wrote: > I had /tools/lib/zsh/zsh-3.1.4 > zsh-3.1.5 > zsh-3.1.5-pws-5 > libzsh-3.1.4.so > > I did > > rm -rf /tools/lib/zsh/{z > > and correctly got listing. Unfotunately, when I pressed ESC-ENTER (bound to > accept-and-menu-complete) I got > > rm -rf /tools/lib/zsh/{zsh-3.1.4 /tools/lib/zsh/{zsh-3.1.5 > > obviously, not what I had in mind. Good point. Bye Sven --- os/Zle/zle_tricky.c Wed Jan 27 13:44:28 1999 +++ Src/Zle/zle_tricky.c Wed Jan 27 13:48:56 1999 @@ -98,10 +98,12 @@ /* This is for completion inside a brace expansion. brbeg and brend hold * * strings that were temporarily removed from the string to complete. * - * brpl and brsl hold the offset of these strings. */ + * brpl and brsl hold the offset of these strings. * + * brpcs and brscs hold the positions of the re-inserted string in the * + * line. */ static char *brbeg = NULL, *brend = NULL; -static int brpl, brsl; +static int brpl, brsl, brpcs, brscs; /* The list of matches. fmatches contains the matches we first ignore * * because of fignore. */ @@ -426,19 +428,30 @@ void acceptandmenucomplete(void) { - int sl = suffixlen[' ']; - if (!menucmp) { feep(); return; } - cs = menupos + menulen + menuinsc; - if (sl) - backdel(sl); - inststrlen(" ", 1, 1); - menuinsc = menulen = 0; - menupos = cs; - menuwe = 1; + if (brbeg && *brbeg) { + int l = (brscs >= 0 ? brscs : cs) - brpcs; + + zsfree(brbeg); + brbeg = (char *) zalloc(l + 2); + memcpy(brbeg, line + brpcs, l); + brbeg[l] = ','; + brbeg[l + 1] = '\0'; + } else { + int sl = suffixlen[' ']; + + cs = menupos + menulen + menuinsc; + if (sl) + backdel(sl); + + inststrlen(" ", 1, 1); + menuinsc = menulen = 0; + menupos = cs; + menuwe = 1; + } menucomplete(); } @@ -2364,6 +2377,7 @@ if (brbeg && *brbeg) { cs = a + m->brpl + (m->pre ? strlen(m->pre) : 0); l = strlen(brbeg); + brpcs = cs; inststrlen(brbeg, 1, l); r += l; ocs += l; @@ -2376,12 +2390,13 @@ if (brend && *brend) { a = cs; cs -= m->brsl; - ocs = cs; + ocs = brscs = cs; l = strlen(brend); inststrlen(brend, 1, l); r += l; cs = a + l; - } + } else + brscs = -1; if (m->suf) { inststrlen(m->suf, 1, (l = strlen(m->suf))); r += l; -- Sven Wischnowsky wischnow@informatik.hu-berlin.de