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

Re: Strange _values completion on accept-and-menu-complete and menu selection



On Sunday 12 December 2004 00:05, Bart Schaefer wrote:

> A fix seems to be something in the direction of this pseudo-patch (do NOT
> apply it as-is) to compresult.c, but I don't know how to get the boolean
> value for "we are not completing values from compvalues" at this location.
>

I already got a prototype patch for it when I accidentally hit a-a-i-n-h and 
voila - it did what I expected from a-a-m-c (except that a-a-m-c stays on the 
same word while a-a-i-n-h starts from scratch - because with a-a-i-n-h it 
actually starts new completion every time).

I attach prototype patch - it adds compstate element that tells accept_last to 
skip suffix removal. It can be used in more general case than just _values - 
what I am not sure how and when this is to be set. I.e. using this patch 
following function now "correctly" works for a-a m-c:

function _foo () {
        compstate[stayinword]=1
        compset -P '*,'
        compadd -qS , ${(k)compstate}
}

compdef _foo foo

regards

-andrey

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 16:13:03 -0000
@@ -38,7 +38,8 @@ zlong compcurrent,
       complistmax;
 /**/
 zlong complistlines,
-      compignored;
+      compignored,
+      compstayinword;

 /**/
 mod_export
@@ -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 },
+    { "stayinword", PM_INTEGER, VAL(compstayinword), NULL },
     { NULL, 0, NULL, NULL }
 };

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 16:13:04 -0000
@@ -1243,14 +1243,16 @@ accept_last(void)
        int l;

        cs = minfo.pos + minfo.len + minfo.insc;
-       iremovesuffix(' ', 1);
+       if (!compstayinword)
+           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 (!compstayinword)
+           inststrlen(" ", 1, 1);
        minfo.insc = minfo.len = 0;
        minfo.pos = cs;
        minfo.we = 1;



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