From ebcead7543194819ef3bbd47ef384cabae3c59fc Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Tue, 14 Dec 2010 10:35:38 +0000 Subject: lexsave/lexrestore lexflags add new LEXFLAGS_ZLE --- Src/Zle/compcore.c | 4 ++-- Src/Zle/compctl.c | 8 ++++---- Src/Zle/zle_tricky.c | 7 +++---- Src/hist.c | 11 ++++------- Src/lex.c | 7 +++++-- Src/zsh.h | 12 +++++++++--- 6 files changed, 27 insertions(+), 22 deletions(-) (limited to 'Src') diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c index 2e983f62c..c59815874 100644 --- a/Src/Zle/compcore.c +++ b/Src/Zle/compcore.c @@ -1481,13 +1481,13 @@ set_comp_sep(void) /* Put the string in the lexer buffer and call the lexer to * * get the words we have to expand. */ - lexflags = LEXFLAGS_ACTIVE; ocs = zlemetacs; oll = zlemetall; ol = zlemetaline; addedx = 1; noerrs = 1; lexsave(); + lexflags = LEXFLAGS_ZLE; /* * tl is the length of the temporary string including * the space at the start and the x at the cursor position, @@ -1634,7 +1634,7 @@ set_comp_sep(void) noaliases = ona; strinend(); inpop(); - errflag = lexflags = 0; + errflag = 0; noerrs = ne; lexrestore(); wb = owb; diff --git a/Src/Zle/compctl.c b/Src/Zle/compctl.c index 4e28fd67c..873d9287a 100644 --- a/Src/Zle/compctl.c +++ b/Src/Zle/compctl.c @@ -2789,10 +2789,10 @@ sep_comp_string(char *ss, char *s, int noffs) /* Put the string in the lexer buffer and call the lexer to * * get the words we have to expand. */ - lexflags = LEXFLAGS_ACTIVE; addedx = 1; noerrs = 1; lexsave(); + lexflags = LEXFLAGS_ZLE; tmp = (char *) zhalloc(tl = sl + 3 + strlen(s)); strcpy(tmp, ss); tmp[sl] = ' '; @@ -2843,7 +2843,7 @@ sep_comp_string(char *ss, char *s, int noffs) noaliases = ona; strinend(); inpop(); - errflag = lexflags = 0; + errflag = 0; noerrs = ne; lexrestore(); wb = owb; @@ -3703,8 +3703,8 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd) /* Put the string in the lexer buffer and call the lexer to * * get the words we have to expand. */ - lexflags = LEXFLAGS_ACTIVE; lexsave(); + lexflags = LEXFLAGS_ZLE; tmpbuf = (char *)zhalloc(strlen(cc->str) + 5); sprintf(tmpbuf, "foo %s", cc->str); /* KLUDGE! */ inpush(tmpbuf, 0, NULL); @@ -3721,7 +3721,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd) noaliases = ona; strinend(); inpop(); - errflag = lexflags = 0; + errflag = 0; lexrestore(); /* Fine, now do full expansion. */ prefork(foo, 0); diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c index 9a63b2738..566537761 100644 --- a/Src/Zle/zle_tricky.c +++ b/Src/Zle/zle_tricky.c @@ -1140,9 +1140,9 @@ get_comp_string(void) zsfree(varname); varname = NULL; insubscr = 0; - lexflags = LEXFLAGS_ACTIVE; clwpos = -1; lexsave(); + lexflags = LEXFLAGS_ZLE; inpush(dupstrspace(linptr), 0, NULL); strinbeg(0); wordpos = tt0 = cp = rd = ins = oins = linarr = parct = ia = redirpos = 0; @@ -2707,7 +2707,6 @@ doexpandhist(void) noaliases = ona; strinend(); inpop(); - lexflags = 0; lexrestore(); expanding = 0; @@ -2807,8 +2806,8 @@ getcurcmd(void) int curlincmd; char *s = NULL; - lexflags = LEXFLAGS_ACTIVE; lexsave(); + lexflags = LEXFLAGS_ZLE; metafy_line(); inpush(dupstrspace(zlemetaline), 0, NULL); strinbeg(1); @@ -2829,7 +2828,7 @@ getcurcmd(void) popheap(); strinend(); inpop(); - errflag = lexflags = 0; + errflag = 0; unmetafy_line(); lexrestore(); diff --git a/Src/hist.c b/Src/hist.c index ae7ada755..c94d3e4aa 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -2897,11 +2897,9 @@ histfileIsLocked(void) * If index is non-NULL, and input is from a string in ZLE, *index * is set to the position of the end of the current editor word. * - * comments is used if buf is non-NULL (i.e. this is not a string - * from ZLE). - * If it is 0, comments are not parsed; they are treated as ordinary words. - * If it is 1, comments are treated as single strings, one per line. - * If it is 2, comments are removed. + * flags is passed directly to lexflags, see lex.c, except that + * we 'or' in the bit LEXFLAGS_ACTIVE to make sure the variable + * is set. */ /**/ @@ -2909,7 +2907,7 @@ mod_export LinkList bufferwords(LinkList list, char *buf, int *index, int flags) { int num = 0, cur = -1, got = 0, ne = noerrs; - int owb = wb, owe = we, oadx = addedx, ozp = lexflags, onc = nocomments; + int owb = wb, owe = we, oadx = addedx, onc = nocomments; int ona = noaliases, ocs = zlemetacs, oll = zlemetall; int forloop = 0, rcquotes = opts[RCQUOTES]; char *p, *addedspaceptr; @@ -3120,7 +3118,6 @@ bufferwords(LinkList list, char *buf, int *index, int flags) strinend(); inpop(); errflag = 0; - lexflags = ozp; nocomments = onc; noerrs = ne; lexrestore(); diff --git a/Src/lex.c b/Src/lex.c index ca48f3e35..a4d55f49a 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -126,7 +126,7 @@ mod_export int noaliases; * Note that although it is passed into the lexer as an input, the * lexer can set it to zero after finding the word it's searching for. * This only happens if the line being parsed actually does come from - * ZLE. + * ZLE, and hence the bit LEXFLAGS_ZLE is set. */ /**/ @@ -202,6 +202,7 @@ struct lexstack { int isfirstch; int histactive; int histdone; + int lexflags; int stophist; int hlinesz; char *hline; @@ -258,6 +259,7 @@ lexsave(void) ls->isfirstch = isfirstch; ls->histactive = histactive; ls->histdone = histdone; + ls->lexflags = lexflags; ls->stophist = stophist; stophist = 0; if (!lstack) { @@ -332,6 +334,7 @@ lexrestore(void) isfirstch = lstack->isfirstch; histactive = lstack->histactive; histdone = lstack->histdone; + lexflags = lstack->lexflags; stophist = lstack->stophist; chline = lstack->hline; hptr = lstack->hptr; @@ -1804,7 +1807,7 @@ exalias(void) } else zshlextext = tokstr; - if (lexflags && !(inbufflags & INP_ALIAS)) { + if ((lexflags & LEXFLAGS_ZLE) && !(inbufflags & INP_ALIAS)) { int zp = lexflags; gotword(); diff --git a/Src/zsh.h b/Src/zsh.h index cd479462b..6dc918c09 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -1834,14 +1834,20 @@ struct histent { * has otherwise all the default effects. */ #define LEXFLAGS_ACTIVE 0x0001 +/* + * Being used from zle. This is slightly more intrusive + * (=> grotesquely non-modular) than use from within + * the main shell, so it's a separate flag. + */ +#define LEXFLAGS_ZLE 0x0002 /* * Parse comments and treat each comment as a single string */ -#define LEXFLAGS_COMMENTS_KEEP 0x0002 +#define LEXFLAGS_COMMENTS_KEEP 0x0004 /* * Parse comments and strip them. */ -#define LEXFLAGS_COMMENTS_STRIP 0x0004 +#define LEXFLAGS_COMMENTS_STRIP 0x0008 /* * Either of the above */ @@ -1849,7 +1855,7 @@ struct histent { /* * Treat newlines as whitespace */ -#define LEXFLAGS_NEWLINE 0x0008 +#define LEXFLAGS_NEWLINE 0x0010 /******************************************/ /* Definitions for programable completion */ -- cgit 1.4.1