1545 lines · 55.8 KB · C
RawDownload
/* vi:set ts=8 sts=4 sw=4: * * VIM - Vi IMproved	by Bram Moolenaar * * Do ":help uganda"  in Vim to read copying and usage conditions. * Do ":help credits" in Vim to see a list of people who contributed. */ /* * definition of global variables */ /* * Number of Rows and Columns in the screen. * Must be long to be able to use them as options in option.c. * Note: Use screen_Rows and screen_Columns to access items in ScreenLines[]. * They may have different values when the screen wasn't (re)allocated yet * after setting Rows or Columns (e.g., when starting up). */EXTERN long	Rows			/* nr of rows in the screen */#ifdef DO_INIT# if defined(MSDOS) || defined(WIN3264) || defined(OS2)			    = 25L# else			    = 24L# endif#endif			    ;EXTERN long	Columns INIT(= 80);	/* nr of columns in the screen */ /* * The characters that are currently on the screen are kept in ScreenLines[]. * It is a single block of characters, the size of the screen plus one line. * The attributes for those characters are kept in ScreenAttrs[]. * * "LineOffset[n]" is the offset from ScreenLines[] for the start of line 'n'. * The same value is used for ScreenLinesUC[] and ScreenAttrs[]. * * Note: before the screen is initialized and when out of memory these can be * NULL. */EXTERN schar_T	*ScreenLines INIT(= NULL);EXTERN sattr_T	*ScreenAttrs INIT(= NULL);EXTERN unsigned	*LineOffset INIT(= NULL);EXTERN char_u	*LineWraps INIT(= NULL);	/* line wraps to next line */ #ifdef FEAT_MBYTE/* * When using Unicode characters (in UTF-8 encoding) the character in * ScreenLinesUC[] contains the Unicode for the character at this position, or * NUL when the character in ScreenLines[] is to be used (ASCII char). * The composing characters are to be drawn on top of the original character. * Note: These three are only allocated when enc_utf8 is set! */EXTERN u8char_T	*ScreenLinesUC INIT(= NULL);	/* decoded UTF-8 characters */EXTERN u8char_T	*ScreenLinesC[MAX_MCO];		/* composing characters */EXTERN int	Screen_mco INIT(= 0);		/* value of p_mco used when						   allocating ScreenLinesC[] */ /* Only used for euc-jp: Second byte of a character that starts with 0x8e. * These are single-width. */EXTERN schar_T	*ScreenLines2 INIT(= NULL);#endif #ifdef FEAT_WINDOWS/* * Indexes for tab page line: *	N > 0 for label of tab page N *	N == 0 for no label *	N < 0 for closing tab page -N *	N == -999 for closing current tab page */EXTERN short	*TabPageIdxs INIT(= NULL);#endif EXTERN int	screen_Rows INIT(= 0);	    /* actual size of ScreenLines[] */EXTERN int	screen_Columns INIT(= 0);   /* actual size of ScreenLines[] */ /* * When vgetc() is called, it sets mod_mask to the set of modifiers that are * held down based on the MOD_MASK_* symbols that are read first. */EXTERN int	mod_mask INIT(= 0x0);		/* current key modifiers */ /* * Cmdline_row is the row where the command line starts, just below the * last window. * When the cmdline gets longer than the available space the screen gets * scrolled up. After a CTRL-D (show matches), after hitting ':' after * "hit return", and for the :global command, the command line is * temporarily moved.  The old position is restored with the next call to * update_screen(). */EXTERN int	cmdline_row; EXTERN int	redraw_cmdline INIT(= FALSE);	/* cmdline must be redrawn */EXTERN int	clear_cmdline INIT(= FALSE);	/* cmdline must be cleared */EXTERN int	mode_displayed INIT(= FALSE);	/* mode is being displayed */#if defined(FEAT_CRYPT) || defined(FEAT_EVAL)EXTERN int	cmdline_star INIT(= FALSE);	/* cmdline is crypted */#endif EXTERN int	exec_from_reg INIT(= FALSE);	/* executing register */ EXTERN int	screen_cleared INIT(= FALSE);	/* screen has been cleared */ /* * When '$' is included in 'cpoptions' option set: * When a change command is given that deletes only part of a line, a dollar * is put at the end of the changed text. dollar_vcol is set to the virtual * column of this '$'. */EXTERN colnr_T	dollar_vcol INIT(= 0); #ifdef FEAT_INS_EXPAND/* * Variables for Insert mode completion. */ /* Length in bytes of the text being completed (this is deleted to be replaced * by the match.) */EXTERN int	compl_length INIT(= 0); /* Set when character typed while looking for matches and it means we should * stop looking for matches. */EXTERN int	compl_interrupted INIT(= FALSE); /* List of flags for method of completion. */EXTERN int	compl_cont_status INIT(= 0);# define CONT_ADDING	1	/* "normal" or "adding" expansion */# define CONT_INTRPT	(2 + 4)	/* a ^X interrupted the current expansion */				/* it's set only iff N_ADDS is set */# define CONT_N_ADDS	4	/* next ^X<> will add-new or expand-current */# define CONT_S_IPOS	8	/* next ^X<> will set initial_pos?				 * if so, word-wise-expansion will set SOL */# define CONT_SOL	16	/* pattern includes start of line, just for				 * word-wise expansion, not set for ^X^L */# define CONT_LOCAL	32	/* for ctrl_x_mode 0, ^X^P/^X^N do a local				 * expansion, (eg use complete=.) */#endif /* * Functions for putting characters in the command line, * while keeping ScreenLines[] updated. */#ifdef FEAT_RIGHTLEFTEXTERN int	cmdmsg_rl INIT(= FALSE);    /* cmdline is drawn right to left */#endifEXTERN int	msg_col;EXTERN int	msg_row;EXTERN int	msg_scrolled;	/* Number of screen lines that windows have				 * scrolled because of printing messages. */EXTERN int	msg_scrolled_ign INIT(= FALSE);				/* when TRUE don't set need_wait_return in				   msg_puts_attr() when msg_scrolled is				   non-zero */ EXTERN char_u	*keep_msg INIT(= NULL);	    /* msg to be shown after redraw */EXTERN int	keep_msg_attr INIT(= 0);    /* highlight attr for keep_msg */EXTERN int	keep_msg_more INIT(= FALSE); /* keep_msg was set by msgmore() */EXTERN int	need_fileinfo INIT(= FALSE);/* do fileinfo() after redraw */EXTERN int	msg_scroll INIT(= FALSE);   /* msg_start() will scroll */EXTERN int	msg_didout INIT(= FALSE);   /* msg_outstr() was used in line */EXTERN int	msg_didany INIT(= FALSE);   /* msg_outstr() was used at all */EXTERN int	msg_nowait INIT(= FALSE);   /* don't wait for this msg */EXTERN int	emsg_off INIT(= 0);	    /* don't display errors for now,					       unless 'debug' is set. */EXTERN int	info_message INIT(= FALSE); /* printing informative message */EXTERN int      msg_hist_off INIT(= FALSE); /* don't add messages to history */#ifdef FEAT_EVALEXTERN int	emsg_skip INIT(= 0);	    /* don't display errors for					       expression that is skipped */EXTERN int	emsg_severe INIT(= FALSE);   /* use message of next of several					       emsg() calls for throw */EXTERN int	did_endif INIT(= FALSE);    /* just had ":endif" */#endifEXTERN int	did_emsg;		    /* set by emsg() when the message					       is displayed or thrown */EXTERN int	called_emsg;		    /* always set by emsg() */EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */EXTERN int	rc_did_emsg INIT(= FALSE);  /* vim_regcomp() called emsg() */ EXTERN int	no_wait_return INIT(= 0);   /* don't wait for return for now */EXTERN int	need_wait_return INIT(= 0); /* need to wait for return later */EXTERN int	did_wait_return INIT(= FALSE);	/* wait_return() was used and						   nothing written since then */#ifdef FEAT_TITLEEXTERN int	need_maketitle INIT(= TRUE); /* call maketitle() soon */#endif EXTERN int	quit_more INIT(= FALSE);    /* 'q' hit at "--more--" msg */#if defined(UNIX) || defined(__EMX__) || defined(VMS) || defined(MACOS_X)EXTERN int	newline_on_exit INIT(= FALSE);	/* did msg in altern. screen */EXTERN int	intr_char INIT(= 0);	    /* extra interrupt character */#endif#if (defined(UNIX) || defined(VMS)) && defined(FEAT_X11)EXTERN int	x_no_connect INIT(= FALSE); /* don't connect to X server */# if defined(FEAT_CLIENTSERVER)EXTERN int	x_force_connect INIT(= FALSE); /* Do connect to X server.						  Overrules x_no_connect and						  "exclude" in 'clipboard'. */# endif#endifEXTERN int	ex_keep_indent INIT(= FALSE); /* getexmodeline(): keep indent */EXTERN int	vgetc_busy INIT(= 0);	    /* when inside vgetc() then > 0 */ EXTERN int	didset_vim INIT(= FALSE);   /* did set $VIM ourselves */EXTERN int	didset_vimruntime INIT(= FALSE);   /* idem for $VIMRUNTIME */ /* * Lines left before a "more" message.	Ex mode needs to be able to reset this * after you type something. */EXTERN int	lines_left INIT(= -1);	    /* lines left for listing */EXTERN int	msg_no_more INIT(= FALSE);  /* don't use more prompt, truncate					       messages */ EXTERN char_u	*sourcing_name INIT( = NULL);/* name of error message source */EXTERN linenr_T	sourcing_lnum INIT(= 0);    /* line number of the source file */ #ifdef FEAT_EVALEXTERN int	ex_nesting_level INIT(= 0);	/* nesting level */EXTERN int	debug_break_level INIT(= -1);	/* break below this level */EXTERN int	debug_did_msg INIT(= FALSE);	/* did "debug mode" message */EXTERN int	debug_tick INIT(= 0);		/* breakpoint change count */# ifdef FEAT_PROFILEEXTERN int	do_profiling INIT(= PROF_NONE);	/* PROF_ values */# endif /* * The exception currently being thrown.  Used to pass an exception to * a different cstack.  Also used for discarding an exception before it is * caught or made pending.  Only valid when did_throw is TRUE. */EXTERN except_T *current_exception; /* * did_throw: An exception is being thrown.  Reset when the exception is caught * or as long as it is pending in a finally clause. */EXTERN int did_throw INIT(= FALSE); /* * need_rethrow: set to TRUE when a throw that cannot be handled in do_cmdline() * must be propagated to the cstack of the previously called do_cmdline(). */EXTERN int need_rethrow INIT(= FALSE); /* * check_cstack: set to TRUE when a ":finish" or ":return" that cannot be * handled in do_cmdline() must be propagated to the cstack of the previously * called do_cmdline(). */EXTERN int check_cstack INIT(= FALSE); /* * Number of nested try conditionals (across function calls and ":source" * commands). */EXTERN int trylevel INIT(= 0); /* * When "force_abort" is TRUE, always skip commands after an error message, * even after the outermost ":endif", ":endwhile" or ":endfor" or for a * function without the "abort" flag.  It is set to TRUE when "trylevel" is * non-zero (and ":silent!" was not used) or an exception is being thrown at * the time an error is detected.  It is set to FALSE when "trylevel" gets * zero again and there was no error or interrupt or throw. */EXTERN int force_abort INIT(= FALSE); /* * "msg_list" points to a variable in the stack of do_cmdline() which keeps * the list of arguments of several emsg() calls, one of which is to be * converted to an error exception immediately after the failing command * returns.  The message to be used for the exception value is pointed to by * the "throw_msg" field of the first element in the list.  It is usually the * same as the "msg" field of that element, but can be identical to the "msg" * field of a later list element, when the "emsg_severe" flag was set when the * emsg() call was made. */EXTERN struct msglist **msg_list INIT(= NULL); /* * suppress_errthrow: When TRUE, don't convert an error to an exception.  Used * when displaying the interrupt message or reporting an exception that is still * uncaught at the top level (which has already been discarded then).  Also used * for the error message when no exception can be thrown. */EXTERN int suppress_errthrow INIT(= FALSE); /* * The stack of all caught and not finished exceptions.  The exception on the * top of the stack is the one got by evaluation of v:exception.  The complete * stack of all caught and pending exceptions is embedded in the various * cstacks; the pending exceptions, however, are not on the caught stack. */EXTERN except_T *caught_stack INIT(= NULL); #endif #ifdef FEAT_EVAL/* Garbage collection can only take place when we are sure there are no Lists * or Dictionaries being used internally.  This is flagged with * "may_garbage_collect" when we are at the toplevel. * "want_garbage_collect" is set by the garbagecollect() function, which means * we do garbage collection before waiting for a char at the toplevel. */EXTERN int	may_garbage_collect INIT(= FALSE);EXTERN int	want_garbage_collect INIT(= FALSE); /* ID of script being sourced or was sourced to define the current function. */EXTERN scid_T	current_SID INIT(= 0);#endif #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)/* Magic number used for hashitem "hi_key" value indicating a deleted item. * Only the address is used. */EXTERN char_u	hash_removed;#endif  EXTERN int	scroll_region INIT(= FALSE); /* term supports scroll region */EXTERN int	t_colors INIT(= 0);	    /* int value of T_CCO */ /* * When highlight_match is TRUE, highlight a match, starting at the cursor * position.  Search_match_lines is the number of lines after the match (0 for * a match within one line), search_match_endcol the column number of the * character just after the match in the last line. */EXTERN int	highlight_match INIT(= FALSE);	/* show search match pos */EXTERN linenr_T	search_match_lines;		/* lines of of matched string */EXTERN colnr_T	search_match_endcol;		/* col nr of match end */ EXTERN int	no_smartcase INIT(= FALSE);	/* don't use 'smartcase' once */ EXTERN int	need_check_timestamps INIT(= FALSE); /* need to check file							timestamps asap */EXTERN int	did_check_timestamps INIT(= FALSE); /* did check timestamps						       recently */EXTERN int	no_check_timestamps INIT(= 0);	/* Don't check timestamps */ EXTERN int	highlight_attr[HLF_COUNT];  /* Highl. attr for each context. */#ifdef FEAT_STL_OPT# define USER_HIGHLIGHT#endif#ifdef USER_HIGHLIGHTEXTERN int	highlight_user[9];		/* User[1-9] attributes */# ifdef FEAT_STL_OPTEXTERN int	highlight_stlnc[9];		/* On top of user */# endif#endif#ifdef FEAT_GUIEXTERN char_u	*use_gvimrc INIT(= NULL);	/* "-U" cmdline argument */#endifEXTERN int	cterm_normal_fg_color INIT(= 0);EXTERN int	cterm_normal_fg_bold INIT(= 0);EXTERN int	cterm_normal_bg_color INIT(= 0); #ifdef FEAT_AUTOCMDEXTERN int	autocmd_busy INIT(= FALSE);	/* Is apply_autocmds() busy? */EXTERN int	autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */EXTERN int	autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */EXTERN int	autocmd_block INIT(= 0);	/* block all autocmds */EXTERN int	modified_was_set;		/* did ":set modified" */EXTERN int	did_filetype INIT(= FALSE);	/* FileType event found */EXTERN int	keep_filetype INIT(= FALSE);	/* value for did_filetype when						   starting to execute						   autocommands */ /* When deleting the current buffer, another one must be loaded.  If we know * which one is preferred, au_new_curbuf is set to it */EXTERN buf_T	*au_new_curbuf INIT(= NULL);#endif #ifdef FEAT_MOUSE/* * Mouse coordinates, set by check_termcode() */EXTERN int	mouse_row;EXTERN int	mouse_col;EXTERN int	mouse_past_bottom INIT(= FALSE);/* mouse below last line */EXTERN int	mouse_past_eol INIT(= FALSE);	/* mouse right of line */EXTERN int	mouse_dragging INIT(= 0);	/* extending Visual area with						   mouse dragging */# if defined(FEAT_MOUSE_DEC)/* * When the DEC mouse has been pressed but not yet released we enable * automatic querys for the mouse position. */EXTERN int	WantQueryMouse INIT(= FALSE);# endif # ifdef FEAT_GUI/* When the window layout is about to be changed, need_mouse_correct is set, * so that gui_mouse_correct() is called afterwards, to correct the mouse * pointer when focus-follow-mouse is being used. */EXTERN int	need_mouse_correct INIT(= FALSE); /* When double clicking, topline must be the same */EXTERN linenr_T gui_prev_topline INIT(= 0);#  ifdef FEAT_DIFFEXTERN int	gui_prev_topfill INIT(= 0);#  endif# endif # ifdef FEAT_MOUSESHAPEEXTERN int	drag_status_line INIT(= FALSE);	/* dragging the status line */EXTERN int	postponed_mouseshape INIT(= FALSE); /* postponed updating the						       mouse pointer shape */#  ifdef FEAT_VERTSPLITEXTERN int	drag_sep_line INIT(= FALSE);	/* dragging vert separator */#  endif# endif #endif #ifdef FEAT_DIFF/* Value set from 'diffopt'. */EXTERN int	diff_context INIT(= 6);		/* context for folds */EXTERN int	diff_foldcolumn INIT(= 2);	/* 'foldcolumn' for diff mode */EXTERN int	diff_need_scrollbind INIT(= FALSE);#endif #ifdef FEAT_MENU/* The root of the menu hierarchy. */EXTERN vimmenu_T	*root_menu INIT(= NULL);/* * While defining the system menu, sys_menu is TRUE.  This avoids * overruling of menus that the user already defined. */EXTERN int	sys_menu INIT(= FALSE);#endif /* While redrawing the screen this flag is set.  It means the screen size * ('lines' and 'rows') must not be changed. */EXTERN int	updating_screen INIT(= FALSE); #ifdef FEAT_GUI# ifdef FEAT_MENU/* Menu item just selected, set by check_termcode() */EXTERN vimmenu_T	*current_menu; /* Set to TRUE after adding/removing menus to ensure they are updated */EXTERN int force_menu_update INIT(= FALSE);# endif# ifdef FEAT_GUI_TABLINE/* Tab in tab pages line just selected, set by check_termcode() */EXTERN int	    current_tab; /* Menu entry in tab pages line menu just selected, set by check_termcode() */EXTERN int	    current_tabmenu;#  define TABLINE_MENU_CLOSE	1#  define TABLINE_MENU_NEW	2#  define TABLINE_MENU_OPEN	3# endif /* Scrollbar moved and new value, set by check_termcode() */EXTERN int	current_scrollbar;EXTERN long_u	scrollbar_value; /* found "-rv" or "-reverse" in command line args */EXTERN int	found_reverse_arg INIT(= FALSE); /* "-fn" or "-font" command line argument */EXTERN char	*font_argument INIT(= NULL); # ifdef FEAT_GUI_GTK/* "-bg" or "-background" command line argument */EXTERN char	*background_argument INIT(= NULL); /* "-fg" or "-foreground" command line argument */EXTERN char	*foreground_argument INIT(= NULL);# endif /* * While executing external commands or in Ex mode, should not insert GUI * events in the input buffer: Set hold_gui_events to non-zero. */EXTERN int	hold_gui_events INIT(= 0); /* * When resizing the shell is postponed, remember the new size, and call * gui_resize_shell() later. */EXTERN int	new_pixel_width INIT(= 0);EXTERN int	new_pixel_height INIT(= 0); /* Window position from ":winpos", to be used when opening the GUI window. */EXTERN int	gui_win_x INIT(= -1);EXTERN int	gui_win_y INIT(= -1);#endif #ifdef FEAT_CLIPBOARDEXTERN VimClipboard clip_star;	/* PRIMARY selection in X11 */# ifdef FEAT_X11EXTERN VimClipboard clip_plus;	/* CLIPBOARD selection in X11 */# else#  define clip_plus clip_star	/* there is only one clipboard */

Lines 1–500 of 1545.