mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * comp.h - header file for completion
 | 
						|
 *
 | 
						|
 * This file is part of zsh, the Z shell.
 | 
						|
 *
 | 
						|
 * Copyright (c) 1992-1997 Paul Falstad
 | 
						|
 * All rights reserved.
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, without written agreement and without
 | 
						|
 * license or royalty fees, to use, copy, modify, and distribute this
 | 
						|
 * software and to distribute modified versions of this software for any
 | 
						|
 * purpose, provided that the above copyright notice and the following
 | 
						|
 * two paragraphs appear in all copies of this software.
 | 
						|
 *
 | 
						|
 * In no event shall Paul Falstad or the Zsh Development Group be liable
 | 
						|
 * to any party for direct, indirect, special, incidental, or consequential
 | 
						|
 * damages arising out of the use of this software and its documentation,
 | 
						|
 * even if Paul Falstad and the Zsh Development Group have been advised of
 | 
						|
 * the possibility of such damage.
 | 
						|
 *
 | 
						|
 * Paul Falstad and the Zsh Development Group specifically disclaim any
 | 
						|
 * warranties, including, but not limited to, the implied warranties of
 | 
						|
 * merchantability and fitness for a particular purpose.  The software
 | 
						|
 * provided hereunder is on an "as is" basis, and Paul Falstad and the
 | 
						|
 * Zsh Development Group have no obligation to provide maintenance,
 | 
						|
 * support, updates, enhancements, or modifications.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#undef compctlread
 | 
						|
 | 
						|
typedef struct compctlp  *Compctlp;
 | 
						|
typedef struct compctl   *Compctl;
 | 
						|
typedef struct compcond  *Compcond;
 | 
						|
typedef struct patcomp   *Patcomp;
 | 
						|
 | 
						|
/* node for compctl hash table (compctltab) */
 | 
						|
 | 
						|
struct compctlp {
 | 
						|
    HashNode next;		/* next in hash chain               */
 | 
						|
    char *nam;			/* command name                     */
 | 
						|
    int flags;			/* CURRENTLY UNUSED                 */
 | 
						|
    Compctl cc;			/* pointer to the compctl desc.     */
 | 
						|
};
 | 
						|
 | 
						|
/* for the list of pattern compctls */
 | 
						|
 | 
						|
struct patcomp {
 | 
						|
    Patcomp next;
 | 
						|
    char *pat;
 | 
						|
    Compctl cc;
 | 
						|
};
 | 
						|
 | 
						|
/* compctl -x condition */
 | 
						|
 | 
						|
struct compcond {
 | 
						|
    Compcond and, or;		/* the next or'ed/and'ed conditions    */
 | 
						|
    int type;			/* the type (CCT_*)                    */
 | 
						|
    int n;			/* the array length                    */
 | 
						|
    union {			/* these structs hold the data used to */
 | 
						|
	struct {		/* test this condition                 */
 | 
						|
	    int *a, *b;		/* CCT_POS, CCT_NUMWORDS               */
 | 
						|
	}
 | 
						|
	r;
 | 
						|
	struct {		/* CCT_CURSTR, CCT_CURPAT,... */
 | 
						|
	    int *p;
 | 
						|
	    char **s;
 | 
						|
	}
 | 
						|
	s;
 | 
						|
	struct {		/* CCT_RANGESTR,... */
 | 
						|
	    char **a, **b;
 | 
						|
	}
 | 
						|
	l;
 | 
						|
    }
 | 
						|
    u;
 | 
						|
};
 | 
						|
 | 
						|
#define CCT_UNUSED     0
 | 
						|
#define CCT_POS        1
 | 
						|
#define CCT_CURSTR     2
 | 
						|
#define CCT_CURPAT     3
 | 
						|
#define CCT_WORDSTR    4
 | 
						|
#define CCT_WORDPAT    5
 | 
						|
#define CCT_CURSUF     6
 | 
						|
#define CCT_CURPRE     7
 | 
						|
#define CCT_CURSUB     8
 | 
						|
#define CCT_CURSUBC    9
 | 
						|
#define CCT_NUMWORDS  10
 | 
						|
#define CCT_RANGESTR  11
 | 
						|
#define CCT_RANGEPAT  12
 | 
						|
#define CCT_QUOTE     13
 | 
						|
 | 
						|
/* Contains the real description for compctls */
 | 
						|
 | 
						|
struct compctl {
 | 
						|
    int refc;			/* reference count                         */
 | 
						|
    Compctl next;		/* next compctl for -x                     */
 | 
						|
    unsigned long mask, mask2;	/* masks of things to complete (CC_*)      */
 | 
						|
    char *keyvar;		/* for -k (variable)                       */
 | 
						|
    char *glob;			/* for -g (globbing)                       */
 | 
						|
    char *str;			/* for -s (expansion)                      */
 | 
						|
    char *func;			/* for -K (function)                       */
 | 
						|
    char *explain;		/* for -X (explanation)                    */
 | 
						|
    char *ylist;		/* for -y (user-defined desc. for listing) */
 | 
						|
    char *prefix, *suffix;	/* for -P and -S (prefix, suffix)          */
 | 
						|
    char *subcmd;		/* for -l (command name to use)            */
 | 
						|
    char *substr;		/* for -1 (command name to use)            */
 | 
						|
    char *withd;		/* for -w (with directory                  */
 | 
						|
    char *hpat;			/* for -H (history pattern)                */
 | 
						|
    int hnum;			/* for -H (number of events to search)     */
 | 
						|
    char *gname;		/* for -J and -V (group name)              */
 | 
						|
    Compctl ext;		/* for -x (first of the compctls after -x) */
 | 
						|
    Compcond cond;		/* for -x (condition for this compctl)     */
 | 
						|
    Compctl xor;		/* for + (next of the xor'ed compctls)     */
 | 
						|
    Cmatcher matcher;		/* matcher control (-M) */
 | 
						|
    char *mstr;			/* matcher string */
 | 
						|
};
 | 
						|
 | 
						|
/* objects to complete (mask) */
 | 
						|
#define CC_FILES	(1<<0)
 | 
						|
#define CC_COMMPATH	(1<<1)
 | 
						|
#define CC_REMOVE	(1<<2)
 | 
						|
#define CC_OPTIONS	(1<<3)
 | 
						|
#define CC_VARS		(1<<4)
 | 
						|
#define CC_BINDINGS	(1<<5)
 | 
						|
#define CC_ARRAYS	(1<<6)
 | 
						|
#define CC_INTVARS	(1<<7)
 | 
						|
#define CC_SHFUNCS	(1<<8)
 | 
						|
#define CC_PARAMS	(1<<9)
 | 
						|
#define CC_ENVVARS	(1<<10)
 | 
						|
#define CC_JOBS		(1<<11)
 | 
						|
#define CC_RUNNING	(1<<12)
 | 
						|
#define CC_STOPPED	(1<<13)
 | 
						|
#define CC_BUILTINS	(1<<14)
 | 
						|
#define CC_ALREG	(1<<15)
 | 
						|
#define CC_ALGLOB	(1<<16)
 | 
						|
#define CC_USERS	(1<<17)
 | 
						|
#define CC_DISCMDS	(1<<18)
 | 
						|
#define CC_EXCMDS	(1<<19)
 | 
						|
#define CC_SCALARS	(1<<20)
 | 
						|
#define CC_READONLYS	(1<<21)
 | 
						|
#define CC_SPECIALS	(1<<22)
 | 
						|
#define CC_DELETE	(1<<23)
 | 
						|
#define CC_NAMED	(1<<24)
 | 
						|
#define CC_QUOTEFLAG	(1<<25)
 | 
						|
#define CC_EXTCMDS	(1<<26)
 | 
						|
#define CC_RESWDS	(1<<27)
 | 
						|
#define CC_DIRS		(1<<28)
 | 
						|
 | 
						|
#define CC_EXPANDEXPL	(1<<30)
 | 
						|
#define CC_RESERVED	(1<<31)
 | 
						|
 | 
						|
/* objects to complete (mask2) */
 | 
						|
#define CC_NOSORT	(1<<0)
 | 
						|
#define CC_XORCONT	(1<<1)
 | 
						|
#define CC_CCCONT	(1<<2)
 | 
						|
#define CC_PATCONT	(1<<3)
 | 
						|
#define CC_DEFCONT	(1<<4)
 | 
						|
#define CC_UNIQCON      (1<<5)
 | 
						|
#define CC_UNIQALL      (1<<6)
 |