mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-20 05:53:52 +01:00
138 lines
4.3 KiB
C
138 lines
4.3 KiB
C
|
/*
|
||
|
* 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 */
|