|
|
1.1 ! root 1: /* vi.h */ ! 2: ! 3: /* Author: ! 4: * Steve Kirkendall ! 5: * 16820 SW Tallac Way ! 6: * Beaverton, OR 97006 ! 7: * [email protected], or ...uunet!tektronix!psueea!jove!kirkenda ! 8: */ ! 9: ! 10: ! 11: /* This is the header file for my version of vi. */ ! 12: ! 13: #define VERSION "ELVIS 1.4, by Steve Kirkendall" ! 14: #define COPYING "This version of ELVIS is freely redistributable." ! 15: ! 16: #include <errno.h> ! 17: extern int errno; ! 18: #if TOS ! 19: #define ENOENT (-AEFILNF) ! 20: #endif ! 21: ! 22: #if TOS ! 23: # include <types.h> ! 24: # define O_RDONLY 0 ! 25: # define O_WRONLY 1 ! 26: # define O_RDWR 2 ! 27: #else ! 28: # if OSK ! 29: # include <modes.h> ! 30: # define O_RDONLY S_IREAD ! 31: # define O_WRONLY S_IWRITE ! 32: # define O_RDWR (S_IREAD | S_IWRITE) ! 33: # define ENOENT E_PNNF ! 34: # else ! 35: # include <sys/types.h> ! 36: # if COHERENT ! 37: # include <sys/fcntl.h> ! 38: # else ! 39: # include <fcntl.h> ! 40: # endif ! 41: # endif ! 42: #endif ! 43: ! 44: #ifndef O_BINARY ! 45: # define O_BINARY 0 ! 46: #endif ! 47: ! 48: #include "curses.h" ! 49: ! 50: /*------------------------------------------------------------------------*/ ! 51: /* Miscellaneous constants. */ ! 52: ! 53: #define INFINITY 2000000001L /* a very large integer */ ! 54: #define LONGKEY 10 /* longest possible raw :map key */ ! 55: #ifndef MAXRCLEN ! 56: # define MAXRCLEN 1000 /* longest possible .exrc file */ ! 57: #endif ! 58: ! 59: /*------------------------------------------------------------------------*/ ! 60: /* These describe how temporary files are divided into blocks */ ! 61: ! 62: #define BLKSIZE 1024 /* size of blocks */ ! 63: #define MAXBLKS (BLKSIZE / sizeof(unsigned short)) ! 64: typedef union ! 65: { ! 66: char c[BLKSIZE]; /* for text blocks */ ! 67: unsigned short n[MAXBLKS]; /* for the header block */ ! 68: } ! 69: BLK; ! 70: ! 71: /*------------------------------------------------------------------------*/ ! 72: /* These are used manipulate BLK buffers. */ ! 73: ! 74: extern BLK hdr; /* buffer for the header block */ ! 75: extern BLK *blkget(); /* given index into hdr.c[], reads block */ ! 76: extern BLK *blkadd(); /* inserts a new block into hdr.c[] */ ! 77: ! 78: /*------------------------------------------------------------------------*/ ! 79: /* These are used to keep track of various flags */ ! 80: extern struct _viflags ! 81: { ! 82: short file; /* file flags */ ! 83: } ! 84: viflags; ! 85: ! 86: /* file flags */ ! 87: #define NEWFILE 0x0001 /* the file was just created */ ! 88: #define READONLY 0x0002 /* the file is read-only */ ! 89: #define HADNUL 0x0004 /* the file contained NUL characters */ ! 90: #define MODIFIED 0x0008 /* the file has been modified */ ! 91: #define NOFILE 0x0010 /* no name is known for the current text */ ! 92: #define ADDEDNL 0x0020 /* newlines were added to the file */ ! 93: ! 94: /* macros used to set/clear/test flags */ ! 95: #define setflag(x,y) viflags.x |= y ! 96: #define clrflag(x,y) viflags.x &= ~y ! 97: #define tstflag(x,y) (viflags.x & y) ! 98: #define initflags() viflags.file = 0; ! 99: ! 100: /* The options */ ! 101: extern char o_autoindent[1]; ! 102: extern char o_autoprint[1]; ! 103: extern char o_autowrite[1]; ! 104: #ifndef NO_ERRLIST ! 105: extern char o_cc[30]; ! 106: #endif ! 107: #ifndef NO_CHARATTR ! 108: extern char o_charattr[1]; ! 109: #endif ! 110: extern char o_columns[3]; ! 111: extern char o_digraph[1]; ! 112: extern char o_directory[30]; ! 113: extern char o_edcompatible[1]; ! 114: extern char o_errorbells[1]; ! 115: extern char o_exrefresh[1]; ! 116: #ifndef NO_DIGRAPH ! 117: extern char o_flipcase[80]; ! 118: #endif ! 119: #ifndef NO_SENTENCE ! 120: extern char o_hideformat[1]; ! 121: #endif ! 122: extern char o_ignorecase[1]; ! 123: #ifndef NO_EXTENSIONS ! 124: extern char o_inputmode[1]; ! 125: #endif ! 126: extern char o_keytime[3]; ! 127: extern char o_keywordprg[80]; ! 128: extern char o_lines[3]; ! 129: extern char o_list[1]; ! 130: #ifndef NO_MAGIC ! 131: extern char o_magic[1]; ! 132: #endif ! 133: #ifndef NO_ERRLIST ! 134: extern char o_make[30]; ! 135: #endif ! 136: #ifndef NO_MODELINE ! 137: extern char o_modeline[1]; ! 138: #endif ! 139: #ifndef NO_SENTENCE ! 140: extern char o_paragraphs[30]; ! 141: #endif ! 142: #if MSDOS ! 143: extern char o_pcbios[1]; ! 144: #endif ! 145: extern char o_readonly[1]; ! 146: extern char o_report[3]; ! 147: extern char o_scroll[3]; ! 148: #ifndef NO_SENTENCE ! 149: extern char o_sections[30]; ! 150: #endif ! 151: extern char o_shell[60]; ! 152: #ifndef NO_SHOWMATCH ! 153: extern char o_showmatch[1]; ! 154: #endif ! 155: #ifndef NO_SHOWMODE ! 156: extern char o_smd[1]; ! 157: #endif ! 158: extern char o_shiftwidth[3]; ! 159: extern char o_sidescroll[3]; ! 160: extern char o_sync[1]; ! 161: extern char o_tabstop[3]; ! 162: extern char o_term[30]; ! 163: extern char o_vbell[1]; ! 164: extern char o_warn[1]; ! 165: extern char o_wrapmargin[3]; ! 166: extern char o_wrapscan[1]; ! 167: ! 168: /*------------------------------------------------------------------------*/ ! 169: /* These help support the single-line multi-change "undo" -- shift-U */ ! 170: ! 171: extern char U_text[BLKSIZE]; ! 172: extern long U_line; ! 173: ! 174: /*------------------------------------------------------------------------*/ ! 175: /* These are used to refer to places in the text */ ! 176: ! 177: typedef long MARK; ! 178: #define markline(x) (long)((x) / BLKSIZE) ! 179: #define markidx(x) (int)((x) & (BLKSIZE - 1)) ! 180: #define MARK_UNSET ((MARK)0) ! 181: #define MARK_FIRST ((MARK)BLKSIZE) ! 182: #define MARK_LAST ((MARK)(nlines * BLKSIZE)) ! 183: #define MARK_AT_LINE(x) ((MARK)((x) * BLKSIZE)) ! 184: ! 185: #define NMARKS 29 ! 186: extern MARK mark[NMARKS]; /* marks a-z, plus mark ' and two temps */ ! 187: extern MARK cursor; /* mark where line is */ ! 188: ! 189: /*------------------------------------------------------------------------*/ ! 190: /* These are used to keep track of the current & previous files. */ ! 191: ! 192: extern long origtime; /* modification date&time of the current file */ ! 193: extern char origname[256]; /* name of the current file */ ! 194: extern char prevorig[256]; /* name of the preceding file */ ! 195: extern long prevline; /* line number from preceding file */ ! 196: ! 197: /*------------------------------------------------------------------------*/ ! 198: /* misc housekeeping variables & functions */ ! 199: ! 200: extern int tmpfd; /* fd used to access the tmp file */ ! 201: extern long lnum[MAXBLKS]; /* last line# of each block */ ! 202: extern long nlines; /* number of lines in the file */ ! 203: extern char args[BLKSIZE]; /* file names given on the command line */ ! 204: extern int argno; /* the current element of args[] */ ! 205: extern int nargs; /* number of filenames in args */ ! 206: extern long changes; /* counts changes, to prohibit short-cuts */ ! 207: extern int significant; /* boolean: was a *REAL* change made? */ ! 208: extern int mustredraw; /* boolean: force total redraw of screen? */ ! 209: extern BLK tmpblk; /* a block used to accumulate changes */ ! 210: extern long topline; /* file line number of top line */ ! 211: extern int leftcol; /* column number of left col */ ! 212: #define botline (topline + LINES - 2) ! 213: #define rightcol (leftcol + COLS - 1) ! 214: extern int physcol; /* physical column number that cursor is on */ ! 215: extern int physrow; /* physical row number that cursor is on */ ! 216: extern int exwrote; /* used to detect verbose ex commands */ ! 217: extern int doingdot; /* boolean: are we doing the "." command? */ ! 218: extern int doingglobal; /* boolean: are doing a ":g" command? */ ! 219: extern long rptlines; /* number of lines affected by a command */ ! 220: extern char *rptlabel; /* description of how lines were affected */ ! 221: extern char *fetchline(); /* read a given line from tmp file */ ! 222: extern char *parseptrn(); /* isolate a regexp in a line */ ! 223: extern MARK paste(); /* paste from cut buffer to a given point */ ! 224: extern char *wildcard(); /* expand wildcards in filenames */ ! 225: extern MARK input(); /* inserts characters from keyboard */ ! 226: extern char *linespec(); /* finds the end of a /regexp/ string */ ! 227: #define ctrl(ch) ((ch)&037) ! 228: #ifndef NO_RECYCLE ! 229: extern long allocate(); /* allocate a free block of the tmp file */ ! 230: #endif ! 231: extern int trapint(); /* trap handler for SIGINT */ ! 232: extern void blkdirty(); /* marks a block as being "dirty" */ ! 233: extern void blkflush(); /* writes a single dirty block to the disk */ ! 234: extern void blksync(); /* forces all "dirty" blocks to disk */ ! 235: extern void blkinit(); /* resets the block cache to "empty" state */ ! 236: extern void beep(); /* rings the terminal's bell */ ! 237: extern void exrefresh(); /* writes text to the screen */ ! 238: extern void msg(); /* writes a printf-style message to the screen */ ! 239: extern void reset_msg(); /* resets the "manymsgs" flag */ ! 240: extern void endmsgs(); /* if "manymsgs" is set, then scroll up 1 line */ ! 241: extern void garbage(); /* reclaims any garbage blocks */ ! 242: extern void redraw(); /* updates the screen after a change */ ! 243: extern void resume_curses();/* puts the terminal in "cbreak" mode */ ! 244: extern void beforedo(); /* saves current revision before a new change */ ! 245: extern void afterdo(); /* marks end of a beforedo() change */ ! 246: extern void abortdo(); /* like "afterdo()" followed by "undo()" */ ! 247: extern int undo(); /* restores file to previous undo() */ ! 248: extern void dumpkey(); /* lists key mappings to the screen */ ! 249: extern void mapkey(); /* defines a new key mapping */ ! 250: extern void savekeys(); /* lists key mappings to a file */ ! 251: extern void redrawrange(); /* records clues from modify.c */ ! 252: extern void cut(); /* saves text in a cut buffer */ ! 253: extern void delete(); /* deletes text */ ! 254: extern void add(); /* adds text */ ! 255: extern void change(); /* deletes text, and then adds other text */ ! 256: extern void cutswitch(); /* updates cut buffers when we switch files */ ! 257: extern void do_abbr(); /* defines or lists abbreviations */ ! 258: extern void do_digraph(); /* defines or lists digraphs */ ! 259: extern void exstring(); /* execute a string as EX commands */ ! 260: extern void dumpopts(); ! 261: extern void setopts(); ! 262: extern void saveopts(); ! 263: #ifndef NO_DIGRAPH ! 264: extern void savedigs(); ! 265: #endif ! 266: #ifndef NO_ABBR ! 267: extern void saveabbr(); ! 268: #endif ! 269: extern void cutname(); ! 270: extern void cutname(); ! 271: extern void initopts(); ! 272: extern void cutend(); ! 273: ! 274: /*------------------------------------------------------------------------*/ ! 275: /* macros that are used as control structures */ ! 276: ! 277: #define BeforeAfter(before, after) for((before),bavar=1;bavar;(after),bavar=0) ! 278: #define ChangeText BeforeAfter(beforedo(FALSE),afterdo()) ! 279: ! 280: extern int bavar; /* used only in BeforeAfter macros */ ! 281: ! 282: /*------------------------------------------------------------------------*/ ! 283: /* These are the movement commands. Each accepts a mark for the starting */ ! 284: /* location & number and returns a mark for the destination. */ ! 285: ! 286: extern MARK m_updnto(); /* k j G */ ! 287: extern MARK m_right(); /* h */ ! 288: extern MARK m_left(); /* l */ ! 289: extern MARK m_tocol(); /* | */ ! 290: extern MARK m_front(); /* ^ */ ! 291: extern MARK m_rear(); /* $ */ ! 292: extern MARK m_fword(); /* w */ ! 293: extern MARK m_bword(); /* b */ ! 294: extern MARK m_eword(); /* e */ ! 295: extern MARK m_fWord(); /* W */ ! 296: extern MARK m_bWord(); /* B */ ! 297: extern MARK m_eWord(); /* E */ ! 298: extern MARK m_fparagraph(); /* } */ ! 299: extern MARK m_bparagraph(); /* { */ ! 300: extern MARK m_fsection(); /* ]] */ ! 301: extern MARK m_bsection(); /* [[ */ ! 302: extern MARK m_match(); /* % */ ! 303: #ifndef NO_SENTENCE ! 304: extern MARK m_fsentence(); /* ) */ ! 305: extern MARK m_bsentence(); /* ( */ ! 306: #endif ! 307: extern MARK m_tomark(); /* 'm */ ! 308: extern MARK m_nsrch(); /* n */ ! 309: extern MARK m_Nsrch(); /* N */ ! 310: extern MARK m_fsrch(); /* /regexp */ ! 311: extern MARK m_bsrch(); /* ?regexp */ ! 312: #ifndef NO_CHARSEARCH ! 313: extern MARK m__ch(); /* ; , */ ! 314: extern MARK m_fch(); /* f */ ! 315: extern MARK m_tch(); /* t */ ! 316: extern MARK m_Fch(); /* F */ ! 317: extern MARK m_Tch(); /* T */ ! 318: #endif ! 319: extern MARK m_row(); /* H L M */ ! 320: extern MARK m_z(); /* z */ ! 321: extern MARK m_scroll(); /* ^B ^F ^E ^Y ^U ^D */ ! 322: ! 323: /* Some stuff that is used by movement functions... */ ! 324: ! 325: extern MARK adjmove(); /* a helper fn, used by move fns */ ! 326: ! 327: /* This macro is used to set the default value of cnt */ ! 328: #define DEFAULT(val) if (cnt < 1) cnt = (val) ! 329: ! 330: /* These are used to minimize calls to fetchline() */ ! 331: extern int plen; /* length of the line */ ! 332: extern long pline; /* line number that len refers to */ ! 333: extern long pchgs; /* "changes" level that len refers to */ ! 334: extern char *ptext; /* text of previous line, if valid */ ! 335: extern void pfetch(); ! 336: extern char digraph(); ! 337: ! 338: /* This is used to build a MARK that corresponds to a specific point in the ! 339: * line that was most recently pfetch'ed. ! 340: */ ! 341: #define buildmark(text) (MARK)(BLKSIZE * pline + (int)((text) - ptext)) ! 342: ! 343: ! 344: /*------------------------------------------------------------------------*/ ! 345: /* These are used to handle EX commands. */ ! 346: ! 347: #define CMD_NULL 0 /* NOT A VALID COMMAND */ ! 348: #define CMD_ABBR 1 /* "define an abbreviation" */ ! 349: #define CMD_ARGS 2 /* "show me the args" */ ! 350: #define CMD_APPEND 3 /* "insert lines after this line" */ ! 351: #define CMD_AT 4 /* "execute a cut buffer's contents via EX" */ ! 352: #define CMD_BANG 5 /* "run a single shell command" */ ! 353: #define CMD_CC 6 /* "run `cc` and then do CMD_ERRLIST" */ ! 354: #define CMD_CD 7 /* "change directories" */ ! 355: #define CMD_CHANGE 8 /* "change some lines" */ ! 356: #define CMD_COPY 9 /* "copy the selected text to a given place" */ ! 357: #define CMD_DELETE 10 /* "delete the selected text" */ ! 358: #define CMD_DIGRAPH 11 /* "add a digraph, or display them all" */ ! 359: #define CMD_EDIT 12 /* "switch to a different file" */ ! 360: #define CMD_EQUAL 13 /* "display a line number" */ ! 361: #define CMD_ERRLIST 14 /* "locate the next error in a list" */ ! 362: #define CMD_FILE 15 /* "show the file's status" */ ! 363: #define CMD_GLOBAL 16 /* "globally search & do a command" */ ! 364: #define CMD_INSERT 17 /* "insert lines before the current line" */ ! 365: #define CMD_JOIN 18 /* "join the selected line & the one after" */ ! 366: #define CMD_LIST 19 /* "print lines, making control chars visible" */ ! 367: #define CMD_MAKE 20 /* "run `make` and then do CMD_ERRLIST" */ ! 368: #define CMD_MAP 21 /* "adjust the keyboard map" */ ! 369: #define CMD_MARK 22 /* "mark this line" */ ! 370: #define CMD_MKEXRC 23 /* "make a .exrc file" */ ! 371: #define CMD_MOVE 24 /* "move the selected text to a given place" */ ! 372: #define CMD_NEXT 25 /* "switch to next file in args" */ ! 373: #define CMD_NUMBER 26 /* "print lines from the file w/ line numbers" */ ! 374: #define CMD_PRESERVE 27 /* "act as though vi crashed" */ ! 375: #define CMD_PREVIOUS 28 /* "switch to the previous file in args" */ ! 376: #define CMD_PRINT 29 /* "print the selected text" */ ! 377: #define CMD_PUT 30 /* "insert any cut lines before this line" */ ! 378: #define CMD_QUIT 31 /* "quit without writing the file" */ ! 379: #define CMD_READ 32 /* "append the given file after this line */ ! 380: #define CMD_RECOVER 33 /* "recover file after vi crashes" - USE -r FLAG */ ! 381: #define CMD_REWIND 34 /* "rewind to first file" */ ! 382: #define CMD_SET 35 /* "set a variable's value" */ ! 383: #define CMD_SHELL 36 /* "run some lines through a command" */ ! 384: #define CMD_SHIFTL 37 /* "shift lines left" */ ! 385: #define CMD_SHIFTR 38 /* "shift lines right" */ ! 386: #define CMD_SOURCE 39 /* "interpret a file's contents as ex commands" */ ! 387: #define CMD_STOP 40 /* same as CMD_SUSPEND */ ! 388: #define CMD_SUBAGAIN 41 /* "repeat the previous substitution" */ ! 389: #define CMD_SUBSTITUTE 42 /* "substitute text in this line" */ ! 390: #define CMD_SUSPEND 43 /* "suspend the vi session" */ ! 391: #define CMD_TR 44 /* "transliterate chars in the selected lines" */ ! 392: #define CMD_TAG 45 /* "go to a particular tag" */ ! 393: #define CMD_UNABBR 46 /* "remove an abbreviation definition" */ ! 394: #define CMD_UNDO 47 /* "undo the previous command" */ ! 395: #define CMD_UNMAP 48 /* "remove a key sequence map */ ! 396: #define CMD_VERSION 49 /* "describe which version this is" */ ! 397: #define CMD_VGLOBAL 50 /* "apply a cmd to lines NOT containing an RE" */ ! 398: #define CMD_VISUAL 51 /* "go into visual mode" */ ! 399: #define CMD_WQUIT 52 /* "write this file out (any case) & quit" */ ! 400: #define CMD_WRITE 53 /* "write the selected(?) text to a given file" */ ! 401: #define CMD_XIT 54 /* "write this file out (if modified) & quit" */ ! 402: #define CMD_YANK 55 /* "copy the selected text into the cut buffer" */ ! 403: #ifdef DEBUG ! 404: # define CMD_DEBUG 56 /* access to internal data structures */ ! 405: # define CMD_VALIDATE 57 /* check for internal consistency */ ! 406: #endif ! 407: typedef int CMD; ! 408: ! 409: extern void ex(); ! 410: extern void vi(); ! 411: extern void doexcmd(); ! 412: ! 413: #ifndef NO_ABBR ! 414: extern void cmd_abbr(); ! 415: #endif ! 416: extern void cmd_append(); ! 417: extern void cmd_args(); ! 418: #ifndef NO_AT ! 419: extern void cmd_at(); ! 420: #endif ! 421: extern void cmd_cd(); ! 422: extern void cmd_delete(); ! 423: #ifndef NO_DIGRAPH ! 424: extern void cmd_digraph(); ! 425: #endif ! 426: extern void cmd_edit(); ! 427: #ifndef NO_ERRLIST ! 428: extern void cmd_errlist(); ! 429: #endif ! 430: extern void cmd_file(); ! 431: extern void cmd_global(); ! 432: extern void cmd_join(); ! 433: extern void cmd_mark(); ! 434: #ifndef NO_ERRLIST ! 435: extern void cmd_make(); ! 436: #endif ! 437: extern void cmd_map(); ! 438: #ifndef NO_MKEXRC ! 439: extern void cmd_mkexrc(); ! 440: #endif ! 441: extern void cmd_next(); ! 442: extern void cmd_print(); ! 443: extern void cmd_put(); ! 444: extern void cmd_read(); ! 445: extern void cmd_set(); ! 446: extern void cmd_shell(); ! 447: extern void cmd_shift(); ! 448: extern void cmd_source(); ! 449: extern void cmd_substitute(); ! 450: extern void cmd_tag(); ! 451: extern void cmd_undo(); ! 452: extern void cmd_version(); ! 453: extern void cmd_visual(); ! 454: extern void cmd_write(); ! 455: extern void cmd_xit(); ! 456: extern void cmd_move(); ! 457: #ifdef DEBUG ! 458: extern void cmd_debug(); ! 459: extern void cmd_validate(); ! 460: #endif ! 461: ! 462: /*----------------------------------------------------------------------*/ ! 463: /* These are used to handle VI commands */ ! 464: ! 465: extern MARK v_1ex(); /* : */ ! 466: extern MARK v_mark(); /* m */ ! 467: extern MARK v_quit(); /* Q */ ! 468: extern MARK v_redraw(); /* ^L ^R */ ! 469: extern MARK v_ulcase(); /* ~ */ ! 470: extern MARK v_undo(); /* u */ ! 471: extern MARK v_xchar(); /* x */ ! 472: extern MARK v_Xchar(); /* X */ ! 473: extern MARK v_replace(); /* r */ ! 474: extern MARK v_overtype(); /* R */ ! 475: extern MARK v_selcut(); /* " */ ! 476: extern MARK v_paste(); /* p P */ ! 477: extern MARK v_yank(); /* y Y */ ! 478: extern MARK v_delete(); /* d D */ ! 479: extern MARK v_join(); /* J */ ! 480: extern MARK v_insert(); /* a A i I o O */ ! 481: extern MARK v_change(); /* c C */ ! 482: extern MARK v_subst(); /* s */ ! 483: extern MARK v_lshift(); /* < */ ! 484: extern MARK v_rshift(); /* > */ ! 485: extern MARK v_filter(); /* ! */ ! 486: extern MARK v_status(); /* ^G */ ! 487: extern MARK v_switch(); /* ^^ */ ! 488: extern MARK v_tag(); /* ^] */ ! 489: extern MARK v_xit(); /* ZZ */ ! 490: extern MARK v_undoline(); /* U */ ! 491: extern MARK v_again(); /* & */ ! 492: #ifndef NO_EXTENSIONS ! 493: extern MARK v_keyword(); /* ^K */ ! 494: extern MARK v_increment(); /* * */ ! 495: #endif ! 496: #ifndef NO_ERRLIST ! 497: extern MARK v_errlist(); /* * */ ! 498: #endif ! 499: #ifndef NO_AT ! 500: extern MARK v_at(); /* @ */ ! 501: #endif ! 502: ! 503: /*----------------------------------------------------------------------*/ ! 504: /* These describe what mode we're in */ ! 505: ! 506: #define MODE_EX 1 /* executing ex commands */ ! 507: #define MODE_VI 2 /* executing vi commands */ ! 508: #define MODE_COLON 3 /* executing an ex command from vi mode */ ! 509: #define MODE_QUIT 4 ! 510: extern int mode; ! 511: ! 512: #define WHEN_VICMD 1 /* getkey: we're reading a VI command */ ! 513: #define WHEN_VIINP 2 /* getkey: we're in VI's INPUT mode */ ! 514: #define WHEN_VIREP 4 /* getkey: we're in VI's REPLACE mode */ ! 515: #define WHEN_EX 8 /* getkey: we're in EX mode */ ! 516: #define WHEN_MSG 16 /* getkey: we're at a "more" prompt */ ! 517: #define WHEN_INMV 256 /* in input mode, interpret the key in VICMD mode */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.