home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / unix / vim-6.2.tar.bz2 / vim-6.2.tar / vim62 / src / globals.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-05-28  |  48.1 KB  |  1,349 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. /*
  10.  * definition of global variables
  11.  */
  12.  
  13. /*
  14.  * Number of Rows and Columns in the screen.
  15.  * Must be long to be able to use them as options in option.c.
  16.  * Note: Use screen_Rows and screen_Columns to access items in ScreenLines[].
  17.  * They may have different values when the screen wasn't (re)allocated yet
  18.  * after setting Rows or Columns (e.g., when starting up).
  19.  */
  20. EXTERN long    Rows            /* nr of rows in the screen */
  21. #ifdef DO_INIT
  22. # if defined(MSDOS) || defined(WIN3264) || defined(OS2)
  23.                 = 25L
  24. # else
  25.                 = 24L
  26. # endif
  27. #endif
  28.                 ;
  29. EXTERN long    Columns INIT(= 80);    /* nr of columns in the screen */
  30.  
  31. /*
  32.  * The characters that are currently on the screen are kept in ScreenLines[].
  33.  * It is a single block of characters, the size of the screen plus one line.
  34.  * The attributes for those characters are kept in ScreenAttrs[].
  35.  *
  36.  * "LineOffset[n]" is the offset from ScreenLines[] for the start of line 'n'.
  37.  * The same value is used for ScreenLinesUC[] and ScreenAttrs[].
  38.  */
  39. EXTERN schar_T    *ScreenLines INIT(= NULL);
  40. EXTERN sattr_T    *ScreenAttrs INIT(= NULL);
  41. EXTERN unsigned    *LineOffset INIT(= NULL);
  42.  
  43. #ifdef FEAT_MBYTE
  44. /*
  45.  * When using Unicode characters (in UTF-8 encoding) the character in
  46.  * ScreenLinesUC[] contains the Unicode for the character at this position, or
  47.  * NUL when the character in ScreenLines[] is to be used (ASCII char).
  48.  * The composing characters are to be drawn on top of the original character.
  49.  * Note: These three are only allocated when enc_utf8 is set!
  50.  */
  51. EXTERN u8char_T    *ScreenLinesUC INIT(= NULL);    /* decoded UTF-8 characters */
  52. EXTERN u8char_T    *ScreenLinesC1 INIT(= NULL);    /* first composing char */
  53. EXTERN u8char_T    *ScreenLinesC2 INIT(= NULL);    /* second composing char */
  54.  
  55. /* Only used for euc-jp: Second byte of a character that starts with 0x8e.
  56.  * These are single-width. */
  57. EXTERN schar_T    *ScreenLines2 INIT(= NULL);
  58. #endif
  59.  
  60. EXTERN int    screen_Rows INIT(= 0);        /* actual size of ScreenLines[] */
  61. EXTERN int    screen_Columns INIT(= 0);   /* actual size of ScreenLines[] */
  62.  
  63. /*
  64.  * When vgetc() is called, it sets mod_mask to the set of modifiers that are
  65.  * held down based on the KSMOD_* symbols that are read first.
  66.  */
  67. EXTERN int    mod_mask INIT(= 0x0);        /* current key modifiers */
  68.  
  69. /*
  70.  * Cmdline_row is the row where the command line starts, just below the
  71.  * last window.
  72.  * When the cmdline gets longer than the available space the screen gets
  73.  * scrolled up. After a CTRL-D (show matches), after hitting ':' after
  74.  * "hit return", and for the :global command, the command line is
  75.  * temporarily moved.  The old position is restored with the next call to
  76.  * update_screen().
  77.  */
  78. EXTERN int    cmdline_row;
  79.  
  80. EXTERN int    redraw_cmdline INIT(= FALSE);    /* cmdline must be redrawn */
  81. EXTERN int    clear_cmdline INIT(= FALSE);    /* cmdline must be cleared */
  82. #if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
  83. EXTERN int    cmdline_star INIT(= FALSE);    /* cmdline is crypted */
  84. #endif
  85. EXTERN int    exec_from_reg INIT(= FALSE);    /* executing register */
  86.  
  87. EXTERN int    global_changedtick INIT(= 0);    /* incremented for each
  88.                            change, also for undo */
  89. EXTERN int    screen_cleared INIT(= FALSE);    /* screen has been cleared */
  90.  
  91. /*
  92.  * When '$' is included in 'cpoptions' option set:
  93.  * When a change command is given that deletes only part of a line, a dollar
  94.  * is put at the end of the changed text. dollar_vcol is set to the virtual
  95.  * column of this '$'.
  96.  */
  97. EXTERN colnr_T    dollar_vcol INIT(= 0);
  98.  
  99. #ifdef FEAT_INS_EXPAND
  100. /*
  101.  * used for Insert mode completion
  102.  */
  103. EXTERN int    completion_length INIT(= 0);
  104. EXTERN int    continue_status   INIT(= 0);
  105. EXTERN int    completion_interrupted INIT(= FALSE);
  106.  
  107. /* flags for continue_status */
  108. #define CONT_ADDING    1    /* "normal" or "adding" expansion */
  109. #define CONT_INTRPT    (2 + 4)    /* a ^X interrupted the current expansion */
  110.                 /* it's set only iff N_ADDS is set */
  111. #define CONT_N_ADDS    4    /* next ^X<> will add-new or expand-current */
  112. #define CONT_S_IPOS    8    /* next ^X<> will set initial_pos?
  113.                  * if so, word-wise-expansion will set SOL */
  114. #define CONT_SOL    16    /* pattern includes start of line, just for
  115.                  * word-wise expansion, not set for ^X^L */
  116. #define CONT_LOCAL    32    /* for ctrl_x_mode 0, ^X^P/^X^N do a local
  117.                  * expansion, (eg use complete=.) */
  118. #endif
  119.  
  120. /*
  121.  * Functions for putting characters in the command line,
  122.  * while keeping ScreenLines[] updated.
  123.  */
  124. #ifdef FEAT_RIGHTLEFT
  125. EXTERN int    cmdmsg_rl INIT(= FALSE);    /* cmdline is drawn right to left */
  126. #endif
  127. EXTERN int    msg_col;
  128. EXTERN int    msg_row;
  129. EXTERN int    msg_scrolled;    /* Number of screen lines that windows have
  130.                  * scrolled because of printing messages. */
  131. EXTERN int    msg_scrolled_ign INIT(= FALSE);
  132.                 /* when TRUE don't set need_wait_return in
  133.                    msg_puts_attr() when msg_scrolled is
  134.                    non-zero */
  135.  
  136. EXTERN char_u    *keep_msg INIT(= NULL);        /* msg to be shown after redraw */
  137. EXTERN int    keep_msg_attr INIT(= 0);    /* highlight attr for keep_msg */
  138. EXTERN int    need_fileinfo INIT(= FALSE);/* do fileinfo() after redraw */
  139. EXTERN int    msg_scroll INIT(= FALSE);   /* msg_start() will scroll */
  140. EXTERN int    msg_didout INIT(= FALSE);   /* msg_outstr() was used in line */
  141. EXTERN int    msg_didany INIT(= FALSE);   /* msg_outstr() was used at all */
  142. EXTERN int    msg_nowait INIT(= FALSE);   /* don't wait for this msg */
  143. EXTERN int    emsg_off INIT(= 0);        /* don't display errors for now,
  144.                            unless 'debug' is set. */
  145. EXTERN int    info_message INIT(= FALSE); /* printing informative message */
  146. #ifdef FEAT_EVAL
  147. EXTERN int    emsg_skip INIT(= 0);        /* don't display errors for
  148.                            expression that is skipped */
  149. EXTERN int    emsg_severe INIT(=FALSE);   /* use message of next of several
  150.                            emsg() calls for throw */
  151. EXTERN int    did_endif INIT(= FALSE);    /* just had ":endif" */
  152. #endif
  153. EXTERN int    did_emsg;            /* set by emsg() when the message
  154.                            is displayed or thrown */
  155. EXTERN int    called_emsg;            /* always set by emsg() */
  156. EXTERN int    emsg_on_display INIT(= FALSE);    /* there is an error message */
  157. EXTERN int    rc_did_emsg INIT(= FALSE);  /* vim_regcomp() called emsg() */
  158.  
  159. EXTERN int    no_wait_return INIT(= 0);   /* don't wait for return for now */
  160. EXTERN int    need_wait_return INIT(= 0); /* need to wait for return later */
  161. EXTERN int    did_wait_return INIT(= FALSE);    /* wait_return() was used and
  162.                            nothing written since then */
  163. #ifdef FEAT_TITLE
  164. EXTERN int    need_maketitle INIT(= TRUE); /* call maketitle() soon */
  165. #endif
  166.  
  167. EXTERN int    quit_more INIT(= FALSE);    /* 'q' hit at "--more--" msg */
  168. EXTERN int    more_back INIT(= 0);        /* 'b' or 'u' at "--more--" msg */
  169. EXTERN int    more_back_used INIT(= FALSE); /* using more_back */
  170. #if defined(UNIX) || defined(__EMX__) || defined(VMS) || defined(MACOS_X)
  171. EXTERN int    newline_on_exit INIT(= FALSE);    /* did msg in altern. screen */
  172. EXTERN int    intr_char INIT(= 0);        /* extra interrupt character */
  173. #endif
  174. #if (defined(UNIX) || defined(VMS)) && defined(FEAT_X11)
  175. EXTERN int    x_no_connect INIT(= FALSE); /* don't connect to X server */
  176. #endif
  177. EXTERN int    vgetc_busy INIT(= FALSE);   /* inside vgetc() now */
  178.  
  179. EXTERN int    didset_vim INIT(= FALSE);   /* did set $VIM ourselves */
  180. EXTERN int    didset_vimruntime INIT(= FALSE);   /* idem for $VIMRUNTIME */
  181.  
  182. /*
  183.  * Lines left before a "more" message.    Ex mode needs to be able to reset this
  184.  * after you type something.
  185.  */
  186. EXTERN int    lines_left INIT(= -1);        /* lines left for listing */
  187. EXTERN int    msg_no_more INIT(= FALSE);  /* don't use more prompt, truncate
  188.                            messages */
  189.  
  190. EXTERN char_u    *sourcing_name INIT( = NULL);/* name of error message source */
  191. EXTERN linenr_T    sourcing_lnum INIT(= 0);    /* line number of the source file */
  192.  
  193. #ifdef FEAT_EVAL
  194. EXTERN int    ex_nesting_level INIT(= 0);    /* nesting level */
  195. EXTERN int    debug_break_level INIT(= -1);    /* break below this level */
  196. EXTERN int    debug_did_msg INIT(= FALSE);    /* did "debug mode" message */
  197. EXTERN int    debug_tick INIT(= 0);        /* breakpoint change count */
  198.  
  199. /*
  200.  * The exception currently being thrown.  Used to pass an exception to
  201.  * a different cstack.  Also used for discarding an exception before it is
  202.  * caught or made pending.  Only valid when did_throw is TRUE.
  203.  */
  204. EXTERN except_T *current_exception;
  205.  
  206. /*
  207.  * did_throw: An exception is being thrown.  Reset when the exception is caught
  208.  * or as long as it is pending in a finally clause.
  209.  */
  210. EXTERN int did_throw INIT(= FALSE);
  211.  
  212. /*
  213.  * need_rethrow: set to TRUE when a throw that cannot be handled in do_cmdline()
  214.  * must be propagated to the cstack of the previously called do_cmdline().
  215.  */
  216. EXTERN int need_rethrow INIT(= FALSE);
  217.  
  218. /*
  219.  * check_cstack: set to TRUE when a ":finish" or ":return" that cannot be
  220.  * handled in do_cmdline() must be propagated to the cstack of the previously
  221.  * called do_cmdline().
  222.  */
  223. EXTERN int check_cstack INIT(= FALSE);
  224.  
  225. /*
  226.  * Number of nested try conditionals (across function calls and ":source"
  227.  * commands).
  228.  */
  229. EXTERN int trylevel INIT(= 0);
  230.  
  231. /*
  232.  * When "force_abort" is TRUE, always skip commands after an error message,
  233.  * even after the outermost ":endif" or ":endwhile" or for a function whithout
  234.  * the "abort" flag.  It is set to TRUE when "trylevel" is non-zero (and
  235.  * ":silent!" was not used) or an exception is being thrown at the time an
  236.  * error is detected.  It is set to FALSE when "trylevel" gets zero again and
  237.  * there was no error or interrupt or throw.
  238.  *
  239.  */
  240. EXTERN int force_abort INIT(= FALSE);
  241.  
  242. /*
  243.  * "msg_list" points to a variable in the stack of do_cmdline() which keeps the
  244.  * list of arguments of several emsg() calls, one of which is to be converted to
  245.  * an error exception immediately after the failing command returns.  The
  246.  * message to be used for the exception value is pointed to by the "throw_msg"
  247.  * field of the first element in the list.  It is usually the same as the "msg"
  248.  * field of that element, but can be identical to the "msg" field of a later
  249.  * list element, when the "emsg_severe" flag was set when the emsg() call was
  250.  * made.
  251.  */
  252. EXTERN struct msglist **msg_list INIT(= NULL);
  253.  
  254. /*
  255.  * suppress_errthrow: When TRUE, don't convert an error to an exception.  Used
  256.  * when displaying the interrupt message or reporting an exception that is still
  257.  * uncaught at the top level (which has already been discarded then).  Also used
  258.  * for the error message when no exception can be thrown.
  259.  */
  260. EXTERN int suppress_errthrow INIT(= FALSE);
  261.  
  262. /*
  263.  * The stack of all caught and not finished exceptions.  The exception on the
  264.  * top of the stack is the one got by evaluation of v:exception.  The complete
  265.  * stack of all caught and pending exceptions is embedded in the various
  266.  * cstacks; the pending exceptions, however, are not on the caught stack.
  267.  */
  268. EXTERN except_T *caught_stack INIT(= NULL);
  269.  
  270. #endif
  271.  
  272. #ifdef FEAT_EVAL
  273. EXTERN scid_T    current_SID INIT(= 0);        /* ID of script being sourced or
  274.                            was sourced to define the
  275.                            current function. */
  276. #endif
  277. EXTERN int    scroll_region INIT(= FALSE); /* term supports scroll region */
  278. EXTERN int    t_colors INIT(= 0);        /* int value of T_CCO */
  279.  
  280. /*
  281.  * When highlight_match is TRUE, highlight a match, starting at the cursor
  282.  * position.  Search_match_lines is the number of lines after the match (0 for
  283.  * a match within one line), search_match_endcol the column number of the
  284.  * character just after the match in the last line.
  285.  */
  286. EXTERN int    highlight_match INIT(= FALSE);    /* show search match pos */
  287. EXTERN linenr_T    search_match_lines;        /* lines of of matched string */
  288. EXTERN colnr_T    search_match_endcol;        /* col nr of match end */
  289.  
  290. EXTERN int    no_smartcase INIT(= FALSE);    /* don't use 'smartcase' once */
  291.  
  292. EXTERN int    need_check_timestamps INIT(= FALSE); /* need to check file
  293.                             timestamps asap */
  294. EXTERN int    did_check_timestamps INIT(= FALSE); /* did check timestamps
  295.                                recently */
  296. EXTERN int    no_check_timestamps INIT(= 0);    /* Don't check timestamps */
  297.  
  298. EXTERN int    highlight_attr[HLF_COUNT];  /* Highl. attr for each context. */
  299. #ifdef FEAT_STL_OPT
  300. # define USER_HIGHLIGHT
  301. #endif
  302. #ifdef USER_HIGHLIGHT
  303. EXTERN int    highlight_user[9];        /* User[1-9] attributes */
  304. # ifdef FEAT_STL_OPT
  305. EXTERN int    highlight_stlnc[9];        /* On top of user */
  306. # endif
  307. #endif
  308. #ifdef FEAT_GUI
  309. EXTERN char_u    *use_gvimrc INIT(= NULL);    /* "-U" cmdline argument */
  310. #endif
  311. EXTERN int    cterm_normal_fg_color INIT(= 0);
  312. EXTERN int    cterm_normal_fg_bold INIT(= 0);
  313. EXTERN int    cterm_normal_bg_color INIT(= 0);
  314.  
  315. #ifdef FEAT_AUTOCMD
  316. EXTERN int    autocmd_busy INIT(= FALSE);    /* Is apply_autocmds() busy? */
  317. EXTERN int    autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */
  318. EXTERN int    autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */
  319. EXTERN int    autocmd_block INIT(= 0);    /* block all autocmds */
  320. EXTERN int    modified_was_set;        /* did ":set modified" */
  321. EXTERN int    did_filetype INIT(= FALSE);    /* FileType event found */
  322. EXTERN int    keep_filetype INIT(= FALSE);    /* value for did_filetype when
  323.                            starting to execute
  324.                            autocommands */
  325.  
  326. /* When deleting the current buffer, another one must be loaded.  If we know
  327.  * which one is preferred, au_new_curbuf is set to it */
  328. EXTERN buf_T    *au_new_curbuf INIT(= NULL);
  329. #endif
  330.  
  331. #ifdef FEAT_MOUSE
  332. /*
  333.  * Mouse coordinates, set by check_termcode()
  334.  */
  335. EXTERN int    mouse_row;
  336. EXTERN int    mouse_col;
  337. EXTERN int    mouse_past_bottom INIT(= FALSE);/* mouse below last line */
  338. EXTERN int    mouse_past_eol INIT(= FALSE);    /* mouse right of line */
  339. EXTERN int    mouse_dragging INIT(= 0);    /* extending Visual area with
  340.                            mouse dragging */
  341. # if defined(FEAT_MOUSE_DEC)
  342. /*
  343.  * When the DEC mouse has been pressed but not yet released we enable
  344.  * automatic querys for the mouse position.
  345.  */
  346. EXTERN int    WantQueryMouse INIT(= 0);
  347. # endif
  348.  
  349. # ifdef FEAT_GUI
  350. /* When the window layout is about to be changed, need_mouse_correct is set,
  351.  * so that gui_mouse_correct() is called afterwards, to correct the mouse
  352.  * pointer when focus-follow-mouse is being used. */
  353. EXTERN int    need_mouse_correct INIT(= FALSE);
  354.  
  355. /* When double clicking, topline must be the same */
  356. EXTERN linenr_T gui_prev_topline INIT(= 0);
  357. #  ifdef FEAT_DIFF
  358. EXTERN int    gui_prev_topfill INIT(= 0);
  359. #  endif
  360. # endif
  361.  
  362. # ifdef FEAT_MOUSESHAPE
  363. EXTERN int    drag_status_line INIT(= FALSE);    /* dragging the status line */
  364. EXTERN int    postponed_mouseshape INIT(= FALSE); /* postponed updating the
  365.                                mouse pointer shape */
  366. #  ifdef FEAT_VERTSPLIT
  367. EXTERN int    drag_sep_line INIT(= FALSE);    /* dragging vert separator */
  368. #  endif
  369. # endif
  370.  
  371. #endif
  372.  
  373. #ifdef FEAT_DIFF
  374. /* Value set from 'diffopt'. */
  375. EXTERN int    diff_context INIT(= 6);    /* context for folds */
  376. #endif
  377.  
  378. #ifdef FEAT_MENU
  379. /* The root of the menu hierarchy. */
  380. EXTERN vimmenu_T    *root_menu INIT(= NULL);
  381. /*
  382.  * While defining the system menu, sys_menu is TRUE.  This avoids
  383.  * overruling of menus that the user already defined.
  384.  */
  385. EXTERN int    sys_menu INIT(= FALSE);
  386. #endif
  387.  
  388. /* While redrawing the screen this flag is set.  It means the screen size
  389.  * ('lines' and 'rows') must not be changed. */
  390. EXTERN int    updating_screen INIT(= FALSE);
  391.  
  392. #ifdef FEAT_GUI
  393. # ifdef FEAT_MENU
  394. /* Menu item just selected, set by check_termcode() */
  395. EXTERN vimmenu_T    *current_menu;
  396.  
  397. /* Set to TRUE after adding/removing menus to ensure they are updated */
  398. EXTERN int force_menu_update INIT(= FALSE);
  399. # endif
  400.  
  401. /* Scrollbar moved and new value, set by check_termcode() */
  402. EXTERN int    current_scrollbar;
  403. EXTERN long_u    scrollbar_value;
  404.  
  405. /* found "-rv" or "-reverse" in command line args */
  406. EXTERN int    found_reverse_arg INIT(= FALSE);
  407.  
  408. /* "-fn" or "-font" command line argument */
  409. EXTERN char    *font_argument INIT(= NULL);
  410.  
  411. # ifdef FEAT_GUI_GTK
  412. /* "-bg" or "-background" command line argument */
  413. EXTERN char    *background_argument INIT(= NULL);
  414.  
  415. /* "-fg" or "-foreground" command line argument */
  416. EXTERN char    *foreground_argument INIT(= NULL);
  417. # endif
  418.  
  419. /*
  420.  * While executing external commands or in Ex mode, should not insert GUI
  421.  * events in the input buffer: Set hold_gui_events to non-zero.
  422.  */
  423. EXTERN int    hold_gui_events INIT(= 0);
  424.  
  425. /*
  426.  * When resizing the shell is postponed, remember the new size, and call
  427.  * gui_resize_shell() later.
  428.  */
  429. EXTERN int    new_pixel_width INIT(= 0);
  430. EXTERN int    new_pixel_height INIT(= 0);
  431.  
  432. /* Window position from ":winpos", to be used when opening the GUI window. */
  433. EXTERN int    gui_win_x INIT(= -1);
  434. EXTERN int    gui_win_y INIT(= -1);
  435. #endif
  436.  
  437. #ifdef FEAT_CLIPBOARD
  438. EXTERN VimClipboard clip_star;    /* PRIMARY selection in X11 */
  439. # ifdef FEAT_X11
  440. EXTERN VimClipboard clip_plus;    /* CLIPBOARD selection in X11 */
  441. # else
  442. #  define clip_plus clip_star    /* there is only one clipboard */
  443. # endif
  444. #endif
  445.  
  446. /*
  447.  * All windows are linked in a list. firstwin points to the first entry,
  448.  * lastwin to the last entry (can be the same as firstwin) and curwin to the
  449.  * currently active window.
  450.  * Without the FEAT_WINDOWS they are all equal.
  451.  */
  452. #ifdef FEAT_WINDOWS
  453. EXTERN win_T    *firstwin;        /* first window */
  454. EXTERN win_T    *lastwin;        /* last window */
  455. EXTERN win_T    *prevwin INIT(= NULL);    /* previous window */
  456. # define W_NEXT(wp) ((wp)->w_next)
  457. # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
  458. #else
  459. # define firstwin curwin
  460. # define lastwin curwin
  461. # define W_NEXT(wp) NULL
  462. # define FOR_ALL_WINDOWS(wp) wp = curwin;
  463. #endif
  464. EXTERN win_T    *curwin;    /* currently active window */
  465.  
  466. /*
  467.  * The window layout is kept in a tree of frames.  topframe points to the top
  468.  * of the tree.
  469.  */
  470. EXTERN frame_T    *topframe;    /* top of the window frame tree */
  471.  
  472. /*
  473.  * All buffers are linked in a list. 'firstbuf' points to the first entry,
  474.  * 'lastbuf' to the last entry and 'curbuf' to the currently active buffer.
  475.  */
  476. EXTERN buf_T    *firstbuf INIT(= NULL);    /* first buffer */
  477. EXTERN buf_T    *lastbuf INIT(= NULL);    /* last buffer */
  478. EXTERN buf_T    *curbuf INIT(= NULL);    /* currently active buffer */
  479.  
  480. /*
  481.  * List of files being edited (global argument list).  curwin->w_alist points
  482.  * to this when the window is using the global argument list.
  483.  */
  484. EXTERN alist_T    global_alist;    /* global argument list */
  485. EXTERN int    arg_had_last INIT(= FALSE); /* accessed last file in
  486.                            global_alist */
  487.  
  488. EXTERN int    ru_col;        /* column for ruler */
  489. #ifdef FEAT_STL_OPT
  490. EXTERN int    ru_wid;        /* 'rulerfmt' width of ruler when non-zero */
  491. #endif
  492. EXTERN int    sc_col;        /* column for shown command */
  493.  
  494. #ifdef TEMPDIRNAMES
  495. EXTERN char_u    *vim_tempdir INIT(= NULL); /* Name of Vim's own temp dir.
  496.                           Ends in a slash. */
  497. #endif
  498.  
  499. /*
  500.  * When starting or exiting some things are done differently (e.g. screen
  501.  * updating).
  502.  */
  503. EXTERN int    starting INIT(= NO_SCREEN);
  504.                 /* first NO_SCREEN, then NO_BUFFERS and then
  505.                  * set to 0 when starting up finished */
  506. EXTERN int    exiting INIT(= FALSE);
  507.                 /* TRUE when abandoning Vim */
  508. EXTERN int    full_screen INIT(= FALSE);
  509.                 /* TRUE when doing full-screen output
  510.                  * otherwise only writing some messages */
  511.  
  512. EXTERN int    restricted INIT(= FALSE);
  513.                 /* TRUE when started as "rvim" */
  514. EXTERN int    secure INIT(= FALSE);
  515.                 /* non-zero when only "safe" commands are
  516.                  * allowed, e.g. when sourcing .exrc or .vimrc
  517.                  * in current directory */
  518.  
  519. #ifdef FEAT_EVAL
  520. # define HAVE_SANDBOX
  521. EXTERN int    sandbox INIT(= 0);
  522.                 /* non-zero when evaluating an expression in a
  523.                  * "sandbox".  Not allowed to change the
  524.                  * buffer. */
  525. #endif
  526.  
  527. EXTERN int    silent_mode INIT(= FALSE);
  528.                 /* set to TRUE when "-s" commandline argument
  529.                  * used for ex */
  530.  
  531. #ifdef FEAT_VISUAL
  532. EXTERN pos_T    VIsual;        /* start position of active Visual selection */
  533. EXTERN int    VIsual_active INIT(= FALSE);
  534.                 /* whether Visual mode is active */
  535. EXTERN int    VIsual_select INIT(= FALSE);
  536.                 /* whether Select mode is active */
  537. EXTERN int    VIsual_reselect;
  538.                 /* whether to restart the selection after a
  539.                  * Select mode mapping or menu */
  540.  
  541. EXTERN int    VIsual_mode INIT(= 'v');
  542.                 /* type of Visual mode */
  543.  
  544. EXTERN int    redo_VIsual_busy INIT(= FALSE);
  545.                 /* TRUE when redoing Visual */
  546. #endif
  547.  
  548. #ifdef FEAT_MOUSE
  549. /*
  550.  * When pasting text with the middle mouse button in visual mode with
  551.  * restart_edit set, remember where it started so we can set Insstart.
  552.  */
  553. EXTERN pos_T    where_paste_started;
  554. #endif
  555.  
  556. /*
  557.  * This flag is used to make auto-indent work right on lines where only a
  558.  * <RETURN> or <ESC> is typed. It is set when an auto-indent is done, and
  559.  * reset when any other editing is done on the line. If an <ESC> or <RETURN>
  560.  * is received, and did_ai is TRUE, the line is truncated.
  561.  */
  562. EXTERN int     did_ai INIT(= FALSE);
  563.  
  564. /*
  565.  * Column of first char after autoindent.  0 when no autoindent done.  Used
  566.  * when 'backspace' is 0, to avoid backspacing over autoindent.
  567.  */
  568. EXTERN colnr_T    ai_col INIT(= 0);
  569.  
  570. #ifdef FEAT_COMMENTS
  571. /*
  572.  * This is a character which will end a start-middle-end comment when typed as
  573.  * the first character on a new line.  It is taken from the last character of
  574.  * the "end" comment leader when the COM_AUTO_END flag is given for that
  575.  * comment end in 'comments'.  It is only valid when did_ai is TRUE.
  576.  */
  577. EXTERN int     end_comment_pending INIT(= NUL);
  578. #endif
  579.  
  580. #ifdef FEAT_SCROLLBIND
  581. /*
  582.  * This flag is set after a ":syncbind" to let the check_scrollbind() function
  583.  * know that it should not attempt to perform scrollbinding due to the scroll
  584.  * that was a result of the ":syncbind." (Otherwise, check_scrollbind() will
  585.  * undo some of the work done by ":syncbind.")  -ralston
  586.  */
  587. EXTERN int     did_syncbind INIT(= FALSE);
  588. #endif
  589.  
  590. #ifdef FEAT_SMARTINDENT
  591. /*
  592.  * This flag is set when a smart indent has been performed. When the next typed
  593.  * character is a '{' the inserted tab will be deleted again.
  594.  */
  595. EXTERN int    did_si INIT(= FALSE);
  596.  
  597. /*
  598.  * This flag is set after an auto indent. If the next typed character is a '}'
  599.  * one indent will be removed.
  600.  */
  601. EXTERN int    can_si INIT(= FALSE);
  602.  
  603. /*
  604.  * This flag is set after an "O" command. If the next typed character is a '{'
  605.  * one indent will be removed.
  606.  */
  607. EXTERN int    can_si_back INIT(= FALSE);
  608. #endif
  609.  
  610. /*
  611.  * Stuff for insert mode.
  612.  */
  613. EXTERN pos_T    Insstart;        /* This is where the latest
  614.                      * insert/append mode started. */
  615. #ifdef FEAT_VREPLACE
  616. /*
  617.  * Stuff for VREPLACE mode.
  618.  */
  619. EXTERN int    orig_line_count INIT(= 0);  /* Line count when "gR" started */
  620. EXTERN int    vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */
  621. #endif
  622.  
  623. #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
  624. /* argument to SETJMP() for handling X IO errors */
  625. EXTERN JMP_BUF x_jump_env;
  626. #endif
  627.  
  628. #if defined(HAVE_SETJMP_H)
  629. /*
  630.  * Stuff for setjmp() and longjmp().
  631.  * Used to protect areas where we could crash.
  632.  */
  633. EXTERN JMP_BUF lc_jump_env;    /* argument to SETJMP() */
  634. #ifdef SIGHASARG
  635. EXTERN int lc_signal;        /* catched signal number, 0 when no was signal
  636.                    catched; used for mch_libcall() */
  637. #endif
  638. EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
  639. #endif
  640.  
  641. #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
  642. /*
  643.  * These flags are set based upon 'fileencoding'.
  644.  * Note that "enc_utf8" is also set for "unicode", because the characters are
  645.  * internally stored as UTF-8 (to avoid trouble with NUL bytes).
  646.  */
  647. # define DBCS_JPN    932    /* japan */
  648. # define DBCS_JPNU    9932    /* euc-jp */
  649. # define DBCS_KOR    949    /* korea */
  650. # define DBCS_KORU    9949    /* euc-kr */
  651. # define DBCS_CHS    936    /* chinese */
  652. # define DBCS_CHSU    9936    /* euc-cn */
  653. # define DBCS_CHT    950    /* taiwan */
  654. # define DBCS_CHTU    9950    /* euc-tw */
  655. # define DBCS_2BYTE    1    /* 2byte- */
  656. # define DBCS_DEBUG    -1
  657. #endif
  658.  
  659. #ifdef FEAT_MBYTE
  660. EXTERN int    enc_dbcs INIT(= 0);        /* One of DBCS_xxx values if
  661.                            DBCS encoding */
  662. EXTERN int    enc_unicode INIT(= 0);    /* 2: UCS-2 or UTF-16, 4: UCS-4 */
  663. EXTERN int    enc_utf8 INIT(= FALSE);        /* UTF-8 encoded Unicode */
  664. # ifdef WIN3264
  665. EXTERN int    enc_codepage INIT(= 0);        /* codepage nr of 'encoding' */
  666. # endif
  667. EXTERN int    has_mbyte INIT(= 0);        /* any multi-byte encoding */
  668.  
  669. /*
  670.  * To speed up BYTELEN() we fill a table with the byte lengths whenever
  671.  * enc_utf8 or enc_dbcs changes.
  672.  */
  673. EXTERN char    mb_bytelen_tab[256];
  674.  
  675. /* Variables that tell what conversion is used for keyboard input and display
  676.  * output. */
  677. EXTERN vimconv_T input_conv;            /* type of input conversion */
  678. EXTERN vimconv_T output_conv;            /* type of output conversion */
  679.  
  680. /*
  681.  * Function pointers, used to quickly get to the right function.  Each has
  682.  * three possible values: latin_ (8-bit), utfc_ or utf_ (utf-8) and dbcs_
  683.  * (DBCS).
  684.  * The value is set in mb_init();
  685.  */
  686. EXTERN int (*mb_ptr2len_check) __ARGS((char_u *p)) INIT(= latin_ptr2len_check);
  687. EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len);
  688. EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes);
  689. EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells);
  690. EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells);
  691. EXTERN int (*mb_off2cells) __ARGS((unsigned off)) INIT(= latin_off2cells);
  692. EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char);
  693. EXTERN int (*mb_head_off) __ARGS((char_u *base, char_u *p)) INIT(= latin_head_off);
  694.  
  695. # if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
  696. /* Pointers to functions and variables to be loaded at runtime */
  697. EXTERN size_t (*iconv) (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
  698. EXTERN iconv_t (*iconv_open) (const char *tocode, const char *fromcode);
  699. EXTERN int (*iconv_close) (iconv_t cd);
  700. EXTERN int (*iconvctl) (iconv_t cd, int request, void *argument);
  701. EXTERN int* (*iconv_errno) (void);
  702. # endif
  703.  
  704. #endif /* FEAT_MBYTE */
  705.  
  706. #ifdef FEAT_XIM
  707. # ifdef FEAT_GUI_GTK
  708. #  ifdef HAVE_GTK2
  709. EXTERN GtkIMContext    *xic INIT(= NULL);
  710. #  else
  711. EXTERN GdkICAttr    *xic_attr INIT(= NULL);
  712. EXTERN GdkIC        *xic INIT(= NULL);
  713. EXTERN char        *draw_feedback INIT(= NULL);
  714. #  endif
  715. EXTERN colnr_T        preedit_start_col INIT(= MAXCOL);
  716. # else
  717. EXTERN XIC        xic INIT(= NULL);
  718. # endif
  719. EXTERN guicolor_T    xim_fg_color INIT(= INVALCOLOR);
  720. EXTERN guicolor_T    xim_bg_color INIT(= INVALCOLOR);
  721. #endif
  722.  
  723. #ifdef FEAT_HANGULIN
  724. EXTERN int        composing_hangul INIT(= 0);
  725. EXTERN char_u        composing_hangul_buffer[5];
  726. #endif
  727.  
  728. /*
  729.  * "State" is the main state of Vim.
  730.  * There are other variables that modify the state:
  731.  * "Visual_mode"    When State is NORMAL or INSERT.
  732.  * "finish_op"        When State is NORMAL, after typing the operator and before
  733.  *            typing the motion command.
  734.  */
  735. EXTERN int    State INIT(= NORMAL);    /* This is the current state of the
  736.                      * command interpreter. */
  737.  
  738. EXTERN int    finish_op INIT(= FALSE);/* TRUE while an operator is pending */
  739.  
  740. /*
  741.  * ex mode (Q) state
  742.  */
  743. EXTERN int exmode_active INIT(= 0);    /* zero, EXMODE_NORMAL or EXMODE_VIM */
  744. EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
  745.  
  746. EXTERN int    Recording INIT(= FALSE);/* TRUE when recording into a reg. */
  747. EXTERN int    Exec_reg INIT(= FALSE);    /* TRUE when executing a register */
  748.  
  749. EXTERN int    no_mapping INIT(= FALSE);   /* currently no mapping allowed */
  750. EXTERN int    allow_keys INIT(= FALSE);   /* allow key codes when no_mapping
  751.                          * is set */
  752. EXTERN int    no_u_sync INIT(= 0);    /* Don't call u_sync() */
  753.  
  754. EXTERN int    restart_edit INIT(= 0);    /* call edit when next cmd finished */
  755. EXTERN int    arrow_used;        /* Normally FALSE, set to TRUE after
  756.                      * hitting cursor key in insert mode.
  757.                      * Used by vgetorpeek() to decide when
  758.                      * to call u_sync() */
  759. #ifdef FEAT_INS_EXPAND
  760. EXTERN char_u    *edit_submode INIT(= NULL); /* msg for CTRL-X submode */
  761. EXTERN char_u    *edit_submode_pre INIT(= NULL); /* prepended to edit_submode */
  762. EXTERN char_u    *edit_submode_extra INIT(= NULL);/* appended to edit_submode */
  763. EXTERN enum hlf_value    edit_submode_highl; /* highl. method for extra info */
  764. EXTERN int    ctrl_x_mode INIT(= 0);    /* Which Ctrl-X mode are we in? */
  765. #endif
  766.  
  767. EXTERN int    no_abbr INIT(= TRUE);    /* TRUE when no abbreviations loaded */
  768. #ifdef MSDOS
  769. EXTERN int    beep_count INIT(= 0);    /* nr of beeps since last char typed */
  770. #endif
  771.  
  772. #ifdef USE_EXE_NAME
  773. EXTERN char_u    *exe_name;        /* the name of the executable */
  774. #endif
  775.  
  776. #ifdef USE_ON_FLY_SCROLL
  777. EXTERN int    dont_scroll INIT(= FALSE);/* don't use scrollbars when TRUE */
  778. #endif
  779. EXTERN int    mapped_ctrl_c INIT(= FALSE); /* CTRL-C is mapped */
  780. EXTERN int    ctrl_c_interrupts INIT(= TRUE);    /* CTRL-C sets got_int */
  781.  
  782. EXTERN cmdmod_T    cmdmod;            /* Ex command modifiers */
  783.  
  784. EXTERN int    msg_silent INIT(= 0);    /* don't print messages */
  785. EXTERN int    emsg_silent INIT(= 0);    /* don't print error messages */
  786. EXTERN int    cmd_silent INIT(= FALSE); /* don't echo the command line */
  787.  
  788. #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
  789. EXTERN int    swap_exists_action INIT(= 0);    /* use dialog when swap file
  790.                            already exists */
  791. #endif
  792.  
  793. EXTERN char_u    *IObuff;        /* sprintf's are done in this buffer,
  794.                        size is IOSIZE */
  795. EXTERN char_u    *NameBuff;        /* file names are expanded in this
  796.                      * buffer, size is MAXPATHL */
  797. EXTERN char_u    msg_buf[MSG_BUF_LEN];    /* small buffer for messages */
  798.  
  799. /* When non-zero, postpone redrawing. */
  800. EXTERN int    RedrawingDisabled INIT(= 0);
  801.  
  802. EXTERN int    readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
  803. EXTERN int    recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
  804.  
  805. EXTERN struct buffheader stuffbuff    /* stuff buffer */
  806. #ifdef DO_INIT
  807.             = {{NULL, {NUL}}, NULL, 0, 0}
  808. #endif
  809.             ;
  810. EXTERN typebuf_T typebuf        /* typeahead buffer */
  811. #ifdef DO_INIT
  812.             = {NULL, NULL}
  813. #endif
  814.             ;
  815. #ifdef FEAT_EX_EXTRA
  816. EXTERN int    ex_normal_busy INIT(= 0); /* recursivenes of ex_normal() */
  817. EXTERN int    stop_insert_mode;    /* for ":stopinsert" */
  818. #endif
  819.  
  820. EXTERN int    KeyTyped;        /* TRUE if user typed current char */
  821. EXTERN int    KeyStuffed;        /* TRUE if current char from stuffbuf */
  822. #ifdef USE_IM_CONTROL
  823. EXTERN int    vgetc_im_active;    /* Input Method was active for last
  824.                        character obtained from vgetc() */
  825. #endif
  826. EXTERN int    maptick INIT(= 0);    /* tick for each non-mapped char */
  827.  
  828. EXTERN char_u    chartab[256];        /* table used in charset.c; See
  829.                        init_chartab() for explanation */
  830.  
  831. EXTERN int    must_redraw INIT(= 0);        /* type of redraw necessary */
  832. EXTERN int    skip_redraw INIT(= FALSE);  /* skip redraw once */
  833. EXTERN int    do_redraw INIT(= FALSE);    /* extra redraw once */
  834.  
  835. EXTERN int    need_highlight_changed INIT(= TRUE);
  836. EXTERN char_u    *use_viminfo INIT(= NULL);  /* name of viminfo file to use */
  837.  
  838. #define NSCRIPT 15
  839. EXTERN FILE    *scriptin[NSCRIPT];        /* streams to read script from */
  840. EXTERN int    curscript INIT(= 0);        /* index in scriptin[] */
  841. EXTERN FILE    *scriptout  INIT(= NULL);   /* stream to write script to */
  842. EXTERN int    read_cmd_fd INIT(= 0);        /* fd to read commands from */
  843.  
  844. EXTERN int    got_int INIT(= FALSE);        /* set to TRUE when interrupt
  845.                         signal occurred */
  846. #ifdef USE_TERM_CONSOLE
  847. EXTERN int    term_console INIT(= FALSE); /* set to TRUE when console used */
  848. #endif
  849. EXTERN int    termcap_active INIT(= FALSE);    /* set by starttermcap() */
  850. EXTERN int    cur_tmode INIT(= TMODE_COOK);    /* input terminal mode */
  851. EXTERN int    bangredo INIT(= FALSE);        /* set to TRUE whith ! command */
  852. EXTERN int    searchcmdlen;            /* length of previous search cmd */
  853. EXTERN int    reg_syn INIT(= 0);        /* vim_regexec() used for syntax */
  854. #ifdef FEAT_SYN_HL
  855. EXTERN int    reg_do_extmatch INIT(= 0);  /* Used when compiling regexp:
  856.                          * REX_SET to allow \z\(...\),
  857.                          * REX_USE to allow \z\1 et al. */
  858. EXTERN reg_extmatch_T *re_extmatch_in INIT(= NULL); /* Used by vim_regexec():
  859.                          * strings for \z\1...\z\9 */
  860. EXTERN reg_extmatch_T *re_extmatch_out INIT(= NULL); /* Set by vim_regexec()
  861.                          * to store \z\(...\) matches */
  862. #endif
  863.  
  864. EXTERN int    did_outofmem_msg INIT(= FALSE);
  865.                         /* set after out of memory msg */
  866. EXTERN int    did_swapwrite_msg INIT(= FALSE);
  867.                         /* set after swap write error msg */
  868. EXTERN int    undo_off INIT(= FALSE);        /* undo switched off for now */
  869. EXTERN int    global_busy INIT(= 0);        /* set when :global is executing */
  870. EXTERN int    listcmd_busy INIT(= FALSE); /* set when :argdo, :windo or
  871.                            :bufdo is executing */
  872. EXTERN int    need_start_insertmode INIT(= FALSE);
  873.                         /* start insert mode soon */
  874. EXTERN char_u    *last_cmdline INIT(= NULL); /* last command line (for ":) */
  875. #ifdef FEAT_CMDHIST
  876. EXTERN char_u    *new_last_cmdline INIT(= NULL);    /* new value for last_cmdline */
  877. #endif
  878. #ifdef FEAT_AUTOCMD
  879. EXTERN char_u    *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
  880. EXTERN int    autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
  881. EXTERN char_u    *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
  882. #endif
  883.  
  884. #ifdef FEAT_WINDOWS
  885. EXTERN int    postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
  886. # ifdef FEAT_QUICKFIX
  887. EXTERN int    g_do_tagpreview INIT(= 0);  /* for tag preview commands:
  888.                            height of preview window */
  889. # endif
  890. #endif
  891. EXTERN int    replace_offset INIT(= 0);   /* offset for replace_push() */
  892.  
  893. EXTERN char_u    *escape_chars INIT(= (char_u *)" \t\\\"|");
  894.                         /* need backslash in cmd line */
  895.  
  896. EXTERN int    keep_help_flag INIT(= FALSE); /* doing :ta from help file */
  897.  
  898. /*
  899.  * When a string option is NULL (which only happens in out-of-memory
  900.  * situations), it is set to empty_option, to avoid having to check for NULL
  901.  * everywhere.
  902.  */
  903. EXTERN char_u    *empty_option INIT(= (char_u *)"");
  904.  
  905. #ifdef DEBUG
  906. EXTERN FILE *debugfp INIT(= NULL);
  907. #endif
  908.  
  909. EXTERN int  redir_off INIT(= FALSE);    /* no redirection for a moment */
  910. EXTERN FILE *redir_fd INIT(= NULL);    /* message redirection file */
  911. #ifdef FEAT_EVAL
  912. EXTERN int  redir_reg INIT(= 0);    /* message redirection register */
  913. #endif
  914.  
  915. #ifdef FEAT_LANGMAP
  916. EXTERN char_u    langmap_mapchar[256];    /* mapping for language keys */
  917. #endif
  918.  
  919. #ifdef FEAT_WILDMENU
  920. EXTERN int  save_p_ls INIT(= -1);    /* Save 'laststatus' setting */
  921. EXTERN int  save_p_wmh INIT(= -1);    /* Save 'winminheight' setting */
  922. EXTERN int  wild_menu_showing INIT(= 0);
  923. #define WM_SHOWN    1        /* wildmenu showing */
  924. #define WM_SCROLLED    2        /* wildmenu showing with scroll */
  925. #endif
  926.  
  927. #ifdef MSWIN
  928. EXTERN char_u    toupper_tab[256];    /* table for toupper() */
  929. EXTERN char_u    tolower_tab[256];    /* table for tolower() */
  930. #endif
  931.  
  932. #ifdef FEAT_LINEBREAK
  933. EXTERN char    breakat_flags[256];    /* which characters are in 'breakat' */
  934. #endif
  935.  
  936. /* these are in version.c */
  937. extern char *Version;
  938. extern char *mediumVersion;
  939. #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
  940. extern char longVersion[];
  941. #else
  942. extern char *longVersion;
  943. #endif
  944.  
  945. /*
  946.  * Some file names are stored in pathdef.c, which is generated from the
  947.  * Makefile to make their value depend on the Makefile.
  948.  */
  949. #ifdef HAVE_PATHDEF
  950. extern char_u *default_vim_dir;
  951. extern char_u *default_vimruntime_dir;
  952. extern char_u *all_cflags;
  953. extern char_u *all_lflags;
  954. # ifdef VMS
  955. extern char_u *compiler_version;
  956. # endif
  957. extern char_u *compiled_user;
  958. extern char_u *compiled_sys;
  959. #endif
  960.  
  961. /* When a window has a local directory, the absolute path of the global
  962.  * current directory is stored here (in allocated memory).  If the current
  963.  * directory is not a local directory, globaldir is NULL. */
  964. EXTERN char_u    *globaldir INIT(= NULL);
  965.  
  966. /* Characters from 'listchars' option */
  967. EXTERN int    lcs_eol INIT(= '$');
  968. EXTERN int    lcs_ext INIT(= NUL);
  969. EXTERN int    lcs_prec INIT(= NUL);
  970. EXTERN int    lcs_tab1 INIT(= NUL);
  971. EXTERN int    lcs_tab2 INIT(= NUL);
  972. EXTERN int    lcs_trail INIT(= NUL);
  973.  
  974. #if defined(FEAT_WINDOWS) || defined(FEAT_WILDMENU) || defined(FEAT_STL_OPT) \
  975.     || defined(FEAT_FOLDING)
  976. /* Characters from 'fillchars' option */
  977. EXTERN int    fill_stl INIT(= ' ');
  978. EXTERN int    fill_stlnc INIT(= ' ');
  979. #endif
  980. #if defined(FEAT_WINDOWS) || defined(FEAT_FOLDING)
  981. EXTERN int    fill_vert INIT(= ' ');
  982. EXTERN int    fill_fold INIT(= '-');
  983. EXTERN int    fill_diff INIT(= '-');
  984. #endif
  985.  
  986. #ifdef FEAT_VISUAL
  987. /* Whether 'keymodel' contains "stopsel" and "startsel". */
  988. EXTERN int    km_stopsel INIT(= FALSE);
  989. EXTERN int    km_startsel INIT(= FALSE);
  990. #endif
  991.  
  992. #ifdef FEAT_CMDWIN
  993. EXTERN int    cedit_key INIT(= -1);    /* key value of 'cedit' option */
  994. EXTERN int    cmdwin_type INIT(= 0);    /* type of cmdline window or 0 */
  995. EXTERN int    cmdwin_result INIT(= 0); /* result of cmdline window or 0 */
  996. #endif
  997.  
  998. EXTERN char_u no_lines_msg[]    INIT(= N_("--No lines in buffer--"));
  999.  
  1000. /* table to store parsed 'wildmode' */
  1001. EXTERN char_u    wim_flags[4];
  1002.  
  1003. #if defined(FEAT_TITLE) && defined(FEAT_STL_OPT)
  1004. /* whether titlestring and iconstring contains statusline syntax */
  1005. # define STL_IN_ICON    1
  1006. # define STL_IN_TITLE    2
  1007. EXTERN int      stl_syntax INIT(= 0);
  1008. #endif
  1009.  
  1010. #ifdef FEAT_SEARCH_EXTRA
  1011. /* don't use 'hlsearch' temporarily */
  1012. EXTERN int    no_hlsearch INIT(= FALSE);
  1013. #endif
  1014.  
  1015. #ifdef CURSOR_SHAPE
  1016. /* the table is in misc2.c, because of initializations */
  1017. extern cursorentry_T shape_table[SHAPE_IDX_COUNT];
  1018. #endif
  1019.  
  1020. #ifdef FEAT_PRINTER
  1021. # define OPT_PRINT_TOP        0
  1022. # define OPT_PRINT_BOT        1
  1023. # define OPT_PRINT_LEFT        2
  1024. # define OPT_PRINT_RIGHT    3
  1025. # define OPT_PRINT_HEADERHEIGHT    4
  1026. # define OPT_PRINT_SYNTAX    5
  1027. # define OPT_PRINT_NUMBER    6
  1028. # define OPT_PRINT_WRAP        7
  1029. # define OPT_PRINT_DUPLEX    8
  1030. # define OPT_PRINT_PORTRAIT    9
  1031. # define OPT_PRINT_PAPER    10
  1032. # define OPT_PRINT_COLLATE    11
  1033. # define OPT_PRINT_JOBSPLIT    12
  1034. # define OPT_PRINT_FORMFEED    13
  1035.  
  1036. # define OPT_PRINT_NUM_OPTIONS    14
  1037.  
  1038. EXTERN option_table_T printer_opts[OPT_PRINT_NUM_OPTIONS]
  1039. # ifdef DO_INIT
  1040.  =
  1041. {
  1042.     {"top",    TRUE, 0, NULL, 0, FALSE},
  1043.     {"bottom",    TRUE, 0, NULL, 0, FALSE},
  1044.     {"left",    TRUE, 0, NULL, 0, FALSE},
  1045.     {"right",    TRUE, 0, NULL, 0, FALSE},
  1046.     {"header",    TRUE, 0, NULL, 0, FALSE},
  1047.     {"syntax",    FALSE, 0, NULL, 0, FALSE},
  1048.     {"number",    FALSE, 0, NULL, 0, FALSE},
  1049.     {"wrap",    FALSE, 0, NULL, 0, FALSE},
  1050.     {"duplex",    FALSE, 0, NULL, 0, FALSE},
  1051.     {"portrait", FALSE, 0, NULL, 0, FALSE},
  1052.     {"paper",    FALSE, 0, NULL, 0, FALSE},
  1053.     {"collate",    FALSE, 0, NULL, 0, FALSE},
  1054.     {"jobsplit", FALSE, 0, NULL, 0, FALSE},
  1055.     {"formfeed", FALSE, 0, NULL, 0, FALSE},
  1056. }
  1057. # endif
  1058. ;
  1059.  
  1060. /* For prt_get_unit(). */
  1061. # define PRT_UNIT_NONE    -1
  1062. # define PRT_UNIT_PERC    0
  1063. # define PRT_UNIT_INCH    1
  1064. # define PRT_UNIT_MM    2
  1065. # define PRT_UNIT_POINT    3
  1066. # define PRT_UNIT_NAMES {"pc", "in", "mm", "pt"}
  1067. #endif
  1068.  
  1069. #ifdef FEAT_XCLIPBOARD
  1070. EXTERN char    *xterm_display INIT(= NULL);    /* xterm display name */
  1071. EXTERN Display    *xterm_dpy INIT(= NULL);    /* xterm display pointer */
  1072. #endif
  1073. #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11)
  1074. EXTERN XtAppContext app_context INIT(= (XtAppContext)NULL);
  1075. #endif
  1076.  
  1077. #ifdef FEAT_GUI_GTK
  1078. EXTERN guint32    gtk_socket_id INIT(= 0);
  1079. EXTERN int    echo_wid_arg INIT(= FALSE);    /* --echo-wid argument */
  1080. #endif
  1081.  
  1082. #ifdef FEAT_CLIENTSERVER
  1083. EXTERN char_u    *serverName INIT(= NULL);    /* name of the server */
  1084. EXTERN int    received_from_client INIT(= FALSE);    /* received text from
  1085.                                client */
  1086. # ifdef FEAT_X11
  1087. EXTERN Window    commWindow INIT(= None);
  1088. EXTERN Window    clientWindow INIT(= None);
  1089. EXTERN Atom    commProperty INIT(= None);
  1090. EXTERN char_u    *serverDelayedStartName INIT(= NULL);
  1091. # else
  1092. # ifdef PROTO
  1093. typedef int HWND;
  1094. # endif
  1095. EXTERN HWND    clientWindow INIT(= 0);
  1096. # endif
  1097. #endif
  1098.  
  1099. #if defined(UNIX) || defined(VMS)
  1100. EXTERN int    term_is_xterm INIT(= FALSE);    /* xterm-like 'term' */
  1101. #endif
  1102.  
  1103. #ifdef BACKSLASH_IN_FILENAME
  1104. EXTERN char    psepc INIT(= '\\');    /* normal path separator character */
  1105. EXTERN char    psepcN INIT(= '/');    /* abnormal path separator character */
  1106. EXTERN char    pseps[2]        /* normal path separator string */
  1107. # ifdef DO_INIT
  1108.             = {'\\', 0}
  1109. # endif
  1110.             ;
  1111. EXTERN char    psepsN[2]        /* abnormal path separator string */
  1112. # ifdef DO_INIT
  1113.             = {'/', 0}
  1114. # endif
  1115.             ;
  1116. #endif
  1117.  
  1118. #ifdef FEAT_VIRTUALEDIT
  1119. /* Set to TRUE when an operator is being executed with virtual editing, MAYBE
  1120.  * when no operator is being executed, FALSE otherwise. */
  1121. EXTERN int    virtual_op INIT(= MAYBE);
  1122. #endif
  1123.  
  1124. #ifdef FEAT_SYN_HL
  1125. /* Display tick, incremented for each call to update_screen() */
  1126. EXTERN disptick_T    display_tick INIT(= 0);
  1127. #endif
  1128.  
  1129. #ifdef ALT_X_INPUT
  1130. /* we need to be able to go into the displatch loop while processing a command
  1131.  * recevied via alternate input. However, we don't want to process another
  1132.  * command until the first is completed.
  1133.  */
  1134. EXTERN int    suppress_alternate_input INIT(= FALSE);
  1135. #endif
  1136.  
  1137. #ifdef USE_MCH_ERRMSG
  1138. /* Grow array to collect error messages in until they can be displayed. */
  1139. EXTERN garray_T error_ga
  1140. # ifdef DO_INIT
  1141.     = {0, 0, 0, 0, NULL}
  1142. # endif
  1143.     ;
  1144. #endif
  1145.  
  1146. #ifdef FEAT_NETBEANS_INTG
  1147. EXTERN char *netbeansArg INIT(= 0);    /* the -nb[:host:port:passwd] arg */
  1148. EXTERN int netbeansCloseFile INIT(= 0);    /* send killed if != 0 */
  1149. EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */
  1150. EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */
  1151. EXTERN int netbeansOpenFile INIT(= 1);    /* send fileOpened if != 0 */
  1152. EXTERN int netbeansReadFile INIT(= 1);    /* OK to read from disk if != 0 */
  1153. EXTERN int netbeansSuppressNoLines INIT(= 0); /* skip "No lines in buffer" */
  1154. EXTERN int usingNetbeans INIT(= 0);    /* set if -nb flag is used */
  1155. #endif
  1156.  
  1157. /*
  1158.  * The error messages that can be shared are included here.
  1159.  * Excluded are errors that are only used once and debugging messages.
  1160.  */
  1161. EXTERN char_u e_abort[]        INIT(=N_("E470: Command aborted"));
  1162. EXTERN char_u e_argreq[]    INIT(=N_("E471: Argument required"));
  1163. EXTERN char_u e_backslash[]    INIT(=N_("E10: \\ should be followed by /, ? or &"));
  1164. #ifdef FEAT_CMDWIN
  1165. EXTERN char_u e_cmdwin[]    INIT(=N_("E11: Invalid in command-line window; <CR> executes, CTRL-C quits"));
  1166. #endif
  1167. EXTERN char_u e_curdir[]    INIT(=N_("E12: Command not allowed from exrc/vimrc in current dir or tag search"));
  1168. #ifdef FEAT_EVAL
  1169. EXTERN char_u e_endif[]        INIT(=N_("E171: Missing :endif"));
  1170. EXTERN char_u e_endtry[]    INIT(=N_("E600: Missing :endtry"));
  1171. EXTERN char_u e_endwhile[]    INIT(=N_("E170: Missing :endwhile"));
  1172. EXTERN char_u e_while[]        INIT(=N_("E588: :endwhile without :while"));
  1173. #endif
  1174. EXTERN char_u e_exists[]    INIT(=N_("E13: File exists (add ! to override)"));
  1175. EXTERN char_u e_failed[]    INIT(=N_("E472: Command failed"));
  1176. #if defined(FEAT_GUI) && defined(FEAT_XFONTSET)
  1177. EXTERN char_u e_fontset[]    INIT(=N_("E234: Unknown fontset: %s"));
  1178. #endif
  1179. #if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) || defined(MACOS) \
  1180.     || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MSWIN)
  1181. EXTERN char_u e_font[]        INIT(=N_("E235: Unknown font: %s"));
  1182. #endif
  1183. #if (defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)) && !defined(HAVE_GTK2)
  1184. EXTERN char_u e_fontwidth[]    INIT(=N_("E236: Font \"%s\" is not fixed-width"));
  1185. #endif
  1186. EXTERN char_u e_internal[]    INIT(=N_("E473: Internal error"));
  1187. EXTERN char_u e_interr[]    INIT(=N_("Interrupted"));
  1188. EXTERN char_u e_invaddr[]    INIT(=N_("E14: Invalid address"));
  1189. EXTERN char_u e_invarg[]    INIT(=N_("E474: Invalid argument"));
  1190. EXTERN char_u e_invarg2[]    INIT(=N_("E475: Invalid argument: %s"));
  1191. #ifdef FEAT_EVAL
  1192. EXTERN char_u e_invexpr2[]    INIT(=N_("E15: Invalid expression: %s"));
  1193. #endif
  1194. EXTERN char_u e_invrange[]    INIT(=N_("E16: Invalid range"));
  1195. EXTERN char_u e_invcmd[]    INIT(=N_("E476: Invalid command"));
  1196. #ifdef UNIX
  1197. EXTERN char_u e_isadir2[]    INIT(=N_("E17: \"%s\" is a directory"));
  1198. #endif
  1199. #ifdef FEAT_EVAL
  1200. EXTERN char_u e_letunexp[]    INIT(=N_("E18: Unexpected characters before '='"));
  1201. #endif
  1202. #ifdef FEAT_LIBCALL
  1203. EXTERN char_u e_libcall[]    INIT(=N_("E364: Library call failed for \"%s()\""));
  1204. #endif
  1205. #if defined(DYNAMIC_PERL) || defined(DYNAMIC_PYTHON) || defined(DYNAMIC_RUBY) \
  1206.     || defined(DYNAMIC_TCL) || defined(DYNAMIC_ICONV) \
  1207.     || defined(DYNAMIC_GETTEXT)
  1208. EXTERN char_u e_loadlib[]    INIT(=N_("E370: Could not load library %s"));
  1209. EXTERN char_u e_loadfunc[]    INIT(=N_("E448: Could not load library function %s"));
  1210. #endif
  1211. EXTERN char_u e_markinval[]    INIT(=N_("E19: Mark has invalid line number"));
  1212. EXTERN char_u e_marknotset[]    INIT(=N_("E20: Mark not set"));
  1213. EXTERN char_u e_modifiable[]    INIT(=N_("E21: Cannot make changes, 'modifiable' is off"));
  1214. EXTERN char_u e_nesting[]    INIT(=N_("E22: Scripts nested too deep"));
  1215. EXTERN char_u e_noalt[]        INIT(=N_("E23: No alternate file"));
  1216. EXTERN char_u e_noabbr[]    INIT(=N_("E24: No such abbreviation"));
  1217. EXTERN char_u e_nobang[]    INIT(=N_("E477: No ! allowed"));
  1218. #ifndef FEAT_GUI
  1219. EXTERN char_u e_nogvim[]    INIT(=N_("E25: GUI cannot be used: Not enabled at compile time"));
  1220. #endif
  1221. #ifndef FEAT_RIGHTLEFT
  1222. EXTERN char_u e_nohebrew[]    INIT(=N_("E26: Hebrew cannot be used: Not enabled at compile time\n"));
  1223. #endif
  1224. #ifndef FEAT_FKMAP
  1225. EXTERN char_u e_nofarsi[]    INIT(=N_("E27: Farsi cannot be used: Not enabled at compile time\n"));
  1226. #endif
  1227. #ifndef FEAT_ARABIC
  1228. EXTERN char_u e_noarabic[]    INIT(=N_("E800: Arabic cannot be used: Not enabled at compile time\n"));
  1229. #endif
  1230. #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_SYN_HL)
  1231. EXTERN char_u e_nogroup[]    INIT(=N_("E28: No such highlight group name: %s"));
  1232. #endif
  1233. EXTERN char_u e_noinstext[]    INIT(=N_("E29: No inserted text yet"));
  1234. EXTERN char_u e_nolastcmd[]    INIT(=N_("E30: No previous command line"));
  1235. EXTERN char_u e_nomap[]        INIT(=N_("E31: No such mapping"));
  1236. EXTERN char_u e_nomatch[]    INIT(=N_("E479: No match"));
  1237. EXTERN char_u e_nomatch2[]    INIT(=N_("E480: No match: %s"));
  1238. EXTERN char_u e_noname[]    INIT(=N_("E32: No file name"));
  1239. EXTERN char_u e_nopresub[]    INIT(=N_("E33: No previous substitute regular expression"));
  1240. EXTERN char_u e_noprev[]    INIT(=N_("E34: No previous command"));
  1241. EXTERN char_u e_noprevre[]    INIT(=N_("E35: No previous regular expression"));
  1242. EXTERN char_u e_norange[]    INIT(=N_("E481: No range allowed"));
  1243. #ifdef FEAT_WINDOWS
  1244. EXTERN char_u e_noroom[]    INIT(=N_("E36: Not enough room"));
  1245. #endif
  1246. #ifdef FEAT_CLIENTSERVER
  1247. EXTERN char_u e_noserver[]    INIT(=N_("E247: no registered server named \"%s\""));
  1248. #endif
  1249. EXTERN char_u e_notcreate[]    INIT(=N_("E482: Can't create file %s"));
  1250. EXTERN char_u e_notmp[]        INIT(=N_("E483: Can't get temp file name"));
  1251. EXTERN char_u e_notopen[]    INIT(=N_("E484: Can't open file %s"));
  1252. EXTERN char_u e_notread[]    INIT(=N_("E485: Can't read file %s"));
  1253. EXTERN char_u e_nowrtmsg[]    INIT(=N_("E37: No write since last change (add ! to override)"));
  1254. EXTERN char_u e_null[]        INIT(=N_("E38: Null argument"));
  1255. #ifdef FEAT_DIGRAPHS
  1256. EXTERN char_u e_number[]    INIT(=N_("E39: Number expected"));
  1257. #endif
  1258. #ifdef FEAT_QUICKFIX
  1259. EXTERN char_u e_openerrf[]    INIT(=N_("E40: Can't open errorfile %s"));
  1260. #endif
  1261. #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
  1262. EXTERN char_u e_opendisp[]    INIT(=N_("E233: cannot open display"));
  1263. #endif
  1264. EXTERN char_u e_outofmem[]    INIT(=N_("E41: Out of memory!"));
  1265. #ifdef FEAT_INS_EXPAND
  1266. EXTERN char_u e_patnotf[]    INIT(=N_("Pattern not found"));
  1267. #endif
  1268. EXTERN char_u e_patnotf2[]    INIT(=N_("E486: Pattern not found: %s"));
  1269. EXTERN char_u e_positive[]    INIT(=N_("E487: Argument must be positive"));
  1270. #if defined(UNIX) || defined(FEAT_SESSION)
  1271. EXTERN char_u e_prev_dir[]    INIT(=N_("E459: Cannot go back to previous directory"));
  1272. #endif
  1273.  
  1274. #ifdef FEAT_QUICKFIX
  1275. EXTERN char_u e_quickfix[]    INIT(=N_("E42: No Errors"));
  1276. #endif
  1277. EXTERN char_u e_re_damg[]    INIT(=N_("E43: Damaged match string"));
  1278. EXTERN char_u e_re_corr[]    INIT(=N_("E44: Corrupted regexp program"));
  1279. EXTERN char_u e_readonly[]    INIT(=N_("E45: 'readonly' option is set (add ! to override)"));
  1280. #ifdef FEAT_EVAL
  1281. EXTERN char_u e_readonlyvar[]    INIT(=N_("E46: Cannot set read-only variable \"%s\""));
  1282. #endif
  1283. #ifdef FEAT_QUICKFIX
  1284. EXTERN char_u e_readerrf[]    INIT(=N_("E47: Error while reading errorfile"));
  1285. #endif
  1286. #ifdef HAVE_SANDBOX
  1287. EXTERN char_u e_sandbox[]    INIT(=N_("E48: Not allowed in sandbox"));
  1288. #endif
  1289. EXTERN char_u e_secure[]    INIT(=N_("E523: Not allowed here"));
  1290. #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
  1291.     || defined(UNIX) || defined(VMS)
  1292. EXTERN char_u e_screenmode[]    INIT(=N_("E359: Screen mode setting not supported"));
  1293. #endif
  1294. EXTERN char_u e_scroll[]    INIT(=N_("E49: Invalid scroll size"));
  1295. EXTERN char_u e_shellempty[]    INIT(=N_("E91: 'shell' option is empty"));
  1296. #if defined(FEAT_SIGN_ICONS) && !defined(HAVE_GTK2)
  1297. EXTERN char_u e_signdata[]    INIT(=N_("E255: Couldn't read in sign data!"));
  1298. #endif
  1299. EXTERN char_u e_swapclose[]    INIT(=N_("E72: Close error on swap file"));
  1300. EXTERN char_u e_tagstack[]    INIT(=N_("E73: tag stack empty"));
  1301. EXTERN char_u e_toocompl[]    INIT(=N_("E74: Command too complex"));
  1302. EXTERN char_u e_longname[]    INIT(=N_("E75: Name too long"));
  1303. EXTERN char_u e_toomsbra[]    INIT(=N_("E76: Too many ["));
  1304. EXTERN char_u e_toomany[]    INIT(=N_("E77: Too many file names"));
  1305. EXTERN char_u e_trailing[]    INIT(=N_("E488: Trailing characters"));
  1306. EXTERN char_u e_umark[]        INIT(=N_("E78: Unknown mark"));
  1307. EXTERN char_u e_wildexpand[]    INIT(=N_("E79: Cannot expand wildcards"));
  1308. #ifdef FEAT_WINDOWS
  1309. EXTERN char_u e_winheight[]    INIT(=N_("E591: 'winheight' cannot be smaller than 'winminheight'"));
  1310. # ifdef FEAT_VERTSPLIT
  1311. EXTERN char_u e_winwidth[]    INIT(=N_("E592: 'winwidth' cannot be smaller than 'winminwidth'"));
  1312. # endif
  1313. #endif
  1314. EXTERN char_u e_write[]        INIT(=N_("E80: Error while writing"));
  1315. EXTERN char_u e_zerocount[]    INIT(=N_("Zero count"));
  1316. #ifdef FEAT_EVAL
  1317. EXTERN char_u e_usingsid[]    INIT(=N_("E81: Using <SID> not in a script context"));
  1318. #endif
  1319. #ifdef FEAT_CLIENTSERVER
  1320. EXTERN char_u e_invexprmsg[]    INIT(=N_("E449: Invalid expression received"));
  1321. #endif
  1322. #ifdef FEAT_NETBEANS_INTG
  1323. EXTERN char_u e_guarded[]    INIT(=N_("E463: Region is guarded, cannot modify"));
  1324. #endif
  1325. #ifdef MACOS_X_UNIX
  1326. EXTERN short disallow_gui    INIT(= FALSE);
  1327. #endif
  1328.  
  1329. /*
  1330.  * Comms. with the session manager (XSMP)
  1331.  */
  1332. #ifdef USE_XSMP
  1333. EXTERN int xsmp_icefd INIT(= -1);   /* The actual connection */
  1334. #endif
  1335.  
  1336. /*
  1337.  * Optional Farsi support.  Include it here, so EXTERN and INIT are defined.
  1338.  */
  1339. #ifdef FEAT_FKMAP
  1340. # include "farsi.h"
  1341. #endif
  1342.  
  1343. /*
  1344.  * Optional Arabic support. Include it here, so EXTERN and INIT are defined.
  1345.  */
  1346. #ifdef FEAT_ARABIC
  1347. # include "arabic.h"
  1348. #endif
  1349.