mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	save and restore more variables in bufferwords(); move gotword() into core (11523)
This commit is contained in:
		
							parent
							
								
									de2c2a89c6
								
							
						
					
					
						commit
						7f9f81f3e2
					
				
					 8 changed files with 98 additions and 34 deletions
				
			
		|  | @ -1,3 +1,9 @@ | |||
| 2000-05-23  Sven Wischnowsky  <wischnow@zsh.org> | ||||
| 
 | ||||
| 	* 11523: Src/hist.c, Src/init.c, Src/lex.c, Src/zsh.h, Src/Zle/zle.h, | ||||
|  	Src/Zle/zle_main.c, Src/Zle/zle_tricky.c: save and restore more | ||||
|  	variables in bufferwords(); move gotword() into core | ||||
| 	 | ||||
| 2000-05-22  Oliver Kiddle  <opk@zsh.org> | ||||
| 
 | ||||
| 	* 11517: Completion/Core/_next_label: don't lose empty arguments | ||||
|  |  | |||
|  | @ -30,15 +30,14 @@ | |||
| #undef trashzle | ||||
| #undef zleread | ||||
| #undef spaceinline | ||||
| #undef gotword | ||||
| #undef refresh | ||||
| #undef zrefresh | ||||
| 
 | ||||
| typedef struct widget *Widget; | ||||
| typedef struct thingy *Thingy; | ||||
| 
 | ||||
| /* widgets (ZLE functions) */ | ||||
| 
 | ||||
| typedef void (*ZleIntFunc) _((void)); | ||||
| typedef int (*ZleIntFunc) _((char **)); | ||||
| 
 | ||||
