1 /* vi:set ts=8 sts=4 sw=4 noet: 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(WIN3264) 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 * Note: before the screen is initialized and when out of memory these can be 40 * NULL. 41 */ 42 EXTERN schar_T *ScreenLines INIT(= NULL); 43 EXTERN sattr_T *ScreenAttrs INIT(= NULL); 44 EXTERN unsigned *LineOffset INIT(= NULL); 45 EXTERN char_u *LineWraps INIT(= NULL); /* line wraps to next line */ 46 47 /* 48 * When using Unicode characters (in UTF-8 encoding) the character in 49 * ScreenLinesUC[] contains the Unicode for the character at this position, or 50 * NUL when the character in ScreenLines[] is to be used (ASCII char). 51 * The composing characters are to be drawn on top of the original character. 52 * ScreenLinesC[0][off] is only to be used when ScreenLinesUC[off] != 0. 53 * Note: These three are only allocated when enc_utf8 is set! 54 */ 55 EXTERN u8char_T *ScreenLinesUC INIT(= NULL); /* decoded UTF-8 characters */ 56 EXTERN u8char_T *ScreenLinesC[MAX_MCO]; /* composing characters */ 57 EXTERN int Screen_mco INIT(= 0); /* value of p_mco used when 58 allocating ScreenLinesC[] */ 59 60 /* Only used for euc-jp: Second byte of a character that starts with 0x8e. 61 * These are single-width. */ 62 EXTERN schar_T *ScreenLines2 INIT(= NULL); 63 64 /* 65 * Indexes for tab page line: 66 * N > 0 for label of tab page N 67 * N == 0 for no label 68 * N < 0 for closing tab page -N 69 * N == -999 for closing current tab page 70 */ 71 EXTERN short *TabPageIdxs INIT(= NULL); 72 73 EXTERN int screen_Rows INIT(= 0); /* actual size of ScreenLines[] */ 74 EXTERN int screen_Columns INIT(= 0); /* actual size of ScreenLines[] */ 75 76 /* 77 * When vgetc() is called, it sets mod_mask to the set of modifiers that are 78 * held down based on the MOD_MASK_* symbols that are read first. 79 */ 80 EXTERN int mod_mask INIT(= 0x0); /* current key modifiers */ 81 82 /* 83 * Cmdline_row is the row where the command line starts, just below the 84 * last window. 85 * When the cmdline gets longer than the available space the screen gets 86 * scrolled up. After a CTRL-D (show matches), after hitting ':' after 87 * "hit return", and for the :global command, the command line is 88 * temporarily moved. The old position is restored with the next call to 89 * update_screen(). 90 */ 91 EXTERN int cmdline_row; 92 93 EXTERN int redraw_cmdline INIT(= FALSE); /* cmdline must be redrawn */ 94 EXTERN int clear_cmdline INIT(= FALSE); /* cmdline must be cleared */ 95 EXTERN int mode_displayed INIT(= FALSE); /* mode is being displayed */ 96 EXTERN int no_win_do_lines_ins INIT(= FALSE); /* don't insert lines */ 97 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL) 98 EXTERN int cmdline_star INIT(= FALSE); /* cmdline is crypted */ 99 #endif 100 101 EXTERN int exec_from_reg INIT(= FALSE); /* executing register */ 102 103 EXTERN int screen_cleared INIT(= FALSE); /* screen has been cleared */ 104 105 /* 106 * When '$' is included in 'cpoptions' option set: 107 * When a change command is given that deletes only part of a line, a dollar 108 * is put at the end of the changed text. dollar_vcol is set to the virtual 109 * column of this '$'. -1 is used to indicate no $ is being displayed. 110 */ 111 EXTERN colnr_T dollar_vcol INIT(= -1); 112 113 #ifdef FEAT_INS_EXPAND 114 /* 115 * Variables for Insert mode completion. 116 */ 117 118 /* Length in bytes of the text being completed (this is deleted to be replaced 119 * by the match.) */ 120 EXTERN int compl_length INIT(= 0); 121 122 /* Set when character typed while looking for matches and it means we should 123 * stop looking for matches. */ 124 EXTERN int compl_interrupted INIT(= FALSE); 125 126 /* List of flags for method of completion. */ 127 EXTERN int compl_cont_status INIT(= 0); 128 # define CONT_ADDING 1 /* "normal" or "adding" expansion */ 129 # define CONT_INTRPT (2 + 4) /* a ^X interrupted the current expansion */ 130 /* it's set only iff N_ADDS is set */ 131 # define CONT_N_ADDS 4 /* next ^X<> will add-new or expand-current */ 132 # define CONT_S_IPOS 8 /* next ^X<> will set initial_pos? 133 * if so, word-wise-expansion will set SOL */ 134 # define CONT_SOL 16 /* pattern includes start of line, just for 135 * word-wise expansion, not set for ^X^L */ 136 # define CONT_LOCAL 32 /* for ctrl_x_mode 0, ^X^P/^X^N do a local 137 * expansion, (eg use complete=.) */ 138 #endif 139 140 /* 141 * Functions for putting characters in the command line, 142 * while keeping ScreenLines[] updated. 143 */ 144 #ifdef FEAT_RIGHTLEFT 145 EXTERN int cmdmsg_rl INIT(= FALSE); /* cmdline is drawn right to left */ 146 #endif 147 EXTERN int msg_col; 148 EXTERN int msg_row; 149 EXTERN int msg_scrolled; /* Number of screen lines that windows have 150 * scrolled because of printing messages. */ 151 EXTERN int msg_scrolled_ign INIT(= FALSE); 152 /* when TRUE don't set need_wait_return in 153 msg_puts_attr() when msg_scrolled is 154 non-zero */ 155 156 EXTERN char_u *keep_msg INIT(= NULL); /* msg to be shown after redraw */ 157 EXTERN int keep_msg_attr INIT(= 0); /* highlight attr for keep_msg */ 158 EXTERN int keep_msg_more INIT(= FALSE); /* keep_msg was set by msgmore() */ 159 EXTERN int need_fileinfo INIT(= FALSE);/* do fileinfo() after redraw */ 160 EXTERN int msg_scroll INIT(= FALSE); /* msg_start() will scroll */ 161 EXTERN int msg_didout INIT(= FALSE); /* msg_outstr() was used in line */ 162 EXTERN int msg_didany INIT(= FALSE); /* msg_outstr() was used at all */ 163 EXTERN int msg_nowait INIT(= FALSE); /* don't wait for this msg */ 164 EXTERN int emsg_off INIT(= 0); /* don't display errors for now, 165 unless 'debug' is set. */ 166 EXTERN int info_message INIT(= FALSE); /* printing informative message */ 167 EXTERN int msg_hist_off INIT(= FALSE); /* don't add messages to history */ 168 #ifdef FEAT_EVAL 169 EXTERN int need_clr_eos INIT(= FALSE); /* need to clear text before 170 displaying a message. */ 171 EXTERN int emsg_skip INIT(= 0); /* don't display errors for 172 expression that is skipped */ 173 EXTERN int emsg_severe INIT(= FALSE); /* use message of next of several 174 emsg() calls for throw */ 175 EXTERN int did_endif INIT(= FALSE); /* just had ":endif" */ 176 EXTERN dict_T vimvardict; /* Dictionary with v: variables */ 177 EXTERN dict_T globvardict; /* Dictionary with g: variables */ 178 #endif 179 EXTERN int did_emsg; /* set by emsg() when the message 180 is displayed or thrown */ 181 #ifdef FEAT_EVAL 182 EXTERN int called_vim_beep; /* set if vim_beep() is called */ 183 EXTERN int did_uncaught_emsg; /* emsg() was called and did not 184 cause an exception */ 185 #endif 186 EXTERN int did_emsg_syntax; /* did_emsg set because of a 187 syntax error */ 188 EXTERN int called_emsg; /* always set by emsg() */ 189 EXTERN int ex_exitval INIT(= 0); /* exit value for ex mode */ 190 EXTERN int emsg_on_display INIT(= FALSE); /* there is an error message */ 191 EXTERN int rc_did_emsg INIT(= FALSE); /* vim_regcomp() called emsg() */ 192 193 EXTERN int no_wait_return INIT(= 0); /* don't wait for return for now */ 194 EXTERN int need_wait_return INIT(= 0); /* need to wait for return later */ 195 EXTERN int did_wait_return INIT(= FALSE); /* wait_return() was used and 196 nothing written since then */ 197 #ifdef FEAT_TITLE 198 EXTERN int need_maketitle INIT(= TRUE); /* call maketitle() soon */ 199 #endif 200 201 EXTERN int quit_more INIT(= FALSE); /* 'q' hit at "--more--" msg */ 202 #if defined(UNIX) || defined(VMS) || defined(MACOS_X) 203 EXTERN int newline_on_exit INIT(= FALSE); /* did msg in altern. screen */ 204 EXTERN int intr_char INIT(= 0); /* extra interrupt character */ 205 #endif 206 #if (defined(UNIX) || defined(VMS)) && defined(FEAT_X11) 207 EXTERN int x_no_connect INIT(= FALSE); /* don't connect to X server */ 208 # if defined(FEAT_CLIENTSERVER) 209 EXTERN int x_force_connect INIT(= FALSE); /* Do connect to X server. 210 Overrules x_no_connect and 211 "exclude" in 'clipboard'. */ 212 # endif 213 #endif 214 EXTERN int ex_keep_indent INIT(= FALSE); /* getexmodeline(): keep indent */ 215 EXTERN int vgetc_busy INIT(= 0); /* when inside vgetc() then > 0 */ 216 217 EXTERN int didset_vim INIT(= FALSE); /* did set $VIM ourselves */ 218 EXTERN int didset_vimruntime INIT(= FALSE); /* idem for $VIMRUNTIME */ 219 220 /* 221 * Lines left before a "more" message. Ex mode needs to be able to reset this 222 * after you type something. 223 */ 224 EXTERN int lines_left INIT(= -1); /* lines left for listing */ 225 EXTERN int msg_no_more INIT(= FALSE); /* don't use more prompt, truncate 226 messages */ 227 228 EXTERN char_u *sourcing_name INIT( = NULL);/* name of error message source */ 229 EXTERN linenr_T sourcing_lnum INIT(= 0); /* line number of the source file */ 230 231 #ifdef FEAT_EVAL 232 EXTERN int ex_nesting_level INIT(= 0); /* nesting level */ 233 EXTERN int debug_break_level INIT(= -1); /* break below this level */ 234 EXTERN int debug_did_msg INIT(= FALSE); /* did "debug mode" message */ 235 EXTERN int debug_tick INIT(= 0); /* breakpoint change count */ 236 EXTERN int debug_backtrace_level INIT(= 0); /* breakpoint backtrace level */ 237 # ifdef FEAT_PROFILE 238 EXTERN int do_profiling INIT(= PROF_NONE); /* PROF_ values */ 239 # endif 240 241 /* 242 * The exception currently being thrown. Used to pass an exception to 243 * a different cstack. Also used for discarding an exception before it is 244 * caught or made pending. Only valid when did_throw is TRUE. 245 */ 246 EXTERN except_T *current_exception; 247 248 /* 249 * did_throw: An exception is being thrown. Reset when the exception is caught 250 * or as long as it is pending in a finally clause. 251 */ 252 EXTERN int did_throw INIT(= FALSE); 253 254 /* 255 * need_rethrow: set to TRUE when a throw that cannot be handled in do_cmdline() 256 * must be propagated to the cstack of the previously called do_cmdline(). 257 */ 258 EXTERN int need_rethrow INIT(= FALSE); 259 260 /* 261 * check_cstack: set to TRUE when a ":finish" or ":return" that cannot be 262 * handled in do_cmdline() must be propagated to the cstack of the previously 263 * called do_cmdline(). 264 */ 265 EXTERN int check_cstack INIT(= FALSE); 266 267 /* 268 * Number of nested try conditionals (across function calls and ":source" 269 * commands). 270 */ 271 EXTERN int trylevel INIT(= 0); 272 273 /* 274 * When "force_abort" is TRUE, always skip commands after an error message, 275 * even after the outermost ":endif", ":endwhile" or ":endfor" or for a 276 * function without the "abort" flag. It is set to TRUE when "trylevel" is 277 * non-zero (and ":silent!" was not used) or an exception is being thrown at 278 * the time an error is detected. It is set to FALSE when "trylevel" gets 279 * zero again and there was no error or interrupt or throw. 280 */ 281 EXTERN int force_abort INIT(= FALSE); 282 283 /* 284 * "msg_list" points to a variable in the stack of do_cmdline() which keeps 285 * the list of arguments of several emsg() calls, one of which is to be 286 * converted to an error exception immediately after the failing command 287 * returns. The message to be used for the exception value is pointed to by 288 * the "throw_msg" field of the first element in the list. It is usually the 289 * same as the "msg" field of that element, but can be identical to the "msg" 290 * field of a later list element, when the "emsg_severe" flag was set when the 291 * emsg() call was made. 292 */ 293 EXTERN struct msglist **msg_list INIT(= NULL); 294 295 /* 296 * suppress_errthrow: When TRUE, don't convert an error to an exception. Used 297 * when displaying the interrupt message or reporting an exception that is still 298 * uncaught at the top level (which has already been discarded then). Also used 299 * for the error message when no exception can be thrown. 300 */ 301 EXTERN int suppress_errthrow INIT(= FALSE); 302 303 /* 304 * The stack of all caught and not finished exceptions. The exception on the 305 * top of the stack is the one got by evaluation of v:exception. The complete 306 * stack of all caught and pending exceptions is embedded in the various 307 * cstacks; the pending exceptions, however, are not on the caught stack. 308 */ 309 EXTERN except_T *caught_stack INIT(= NULL); 310 311 #endif 312 313 #ifdef FEAT_EVAL 314 /* 315 * Garbage collection can only take place when we are sure there are no Lists 316 * or Dictionaries being used internally. This is flagged with 317 * "may_garbage_collect" when we are at the toplevel. 318 * "want_garbage_collect" is set by the garbagecollect() function, which means 319 * we do garbage collection before waiting for a char at the toplevel. 320 * "garbage_collect_at_exit" indicates garbagecollect(1) was called. 321 */ 322 EXTERN int may_garbage_collect INIT(= FALSE); 323 EXTERN int want_garbage_collect INIT(= FALSE); 324 EXTERN int garbage_collect_at_exit INIT(= FALSE); 325 326 // Script CTX being sourced or was sourced to define the current function. 327 EXTERN sctx_T current_sctx INIT(= {0 COMMA 0 COMMA 0}); 328 #endif 329 330 EXTERN int did_source_packages INIT(= FALSE); 331 332 /* Magic number used for hashitem "hi_key" value indicating a deleted item. 333 * Only the address is used. */ 334 EXTERN char_u hash_removed; 335 336 337 EXTERN int scroll_region INIT(= FALSE); /* term supports scroll region */ 338 EXTERN int t_colors INIT(= 0); /* int value of T_CCO */ 339 340 /* 341 * When highlight_match is TRUE, highlight a match, starting at the cursor 342 * position. Search_match_lines is the number of lines after the match (0 for 343 * a match within one line), search_match_endcol the column number of the 344 * character just after the match in the last line. 345 */ 346 EXTERN int highlight_match INIT(= FALSE); // show search match pos 347 EXTERN linenr_T search_match_lines; // lines of of matched string 348 EXTERN colnr_T search_match_endcol; // col nr of match end 349 #ifdef FEAT_SEARCH_EXTRA 350 EXTERN linenr_T search_first_line INIT(= 0); // for :{FIRST},{last}s/pat 351 EXTERN linenr_T search_last_line INIT(= MAXLNUM); // for :{first},{LAST}s/pat 352 #endif 353 354 EXTERN int no_smartcase INIT(= FALSE); /* don't use 'smartcase' once */ 355 356 EXTERN int need_check_timestamps INIT(= FALSE); /* need to check file 357 timestamps asap */ 358 EXTERN int did_check_timestamps INIT(= FALSE); /* did check timestamps 359 recently */ 360 EXTERN int no_check_timestamps INIT(= 0); /* Don't check timestamps */ 361 362 EXTERN int highlight_attr[HLF_COUNT]; /* Highl. attr for each context. */ 363 #ifdef FEAT_STL_OPT 364 # define USER_HIGHLIGHT 365 #endif 366 #ifdef USER_HIGHLIGHT 367 EXTERN int highlight_user[9]; /* User[1-9] attributes */ 368 # ifdef FEAT_STL_OPT 369 EXTERN int highlight_stlnc[9]; /* On top of user */ 370 # ifdef FEAT_TERMINAL 371 EXTERN int highlight_stlterm[9]; /* On top of user */ 372 EXTERN int highlight_stltermnc[9]; /* On top of user */ 373 # endif 374 # endif 375 #endif 376 #ifdef FEAT_TERMINAL 377 // When TRUE skip calling terminal_loop() once. Used when 378 // typing ':' at the more prompt. 379 EXTERN int skip_term_loop INIT(= FALSE); 380 #endif 381 #ifdef FEAT_GUI 382 EXTERN char_u *use_gvimrc INIT(= NULL); /* "-U" cmdline argument */ 383 #endif 384 EXTERN int cterm_normal_fg_color INIT(= 0); 385 EXTERN int cterm_normal_fg_bold INIT(= 0); 386 EXTERN int cterm_normal_bg_color INIT(= 0); 387 #ifdef FEAT_TERMGUICOLORS 388 EXTERN guicolor_T cterm_normal_fg_gui_color INIT(= INVALCOLOR); 389 EXTERN guicolor_T cterm_normal_bg_gui_color INIT(= INVALCOLOR); 390 #endif 391 #ifdef FEAT_TERMRESPONSE 392 EXTERN int is_mac_terminal INIT(= FALSE); /* recognized Terminal.app */ 393 #endif 394 395 EXTERN int autocmd_busy INIT(= FALSE); /* Is apply_autocmds() busy? */ 396 EXTERN int autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */ 397 EXTERN int autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */ 398 EXTERN int modified_was_set; /* did ":set modified" */ 399 EXTERN int did_filetype INIT(= FALSE); /* FileType event found */ 400 EXTERN int au_did_filetype INIT(= FALSE); 401 EXTERN int keep_filetype INIT(= FALSE); /* value for did_filetype when 402 starting to execute 403 autocommands */ 404 405 /* When deleting the current buffer, another one must be loaded. If we know 406 * which one is preferred, au_new_curbuf is set to it */ 407 EXTERN bufref_T au_new_curbuf INIT(= {NULL COMMA 0 COMMA 0}); 408 409 /* When deleting a buffer/window and autocmd_busy is TRUE, do not free the 410 * buffer/window. but link it in the list starting with 411 * au_pending_free_buf/ap_pending_free_win, using b_next/w_next. 412 * Free the buffer/window when autocmd_busy is being set to FALSE. */ 413 EXTERN buf_T *au_pending_free_buf INIT(= NULL); 414 EXTERN win_T *au_pending_free_win INIT(= NULL); 415 416 #ifdef FEAT_MOUSE 417 /* 418 * Mouse coordinates, set by check_termcode() 419 */ 420 EXTERN int mouse_row; 421 EXTERN int mouse_col; 422 EXTERN int mouse_past_bottom INIT(= FALSE);/* mouse below last line */ 423 EXTERN int mouse_past_eol INIT(= FALSE); /* mouse right of line */ 424 EXTERN int mouse_dragging INIT(= 0); /* extending Visual area with 425 mouse dragging */ 426 # if defined(FEAT_MOUSE_DEC) 427 /* 428 * When the DEC mouse has been pressed but not yet released we enable 429 * automatic querys for the mouse position. 430 */ 431 EXTERN int WantQueryMouse INIT(= FALSE); 432 # endif 433 434 # ifdef FEAT_GUI 435 /* When the window layout is about to be changed, need_mouse_correct is set, 436 * so that gui_mouse_correct() is called afterwards, to correct the mouse 437 * pointer when focus-follow-mouse is being used. */ 438 EXTERN int need_mouse_correct INIT(= FALSE); 439 440 /* When double clicking, topline must be the same */ 441 EXTERN linenr_T gui_prev_topline INIT(= 0); 442 # ifdef FEAT_DIFF 443 EXTERN int gui_prev_topfill INIT(= 0); 444 # endif 445 # endif 446 447 # ifdef FEAT_MOUSESHAPE 448 EXTERN int drag_status_line INIT(= FALSE); /* dragging the status line */ 449 EXTERN int postponed_mouseshape INIT(= FALSE); /* postponed updating the 450 mouse pointer shape */ 451 EXTERN int drag_sep_line INIT(= FALSE); /* dragging vert separator */ 452 # endif 453 454 #endif 455 456 #ifdef FEAT_DIFF 457 /* Value set from 'diffopt'. */ 458 EXTERN int diff_context INIT(= 6); /* context for folds */ 459 EXTERN int diff_foldcolumn INIT(= 2); /* 'foldcolumn' for diff mode */ 460 EXTERN int diff_need_scrollbind INIT(= FALSE); 461 #endif 462 463 #ifdef FEAT_MENU 464 /* The root of the menu hierarchy. */ 465 EXTERN vimmenu_T *root_menu INIT(= NULL); 466 /* 467 * While defining the system menu, sys_menu is TRUE. This avoids 468 * overruling of menus that the user already defined. 469 */ 470 EXTERN int sys_menu INIT(= FALSE); 471 #endif 472 473 /* While redrawing the screen this flag is set. It means the screen size 474 * ('lines' and 'rows') must not be changed. */ 475 EXTERN int updating_screen INIT(= FALSE); 476 477 #ifdef FEAT_GUI 478 # ifdef FEAT_MENU 479 /* Menu item just selected, set by check_termcode() */ 480 EXTERN vimmenu_T *current_menu; 481 482 /* Set to TRUE after adding/removing menus to ensure they are updated */ 483 EXTERN int force_menu_update INIT(= FALSE); 484 # endif 485 # ifdef FEAT_GUI_TABLINE 486 /* Tab in tab pages line just selected, set by check_termcode() */ 487 EXTERN int current_tab; 488 489 /* Menu entry in tab pages line menu just selected, set by check_termcode() */ 490 EXTERN int current_tabmenu; 491 # define TABLINE_MENU_CLOSE 1 492 # define TABLINE_MENU_NEW 2 493 # define TABLINE_MENU_OPEN 3 494 # endif 495 496 /* Scrollbar moved and new value, set by check_termcode() */ 497 EXTERN int current_scrollbar; 498 EXTERN long_u scrollbar_value; 499 500 /* found "-rv" or "-reverse" in command line args */ 501 EXTERN int found_reverse_arg INIT(= FALSE); 502 503 /* "-fn" or "-font" command line argument */ 504 EXTERN char *font_argument INIT(= NULL); 505 506 # ifdef FEAT_GUI_GTK 507 /* "-bg" or "-background" command line argument */ 508 EXTERN char *background_argument INIT(= NULL); 509 510 /* "-fg" or "-foreground" command line argument */ 511 EXTERN char *foreground_argument INIT(= NULL); 512 # endif 513 514 /* 515 * While executing external commands or in Ex mode, should not insert GUI 516 * events in the input buffer: Set hold_gui_events to non-zero. 517 * 518 * volatile because it is used in signal handler sig_sysmouse(). 519 */ 520 EXTERN volatile sig_atomic_t hold_gui_events INIT(= 0); 521 522 /* 523 * When resizing the shell is postponed, remember the new size, and call 524 * gui_resize_shell() later. 525 */ 526 EXTERN int new_pixel_width INIT(= 0); 527 EXTERN int new_pixel_height INIT(= 0); 528 529 /* Window position from ":winpos", to be used when opening the GUI window. */ 530 EXTERN int gui_win_x INIT(= -1); 531 EXTERN int gui_win_y INIT(= -1); 532 #endif 533 534 #ifdef FEAT_CLIPBOARD 535 EXTERN VimClipboard clip_star; /* PRIMARY selection in X11 */ 536 # ifdef FEAT_X11 537 EXTERN VimClipboard clip_plus; /* CLIPBOARD selection in X11 */ 538 # else 539 # define clip_plus clip_star /* there is only one clipboard */ 540 # define ONE_CLIPBOARD 541 # endif 542 543 # define CLIP_UNNAMED 1 544 # define CLIP_UNNAMED_PLUS 2 545 EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */ 546 547 EXTERN int clip_autoselect_star INIT(= FALSE); 548 EXTERN int clip_autoselect_plus INIT(= FALSE); 549 EXTERN int clip_autoselectml INIT(= FALSE); 550 EXTERN int clip_html INIT(= FALSE); 551 EXTERN regprog_T *clip_exclude_prog INIT(= NULL); 552 EXTERN int clip_unnamed_saved INIT(= 0); 553 #endif 554 555 /* 556 * All windows are linked in a list. firstwin points to the first entry, 557 * lastwin to the last entry (can be the same as firstwin) and curwin to the 558 * currently active window. 559 */ 560 EXTERN win_T *firstwin; /* first window */ 561 EXTERN win_T *lastwin; /* last window */ 562 EXTERN win_T *prevwin INIT(= NULL); /* previous window */ 563 # define ONE_WINDOW (firstwin == lastwin) 564 # define W_NEXT(wp) ((wp)->w_next) 565 # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) 566 # define FOR_ALL_FRAMES(frp, first_frame) \ 567 for (frp = first_frame; frp != NULL; frp = frp->fr_next) 568 # define FOR_ALL_TABPAGES(tp) for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) 569 # define FOR_ALL_WINDOWS_IN_TAB(tp, wp) \ 570 for ((wp) = ((tp) == NULL || (tp) == curtab) \ 571 ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) 572 /* 573 * When using this macro "break" only breaks out of the inner loop. Use "goto" 574 * to break out of the tabpage loop. 575 */ 576 # define FOR_ALL_TAB_WINDOWS(tp, wp) \ 577 for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ 578 for ((wp) = ((tp) == curtab) \ 579 ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) 580 581 EXTERN win_T *curwin; /* currently active window */ 582 583 EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ 584 EXTERN int aucmd_win_used INIT(= FALSE); /* aucmd_win is being used */ 585 586 /* 587 * The window layout is kept in a tree of frames. topframe points to the top 588 * of the tree. 589 */ 590 EXTERN frame_T *topframe; /* top of the window frame tree */ 591 592 /* 593 * Tab pages are alternative topframes. "first_tabpage" points to the first 594 * one in the list, "curtab" is the current one. 595 */ 596 EXTERN tabpage_T *first_tabpage; 597 EXTERN tabpage_T *curtab; 598 EXTERN int redraw_tabline INIT(= FALSE); /* need to redraw tabline */ 599 600 /* 601 * All buffers are linked in a list. 'firstbuf' points to the first entry, 602 * 'lastbuf' to the last entry and 'curbuf' to the currently active buffer. 603 */ 604 EXTERN buf_T *firstbuf INIT(= NULL); /* first buffer */ 605 EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */ 606 EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */ 607 608 #define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next) 609 610 // Iterate through all the signs placed in a buffer 611 #define FOR_ALL_SIGNS_IN_BUF(buf, sign) \ 612 for (sign = buf->b_signlist; sign != NULL; sign = sign->next) 613 614 /* Flag that is set when switching off 'swapfile'. It means that all blocks 615 * are to be loaded into memory. Shouldn't be global... */ 616 EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */ 617 618 /* 619 * List of files being edited (global argument list). curwin->w_alist points 620 * to this when the window is using the global argument list. 621 */ 622 EXTERN alist_T global_alist; /* global argument list */ 623 EXTERN int max_alist_id INIT(= 0); /* the previous argument list id */ 624 EXTERN int arg_had_last INIT(= FALSE); /* accessed last file in 625 global_alist */ 626 627 EXTERN int ru_col; /* column for ruler */ 628 #ifdef FEAT_STL_OPT 629 EXTERN int ru_wid; /* 'rulerfmt' width of ruler when non-zero */ 630 #endif 631 EXTERN int sc_col; /* column for shown command */ 632 633 #ifdef TEMPDIRNAMES 634 EXTERN char_u *vim_tempdir INIT(= NULL); /* Name of Vim's own temp dir. 635 Ends in a slash. */ 636 #endif 637 638 /* 639 * When starting or exiting some things are done differently (e.g. screen 640 * updating). 641 */ 642 EXTERN int starting INIT(= NO_SCREEN); 643 /* first NO_SCREEN, then NO_BUFFERS and then 644 * set to 0 when starting up finished */ 645 EXTERN int exiting INIT(= FALSE); 646 /* TRUE when planning to exit Vim. Might 647 * still keep on running if there is a changed 648 * buffer. */ 649 EXTERN int really_exiting INIT(= FALSE); 650 /* TRUE when we are sure to exit, e.g., after 651 * a deadly signal */ 652 EXTERN int v_dying INIT(= 0); /* internal value of v:dying */ 653 EXTERN int stdout_isatty INIT(= TRUE); /* is stdout a terminal? */ 654 655 #if defined(FEAT_AUTOCHDIR) 656 EXTERN int test_autochdir INIT(= FALSE); 657 #endif 658 #if defined(EXITFREE) 659 EXTERN int entered_free_all_mem INIT(= FALSE); 660 /* TRUE when in or after free_all_mem() */ 661 #endif 662 /* volatile because it is used in signal handler deathtrap(). */ 663 EXTERN volatile sig_atomic_t full_screen INIT(= FALSE); 664 /* TRUE when doing full-screen output 665 * otherwise only writing some messages */ 666 667 EXTERN int restricted INIT(= FALSE); 668 /* TRUE when started as "rvim" */ 669 EXTERN int secure INIT(= FALSE); 670 /* non-zero when only "safe" commands are 671 * allowed, e.g. when sourcing .exrc or .vimrc 672 * in current directory */ 673 674 EXTERN int textlock INIT(= 0); 675 /* non-zero when changing text and jumping to 676 * another window or buffer is not allowed */ 677 678 EXTERN int curbuf_lock INIT(= 0); 679 /* non-zero when the current buffer can't be 680 * changed. Used for FileChangedRO. */ 681 EXTERN int allbuf_lock INIT(= 0); 682 /* non-zero when no buffer name can be 683 * changed, no buffer can be deleted and 684 * current directory can't be changed. 685 * Used for SwapExists et al. */ 686 #ifdef HAVE_SANDBOX 687 EXTERN int sandbox INIT(= 0); 688 /* Non-zero when evaluating an expression in a 689 * "sandbox". Several things are not allowed 690 * then. */ 691 #endif 692 693 EXTERN int silent_mode INIT(= FALSE); 694 /* set to TRUE when "-s" commandline argument 695 * used for ex */ 696 697 EXTERN pos_T VIsual; /* start position of active Visual selection */ 698 EXTERN int VIsual_active INIT(= FALSE); 699 /* whether Visual mode is active */ 700 EXTERN int VIsual_select INIT(= FALSE); 701 /* whether Select mode is active */ 702 EXTERN int VIsual_reselect; 703 /* whether to restart the selection after a 704 * Select mode mapping or menu */ 705 706 EXTERN int VIsual_mode INIT(= 'v'); 707 /* type of Visual mode */ 708 709 EXTERN int redo_VIsual_busy INIT(= FALSE); 710 /* TRUE when redoing Visual */ 711 712 #ifdef FEAT_MOUSE 713 /* 714 * When pasting text with the middle mouse button in visual mode with 715 * restart_edit set, remember where it started so we can set Insstart. 716 */ 717 EXTERN pos_T where_paste_started; 718 #endif 719 720 /* 721 * This flag is used to make auto-indent work right on lines where only a 722 * <RETURN> or <ESC> is typed. It is set when an auto-indent is done, and 723 * reset when any other editing is done on the line. If an <ESC> or <RETURN> 724 * is received, and did_ai is TRUE, the line is truncated. 725 */ 726 EXTERN int did_ai INIT(= FALSE); 727 728 /* 729 * Column of first char after autoindent. 0 when no autoindent done. Used 730 * when 'backspace' is 0, to avoid backspacing over autoindent. 731 */ 732 EXTERN colnr_T ai_col INIT(= 0); 733 734 #ifdef FEAT_COMMENTS 735 /* 736 * This is a character which will end a start-middle-end comment when typed as 737 * the first character on a new line. It is taken from the last character of 738 * the "end" comment leader when the COM_AUTO_END flag is given for that 739 * comment end in 'comments'. It is only valid when did_ai is TRUE. 740 */ 741 EXTERN int end_comment_pending INIT(= NUL); 742 #endif 743 744 /* 745 * This flag is set after a ":syncbind" to let the check_scrollbind() function 746 * know that it should not attempt to perform scrollbinding due to the scroll 747 * that was a result of the ":syncbind." (Otherwise, check_scrollbind() will 748 * undo some of the work done by ":syncbind.") -ralston 749 */ 750 EXTERN int did_syncbind INIT(= FALSE); 751 752 #ifdef FEAT_SMARTINDENT 753 /* 754 * This flag is set when a smart indent has been performed. When the next typed 755 * character is a '{' the inserted tab will be deleted again. 756 */ 757 EXTERN int did_si INIT(= FALSE); 758 759 /* 760 * This flag is set after an auto indent. If the next typed character is a '}' 761 * one indent will be removed. 762 */ 763 EXTERN int can_si INIT(= FALSE); 764 765 /* 766 * This flag is set after an "O" command. If the next typed character is a '{' 767 * one indent will be removed. 768 */ 769 EXTERN int can_si_back INIT(= FALSE); 770 #endif 771 772 EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ 773 #ifdef DO_INIT 774 = {0, 0, 0} 775 #endif 776 ; 777 778 /* 779 * Stuff for insert mode. 780 */ 781 EXTERN pos_T Insstart; /* This is where the latest 782 * insert/append mode started. */ 783 784 /* This is where the latest insert/append mode started. In contrast to 785 * Insstart, this won't be reset by certain keys and is needed for 786 * op_insert(), to detect correctly where inserting by the user started. */ 787 EXTERN pos_T Insstart_orig; 788 789 /* 790 * Stuff for VREPLACE mode. 791 */ 792 EXTERN int orig_line_count INIT(= 0); /* Line count when "gR" started */ 793 EXTERN int vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */ 794 795 #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) 796 /* argument to SETJMP() for handling X IO errors */ 797 EXTERN JMP_BUF x_jump_env; 798 #endif 799 800 /* 801 * These flags are set based upon 'fileencoding'. 802 * Note that "enc_utf8" is also set for "unicode", because the characters are 803 * internally stored as UTF-8 (to avoid trouble with NUL bytes). 804 */ 805 #define DBCS_JPN 932 /* japan */ 806 #define DBCS_JPNU 9932 /* euc-jp */ 807 #define DBCS_KOR 949 /* korea */ 808 #define DBCS_KORU 9949 /* euc-kr */ 809 #define DBCS_CHS 936 /* chinese */ 810 #define DBCS_CHSU 9936 /* euc-cn */ 811 #define DBCS_CHT 950 /* taiwan */ 812 #define DBCS_CHTU 9950 /* euc-tw */ 813 #define DBCS_2BYTE 1 /* 2byte- */ 814 #define DBCS_DEBUG -1 815 816 EXTERN int enc_dbcs INIT(= 0); /* One of DBCS_xxx values if 817 DBCS encoding */ 818 EXTERN int enc_unicode INIT(= 0); /* 2: UCS-2 or UTF-16, 4: UCS-4 */ 819 EXTERN int enc_utf8 INIT(= FALSE); /* UTF-8 encoded Unicode */ 820 EXTERN int enc_latin1like INIT(= TRUE); /* 'encoding' is latin1 comp. */ 821 #if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD) 822 /* Codepage nr of 'encoding'. Negative means it's not been set yet, zero 823 * means 'encoding' is not a valid codepage. */ 824 EXTERN int enc_codepage INIT(= -1); 825 EXTERN int enc_latin9 INIT(= FALSE); /* 'encoding' is latin9 */ 826 #endif 827 EXTERN int has_mbyte INIT(= 0); /* any multi-byte encoding */ 828 829 #if defined(WIN3264) 830 EXTERN int wide_WindowProc INIT(= FALSE); /* use wide WindowProc() */ 831 #endif 832 833 /* 834 * To speed up BYTELEN() we fill a table with the byte lengths whenever 835 * enc_utf8 or enc_dbcs changes. 836 */ 837 EXTERN char mb_bytelen_tab[256]; 838 839 /* Variables that tell what conversion is used for keyboard input and display 840 * output. */ 841 EXTERN vimconv_T input_conv; /* type of input conversion */ 842 EXTERN vimconv_T output_conv; /* type of output conversion */ 843 844 /* 845 * Function pointers, used to quickly get to the right function. Each has 846 * three possible values: latin_ (8-bit), utfc_ or utf_ (utf-8) and dbcs_ 847 * (DBCS). 848 * The value is set in mb_init(); 849 */ 850 /* length of char in bytes, including following composing chars */ 851 EXTERN int (*mb_ptr2len)(char_u *p) INIT(= latin_ptr2len); 852 /* idem, with limit on string length */ 853 EXTERN int (*mb_ptr2len_len)(char_u *p, int size) INIT(= latin_ptr2len_len); 854 /* byte length of char */ 855 EXTERN int (*mb_char2len)(int c) INIT(= latin_char2len); 856 /* convert char to bytes, return the length */ 857 EXTERN int (*mb_char2bytes)(int c, char_u *buf) INIT(= latin_char2bytes); 858 EXTERN int (*mb_ptr2cells)(char_u *p) INIT(= latin_ptr2cells); 859 EXTERN int (*mb_ptr2cells_len)(char_u *p, int size) INIT(= latin_ptr2cells_len); 860 EXTERN int (*mb_char2cells)(int c) INIT(= latin_char2cells); 861 EXTERN int (*mb_off2cells)(unsigned off, unsigned max_off) INIT(= latin_off2cells); 862 EXTERN int (*mb_ptr2char)(char_u *p) INIT(= latin_ptr2char); 863 EXTERN int (*mb_head_off)(char_u *base, char_u *p) INIT(= latin_head_off); 864 865 # if defined(USE_ICONV) && defined(DYNAMIC_ICONV) 866 /* Pointers to functions and variables to be loaded at runtime */ 867 EXTERN size_t (*iconv) (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 868 EXTERN iconv_t (*iconv_open) (const char *tocode, const char *fromcode); 869 EXTERN int (*iconv_close) (iconv_t cd); 870 EXTERN int (*iconvctl) (iconv_t cd, int request, void *argument); 871 EXTERN int* (*iconv_errno) (void); 872 # endif 873 874 875 #ifdef FEAT_XIM 876 # ifdef FEAT_GUI_GTK 877 EXTERN GtkIMContext *xic INIT(= NULL); 878 /* 879 * Start and end column of the preedit area in virtual columns from the start 880 * of the text line. When there is no preedit area they are set to MAXCOL. 881 * "preedit_end_col" is needed for coloring the preedited string. Drawing the 882 * color between "preedit_start_col" and curpos did not work, because some XIM 883 * set the cursor position to the first char of the string. 884 */ 885 EXTERN colnr_T preedit_start_col INIT(= MAXCOL); 886 EXTERN colnr_T preedit_end_col INIT(= MAXCOL); 887 888 /* "xim_changed_while_preediting" is set when changed() can set the 'modified' 889 * flag even while preediting. */ 890 EXTERN int xim_changed_while_preediting INIT(= FALSE); 891 # else 892 EXTERN XIC xic INIT(= NULL); 893 # endif 894 # ifdef FEAT_GUI 895 EXTERN guicolor_T xim_fg_color INIT(= INVALCOLOR); 896 EXTERN guicolor_T xim_bg_color INIT(= INVALCOLOR); 897 # endif 898 #endif 899 900 #ifdef FEAT_HANGULIN 901 EXTERN int composing_hangul INIT(= 0); 902 EXTERN char_u composing_hangul_buffer[5]; 903 #endif 904 905 /* 906 * "State" is the main state of Vim. 907 * There are other variables that modify the state: 908 * "Visual_mode" When State is NORMAL or INSERT. 909 * "finish_op" When State is NORMAL, after typing the operator and before 910 * typing the motion command. 911 * "motion_force" Last motion_force from do_pending_operator() 912 * "debug_mode" Debug mode. 913 */ 914 EXTERN int State INIT(= NORMAL); /* This is the current state of the 915 * command interpreter. */ 916 #ifdef FEAT_EVAL 917 EXTERN int debug_mode INIT(= FALSE); 918 #endif 919 920 EXTERN int finish_op INIT(= FALSE);/* TRUE while an operator is pending */ 921 EXTERN long opcount INIT(= 0); /* count for pending operator */ 922 EXTERN int motion_force INIT(= 0); // motion force for pending operator 923 924 /* 925 * Ex mode (Q) state 926 */ 927 EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */ 928 EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */ 929 930 EXTERN int reg_recording INIT(= 0); /* register for recording or zero */ 931 EXTERN int reg_executing INIT(= 0); /* register being executed or zero */ 932 933 EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */ 934 EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */ 935 EXTERN int allow_keys INIT(= FALSE); /* allow key codes when no_mapping 936 * is set */ 937 EXTERN int no_u_sync INIT(= 0); /* Don't call u_sync() */ 938 #ifdef FEAT_EVAL 939 EXTERN int u_sync_once INIT(= 0); /* Call u_sync() once when evaluating 940 an expression. */ 941 #endif 942 943 EXTERN int restart_edit INIT(= 0); /* call edit when next cmd finished */ 944 EXTERN int arrow_used; /* Normally FALSE, set to TRUE after 945 * hitting cursor key in insert mode. 946 * Used by vgetorpeek() to decide when 947 * to call u_sync() */ 948 EXTERN int ins_at_eol INIT(= FALSE); /* put cursor after eol when 949 restarting edit after CTRL-O */ 950 #ifdef FEAT_INS_EXPAND 951 EXTERN char_u *edit_submode INIT(= NULL); /* msg for CTRL-X submode */ 952 EXTERN char_u *edit_submode_pre INIT(= NULL); /* prepended to edit_submode */ 953 EXTERN char_u *edit_submode_extra INIT(= NULL);/* appended to edit_submode */ 954 EXTERN hlf_T edit_submode_highl; /* highl. method for extra info */ 955 #endif 956 957 EXTERN int no_abbr INIT(= TRUE); /* TRUE when no abbreviations loaded */ 958 959 #ifdef USE_EXE_NAME 960 EXTERN char_u *exe_name; /* the name of the executable */ 961 #endif 962 963 #ifdef USE_ON_FLY_SCROLL 964 EXTERN int dont_scroll INIT(= FALSE);/* don't use scrollbars when TRUE */ 965 #endif 966 EXTERN int mapped_ctrl_c INIT(= FALSE); /* modes where CTRL-C is mapped */ 967 EXTERN int ctrl_c_interrupts INIT(= TRUE); /* CTRL-C sets got_int */ 968 969 EXTERN cmdmod_T cmdmod; /* Ex command modifiers */ 970 971 EXTERN int msg_silent INIT(= 0); /* don't print messages */ 972 EXTERN int emsg_silent INIT(= 0); /* don't print error messages */ 973 EXTERN int emsg_noredir INIT(= 0); /* don't redirect error messages */ 974 EXTERN int cmd_silent INIT(= FALSE); /* don't echo the command line */ 975 976 # define HAS_SWAP_EXISTS_ACTION 977 EXTERN int swap_exists_action INIT(= SEA_NONE); 978 /* For dialog when swap file already 979 * exists. */ 980 EXTERN int swap_exists_did_quit INIT(= FALSE); 981 /* Selected "quit" at the dialog. */ 982 983 EXTERN char_u *IObuff; /* sprintf's are done in this buffer, 984 size is IOSIZE */ 985 EXTERN char_u *NameBuff; /* file names are expanded in this 986 * buffer, size is MAXPATHL */ 987 EXTERN char msg_buf[MSG_BUF_LEN]; /* small buffer for messages */ 988 989 /* When non-zero, postpone redrawing. */ 990 EXTERN int RedrawingDisabled INIT(= 0); 991 992 EXTERN int readonlymode INIT(= FALSE); /* Set to TRUE for "view" */ 993 EXTERN int recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */ 994 995 EXTERN typebuf_T typebuf /* typeahead buffer */ 996 #ifdef DO_INIT 997 = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0} 998 #endif 999 ; 1000 EXTERN int ex_normal_busy INIT(= 0); /* recursiveness of ex_normal() */ 1001 EXTERN int ex_normal_lock INIT(= 0); /* forbid use of ex_normal() */ 1002 #ifdef FEAT_EVAL 1003 EXTERN int ignore_script INIT(= FALSE); /* ignore script input */ 1004 #endif 1005 EXTERN int stop_insert_mode; /* for ":stopinsert" and 'insertmode' */ 1006 1007 EXTERN int KeyTyped; /* TRUE if user typed current char */ 1008 EXTERN int KeyStuffed; /* TRUE if current char from stuffbuf */ 1009 #ifdef HAVE_INPUT_METHOD 1010 EXTERN int vgetc_im_active; /* Input Method was active for last 1011 character obtained from vgetc() */ 1012 #endif 1013 EXTERN int maptick INIT(= 0); /* tick for each non-mapped char */ 1014 1015 EXTERN int must_redraw INIT(= 0); /* type of redraw necessary */ 1016 EXTERN int skip_redraw INIT(= FALSE); /* skip redraw once */ 1017 EXTERN int do_redraw INIT(= FALSE); /* extra redraw once */ 1018 1019 EXTERN int need_highlight_changed INIT(= TRUE); 1020 1021 #define NSCRIPT 15 1022 EXTERN FILE *scriptin[NSCRIPT]; /* streams to read script from */ 1023 EXTERN int curscript INIT(= 0); /* index in scriptin[] */ 1024 EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ 1025 EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ 1026 1027 /* volatile because it is used in signal handler catch_sigint(). */ 1028 EXTERN volatile sig_atomic_t got_int INIT(= FALSE); /* set to TRUE when interrupt 1029 signal occurred */ 1030 #ifdef USE_TERM_CONSOLE 1031 EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */ 1032 #endif 1033 EXTERN int termcap_active INIT(= FALSE); /* set by starttermcap() */ 1034 EXTERN int cur_tmode INIT(= TMODE_COOK); /* input terminal mode */ 1035 EXTERN int bangredo INIT(= FALSE); /* set to TRUE with ! command */ 1036 EXTERN int searchcmdlen; /* length of previous search cmd */ 1037 #ifdef FEAT_SYN_HL 1038 EXTERN int reg_do_extmatch INIT(= 0); /* Used when compiling regexp: 1039 * REX_SET to allow \z\(...\), 1040 * REX_USE to allow \z\1 et al. */ 1041 EXTERN reg_extmatch_T *re_extmatch_in INIT(= NULL); /* Used by vim_regexec(): 1042 * strings for \z\1...\z\9 */ 1043 EXTERN reg_extmatch_T *re_extmatch_out INIT(= NULL); /* Set by vim_regexec() 1044 * to store \z\(...\) matches */ 1045 #endif 1046 1047 EXTERN int did_outofmem_msg INIT(= FALSE); 1048 /* set after out of memory msg */ 1049 EXTERN int did_swapwrite_msg INIT(= FALSE); 1050 /* set after swap write error msg */ 1051 EXTERN int undo_off INIT(= FALSE); /* undo switched off for now */ 1052 EXTERN int global_busy INIT(= 0); /* set when :global is executing */ 1053 EXTERN int listcmd_busy INIT(= FALSE); /* set when :argdo, :windo or 1054 :bufdo is executing */ 1055 EXTERN int need_start_insertmode INIT(= FALSE); 1056 /* start insert mode soon */ 1057 EXTERN char_u *last_cmdline INIT(= NULL); /* last command line (for ":) */ 1058 EXTERN char_u *repeat_cmdline INIT(= NULL); /* command line for "." */ 1059 #ifdef FEAT_CMDHIST 1060 EXTERN char_u *new_last_cmdline INIT(= NULL); /* new value for last_cmdline */ 1061 #endif 1062 EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */ 1063 EXTERN int autocmd_fname_full; /* autocmd_fname is full path */ 1064 EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */ 1065 EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */ 1066 EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ 1067 EXTERN pos_T last_cursormoved /* for CursorMoved event */ 1068 # ifdef DO_INIT 1069 = {0, 0, 0} 1070 # endif 1071 ; 1072 1073 EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */ 1074 EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */ 1075 EXTERN int postponed_split_tab INIT(= 0); /* cmdmod.tab */ 1076 #ifdef FEAT_QUICKFIX 1077 EXTERN int g_do_tagpreview INIT(= 0); /* for tag preview commands: 1078 height of preview window */ 1079 #endif 1080 EXTERN int replace_offset INIT(= 0); /* offset for replace_push() */ 1081 1082 EXTERN char_u *escape_chars INIT(= (char_u *)" \t\\\"|"); 1083 /* need backslash in cmd line */ 1084 1085 EXTERN int keep_help_flag INIT(= FALSE); /* doing :ta from help file */ 1086 1087 /* 1088 * When a string option is NULL (which only happens in out-of-memory 1089 * situations), it is set to empty_option, to avoid having to check for NULL 1090 * everywhere. 1091 */ 1092 EXTERN char_u *empty_option INIT(= (char_u *)""); 1093 1094 EXTERN int redir_off INIT(= FALSE); /* no redirection for a moment */ 1095 EXTERN FILE *redir_fd INIT(= NULL); /* message redirection file */ 1096 #ifdef FEAT_EVAL 1097 EXTERN int redir_reg INIT(= 0); /* message redirection register */ 1098 EXTERN int redir_vname INIT(= 0); /* message redirection variable */ 1099 EXTERN int redir_execute INIT(= 0); /* execute() redirection */ 1100 #endif 1101 1102 #ifdef FEAT_LANGMAP 1103 EXTERN char_u langmap_mapchar[256]; /* mapping for language keys */ 1104 #endif 1105 1106 #ifdef FEAT_WILDMENU 1107 EXTERN int save_p_ls INIT(= -1); /* Save 'laststatus' setting */ 1108 EXTERN int save_p_wmh INIT(= -1); /* Save 'winminheight' setting */ 1109 EXTERN int wild_menu_showing INIT(= 0); 1110 # define WM_SHOWN 1 /* wildmenu showing */ 1111 # define WM_SCROLLED 2 /* wildmenu showing with scroll */ 1112 #endif 1113 1114 #ifdef MSWIN 1115 EXTERN char_u toupper_tab[256]; /* table for toupper() */ 1116 EXTERN char_u tolower_tab[256]; /* table for tolower() */ 1117 #endif 1118 1119 #ifdef FEAT_LINEBREAK 1120 EXTERN char breakat_flags[256]; /* which characters are in 'breakat' */ 1121 #endif 1122 1123 /* These are in version.c, call init_longVersion() before use. */ 1124 extern char *Version; 1125 #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC) 1126 extern char longVersion[]; 1127 #else 1128 EXTERN char *longVersion; 1129 #endif 1130 1131 /* 1132 * Some file names are stored in pathdef.c, which is generated from the 1133 * Makefile to make their value depend on the Makefile. 1134 */ 1135 #ifdef HAVE_PATHDEF 1136 extern char_u *default_vim_dir; 1137 extern char_u *default_vimruntime_dir; 1138 extern char_u *all_cflags; 1139 extern char_u *all_lflags; 1140 # ifdef VMS 1141 extern char_u *compiler_version; 1142 extern char_u *compiled_arch; 1143 # endif 1144 extern char_u *compiled_user; 1145 extern char_u *compiled_sys; 1146 #endif 1147 1148 /* When a window has a local directory, the absolute path of the global 1149 * current directory is stored here (in allocated memory). If the current 1150 * directory is not a local directory, globaldir is NULL. */ 1151 EXTERN char_u *globaldir INIT(= NULL); 1152 1153 /* Characters from 'listchars' option */ 1154 EXTERN int lcs_eol INIT(= '$'); 1155 EXTERN int lcs_ext INIT(= NUL); 1156 EXTERN int lcs_prec INIT(= NUL); 1157 EXTERN int lcs_nbsp INIT(= NUL); 1158 EXTERN int lcs_space INIT(= NUL); 1159 EXTERN int lcs_tab1 INIT(= NUL); 1160 EXTERN int lcs_tab2 INIT(= NUL); 1161 EXTERN int lcs_tab3 INIT(= NUL); 1162 EXTERN int lcs_trail INIT(= NUL); 1163 #ifdef FEAT_CONCEAL 1164 EXTERN int lcs_conceal INIT(= ' '); 1165 #endif 1166 1167 /* Characters from 'fillchars' option */ 1168 EXTERN int fill_stl INIT(= ' '); 1169 EXTERN int fill_stlnc INIT(= ' '); 1170 EXTERN int fill_vert INIT(= ' '); 1171 EXTERN int fill_fold INIT(= '-'); 1172 EXTERN int fill_diff INIT(= '-'); 1173 1174 #ifdef FEAT_FOLDING 1175 EXTERN int disable_fold_update INIT(= 0); 1176 #endif 1177 1178 /* Whether 'keymodel' contains "stopsel" and "startsel". */ 1179 EXTERN int km_stopsel INIT(= FALSE); 1180 EXTERN int km_startsel INIT(= FALSE); 1181 1182 #ifdef FEAT_CMDWIN 1183 EXTERN int cedit_key INIT(= -1); /* key value of 'cedit' option */ 1184 EXTERN int cmdwin_type INIT(= 0); /* type of cmdline window or 0 */ 1185 EXTERN int cmdwin_result INIT(= 0); /* result of cmdline window or 0 */ 1186 #endif 1187 1188 EXTERN char_u no_lines_msg[] INIT(= N_("--No lines in buffer--")); 1189 1190 /* 1191 * When ":global" is used to number of substitutions and changed lines is 1192 * accumulated until it's finished. 1193 * Also used for ":spellrepall". 1194 */ 1195 EXTERN long sub_nsubs; /* total number of substitutions */ 1196 EXTERN linenr_T sub_nlines; /* total number of lines changed */ 1197 1198 /* table to store parsed 'wildmode' */ 1199 EXTERN char_u wim_flags[4]; 1200 1201 #if defined(FEAT_TITLE) && defined(FEAT_STL_OPT) 1202 /* whether titlestring and iconstring contains statusline syntax */ 1203 # define STL_IN_ICON 1 1204 # define STL_IN_TITLE 2 1205 EXTERN int stl_syntax INIT(= 0); 1206 #endif 1207 1208 #ifdef FEAT_SEARCH_EXTRA 1209 /* don't use 'hlsearch' temporarily */ 1210 EXTERN int no_hlsearch INIT(= FALSE); 1211 #endif 1212 1213 #if defined(FEAT_BEVAL) && !defined(NO_X11_INCLUDES) 1214 EXTERN BalloonEval *balloonEval INIT(= NULL); 1215 EXTERN int balloonEvalForTerm INIT(= FALSE); 1216 # if defined(FEAT_NETBEANS_INTG) 1217 EXTERN int bevalServers INIT(= 0); 1218 # define BEVAL_NETBEANS 0x01 1219 # endif 1220 #endif 1221 1222 #ifdef CURSOR_SHAPE 1223 /* the table is in misc2.c, because of initializations */ 1224 extern cursorentry_T shape_table[SHAPE_IDX_COUNT]; 1225 #endif 1226 1227 #ifdef FEAT_PRINTER 1228 /* 1229 * Printer stuff shared between hardcopy.c and machine-specific printing code. 1230 */ 1231 # define OPT_PRINT_TOP 0 1232 # define OPT_PRINT_BOT 1 1233 # define OPT_PRINT_LEFT 2 1234 # define OPT_PRINT_RIGHT 3 1235 # define OPT_PRINT_HEADERHEIGHT 4 1236 # define OPT_PRINT_SYNTAX 5 1237 # define OPT_PRINT_NUMBER 6 1238 # define OPT_PRINT_WRAP 7 1239 # define OPT_PRINT_DUPLEX 8 1240 # define OPT_PRINT_PORTRAIT 9 1241 # define OPT_PRINT_PAPER 10 1242 # define OPT_PRINT_COLLATE 11 1243 # define OPT_PRINT_JOBSPLIT 12 1244 # define OPT_PRINT_FORMFEED 13 1245 1246 # define OPT_PRINT_NUM_OPTIONS 14 1247 1248 EXTERN option_table_T printer_opts[OPT_PRINT_NUM_OPTIONS] 1249 # ifdef DO_INIT 1250 = 1251 { 1252 {"top", TRUE, 0, NULL, 0, FALSE}, 1253 {"bottom", TRUE, 0, NULL, 0, FALSE}, 1254 {"left", TRUE, 0, NULL, 0, FALSE}, 1255 {"right", TRUE, 0, NULL, 0, FALSE}, 1256 {"header", TRUE, 0, NULL, 0, FALSE}, 1257 {"syntax", FALSE, 0, NULL, 0, FALSE}, 1258 {"number", FALSE, 0, NULL, 0, FALSE}, 1259 {"wrap", FALSE, 0, NULL, 0, FALSE}, 1260 {"duplex", FALSE, 0, NULL, 0, FALSE}, 1261 {"portrait", FALSE, 0, NULL, 0, FALSE}, 1262 {"paper", FALSE, 0, NULL, 0, FALSE}, 1263 {"collate", FALSE, 0, NULL, 0, FALSE}, 1264 {"jobsplit", FALSE, 0, NULL, 0, FALSE}, 1265 {"formfeed", FALSE, 0, NULL, 0, FALSE}, 1266 } 1267 # endif 1268 ; 1269 1270 /* For prt_get_unit(). */ 1271 # define PRT_UNIT_NONE -1 1272 # define PRT_UNIT_PERC 0 1273 # define PRT_UNIT_INCH 1 1274 # define PRT_UNIT_MM 2 1275 # define PRT_UNIT_POINT 3 1276 # define PRT_UNIT_NAMES {"pc", "in", "mm", "pt"} 1277 #endif 1278 1279 #if (defined(FEAT_PRINTER) && defined(FEAT_STL_OPT)) \ 1280 || defined(FEAT_GUI_TABLINE) 1281 /* Page number used for %N in 'pageheader' and 'guitablabel'. */ 1282 EXTERN linenr_T printer_page_num; 1283 #endif 1284 1285 #ifdef FEAT_XCLIPBOARD 1286 EXTERN char *xterm_display INIT(= NULL); /* xterm display name; points 1287 into argv[] */ 1288 EXTERN Display *xterm_dpy INIT(= NULL); /* xterm display pointer */ 1289 #endif 1290 #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) 1291 EXTERN XtAppContext app_context INIT(= (XtAppContext)NULL); 1292 #endif 1293 1294 #ifdef FEAT_GUI_GTK 1295 EXTERN guint32 gtk_socket_id INIT(= 0); 1296 EXTERN int echo_wid_arg INIT(= FALSE); /* --echo-wid argument */ 1297 #endif 1298 1299 #ifdef FEAT_GUI_W32 1300 /* 1301 * The value of the --windowid argument. 1302 * For embedding gvim inside another application. 1303 */ 1304 EXTERN long_u win_socket_id INIT(= 0); 1305 #endif 1306 1307 #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL) 1308 EXTERN int typebuf_was_filled INIT(= FALSE); /* received text from client 1309 or from feedkeys() */ 1310 #endif 1311 1312 #ifdef FEAT_CLIENTSERVER 1313 EXTERN char_u *serverName INIT(= NULL); /* name of the server */ 1314 # ifdef FEAT_X11 1315 EXTERN Window commWindow INIT(= None); 1316 EXTERN Window clientWindow INIT(= None); 1317 EXTERN Atom commProperty INIT(= None); 1318 EXTERN char_u *serverDelayedStartName INIT(= NULL); 1319 # else 1320 # ifdef PROTO 1321 typedef int HWND; 1322 # endif 1323 EXTERN HWND clientWindow INIT(= 0); 1324 # endif 1325 #endif 1326 1327 #if defined(UNIX) || defined(VMS) 1328 EXTERN int term_is_xterm INIT(= FALSE); /* xterm-like 'term' */ 1329 #endif 1330 1331 #ifdef BACKSLASH_IN_FILENAME 1332 EXTERN char psepc INIT(= '\\'); /* normal path separator character */ 1333 EXTERN char psepcN INIT(= '/'); /* abnormal path separator character */ 1334 /* normal path separator string */ 1335 EXTERN char pseps[2] INIT(= {'\\' COMMA 0}); 1336 #endif 1337 1338 /* Set to TRUE when an operator is being executed with virtual editing, MAYBE 1339 * when no operator is being executed, FALSE otherwise. */ 1340 EXTERN int virtual_op INIT(= MAYBE); 1341 1342 #ifdef FEAT_SYN_HL 1343 /* Display tick, incremented for each call to update_screen() */ 1344 EXTERN disptick_T display_tick INIT(= 0); 1345 #endif 1346 1347 #ifdef FEAT_SPELL 1348 /* Line in which spell checking wasn't highlighted because it touched the 1349 * cursor position in Insert mode. */ 1350 EXTERN linenr_T spell_redraw_lnum INIT(= 0); 1351 #endif 1352 1353 #ifdef FEAT_CONCEAL 1354 /* Set when the cursor line needs to be redrawn. */ 1355 EXTERN int need_cursor_line_redraw INIT(= FALSE); 1356 #endif 1357 1358 #ifdef USE_MCH_ERRMSG 1359 /* Grow array to collect error messages in until they can be displayed. */ 1360 EXTERN garray_T error_ga 1361 # ifdef DO_INIT 1362 = {0, 0, 0, 0, NULL} 1363 # endif 1364 ; 1365 #endif 1366 1367 #ifdef FEAT_NETBEANS_INTG 1368 EXTERN char *netbeansArg INIT(= NULL); /* the -nb[:host:port:passwd] arg */ 1369 EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */ 1370 EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */ 1371 EXTERN int netbeansReadFile INIT(= 1); /* OK to read from disk if != 0 */ 1372 EXTERN int netbeansSuppressNoLines INIT(= 0); /* skip "No lines in buffer" */ 1373 #endif 1374 1375 /* 1376 * The error messages that can be shared are included here. 1377 * Excluded are errors that are only used once and debugging messages. 1378 */ 1379 EXTERN char e_abort[] INIT(= N_("E470: Command aborted")); 1380 EXTERN char e_argreq[] INIT(= N_("E471: Argument required")); 1381 EXTERN char e_backslash[] INIT(= N_("E10: \\ should be followed by /, ? or &")); 1382 #ifdef FEAT_CMDWIN 1383 EXTERN char e_cmdwin[] INIT(= N_("E11: Invalid in command-line window; <CR> executes, CTRL-C quits")); 1384 #endif 1385 EXTERN char e_curdir[] INIT(= N_("E12: Command not allowed from exrc/vimrc in current dir or tag search")); 1386 #ifdef FEAT_EVAL 1387 EXTERN char e_endif[] INIT(= N_("E171: Missing :endif")); 1388 EXTERN char e_endtry[] INIT(= N_("E600: Missing :endtry")); 1389 EXTERN char e_endwhile[] INIT(= N_("E170: Missing :endwhile")); 1390 EXTERN char e_endfor[] INIT(= N_("E170: Missing :endfor")); 1391 EXTERN char e_while[] INIT(= N_("E588: :endwhile without :while")); 1392 EXTERN char e_for[] INIT(= N_("E588: :endfor without :for")); 1393 #endif 1394 EXTERN char e_exists[] INIT(= N_("E13: File exists (add ! to override)")); 1395 EXTERN char e_failed[] INIT(= N_("E472: Command failed")); 1396 #if defined(FEAT_GUI) && defined(FEAT_XFONTSET) 1397 EXTERN char e_fontset[] INIT(= N_("E234: Unknown fontset: %s")); 1398 #endif 1399 #if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MAC) \ 1400 || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MSWIN) 1401 EXTERN char e_font[] INIT(= N_("E235: Unknown font: %s")); 1402 #endif 1403 #if defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK) 1404 EXTERN char e_fontwidth[] INIT(= N_("E236: Font \"%s\" is not fixed-width")); 1405 #endif 1406 EXTERN char e_internal[] INIT(= N_("E473: Internal error")); 1407 EXTERN char e_intern2[] INIT(= N_("E685: Internal error: %s")); 1408 EXTERN char e_interr[] INIT(= N_("Interrupted")); 1409 EXTERN char e_invaddr[] INIT(= N_("E14: Invalid address")); 1410 EXTERN char e_invarg[] INIT(= N_("E474: Invalid argument")); 1411 EXTERN char e_invarg2[] INIT(= N_("E475: Invalid argument: %s")); 1412 EXTERN char e_invargval[] INIT(= N_("E475: Invalid value for argument %s")); 1413 EXTERN char e_invargNval[] INIT(= N_("E475: Invalid value for argument %s: %s")); 1414 #ifdef FEAT_EVAL 1415 EXTERN char e_invexpr2[] INIT(= N_("E15: Invalid expression: %s")); 1416 #endif 1417 EXTERN char e_invrange[] INIT(= N_("E16: Invalid range")); 1418 EXTERN char e_invcmd[] INIT(= N_("E476: Invalid command")); 1419 #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL) 1420 EXTERN char e_isadir2[] INIT(= N_("E17: \"%s\" is a directory")); 1421 #endif 1422 #ifdef FEAT_LIBCALL 1423 EXTERN char e_libcall[] INIT(= N_("E364: Library call failed for \"%s()\"")); 1424 #endif 1425 #ifdef HAVE_FSYNC 1426 EXTERN char e_fsync[] INIT(= N_("E667: Fsync failed")); 1427 #endif 1428 #if defined(DYNAMIC_PERL) \ 1429 || defined(DYNAMIC_PYTHON) || defined(DYNAMIC_PYTHON3) \ 1430 || defined(DYNAMIC_RUBY) \ 1431 || defined(DYNAMIC_TCL) \ 1432 || defined(DYNAMIC_ICONV) \ 1433 || defined(DYNAMIC_GETTEXT) \ 1434 || defined(DYNAMIC_MZSCHEME) \ 1435 || defined(DYNAMIC_LUA) \ 1436 || defined(FEAT_TERMINAL) 1437 EXTERN char e_loadlib[] INIT(= N_("E370: Could not load library %s")); 1438 EXTERN char e_loadfunc[] INIT(= N_("E448: Could not load library function %s")); 1439 #endif 1440 EXTERN char e_markinval[] INIT(= N_("E19: Mark has invalid line number")); 1441 EXTERN char e_marknotset[] INIT(= N_("E20: Mark not set")); 1442 EXTERN char e_modifiable[] INIT(= N_("E21: Cannot make changes, 'modifiable' is off")); 1443 EXTERN char e_nesting[] INIT(= N_("E22: Scripts nested too deep")); 1444 EXTERN char e_noalt[] INIT(= N_("E23: No alternate file")); 1445 EXTERN char e_noabbr[] INIT(= N_("E24: No such abbreviation")); 1446 EXTERN char e_nobang[] INIT(= N_("E477: No ! allowed")); 1447 #ifndef FEAT_GUI 1448 EXTERN char e_nogvim[] INIT(= N_("E25: GUI cannot be used: Not enabled at compile time")); 1449 #endif 1450 #ifndef FEAT_RIGHTLEFT 1451 EXTERN char e_nohebrew[] INIT(= N_("E26: Hebrew cannot be used: Not enabled at compile time\n")); 1452 #endif 1453 #ifndef FEAT_FKMAP 1454 EXTERN char e_nofarsi[] INIT(= N_("E27: Farsi cannot be used: Not enabled at compile time\n")); 1455 #endif 1456 #ifndef FEAT_ARABIC 1457 EXTERN char e_noarabic[] INIT(= N_("E800: Arabic cannot be used: Not enabled at compile time\n")); 1458 #endif 1459 #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_SYN_HL) 1460 EXTERN char e_nogroup[] INIT(= N_("E28: No such highlight group name: %s")); 1461 #endif 1462 EXTERN char e_noinstext[] INIT(= N_("E29: No inserted text yet")); 1463 EXTERN char e_nolastcmd[] INIT(= N_("E30: No previous command line")); 1464 EXTERN char e_nomap[] INIT(= N_("E31: No such mapping")); 1465 EXTERN char e_nomatch[] INIT(= N_("E479: No match")); 1466 EXTERN char e_nomatch2[] INIT(= N_("E480: No match: %s")); 1467 EXTERN char e_noname[] INIT(= N_("E32: No file name")); 1468 EXTERN char e_nopresub[] INIT(= N_("E33: No previous substitute regular expression")); 1469 EXTERN char e_noprev[] INIT(= N_("E34: No previous command")); 1470 EXTERN char e_noprevre[] INIT(= N_("E35: No previous regular expression")); 1471 EXTERN char e_norange[] INIT(= N_("E481: No range allowed")); 1472 EXTERN char e_noroom[] INIT(= N_("E36: Not enough room")); 1473 #ifdef FEAT_CLIENTSERVER 1474 EXTERN char e_noserver[] INIT(= N_("E247: no registered server named \"%s\"")); 1475 #endif 1476 EXTERN char e_notcreate[] INIT(= N_("E482: Can't create file %s")); 1477 EXTERN char e_notmp[] INIT(= N_("E483: Can't get temp file name")); 1478 EXTERN char e_notopen[] INIT(= N_("E484: Can't open file %s")); 1479 EXTERN char e_notread[] INIT(= N_("E485: Can't read file %s")); 1480 EXTERN char e_null[] INIT(= N_("E38: Null argument")); 1481 #if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS) 1482 EXTERN char e_number_exp[] INIT(= N_("E39: Number expected")); 1483 #endif 1484 #ifdef FEAT_QUICKFIX 1485 EXTERN char e_openerrf[] INIT(= N_("E40: Can't open errorfile %s")); 1486 #endif 1487 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) 1488 EXTERN char e_opendisp[] INIT(= N_("E233: cannot open display")); 1489 #endif 1490 EXTERN char e_outofmem[] INIT(= N_("E41: Out of memory!")); 1491 #ifdef FEAT_INS_EXPAND 1492 EXTERN char e_patnotf[] INIT(= N_("Pattern not found")); 1493 #endif 1494 EXTERN char e_patnotf2[] INIT(= N_("E486: Pattern not found: %s")); 1495 EXTERN char e_positive[] INIT(= N_("E487: Argument must be positive")); 1496 #if defined(UNIX) || defined(FEAT_SESSION) 1497 EXTERN char e_prev_dir[] INIT(= N_("E459: Cannot go back to previous directory")); 1498 #endif 1499 1500 #ifdef FEAT_QUICKFIX 1501 EXTERN char e_quickfix[] INIT(= N_("E42: No Errors")); 1502 EXTERN char e_loclist[] INIT(= N_("E776: No location list")); 1503 #endif 1504 EXTERN char e_re_damg[] INIT(= N_("E43: Damaged match string")); 1505 EXTERN char e_re_corr[] INIT(= N_("E44: Corrupted regexp program")); 1506 EXTERN char e_readonly[] INIT(= N_("E45: 'readonly' option is set (add ! to override)")); 1507 #ifdef FEAT_EVAL 1508 EXTERN char e_readonlyvar[] INIT(= N_("E46: Cannot change read-only variable \"%s\"")); 1509 EXTERN char e_readonlysbx[] INIT(= N_("E794: Cannot set variable in the sandbox: \"%s\"")); 1510 EXTERN char e_emptykey[] INIT(= N_("E713: Cannot use empty key for Dictionary")); 1511 EXTERN char e_dictreq[] INIT(= N_("E715: Dictionary required")); 1512 EXTERN char e_listidx[] INIT(= N_("E684: list index out of range: %ld")); 1513 EXTERN char e_blobidx[] INIT(= N_("E979: Blob index out of range: %ld")); 1514 EXTERN char e_invalblob[] INIT(= N_("E978: Invalid operation for Blob")); 1515 EXTERN char e_toomanyarg[] INIT(= N_("E118: Too many arguments for function: %s")); 1516 EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: %s")); 1517 EXTERN char e_listreq[] INIT(= N_("E714: List required")); 1518 EXTERN char e_listblobreq[] INIT(= N_("E897: List or Blob required")); 1519 EXTERN char e_listdictarg[] INIT(= N_("E712: Argument of %s must be a List or Dictionary")); 1520 EXTERN char e_listdictblobarg[] INIT(= N_("E896: Argument of %s must be a List, Dictionary or Blob")); 1521 #endif 1522 #ifdef FEAT_QUICKFIX 1523 EXTERN char e_readerrf[] INIT(= N_("E47: Error while reading errorfile")); 1524 #endif 1525 #ifdef HAVE_SANDBOX 1526 EXTERN char e_sandbox[] INIT(= N_("E48: Not allowed in sandbox")); 1527 #endif 1528 EXTERN char e_secure[] INIT(= N_("E523: Not allowed here")); 1529 #if defined(AMIGA) || defined(MACOS_X) || defined(MSWIN) \ 1530 || defined(UNIX) || defined(VMS) 1531 EXTERN char e_screenmode[] INIT(= N_("E359: Screen mode setting not supported")); 1532 #endif 1533 EXTERN char e_scroll[] INIT(= N_("E49: Invalid scroll size")); 1534 EXTERN char e_shellempty[] INIT(= N_("E91: 'shell' option is empty")); 1535 #if defined(FEAT_SIGN_ICONS) && !defined(FEAT_GUI_GTK) 1536 EXTERN char e_signdata[] INIT(= N_("E255: Couldn't read in sign data!")); 1537 #endif 1538 EXTERN char e_swapclose[] INIT(= N_("E72: Close error on swap file")); 1539 EXTERN char e_tagstack[] INIT(= N_("E73: tag stack empty")); 1540 EXTERN char e_toocompl[] INIT(= N_("E74: Command too complex")); 1541 EXTERN char e_longname[] INIT(= N_("E75: Name too long")); 1542 EXTERN char e_toomsbra[] INIT(= N_("E76: Too many [")); 1543 EXTERN char e_toomany[] INIT(= N_("E77: Too many file names")); 1544 EXTERN char e_trailing[] INIT(= N_("E488: Trailing characters")); 1545 EXTERN char e_umark[] INIT(= N_("E78: Unknown mark")); 1546 EXTERN char e_wildexpand[] INIT(= N_("E79: Cannot expand wildcards")); 1547 EXTERN char e_winheight[] INIT(= N_("E591: 'winheight' cannot be smaller than 'winminheight'")); 1548 EXTERN char e_winwidth[] INIT(= N_("E592: 'winwidth' cannot be smaller than 'winminwidth'")); 1549 EXTERN char e_write[] INIT(= N_("E80: Error while writing")); 1550 EXTERN char e_zerocount[] INIT(= N_("E939: Positive count required")); 1551 #ifdef FEAT_EVAL 1552 EXTERN char e_usingsid[] INIT(= N_("E81: Using <SID> not in a script context")); 1553 #endif 1554 #ifdef FEAT_CLIENTSERVER 1555 EXTERN char e_invexprmsg[] INIT(= N_("E449: Invalid expression received")); 1556 #endif 1557 #ifdef FEAT_NETBEANS_INTG 1558 EXTERN char e_guarded[] INIT(= N_("E463: Region is guarded, cannot modify")); 1559 EXTERN char e_nbreadonly[] INIT(= N_("E744: NetBeans does not allow changes in read-only files")); 1560 #endif 1561 EXTERN char e_maxmempat[] INIT(= N_("E363: pattern uses more memory than 'maxmempattern'")); 1562 EXTERN char e_emptybuf[] INIT(= N_("E749: empty buffer")); 1563 EXTERN char e_nobufnr[] INIT(= N_("E86: Buffer %ld does not exist")); 1564 1565 EXTERN char e_invalpat[] INIT(= N_("E682: Invalid search pattern or delimiter")); 1566 EXTERN char e_bufloaded[] INIT(= N_("E139: File is loaded in another buffer")); 1567 #if defined(FEAT_SYN_HL) || \ 1568 (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC)) 1569 EXTERN char e_notset[] INIT(= N_("E764: Option '%s' is not set")); 1570 #endif 1571 #ifndef FEAT_CLIPBOARD 1572 EXTERN char e_invalidreg[] INIT(= N_("E850: Invalid register name")); 1573 #endif 1574 EXTERN char e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); 1575 EXTERN char e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior")); 1576 #ifdef FEAT_MENU 1577 EXTERN char e_menuothermode[] INIT(= N_("E328: Menu only exists in another mode")); 1578 #endif 1579 1580 #ifdef FEAT_GUI_MAC 1581 EXTERN short disallow_gui INIT(= FALSE); 1582 #endif 1583 1584 EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM")); 1585 EXTERN char bot_top_msg[] INIT(= N_("search hit BOTTOM, continuing at TOP")); 1586 1587 #ifdef FEAT_CRYPT 1588 EXTERN char need_key_msg[] INIT(= N_("Need encryption key for \"%s\"")); 1589 #endif 1590 1591 /* 1592 * Comms. with the session manager (XSMP) 1593 */ 1594 #ifdef USE_XSMP 1595 EXTERN int xsmp_icefd INIT(= -1); /* The actual connection */ 1596 #endif 1597 1598 /* For undo we need to know the lowest time possible. */ 1599 EXTERN time_T starttime; 1600 1601 #ifdef STARTUPTIME 1602 EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */ 1603 #endif 1604 1605 /* 1606 * Some compilers warn for not using a return value, but in some situations we 1607 * can't do anything useful with the value. Assign to this variable to avoid 1608 * the warning. 1609 */ 1610 EXTERN int vim_ignored; 1611 EXTERN char *vim_ignoredp; 1612 1613 #ifdef FEAT_EVAL 1614 /* set by alloc_fail(): ID */ 1615 EXTERN alloc_id_T alloc_fail_id INIT(= aid_none); 1616 /* set by alloc_fail(), when zero alloc() returns NULL */ 1617 EXTERN int alloc_fail_countdown INIT(= -1); 1618 /* set by alloc_fail(), number of times alloc() returns NULL */ 1619 EXTERN int alloc_fail_repeat INIT(= 0); 1620 1621 /* flags set by test_override() */ 1622 EXTERN int disable_char_avail_for_testing INIT(= FALSE); 1623 EXTERN int disable_redraw_for_testing INIT(= FALSE); 1624 EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE); 1625 EXTERN int nfa_fail_for_testing INIT(= FALSE); 1626 1627 EXTERN int in_free_unref_items INIT(= FALSE); 1628 #endif 1629 1630 #ifdef FEAT_TIMERS 1631 EXTERN int did_add_timer INIT(= FALSE); 1632 EXTERN int timer_busy INIT(= 0); /* when timer is inside vgetc() then > 0 */ 1633 #endif 1634 1635 #ifdef FEAT_BEVAL_TERM 1636 EXTERN int bevalexpr_due_set INIT(= FALSE); 1637 EXTERN proftime_T bevalexpr_due; 1638 #endif 1639 1640 #ifdef FEAT_EVAL 1641 EXTERN time_T time_for_testing INIT(= 0); 1642 1643 /* Abort conversion to string after a recursion error. */ 1644 EXTERN int did_echo_string_emsg INIT(= FALSE); 1645 1646 /* Used for checking if local variables or arguments used in a lambda. */ 1647 EXTERN int *eval_lavars_used INIT(= NULL); 1648 #endif 1649 1650 #ifdef WIN3264 1651 EXTERN int ctrl_break_was_pressed INIT(= FALSE); 1652 #endif 1653 1654 #ifdef FEAT_TEXT_PROP 1655 EXTERN int text_prop_frozen INIT(= 0); 1656 #endif 1657 1658 /* 1659 * Optional Farsi support. Include it here, so EXTERN and INIT are defined. 1660 */ 1661 #ifdef FEAT_FKMAP 1662 # include "farsi.h" 1663 #endif 1664 1665 /* 1666 * Optional Arabic support. Include it here, so EXTERN and INIT are defined. 1667 */ 1668 #ifdef FEAT_ARABIC 1669 # include "arabic.h" 1670 #endif 1671