Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
68 lines (57 sloc) 2.89 KB
/* state2.h */
/* Copyright 1995 by Steve Kirkendall */
typedef enum
CURSOR_NONE, /* no visible cursor (may be handy inside gui module) */
CURSOR_INSERT, /* next character will be inserted */
CURSOR_REPLACE, /* next character will replace a existing text */
CURSOR_COMMAND, /* next character will be part of a visual command */
CURSOR_QUOTE /* next character should be quoted; will replace '^' */
struct state_s
struct state_s *pop; /* next state on stack */
struct state_s *acton; /* state that enter() acts on */
RESULT (*enter) P_((WINDOW win)); /* perform line processing */
RESULT (*perform) P_((WINDOW win)); /* execute command */
RESULT (*parse) P_((_CHAR_ key, void *info)); /* parse a keystroke */
ELVCURSOR (*shape) P_((WINDOW win)); /* decide on cursor shape */
MARK cursor; /* the cursor & buffer to use */
MARK top, bottom; /* extent being edited */
void *info; /* extra info, for parser */
ELVISSTATE flags; /* flags of current state */
char *modename; /* mode name, for "showmode" */
CHAR morekey; /* special key for [More] */
CHAR prompt; /* prompt char, or '\0' */
MAPFLAGS mapflags; /* keystroke mapping state */
long wantcol; /* stratum's desired column */
#define ELVIS_USERMAP 0x0001 /* in the middle of a user's map */
#define ELVIS_KEYMAP 0x0002 /* in the middle of a function key map */
#define ELVIS_BOTTOM 0x0010 /* open mode; use bottom row only */
#define ELVIS_REGION 0x0020 /* editing a region; clean up if cursor moves */
#define ELVIS_POP 0x0100 /* pop after completing current keystroke */
#define ELVIS_ONCE 0x0200 /* pop after completing next keystroke */
#define ELVIS_1LINE 0x0400 /* pop after completing current line */
#define ELVIS_ALERT 0x0800 /* pop to this state if alerted */
#define ELVIS_FREE 0x1000 /* free(info) when freeing state */
#define ELVIS_MORE 0x2000 /* call perform() after popping */
extern void statepush P_((WINDOW win, ELVISSTATE flags));
extern void statestratum P_((WINDOW win, CHAR *bufname, _CHAR_ prompt, RESULT (*enter)(WINDOW win)));
extern void statepop P_((WINDOW win));
extern RESULT statekey P_((_CHAR_ key));
/* This macro returns the buffer that keystrokes act on. */
#define statecmdbuf(win) (markbuffer((win)->state->cursor))
/* This macro returns the cursor that ex commands and search commands should
* act on. This is generally the stratum under the keystroke's stratum.
#define statedatacursor(win) ((win)->state->acton->cursor)
/* These macros return the top & bottom of the range affected by a command. */
#define statedatatop(win) ((win)->state->acton->top)
#define statedatabottom(win) ((win)->state->acton->bottom)
/* This macro returns the buffer that ex commands and search commands should
* act on. This is generally the stratum under the keystroke's stratum.
#define statedatabuf(win) (markbuffer(statedatacursor(win)))