| struct widget { | ||||
|     int flags;		/* flags (see below) */ | ||||
|  | @ -46,16 +45,24 @@ struct widget { | |||
|     union { | ||||
| 	ZleIntFunc fn;	/* pointer to internally implemented widget */ | ||||
| 	char *fnnam;	/* name of the shell function for user-defined widget */ | ||||
| 	struct { | ||||
| 	    ZleIntFunc fn; /* internal widget function to call */ | ||||
| 	    char *wid;     /* name of widget to call */ | ||||
| 	    char *func;    /* name of shell function to call */ | ||||
| 	} comp; | ||||
|     } u; | ||||
| }; | ||||
| 
 | ||||
| #define WIDGET_INT	(1<<0)    /* widget is internally implemented */ | ||||
| #define ZLE_MENUCMP	(1<<1)    /* DON'T invalidate completion list */ | ||||
| #define WIDGET_INT	(1<<0)	/* widget is internally implemented */ | ||||
| #define WIDGET_NCOMP    (1<<1)	/* new style completion widget */ | ||||
| #define ZLE_MENUCMP	(1<<2)	/* DON'T invalidate completion list */ | ||||
| #define ZLE_YANK	(1<<3) | ||||
| #define ZLE_LINEMOVE	(1<<4)    /* command is a line-oriented movement */ | ||||
| #define ZLE_LASTCOL     (1<<5)    /* command maintains lastcol correctly */ | ||||
| #define ZLE_LINEMOVE	(1<<4)	/* command is a line-oriented movement */ | ||||
| #define ZLE_LASTCOL     (1<<5)	/* command maintains lastcol correctly */ | ||||
| #define ZLE_KILL	(1<<6) | ||||
| #define ZLE_KEEPSUFFIX	(1<<9)    /* DON'T remove added suffix */ | ||||
| #define ZLE_KEEPSUFFIX	(1<<7)	/* DON'T remove added suffix */ | ||||
| #define ZLE_NOTCOMMAND  (1<<8)	/* widget should not alter lastcmd */ | ||||
| #define ZLE_ISCOMP      (1<<9)	/* usable for new style completion */ | ||||
| 
 | ||||
| /* thingies */ | ||||
| 
 | ||||
|  | @ -99,6 +106,7 @@ struct change { | |||
|     int off;			/* offset of the text changes */ | ||||
|     char *del;			/* characters to delete (metafied) */ | ||||
|     char *ins;			/* characters to insert (metafied) */ | ||||
|     int old_cs, new_cs;		/* old and new cursor positions */ | ||||
| }; | ||||
| 
 | ||||
| #define CH_NEXT (1<<0)   /* next structure is also part of this change */ | ||||
|  | @ -118,7 +126,7 @@ typedef void (*KeyScanFunc) _((char *, Thingy, char *, void *)); | |||
| 
 | ||||
| /* Standard type of suffix removal. */ | ||||
| 
 | ||||
| #define removesuffix() iremovesuffix(256) | ||||
| #define removesuffix() iremovesuffix(256, 0) | ||||
| 
 | ||||
| /* Cut/kill buffer type.  The buffer itself is purely binary data, *
 | ||||
|  * not NUL-terminated.  len is a length count.  flags uses the     * | ||||
|  | @ -135,3 +143,54 @@ typedef struct cutbuffer *Cutbuffer; | |||
| #define CUTBUFFER_LINE 1   /* for vi: buffer contains whole lines of data */ | ||||
| 
 | ||||
| #define KRINGCT 8   /* number of buffers in the kill ring */ | ||||
| 
 | ||||
| /* Types of completion. */ | ||||
| 
 | ||||
| #define COMP_COMPLETE        0 | ||||
| #define COMP_LIST_COMPLETE   1 | ||||
| #define COMP_SPELL           2 | ||||
| #define COMP_EXPAND          3 | ||||
| #define COMP_EXPAND_COMPLETE 4 | ||||
| #define COMP_LIST_EXPAND     5 | ||||
| #define COMP_ISEXPAND(X) ((X) >= COMP_EXPAND) | ||||
| 
 | ||||
| /* Information about one brace run. */ | ||||
| 
 | ||||
| typedef struct brinfo *Brinfo; | ||||
| 
 | ||||
| struct brinfo { | ||||
|     Brinfo next;		/* next in list */ | ||||
|     Brinfo prev;		/* previous (only for closing braces) */ | ||||
|     char *str;			/* the string to insert */ | ||||
|     int pos;			/* original position */ | ||||
|     int qpos;			/* original position, with quoting */ | ||||
|     int curpos;			/* position for current match */ | ||||
| }; | ||||
| 
 | ||||
| /* Convenience macros for the hooks */ | ||||
| 
 | ||||
| #define LISTMATCHESHOOK    (zlehooks + 0) | ||||
| #define COMPLETEHOOK       (zlehooks + 1) | ||||
| #define BEFORECOMPLETEHOOK (zlehooks + 2) | ||||
| #define AFTERCOMPLETEHOOK  (zlehooks + 3) | ||||
| #define ACCEPTCOMPHOOK     (zlehooks + 4) | ||||
| #define REVERSEMENUHOOK    (zlehooks + 5) | ||||
| #define INVALIDATELISTHOOK (zlehooks + 6) | ||||
| 
 | ||||
| /* complete hook data struct */ | ||||
| 
 | ||||
| typedef struct compldat *Compldat; | ||||
| 
 | ||||
| struct compldat { | ||||
|     char *s; | ||||
|     int lst; | ||||
|     int incmd; | ||||
| }; | ||||
| 
 | ||||
| /* List completion matches. */ | ||||
| 
 | ||||
| #define listmatches() runhookdef(LISTMATCHESHOOK, NULL) | ||||
| 
 | ||||
| /* Invalidate the completion list. */ | ||||
| 
 | ||||
| #define invalidatelist() runhookdef(INVALIDATELISTHOOK, NULL) | ||||
|  |  | |||
|  | @ -1039,7 +1039,6 @@ setup_(Module m) | |||
| { | ||||
|     /* Set up editor entry points */ | ||||
|     trashzleptr = trashzle; | ||||
|     gotwordptr = gotword; | ||||
|     refreshptr = zrefresh; | ||||
|     spaceinlineptr = spaceinline; | ||||
|     zlereadptr = zleread; | ||||
|  | @ -1116,7 +1115,6 @@ finish_(Module m) | |||
| 
 | ||||
|     /* editor entry points */ | ||||
|     trashzleptr = noop_function; | ||||
|     gotwordptr = noop_function; | ||||
|     refreshptr = noop_function; | ||||
|     spaceinlineptr = noop_function_int; | ||||
|     zlereadptr = fallback_zleread; | ||||
|  |  | |||
|  | @ -58,11 +58,6 @@ mod_export int clwsize, clwnum, clwpos; | |||
| /**/ | ||||
| mod_export char **clwords; | ||||
| 
 | ||||
| /* wb and we hold the beginning/end position of the word we are completing. */ | ||||
| 
 | ||||
| /**/ | ||||
| mod_export int wb, we; | ||||
| 
 | ||||
| /* offs is the cursor position within the tokenized *
 | ||||
|  * current word after removing nulargs.             */ | ||||
| 
 | ||||
|  | @ -1692,19 +1687,6 @@ doexpansion(char *s, int lst, int olst, int explincmd) | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| /* This is called from the lexer to give us word positions. */ | ||||
| 
 | ||||
| /**/ | ||||
| void | ||||
| gotword(void) | ||||
| { | ||||
|     we = ll + 1 - inbufct + (addedx == 2 ? 1 : 0); | ||||
|     if (cs <= we) { | ||||
| 	wb = ll - wordbeg + addedx; | ||||
| 	zleparse = 0; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /**/ | ||||
| static int | ||||
| docompletion(char *s, int lst, int incmd) | ||||
|  |  | |||
|  | @ -2059,6 +2059,7 @@ mod_export LinkList | |||
| bufferwords(LinkList list, char *buf, int *index) | ||||
| { | ||||
|     int num = 0, cur = -1, got = 0, ne = noerrs, ocs = cs; | ||||
|     int owb = wb, owe = we, oadx = addedx, ozp = zleparse; | ||||
|     char *p; | ||||
| 
 | ||||
|     if (!list) | ||||
|  | @ -2131,10 +2132,14 @@ bufferwords(LinkList list, char *buf, int *index) | |||
|     noaliases = 0; | ||||
|     strinend(); | ||||
|     inpop(); | ||||
|     errflag = zleparse = 0; | ||||
|     errflag = 0; | ||||
|     zleparse = ozp; | ||||
|     noerrs = ne; | ||||
|     lexrestore(); | ||||
|     cs = ocs; | ||||
|     wb = owb; | ||||
|     we = owe; | ||||
|     addedx = oadx; | ||||
| 
 | ||||
|     if (index) | ||||
| 	*index = cur; | ||||
|  |  | |||
|  | @ -1025,8 +1025,6 @@ noop_function_int(int nothing) | |||
| /**/ | ||||
| mod_export ZleVoidFn trashzleptr = noop_function; | ||||
| /**/ | ||||
| mod_export ZleVoidFn gotwordptr = noop_function; | ||||
| /**/ | ||||
| mod_export ZleVoidFn refreshptr = noop_function; | ||||
| /**/ | ||||
| mod_export ZleVoidIntFn spaceinlineptr = noop_function_int; | ||||
|  | @ -1036,7 +1034,6 @@ mod_export ZleReadFn zlereadptr = autoload_zleread; | |||
| #else /* !LINKED_XMOD_zshQszle */ | ||||
| 
 | ||||
| mod_export ZleVoidFn trashzleptr = noop_function; | ||||
| mod_export ZleVoidFn gotwordptr = noop_function; | ||||
| mod_export ZleVoidFn refreshptr = noop_function; | ||||
| mod_export ZleVoidIntFn spaceinlineptr = noop_function_int; | ||||
| # ifdef UNLINKED_XMOD_zshQszle | ||||
|  |  | |||
							
								
								
									
										18
									
								
								Src/lex.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								Src/lex.c
									
										
									
									
									
								
							|  | @ -93,6 +93,11 @@ mod_export int inwhat; | |||
| /**/ | ||||
| mod_export int addedx; | ||||
| 
 | ||||
| /* wb and we hold the beginning/end position of the word we are completing. */ | ||||
| 
 | ||||
| /**/ | ||||
| mod_export int wb, we; | ||||
| 
 | ||||
| /* 1 if aliases should not be expanded */ | ||||
|   | ||||
| /**/ | ||||
|  | @ -1483,6 +1488,19 @@ parse_subst_string(char *s) | |||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /* Called below to report word positions. */ | ||||
| 
 | ||||
| /**/ | ||||
| mod_export void | ||||
| gotword(void) | ||||
| { | ||||
|     we = ll + 1 - inbufct + (addedx == 2 ? 1 : 0); | ||||
|     if (cs <= we) { | ||||
| 	wb = ll - wordbeg + addedx; | ||||
| 	zleparse = 0; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /* expand aliases and reserved words */ | ||||
| 
 | ||||
| /**/ | ||||
|  |  | |||
|  | @ -30,7 +30,6 @@ | |||
| #define trashzle()      trashzleptr() | ||||
| #define zleread(X,Y,H)  zlereadptr(X,Y,H) | ||||
| #define spaceinline(X)  spaceinlineptr(X) | ||||
| #define gotword()       gotwordptr() | ||||
| #define zrefresh()      refreshptr() | ||||
| 
 | ||||
| #define compctlread(N,A,O,R) compctlreadptr(N,A,O,R) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue