diff options
Diffstat (limited to 'Src/Zle/zle.h')
-rw-r--r-- | Src/Zle/zle.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Src/Zle/zle.h b/Src/Zle/zle.h new file mode 100644 index 000000000..faf6cf878 --- /dev/null +++ b/Src/Zle/zle.h @@ -0,0 +1,137 @@ +/* + * zle.h - header file for line editor + * + * 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 trashzle +#undef zleread +#undef spaceinline +#undef gotword +#undef refresh + +typedef struct widget *Widget; +typedef struct thingy *Thingy; + +/* widgets (ZLE functions) */ + +typedef void (*ZleIntFunc) _((void)); + +struct widget { + int flags; /* flags (see below) */ + Thingy first; /* `first' thingy that names this widget */ + union { + ZleIntFunc fn; /* pointer to internally implemented widget */ + char *fnnam; /* name of the shell function for user-defined widget */ + } u; +}; + +#define WIDGET_INT (1<<0) /* widget is internally implemented */ +#define ZLE_MENUCMP (1<<1) /* 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_KILL (1<<6) +#define ZLE_KEEPSUFFIX (1<<9) /* DON'T remove added suffix */ + +/* thingies */ + +struct thingy { + HashNode next; /* next node in the hash chain */ + char *nam; /* name of the thingy */ + int flags; /* TH_* flags (see below) */ + int rc; /* reference count */ + Widget widget; /* widget named by this thingy */ + Thingy samew; /* `next' thingy (circularly) naming the same widget */ +}; + +/* DISABLED is (1<<0) */ +#define TH_IMMORTAL (1<<1) /* can't refer to a different widget */ + +/* command modifier prefixes */ + +struct modifier { + int flags; /* MOD_* flags (see below) */ + int mult; /* repeat count */ + int tmult; /* repeat count actually being edited */ + int vibuf; /* vi cut buffer */ +}; + +#define MOD_MULT (1<<0) /* a repeat count has been selected */ +#define MOD_TMULT (1<<1) /* a repeat count is being entered */ +#define MOD_VIBUF (1<<2) /* a vi cut buffer has been selected */ +#define MOD_VIAPP (1<<3) /* appending to the vi cut buffer */ +#define MOD_NEG (1<<4) /* last command was negate argument */ + +/* current modifier status */ + +#define zmult (zmod.mult) + +/* undo system */ + +struct change { + struct change *prev, *next; /* adjacent changes */ + int flags; /* see below */ + int hist; /* history line being changed */ + int off; /* offset of the text changes */ + char *del; /* characters to delete (metafied) */ + char *ins; /* characters to insert (metafied) */ +}; + +#define CH_NEXT (1<<0) /* next structure is also part of this change */ +#define CH_PREV (1<<1) /* previous structure is also part of this change */ + +/* known thingies */ + +#define Th(X) (&thingies[X]) + +/* opaque keymap type */ + +typedef struct keymap *Keymap; + +typedef void (*KeyScanFunc) _((char *, Thingy, char *, void *)); + +#define invicmdmode() (!strcmp(curkeymapname, "vicmd")) + +/* Standard type of suffix removal. */ + +#define removesuffix() iremovesuffix(256) + +/* Cut/kill buffer type. The buffer itself is purely binary data, * + * not NUL-terminated. len is a length count. flags uses the * + * CUTBUFFER_* constants defined below. */ + +struct cutbuffer { + char *buf; + size_t len; + char flags; +}; + +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 */ |