option.c
资源名称:vim53src.zip [点击查看]
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:133k
源码类别:
编辑器/阅读器
开发平台:
DOS
- /* 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.
- */
- /*
- * Code to handle user-settable options. This is all pretty much table-
- * driven. Checklist for adding a new option:
- * - Put it in the options array below (copy an existing entry).
- * - For a global option: Add a variable for it in option.h.
- * - For a buffer or window local option:
- * - Add a PV_XX entry to the enum below.
- * - Add a variable to the window or buffer struct in structs.h.
- * - For a window option, add some code to win_copy_options().
- * - For a buffer option, add some code to buf_copy_options().
- * - For a buffer string option, add code to check_buf_options().
- * - If it's a numeric option, add any necessary bounds checks to do_set().
- * - If it's a list of flags, add some code in do_set(), search for WW_ALL.
- * - When adding an option with expansion (P_EXPAND), but with a different
- * default for Vi and Vim (no P_VI_DEF), add some code at VIMEXP.
- * - Add documentation! One line in doc/help.txt, full description in
- * options.txt, and any other related places.
- */
- #include "vim.h"
- struct vimoption
- {
- char *fullname; /* full option name */
- char *shortname; /* permissible abbreviation */
- short_u flags; /* see below */
- char_u *var; /* pointer to variable */
- char_u *def_val[2]; /* default values for variable (vi and vim) */
- };
- #define VI_DEFAULT 0 /* def_val[VI_DEFAULT] is Vi default value */
- #define VIM_DEFAULT 1 /* def_val[VIM_DEFAULT] is Vim default value */
- /*
- * Flags
- *
- * Note: P_EXPAND and P_IND can never be used at the same time.
- * Note: P_IND cannot be used for a terminal option.
- */
- #define P_BOOL 0x01 /* the option is boolean */
- #define P_NUM 0x02 /* the option is numeric */
- #define P_STRING 0x04 /* the option is a string */
- #define P_ALLOCED 0x08 /* the string option is in allocated memory,
- must use vim_free() when assigning new
- value. Not set if default is the same. */
- #define P_EXPAND 0x10 /* environment expansion */
- #define P_IND 0x20 /* indirect, is in curwin or curbuf */
- #define P_NODEFAULT 0x40 /* has no default value */
- #define P_DEF_ALLOCED 0x80 /* default value is in allocated memory, must
- use vim_free() when assigning new value */
- #define P_WAS_SET 0x100 /* option has been set/reset */
- #define P_NO_MKRC 0x200 /* don't include in :mkvimrc output */
- #define P_VI_DEF 0x400 /* Use Vi default for Vim */
- #define P_VIM 0x800 /* Vim option, reset when 'cp' set */
- #define P_RSTAT 0x1000 /* when changed, redraw status lines */
- #define P_RBUF 0x2000 /* when changed, redraw current buffer */
- #define P_RALL 0x4000 /* when changed, redraw all */
- #define P_COMMA 0x8000 /* comma separated list */
- /*
- * The options that are in curwin or curbuf have P_IND set and a var field
- * that contains one of the enum values below.
- */
- enum indirect_options
- {
- PV_AI = 1,
- PV_BIN,
- PV_CIN,
- PV_CINK,
- PV_CINO,
- PV_CINW,
- PV_COM,
- PV_CPT,
- PV_EOL,
- PV_ET,
- PV_FE,
- PV_FF,
- PV_FO,
- PV_FT,
- PV_INF,
- PV_ISK,
- PV_LBR,
- PV_LISP,
- PV_LIST,
- PV_ML,
- PV_MPS,
- PV_MOD,
- PV_NF,
- PV_NU,
- PV_RL,
- PV_RO,
- PV_SCROLL,
- PV_SI,
- PV_SN,
- PV_STS,
- PV_SWF,
- PV_SYN,
- PV_SW,
- PV_TS,
- PV_TW,
- PV_TX,
- PV_WM,
- PV_WRAP
- };
- /*
- * options[] is initialized here.
- * The order of the options MUST be alphabetic for ":set all" and findoption().
- * All option names MUST start with a lowercase letter (for findoption()).
- * Exception: "t_" options are at the end.
- * The options with a NULL variable are 'hidden': a set command for them is
- * ignored and they are not printed.
- */
- static struct vimoption options[] =
- {
- {"aleph", "al", P_NUM|P_VI_DEF,
- #ifdef RIGHTLEFT
- (char_u *)&p_aleph,
- #else
- (char_u *)NULL,
- #endif
- {
- #if (defined(MSDOS) || defined(WIN32) || defined(OS2)) && !defined(USE_GUI_WIN32)
- (char_u *)128L,
- #else
- (char_u *)224L,
- #endif
- (char_u *)0L}},
- {"allowrevins", "ari", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef RIGHTLEFT
- (char_u *)&p_ari,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"altkeymap", "akm", P_BOOL|P_VI_DEF,
- #ifdef FKMAP
- (char_u *)&p_altkeymap,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"autoindent", "ai", P_BOOL|P_IND|P_VI_DEF,
- (char_u *)PV_AI,
- {(char_u *)FALSE, (char_u *)0L}},
- {"autoprint", "ap", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"autowrite", "aw", P_BOOL|P_VI_DEF,
- (char_u *)&p_aw,
- {(char_u *)FALSE, (char_u *)0L}},
- {"background", "bg", P_STRING|P_VI_DEF|P_RALL,
- (char_u *)&p_bg,
- {
- #if (defined(MSDOS) || defined(OS2) || defined(WIN32)) && !defined(USE_GUI)
- (char_u *)"dark",
- #else
- (char_u *)"light",
- #endif
- (char_u *)0L}},
- {"backspace", "bs", P_NUM|P_VI_DEF|P_VIM,
- (char_u *)&p_bs,
- {(char_u *)0L, (char_u *)0L}},
- {"backup", "bk", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_bk,
- {(char_u *)FALSE, (char_u *)0L}},
- {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA,
- (char_u *)&p_bdir,
- {(char_u *)DEF_BDIR, (char_u *)0L}},
- {"backupext", "bex", P_STRING|P_VI_DEF,
- (char_u *)&p_bex,
- {
- #ifdef VMS
- (char_u *)"_",
- #else
- (char_u *)"~",
- #endif
- (char_u *)0L}},
- {"beautify", "bf", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"binary", "bin", P_BOOL|P_IND|P_VI_DEF|P_RSTAT,
- (char_u *)PV_BIN,
- {(char_u *)FALSE, (char_u *)0L}},
- {"bioskey", "biosk",P_BOOL|P_VI_DEF,
- #ifdef MSDOS
- (char_u *)&p_biosk,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)TRUE, (char_u *)0L}},
- {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL,
- (char_u *)&p_breakat,
- {(char_u *)" t!@*-+_;:,./?", (char_u *)0L}},
- {"browsedir", "bsdir",P_STRING|P_VI_DEF,
- #ifdef USE_BROWSE
- (char_u *)&p_bsdir,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)"last", (char_u *)0L}},
- {"cindent", "cin", P_BOOL|P_IND|P_VI_DEF|P_VIM,
- #ifdef CINDENT
- (char_u *)PV_CIN,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"cinkeys", "cink", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- #ifdef CINDENT
- (char_u *)PV_CINK,
- {(char_u *)"0{,0},:,0#,!^F,o,O,e", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"cinoptions", "cino", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- #ifdef CINDENT
- (char_u *)PV_CINO,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)"", (char_u *)0L}},
- {"cinwords", "cinw", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- #if defined(SMARTINDENT) || defined(CINDENT)
- (char_u *)PV_CINW,
- {(char_u *)"if,else,while,do,for,switch",
- (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"cmdheight", "ch", P_NUM|P_VI_DEF|P_RALL,
- (char_u *)&p_ch,
- {(char_u *)1L, (char_u *)0L}},
- {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- (char_u *)&Columns,
- {(char_u *)80L, (char_u *)0L}},
- {"comments", "com", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- (char_u *)PV_COM,
- {(char_u *)"sr:/*,mb:*,el:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
- (char_u *)0L}},
- {"compatible", "cp", P_BOOL|P_RALL,
- (char_u *)&p_cp,
- {(char_u *)TRUE, (char_u *)FALSE}},
- {"complete", "cpt", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- #ifdef INSERT_EXPAND
- (char_u *)PV_CPT,
- {(char_u *)".,b", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"confirm", "cf", P_BOOL|P_VI_DEF,
- #if defined(GUI_DIALOG) || defined(CON_DIALOG)
- (char_u *)&p_confirm,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"cpoptions", "cpo", P_STRING|P_VIM|P_RALL,
- (char_u *)&p_cpo,
- {(char_u *)CPO_ALL, (char_u *)CPO_DEFAULT}},
- {"cscopeprg", "csprg", P_STRING|P_EXPAND|P_VI_DEF,
- #ifdef USE_CSCOPE
- (char_u *)&p_csprg,
- {(char_u *)"cscope", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef USE_CSCOPE
- (char_u *)&p_cst,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)0L, (char_u *)0L}},
- {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM,
- #ifdef USE_CSCOPE
- (char_u *)&p_csto,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)0L, (char_u *)0L}},
- {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef USE_CSCOPE
- (char_u *)&p_csverbose,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)0L, (char_u *)0L}},
- {"define", "def", P_STRING|P_VI_DEF,
- (char_u *)&p_def,
- {(char_u *)"^#\s*define", (char_u *)0L}},
- {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA,
- (char_u *)&p_dict,
- {(char_u *)"", (char_u *)0L}},
- {"digraph", "dg", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef DIGRAPHS
- (char_u *)&p_dg,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA,
- (char_u *)&p_dir,
- {(char_u *)DEF_DIR, (char_u *)0L}},
- {"edcompatible","ed", P_BOOL|P_VI_DEF,
- (char_u *)&p_ed,
- {(char_u *)FALSE, (char_u *)0L}},
- {"endofline", "eol", P_BOOL|P_IND|P_NO_MKRC|P_VI_DEF|P_RSTAT,
- (char_u *)PV_EOL,
- {(char_u *)TRUE, (char_u *)0L}},
- {"equalalways", "ea", P_BOOL|P_VI_DEF|P_RALL,
- (char_u *)&p_ea,
- {(char_u *)TRUE, (char_u *)0L}},
- {"equalprg", "ep", P_STRING|P_EXPAND|P_VI_DEF,
- (char_u *)&p_ep,
- {(char_u *)"", (char_u *)0L}},
- {"errorbells", "eb", P_BOOL|P_VI_DEF,
- (char_u *)&p_eb,
- {(char_u *)FALSE, (char_u *)0L}},
- {"errorfile", "ef", P_STRING|P_EXPAND|P_VI_DEF,
- #ifdef QUICKFIX
- (char_u *)&p_ef,
- {(char_u *)ERRORFILE, (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"errorformat", "efm", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef QUICKFIX
- (char_u *)&p_efm,
- {(char_u *)EFM_DFLT, (char_u *)0L},
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"esckeys", "ek", P_BOOL|P_VIM,
- (char_u *)&p_ek,
- {(char_u *)FALSE, (char_u *)TRUE}},
- {"eventignore", "ei", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef AUTOCMD
- (char_u *)&p_ei,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)"", (char_u *)0L}},
- {"expandtab", "et", P_BOOL|P_IND|P_VI_DEF|P_VIM,
- (char_u *)PV_ET,
- {(char_u *)FALSE, (char_u *)0L}},
- {"exrc", "ex", P_BOOL|P_VI_DEF,
- (char_u *)&p_exrc,
- {(char_u *)FALSE, (char_u *)0L}},
- {"fileencoding", "fe", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_RSTAT,
- #ifdef MULTI_BYTE
- (char_u *)PV_FE,
- {(char_u *)FE_DFLT, (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"fileformat", "ff", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_RSTAT,
- (char_u *)PV_FF,
- {(char_u *)FF_DFLT, (char_u *)0L}},
- {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA,
- (char_u *)&p_ffs,
- {(char_u *)FFS_VI, (char_u *)FFS_DFLT}},
- {"filetype", "ft", P_STRING|P_IND|P_ALLOCED|P_VI_DEF,
- #ifdef WANT_FILETYPE
- (char_u *)PV_FT,
- {(char_u *)FT_DFLT, (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"fkmap", "fk", P_BOOL|P_VI_DEF,
- #ifdef FKMAP
- (char_u *)&p_fkmap,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"flash", "fl", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"formatoptions","fo", P_STRING|P_IND|P_ALLOCED|P_VIM,
- (char_u *)PV_FO,
- {(char_u *)FO_DFLT_VI, (char_u *)FO_DFLT}},
- {"formatprg", "fp", P_STRING|P_EXPAND|P_VI_DEF,
- (char_u *)&p_fp,
- {(char_u *)"", (char_u *)0L}},
- {"gdefault", "gd", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_gd,
- {(char_u *)FALSE, (char_u *)0L}},
- {"graphic", "gr", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"grepformat", "gfm", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef QUICKFIX
- (char_u *)&p_gefm,
- {(char_u *)GEFM_DFLT, (char_u *)0L},
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"grepprg", "gp", P_STRING|P_EXPAND|P_VI_DEF,
- #ifdef QUICKFIX
- (char_u *)&p_gp,
- {
- # ifdef WIN32
- (char_u *)"findstr /n",
- # else
- (char_u *)"grep -n",
- # endif
- (char_u *)0L},
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"guicursor", "gcr", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef CURSOR_SHAPE
- (char_u *)&p_guicursor,
- {
- # ifdef USE_GUI
- (char_u *)"n-v-c:block-Cursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor,r-cr:hor20-Cursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175",
- # else /* MSDOS or Win32 console */
- (char_u *)"n-v-c:block,o:hor50,i-ci:hor10,r-cr:hor30,sm:block",
- # endif
- (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"guifont", "gfn", P_STRING|P_VI_DEF|P_RALL|P_COMMA,
- #ifdef USE_GUI
- (char_u *)&p_guifont,
- {(char_u *)"", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"guioptions", "go", P_STRING|P_VI_DEF|P_RALL,
- #if defined(USE_GUI) || defined(USE_CLIPBOARD)
- (char_u *)&p_guioptions,
- # ifdef UNIX
- {(char_u *)"agimrt", (char_u *)0L}
- # else
- {(char_u *)"gmrt", (char_u *)0L}
- # endif
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"guipty", NULL, P_BOOL|P_VI_DEF,
- #if defined(USE_GUI)
- (char_u *)&p_guipty,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)TRUE, (char_u *)0L}},
- {"hardtabs", "ht", P_NUM|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}},
- {"helpfile", "hf", P_STRING|P_EXPAND|P_VI_DEF,
- (char_u *)&p_hf,
- {(char_u *)VIM_HLP, (char_u *)0L}},
- {"helpheight", "hh", P_NUM|P_VI_DEF,
- (char_u *)&p_hh,
- {(char_u *)20L, (char_u *)0L}},
- {"hidden", "hid", P_BOOL|P_VI_DEF,
- (char_u *)&p_hid,
- {(char_u *)FALSE, (char_u *)0L}},
- {"highlight", "hl", P_STRING|P_VI_DEF|P_RALL|P_COMMA,
- (char_u *)&p_hl,
- {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg",
- (char_u *)0L}},
- {"hlsearch", "hls", P_BOOL|P_VI_DEF|P_VIM|P_RALL,
- (char_u *)&p_hls,
- {(char_u *)FALSE, (char_u *)0L}},
- {"history", "hi", P_NUM|P_VIM,
- (char_u *)&p_hi,
- {(char_u *)0L, (char_u *)20L}},
- {"hkmap", "hk", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef RIGHTLEFT
- (char_u *)&p_hkmap,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"hkmapp", "hkp", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef RIGHTLEFT
- (char_u *)&p_hkmapp,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"icon", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_icon,
- {(char_u *)FALSE, (char_u *)0L}},
- {"iconstring", NULL, P_STRING|P_VI_DEF,
- (char_u *)&p_iconstring,
- {(char_u *)"", (char_u *)0L}},
- {"ignorecase", "ic", P_BOOL|P_VI_DEF,
- (char_u *)&p_ic,
- {(char_u *)FALSE, (char_u *)0L}},
- {"include", "inc", P_STRING|P_VI_DEF,
- (char_u *)&p_inc,
- {(char_u *)"^#\s*include", (char_u *)0L}},
- {"incsearch", "is", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_is,
- {(char_u *)FALSE, (char_u *)0L}},
- {"infercase", "inf", P_BOOL|P_IND|P_VI_DEF,
- (char_u *)PV_INF,
- {(char_u *)FALSE, (char_u *)0L}},
- {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_im,
- {(char_u *)FALSE, (char_u *)0L}},
- {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_isf,
- {
- #ifdef BACKSLASH_IN_FILENAME
- (char_u *)"@,48-57,/,.,-,_,+,,,$,:,\",
- #else
- # ifdef AMIGA
- (char_u *)"@,48-57,/,.,-,_,+,,,$,:",
- # else /* UNIX */
- (char_u *)"@,48-57,/,.,-,_,+,,,$,~",
- # endif
- #endif
- (char_u *)0L}},
- {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_isi,
- {
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- (char_u *)"@,48-57,_,128-167,224-235",
- #else
- (char_u *)"@,48-57,_,192-255",
- #endif
- (char_u *)0L}},
- {"iskeyword", "isk", P_STRING|P_IND|P_ALLOCED|P_VIM|P_COMMA,
- (char_u *)PV_ISK,
- {(char_u *)"@,48-57,_",
- # if defined(MSDOS) || defined(WIN32) || defined(OS2)
- (char_u *)"@,48-57,_,128-167,224-235"
- # else
- (char_u *)"@,48-57,_,192-255"
- # endif
- }},
- {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA,
- (char_u *)&p_isp,
- {
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- (char_u *)"@,~-255",
- #else
- (char_u *)"@,161-255",
- #endif
- (char_u *)0L}},
- {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_js,
- {(char_u *)TRUE, (char_u *)0L}},
- {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF,
- (char_u *)&p_kp,
- {
- #if defined(MSDOS) || defined(WIN32)
- (char_u *)"",
- #else
- #ifdef VMS
- (char_u *)"help",
- #else
- # if defined(OS2)
- (char_u *)"view /",
- # else
- # ifdef USEMAN_S
- (char_u *)"man -s",
- # else
- (char_u *)"man",
- # endif
- # endif
- #endif
- #endif
- (char_u *)0L}},
- {"keymodel", "km", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_km,
- {(char_u *)"", (char_u *)0L}},
- {"langmap", "lmap", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef HAVE_LANGMAP
- (char_u *)&p_langmap,
- {(char_u *)"", /* unmatched } */
- #else
- (char_u *)NULL,
- {(char_u *)NULL,
- #endif
- (char_u *)0L}},
- {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL,
- (char_u *)&p_ls,
- {(char_u *)1L, (char_u *)0L}},
- {"lazyredraw", "lz", P_BOOL|P_VI_DEF,
- (char_u *)&p_lz,
- {(char_u *)FALSE, (char_u *)0L}},
- {"linebreak", "lbr", P_BOOL|P_IND|P_VI_DEF|P_RBUF,
- (char_u *)PV_LBR,
- {(char_u *)FALSE, (char_u *)0L}},
- {"lines", NULL, P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- (char_u *)&Rows,
- {
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- (char_u *)25L,
- #else
- (char_u *)24L,
- #endif
- (char_u *)0L}},
- {"lisp", NULL, P_BOOL|P_IND|P_VI_DEF,
- (char_u *)PV_LISP,
- {(char_u *)FALSE, (char_u *)0L}},
- {"list", NULL, P_BOOL|P_IND|P_VI_DEF|P_RBUF,
- (char_u *)PV_LIST,
- {(char_u *)FALSE, (char_u *)0L}},
- {"listchars","lcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA,
- (char_u *)&p_lcs,
- {(char_u *)"eol:$", (char_u *)0L}},
- {"magic", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_magic,
- {(char_u *)TRUE, (char_u *)0L}},
- {"makeef", "mef", P_STRING|P_EXPAND|P_VI_DEF,
- #ifdef QUICKFIX
- (char_u *)&p_mef,
- {(char_u *)MAKEEF, (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF,
- #ifdef QUICKFIX
- (char_u *)&p_mp,
- {(char_u *)"make", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"matchpairs", "mps", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- (char_u *)PV_MPS,
- {(char_u *)"(:),{:},[:]", (char_u *)0L}},
- {"matchtime", "mat", P_NUM|P_VI_DEF,
- (char_u *)&p_mat,
- {(char_u *)5L, (char_u *)0L}},
- {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF,
- #ifdef WANT_EVAL
- (char_u *)&p_mfd,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)100L, (char_u *)0L}},
- {"maxmapdepth", "mmd", P_NUM|P_VI_DEF,
- (char_u *)&p_mmd,
- {(char_u *)1000L, (char_u *)0L}},
- {"maxmem", "mm", P_NUM|P_VI_DEF,
- (char_u *)&p_mm,
- {(char_u *)MAXMEM, (char_u *)0L}},
- {"maxmemtot", "mmt", P_NUM|P_VI_DEF,
- (char_u *)&p_mmt,
- {(char_u *)MAXMEMTOT, (char_u *)0L}},
- {"mesg", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"modeline", "ml", P_BOOL|P_IND|P_VIM,
- (char_u *)PV_ML,
- {(char_u *)FALSE, (char_u *)TRUE}},
- {"modelines", "mls", P_NUM|P_VI_DEF,
- (char_u *)&p_mls,
- {(char_u *)5L, (char_u *)0L}},
- {"modified", "mod", P_BOOL|P_IND|P_NO_MKRC|P_VI_DEF|P_RSTAT,
- (char_u *)PV_MOD,
- {(char_u *)FALSE, (char_u *)0L}},
- {"more", NULL, P_BOOL|P_VIM,
- (char_u *)&p_more,
- {(char_u *)FALSE, (char_u *)TRUE}},
- {"mouse", NULL, P_STRING|P_VI_DEF,
- (char_u *)&p_mouse,
- {
- #if defined(MSDOS) || defined(WIN32)
- (char_u *)"a",
- #else
- (char_u *)"",
- #endif
- (char_u *)0L}},
- {"mousefocus", "mousef", P_BOOL|P_VI_DEF,
- #ifdef USE_GUI
- (char_u *)&p_mousef,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"mousehide", "mh", P_BOOL|P_VI_DEF,
- #ifdef USE_GUI
- (char_u *)&p_mh,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"mousemodel", "mousem", P_STRING|P_VI_DEF,
- (char_u *)&p_mousem,
- {
- #if defined(MSDOS) || defined(WIN32)
- (char_u *)"popup",
- #else
- (char_u *)"extend",/* TODO: macintosh: "mac" */
- #endif
- (char_u *)0L}},
- {"mousetime", "mouset", P_NUM|P_VI_DEF,
- (char_u *)&p_mouset,
- {(char_u *)500L, (char_u *)0L}},
- {"novice", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"number", "nu", P_BOOL|P_IND|P_VI_DEF|P_RBUF,
- (char_u *)PV_NU,
- {(char_u *)FALSE, (char_u *)0L}},
- {"nrformats", "nf", P_STRING|P_IND|P_ALLOCED|P_VI_DEF|P_COMMA,
- (char_u *)PV_NF,
- {(char_u *)"octal,hex", (char_u *)0L}},
- {"open", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"optimize", "opt", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"paragraphs", "para", P_STRING|P_VI_DEF,
- (char_u *)&p_para,
- {(char_u *)"IPLPPPQPP LIpplpipbp", (char_u *)0L}},
- {"paste", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_paste,
- {(char_u *)FALSE, (char_u *)0L}},
- {"patchmode", "pm", P_STRING|P_VI_DEF,
- (char_u *)&p_pm,
- {(char_u *)"", (char_u *)0L}},
- {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA,
- (char_u *)&p_path,
- {
- #if defined AMIGA || defined MSDOS || defined WIN32
- (char_u *)".,,",
- #else
- # if defined(__EMX__)
- (char_u *)".,/emx/include,,",
- # else /* Unix, probably */
- (char_u *)".,/usr/include,,",
- # endif
- #endif
- (char_u *)0L}},
- {"prompt", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"readonly", "ro", P_BOOL|P_IND|P_VI_DEF|P_RSTAT,
- (char_u *)PV_RO,
- {(char_u *)FALSE, (char_u *)0L}},
- {"redraw", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"remap", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_remap,
- {(char_u *)TRUE, (char_u *)0L}},
- {"report", NULL, P_NUM|P_VI_DEF,
- (char_u *)&p_report,
- {(char_u *)2L, (char_u *)0L}},
- {"restorescreen", "rs", P_BOOL|P_VI_DEF,
- #ifdef WIN32
- (char_u *)&p_rs,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)TRUE, (char_u *)0L}},
- {"revins", "ri", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef RIGHTLEFT
- (char_u *)&p_ri,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"rightleft", "rl", P_BOOL|P_IND|P_VI_DEF|P_RBUF,
- #ifdef RIGHTLEFT
- (char_u *)PV_RL,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"ruler", "ru", P_BOOL|P_VI_DEF|P_VIM|P_RSTAT,
- (char_u *)&p_ru,
- {(char_u *)FALSE, (char_u *)0L}},
- {"scroll", "scr", P_NUM|P_IND|P_NO_MKRC|P_VI_DEF,
- (char_u *)PV_SCROLL,
- {(char_u *)12L, (char_u *)0L}},
- {"scrolljump", "sj", P_NUM|P_VI_DEF|P_VIM,
- (char_u *)&p_sj,
- {(char_u *)1L, (char_u *)0L}},
- {"scrolloff", "so", P_NUM|P_VI_DEF|P_VIM|P_RALL,
- (char_u *)&p_so,
- {(char_u *)0L, (char_u *)0L}},
- {"sections", "sect", P_STRING|P_VI_DEF,
- (char_u *)&p_sections,
- {(char_u *)"SHNHH HUnhsh", (char_u *)0L}},
- {"secure", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_secure,
- {(char_u *)FALSE, (char_u *)0L}},
- {"selection", "sel", P_STRING|P_VI_DEF,
- (char_u *)&p_sel,
- {(char_u *)"inclusive", (char_u *)0L}},
- {"selectmode", "slm", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_slm,
- {(char_u *)"", (char_u *)0L}},
- {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_sessopt,
- {(char_u *)"winsize,options", (char_u *)0L}},
- {"shell", "sh", P_STRING|P_EXPAND|P_VI_DEF,
- (char_u *)&p_sh,
- {
- #ifdef VMS
- (char_u *)"",
- #else
- #if defined(MSDOS)
- (char_u *)"command",
- #else
- # if defined(WIN32)
- (char_u *)"", /* set in set_init_1() */
- # else
- # if defined(OS2)
- (char_u *)"cmd.exe",
- # else
- # if defined(ARCHIE)
- (char_u *)"gos",
- # else
- (char_u *)"sh",
- # endif
- # endif
- # endif
- #endif
- #endif /* VMS */
- (char_u *)0L}},
- {"shellcmdflag","shcf", P_STRING|P_VI_DEF,
- (char_u *)&p_shcf,
- {
- #if defined(MSDOS) || defined(WIN32)
- (char_u *)"/c",
- #else
- # if defined(OS2)
- (char_u *)"/c",
- # else
- (char_u *)"-c",
- # endif
- #endif
- (char_u *)0L}},
- {"shellpipe", "sp", P_STRING|P_VI_DEF,
- (char_u *)&p_sp,
- {
- #if defined(UNIX) || defined(OS2)
- # ifdef ARCHIE
- (char_u *)"2>",
- # else
- (char_u *)"| tee",
- # endif
- #else
- (char_u *)">",
- #endif
- (char_u *)0L}},
- {"shellquote", "shq", P_STRING|P_VI_DEF,
- (char_u *)&p_shq,
- {(char_u *)"", (char_u *)0L}},
- {"shellredir", "srr", P_STRING|P_VI_DEF,
- (char_u *)&p_srr,
- {(char_u *)">", (char_u *)0L}},
- {"shelltype", "st", P_NUM|P_VI_DEF,
- (char_u *)&p_st,
- {(char_u *)0L, (char_u *)0L}},
- {"shellxquote", "sxq", P_STRING|P_VI_DEF,
- (char_u *)&p_sxq,
- {
- #if defined(UNIX) && defined(USE_SYSTEM) && !defined(__EMX__)
- (char_u *)""",
- #else
- (char_u *)"",
- #endif
- (char_u *)0L}},
- {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_sr,
- {(char_u *)FALSE, (char_u *)0L}},
- {"shiftwidth", "sw", P_NUM|P_IND|P_VI_DEF,
- (char_u *)PV_SW,
- {(char_u *)8L, (char_u *)0L}},
- {"shortmess", "shm", P_STRING|P_VI_DEF|P_VIM,
- (char_u *)&p_shm,
- {(char_u *)"", (char_u *)0L}},
- {"shortname", "sn", P_BOOL|P_IND|P_VI_DEF,
- #ifdef SHORT_FNAME
- (char_u *)NULL,
- #else
- (char_u *)PV_SN,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"showbreak", "sbr", P_STRING|P_VI_DEF|P_RALL,
- (char_u *)&p_sbr,
- {(char_u *)"", (char_u *)0L}},
- {"showcmd", "sc", P_BOOL|P_VIM,
- (char_u *)&p_sc,
- {(char_u *)FALSE,
- #ifdef UNIX
- (char_u *)FALSE
- #else
- (char_u *)TRUE
- #endif
- }},
- {"showfulltag", "sft", P_BOOL|P_VI_DEF,
- (char_u *)&p_sft,
- {(char_u *)FALSE, (char_u *)0L}},
- {"showmatch", "sm", P_BOOL|P_VI_DEF,
- (char_u *)&p_sm,
- {(char_u *)FALSE, (char_u *)0L}},
- {"showmode", "smd", P_BOOL|P_VIM,
- (char_u *)&p_smd,
- {(char_u *)FALSE, (char_u *)TRUE}},
- {"sidescroll", "ss", P_NUM|P_VI_DEF,
- (char_u *)&p_ss,
- {(char_u *)0L, (char_u *)0L}},
- {"slowopen", "slow", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"smartcase", "scs", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_scs,
- {(char_u *)FALSE, (char_u *)0L}},
- {"smartindent", "si", P_BOOL|P_IND|P_VI_DEF|P_VIM,
- #ifdef SMARTINDENT
- (char_u *)PV_SI,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)FALSE, (char_u *)0L}},
- {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_sta,
- {(char_u *)FALSE, (char_u *)0L}},
- {"softtabstop", "sts", P_NUM|P_IND|P_VI_DEF|P_VIM,
- (char_u *)PV_STS,
- {(char_u *)0L, (char_u *)0L}},
- {"sourceany", NULL, P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)FALSE, (char_u *)0L}},
- {"splitbelow", "sb", P_BOOL|P_VI_DEF,
- (char_u *)&p_sb,
- {(char_u *)FALSE, (char_u *)0L}},
- {"startofline", "sol", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_sol,
- {(char_u *)TRUE, (char_u *)0L}},
- {"suffixes", "su", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_su,
- {(char_u *)".bak,~,.o,.h,.info,.swp",
- (char_u *)0L}},
- {"swapfile", "swf", P_BOOL|P_IND|P_VI_DEF|P_RSTAT,
- (char_u *)PV_SWF,
- {(char_u *)TRUE, (char_u *)0L}},
- {"swapsync", "sws", P_STRING|P_VI_DEF,
- (char_u *)&p_sws,
- {(char_u *)"fsync", (char_u *)0L}},
- {"syntax", "syn", P_STRING|P_IND|P_ALLOCED|P_VI_DEF,
- #ifdef SYNTAX_HL
- (char_u *)PV_SYN,
- {(char_u *)"", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}
- #endif
- },
- {"tabstop", "ts", P_NUM|P_IND|P_VI_DEF|P_RBUF,
- (char_u *)PV_TS,
- {(char_u *)8L, (char_u *)0L}},
- {"tagbsearch", "tbs", P_BOOL|P_VI_DEF,
- (char_u *)&p_tbs,
- {(char_u *)TRUE, (char_u *)0L}},
- {"taglength", "tl", P_NUM|P_VI_DEF,
- (char_u *)&p_tl,
- {(char_u *)0L, (char_u *)0L}},
- {"tagrelative", "tr", P_BOOL|P_VIM,
- (char_u *)&p_tr,
- {(char_u *)FALSE, (char_u *)TRUE}},
- {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA,
- (char_u *)&p_tags,
- {
- #ifdef EMACS_TAGS
- (char_u *)"./tags,./TAGS,tags,TAGS",
- #else
- (char_u *)"./tags,tags",
- #endif
- (char_u *)0L}},
- {"tagstack", "tgst", P_BOOL|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)TRUE, (char_u *)0L}},
- {"term", NULL, P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- (char_u *)&T_NAME,
- {(char_u *)"", (char_u *)0L}},
- {"terse", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_terse,
- {(char_u *)FALSE, (char_u *)0L}},
- {"textauto", "ta", P_BOOL|P_VIM,
- (char_u *)&p_ta,
- {(char_u *)TA_DFLT, (char_u *)TRUE}},
- {"textmode", "tx", P_BOOL|P_IND|P_VI_DEF,
- (char_u *)PV_TX,
- {
- #ifdef USE_CRNL
- (char_u *)TRUE,
- #else
- (char_u *)FALSE,
- #endif
- (char_u *)0L}},
- {"textwidth", "tw", P_NUM|P_IND|P_VI_DEF|P_VIM,
- (char_u *)PV_TW,
- {(char_u *)0L, (char_u *)0L}},
- {"tildeop", "top", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_to,
- {(char_u *)FALSE, (char_u *)0L}},
- {"timeout", "to", P_BOOL|P_VI_DEF,
- (char_u *)&p_timeout,
- {(char_u *)TRUE, (char_u *)0L}},
- {"timeoutlen", "tm", P_NUM|P_VI_DEF,
- (char_u *)&p_tm,
- {(char_u *)1000L, (char_u *)0L}},
- {"title", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_title,
- {(char_u *)FALSE, (char_u *)0L}},
- {"titlelen", NULL, P_NUM|P_VI_DEF,
- (char_u *)&p_titlelen,
- {(char_u *)85L, (char_u *)0L}},
- {"titlestring", NULL, P_STRING|P_VI_DEF,
- (char_u *)&p_titlestring,
- {(char_u *)"", (char_u *)0L}},
- {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_ttimeout,
- {(char_u *)FALSE, (char_u *)0L}},
- {"ttimeoutlen", "ttm", P_NUM|P_VI_DEF,
- (char_u *)&p_ttm,
- {(char_u *)-1L, (char_u *)0L}},
- {"ttybuiltin", "tbi", P_BOOL|P_VI_DEF,
- (char_u *)&p_tbi,
- {(char_u *)TRUE, (char_u *)0L}},
- {"ttyfast", "tf", P_BOOL|P_NO_MKRC|P_VI_DEF,
- (char_u *)&p_tf,
- {(char_u *)FALSE, (char_u *)0L}},
- {"ttyscroll", "tsl", P_NUM|P_VI_DEF,
- (char_u *)&p_ttyscroll,
- {(char_u *)999L, (char_u *)0L}},
- {"ttytype", "tty", P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- (char_u *)&T_NAME,
- {(char_u *)"", (char_u *)0L}},
- {"ttymouse", "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF,
- (char_u *)&p_ttym,
- {(char_u *)"", (char_u *)0L}},
- {"undolevels", "ul", P_NUM|P_VI_DEF,
- (char_u *)&p_ul,
- {
- #if defined(UNIX) || defined(WIN32) || defined(OS2)
- (char_u *)1000L,
- #else
- (char_u *)100L,
- #endif
- (char_u *)0L}},
- {"updatecount", "uc", P_NUM|P_VI_DEF,
- (char_u *)&p_uc,
- {(char_u *)200L, (char_u *)0L}},
- {"updatetime", "ut", P_NUM|P_VI_DEF,
- (char_u *)&p_ut,
- {(char_u *)4000L, (char_u *)0L}},
- {"verbose", "vbs", P_NUM|P_VI_DEF,
- (char_u *)&p_verbose,
- {(char_u *)0L, (char_u *)0L}},
- {"viminfo", "vi", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef VIMINFO
- (char_u *)&p_viminfo,
- #else
- (char_u *)NULL,
- #endif /* VIMINFO */
- {(char_u *)"", (char_u *)0L}},
- {"visualbell", "vb", P_BOOL|P_VI_DEF,
- (char_u *)&p_vb,
- {(char_u *)FALSE, (char_u *)0L}},
- {"w300", NULL, P_NUM|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}},
- {"w1200", NULL, P_NUM|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}},
- {"w9600", NULL, P_NUM|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}},
- {"warn", NULL, P_BOOL|P_VI_DEF,
- (char_u *)&p_warn,
- {(char_u *)TRUE, (char_u *)0L}},
- {"weirdinvert", "wiv", P_BOOL|P_VI_DEF|P_RALL,
- (char_u *)&p_wiv,
- {(char_u *)FALSE, (char_u *)0L}},
- {"whichwrap", "ww", P_STRING|P_VIM|P_COMMA,
- (char_u *)&p_ww,
- {(char_u *)"", (char_u *)"b,s"}},
- {"wildchar", "wc", P_NUM|P_VIM,
- (char_u *)&p_wc,
- {(char_u *)(long)Ctrl('E'), (char_u *)(long)TAB}},
- {"wildignore", "wig", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef WILDIGNORE
- (char_u *)&p_wig,
- #else
- (char_u *)NULL,
- #endif
- {(char_u *)"", (char_u *)0L}},
- {"wildmode", "wim", P_STRING|P_VI_DEF|P_COMMA,
- (char_u *)&p_wim,
- {(char_u *)"full", (char_u *)0L}},
- {"winaltkeys", "wak", P_STRING|P_VI_DEF,
- #if defined(USE_GUI_WIN32) || defined(USE_GUI_MOTIF)
- (char_u *)&p_wak,
- {(char_u *)"menu", (char_u *)0L}
- #else
- (char_u *)NULL,
- {(char_u *)NULL, (char_u *)0L}
- #endif
- },
- {"window", "wi", P_NUM|P_VI_DEF,
- (char_u *)NULL,
- {(char_u *)0L, (char_u *)0L}},
- {"winheight", "wh", P_NUM|P_VI_DEF,
- (char_u *)&p_wh,
- {(char_u *)1L, (char_u *)0L}},
- {"winminheight", "wmh", P_NUM|P_VI_DEF,
- (char_u *)&p_wmh,
- {(char_u *)1L, (char_u *)0L}},
- {"wrap", NULL, P_BOOL|P_IND|P_VI_DEF|P_RBUF,
- (char_u *)PV_WRAP,
- {(char_u *)TRUE, (char_u *)0L}},
- {"wrapmargin", "wm", P_NUM|P_IND|P_VI_DEF,
- (char_u *)PV_WM,
- {(char_u *)0L, (char_u *)0L}},
- {"wrapscan", "ws", P_BOOL|P_VI_DEF,
- (char_u *)&p_ws,
- {(char_u *)TRUE, (char_u *)0L}},
- {"writeany", "wa", P_BOOL|P_VI_DEF,
- (char_u *)&p_wa,
- {(char_u *)FALSE, (char_u *)0L}},
- {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM,
- (char_u *)&p_wb,
- {
- #ifdef WRITEBACKUP
- (char_u *)TRUE,
- #else
- (char_u *)FALSE,
- #endif
- (char_u *)0L}},
- {"writedelay", "wd", P_NUM|P_VI_DEF,
- (char_u *)&p_wd,
- {(char_u *)0L, (char_u *)0L}},
- /* terminal output codes */
- #define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL,
- (char_u *)&vvv,
- {(char_u *)"", (char_u *)0L}},
- p_term("t_AB", T_CAB)
- p_term("t_AF", T_CAF)
- p_term("t_AL", T_CAL)
- p_term("t_al", T_AL)
- p_term("t_bc", T_BC)
- p_term("t_cd", T_CD)
- p_term("t_ce", T_CE)
- p_term("t_cl", T_CL)
- p_term("t_cm", T_CM)
- p_term("t_Co", T_CCO)
- p_term("t_CS", T_CCS)
- p_term("t_cs", T_CS)
- p_term("t_da", T_DA)
- p_term("t_db", T_DB)
- p_term("t_DL", T_CDL)
- p_term("t_dl", T_DL)
- p_term("t_ke", T_KE)
- p_term("t_ks", T_KS)
- p_term("t_le", T_LE)
- p_term("t_mb", T_MB)
- p_term("t_md", T_MD)
- p_term("t_me", T_ME)
- p_term("t_mr", T_MR)
- p_term("t_ms", T_MS)
- p_term("t_nd", T_ND)
- p_term("t_op", T_OP)
- p_term("t_RI", T_CRI)
- p_term("t_Sb", T_CSB)
- p_term("t_Sf", T_CSF)
- p_term("t_se", T_SE)
- p_term("t_so", T_SO)
- p_term("t_sr", T_SR)
- p_term("t_te", T_TE)
- p_term("t_ti", T_TI)
- p_term("t_ue", T_UE)
- p_term("t_us", T_US)
- p_term("t_vb", T_VB)
- p_term("t_ve", T_VE)
- p_term("t_vi", T_VI)
- p_term("t_vs", T_VS)
- p_term("t_xs", T_XS)
- p_term("t_ZH", T_CZH)
- p_term("t_ZR", T_CZR)
- /* terminal key codes are not in here */
- {NULL, NULL, 0, NULL, {NULL, NULL}} /* end marker */
- };
- #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
- static char *(p_bg_values[]) = {"light", "dark", NULL};
- static char *(p_nf_values[]) = {"octal", "hex", NULL};
- static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL};
- #ifdef MULTI_BYTE
- static char *(p_fe_values[]) = {FE_ANSI, FE_UNICODE, FE_DBJPN, FE_DBKOR,
- FE_DBCHT, FE_DBCHS, FE_HEBREW, FE_FARSI , NULL};
- #endif
- #if defined(USE_GUI_WIN32) || defined(USE_GUI_MOTIF)
- static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
- #endif
- static char *(p_sessopt_values[]) = {"resize", "winsize", "options", NULL};
- static char *(p_mousem_values[]) = {"extend", "popup", "mac", NULL};
- static char *(p_slm_values[]) = {"mouse", "key", "cmd", NULL};
- static char *(p_sel_values[]) = {"inclusive", "exclusive", "old", NULL};
- static char *(p_km_values[]) = {"startsel", "stopsel", NULL};
- static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
- static void set_option_default __ARGS((int, int));
- static void set_options_default __ARGS((int dofree));
- static void illegal_char __ARGS((char_u *, int));
- static void did_set_title __ARGS((int icon));
- static char_u *option_expand __ARGS((int));
- static void set_string_option __ARGS((int opt_idx, char_u *value));
- static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf));
- static char_u *set_bool_option __ARGS((int opt_idx, char_u *varp, int value));
- static char_u *set_num_option __ARGS((int opt_idx, char_u *varp, long value, char_u *errbuf));
- static void check_redraw __ARGS((int flags));
- static int findoption __ARGS((char_u *));
- static int find_key_option __ARGS((char_u *));
- static void showoptions __ARGS((int));
- static int option_not_default __ARGS((struct vimoption *));
- static void showoneopt __ARGS((struct vimoption *));
- static int istermoption __ARGS((struct vimoption *));
- static char_u *get_varp __ARGS((struct vimoption *));
- static void option_value2string __ARGS((struct vimoption *));
- #ifdef HAVE_LANGMAP
- static void langmap_init __ARGS((void));
- static void langmap_set __ARGS((void));
- #endif
- static void paste_option_changed __ARGS((void));
- static void compatible_set __ARGS((void));
- static void fill_breakat_flags __ARGS((void));
- static int check_opt_strings __ARGS((char_u *val, char **values, int));
- static int check_opt_wim __ARGS((void));
- /*
- * Initialize the options, first part.
- *
- * Called only once from main(), just after creating the first buffer.
- */
- void
- set_init_1()
- {
- char_u *p;
- int opt_idx;
- long n;
- #ifdef HAVE_LANGMAP
- langmap_init();
- #endif
- /* Be Vi compatible by default */
- p_cp = TRUE;
- /*
- * Find default value for 'shell' option.
- */
- if ((p = mch_getenv((char_u *)"SHELL")) != NULL
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- # ifdef __EMX__
- || (p = mch_getenv((char_u *)"EMXSHELL")) != NULL
- # endif
- || (p = mch_getenv((char_u *)"COMSPEC")) != NULL
- # ifdef WIN32
- || (p = default_shell()) != NULL
- # endif
- #endif
- )
- {
- set_string_default("sh", p);
- }
- /*
- * 'maxmemtot' and 'maxmem' may have to be adjusted for available memory
- */
- opt_idx = findoption((char_u *)"maxmemtot");
- if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
- {
- n = (mch_avail_mem(FALSE) >> 11);
- options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
- opt_idx = findoption((char_u *)"maxmem");
- if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
- || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
- options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
- }
- #ifdef USE_GUI_WIN32
- /* force 'shortname' for Win32s */
- if (gui_is_win32s())
- options[findoption((char_u *)"shortname")].def_val[VI_DEFAULT] =
- (char_u *)TRUE;
- #endif
- /*
- * set all the options (except the terminal options) to their default value
- */
- set_options_default(FALSE);
- #ifdef USE_GUI
- if (found_reverse_arg)
- set_option_value((char_u *)"bg", 0L, (char_u *)"dark");
- #endif
- curbuf->b_p_initialized = TRUE;
- check_buf_options(curbuf);
- check_options();
- /*
- * initialize the table for 'iskeyword' et.al.
- * Must be before option_expand(), because that one needs vim_isIDc()
- */
- init_chartab();
- /*
- * initialize the table for 'breakat'.
- */
- fill_breakat_flags();
- /*
- * Expand environment variables and things like "~" for the defaults.
- * If option_expand() returns non-NULL the variable is expanded. This can
- * only happen for non-indirect options.
- * Also set the default to the expanded value, so ":set" does not list
- * them. Don't set the P_ALLOCED flag, because we don't want to free the
- * default.
- */
- for (opt_idx = 0; !istermoption(&options[opt_idx]); opt_idx++)
- {
- p = option_expand(opt_idx);
- if (p != NULL)
- {
- *(char_u **)options[opt_idx].var = p;
- /* VIMEXP
- * Defaults for all expanded options are currently the same for Vi
- * and Vim. When this changes, add some code here! Also need to
- * split P_DEF_ALLOCED in two.
- */
- options[opt_idx].def_val[VI_DEFAULT] = p;
- options[opt_idx].flags |= P_DEF_ALLOCED;
- }
- }
- /* Initialize the highlight_attr[] table. */
- highlight_changed();
- curbuf->b_start_ffc = *curbuf->b_p_ff; /* Buffer is unchanged */
- /* Parse default for 'wildmode' */
- check_opt_wim();
- }
- /*
- * Set an option to its default value.
- */
- static void
- set_option_default(opt_idx, dofree)
- int opt_idx;
- int dofree; /* TRUE when old value can be freed */
- {
- char_u *varp; /* pointer to variable for current option */
- int dvi; /* index in def_val[] */
- int flags;
- varp = get_varp(&(options[opt_idx]));
- flags = options[opt_idx].flags;
- if (varp != NULL) /* nothing to do for hidden option */
- {
- if ((flags & P_VI_DEF) || p_cp)
- dvi = VI_DEFAULT;
- else
- dvi = VIM_DEFAULT;
- if (flags & P_STRING)
- {
- /* indirect options are always in allocated memory */
- if (flags & P_IND)
- set_string_option_direct(NULL, opt_idx,
- options[opt_idx].def_val[dvi], dofree);
- else
- {
- if (dofree && (flags & P_ALLOCED))
- free_string_option(*(char_u **)(varp));
- *(char_u **)varp = options[opt_idx].def_val[dvi];
- options[opt_idx].flags &= ~P_ALLOCED;
- }
- }
- else if (flags & P_NUM)
- *(long *)varp = (long)options[opt_idx].def_val[dvi];
- else /* P_BOOL */
- /* the cast to long is required for Manx C */
- *(int *)varp = (int)(long)options[opt_idx].def_val[dvi];
- }
- }
- /*
- * Set all options (except terminal options) to their default value.
- */
- static void
- set_options_default(dofree)
- int dofree; /* may free old value */
- {
- int i;
- for (i = 0; !istermoption(&options[i]); i++)
- if (!(options[i].flags & P_NODEFAULT))
- set_option_default(i, dofree);
- }
- /*
- * Set the Vi-default value of a string option.
- * Used for 'sh' and 'term'.
- */
- void
- set_string_default(name, val)
- char *name;
- char_u *val;
- {
- char_u *p;
- int opt_idx;
- p = vim_strsave(val);
- if (p != NULL) /* we don't want a NULL */
- {
- opt_idx = findoption((char_u *)name);
- if (options[opt_idx].flags & P_DEF_ALLOCED)
- vim_free(options[opt_idx].def_val[VI_DEFAULT]);
- options[opt_idx].def_val[VI_DEFAULT] = p;
- options[opt_idx].flags |= P_DEF_ALLOCED;
- }
- }
- /*
- * Set the Vi-default value of a number option.
- * Used for 'lines' and 'columns'.
- */
- void
- set_number_default(name, val)
- char *name;
- long val;
- {
- options[findoption((char_u *)name)].def_val[VI_DEFAULT] = (char_u *)val;
- }
- /*
- * Initialize the options, part two: After getting Rows and Columns and
- * setting 'term'.
- */
- void
- set_init_2()
- {
- /*
- * 'scroll' defaults to half the window height. Note that this default is
- * wrong when the window height changes.
- */
- options[findoption((char_u *)"scroll")].def_val[VI_DEFAULT]
- = (char_u *)((long_u)Rows >> 1);
- comp_col();
- #if !((defined(MSDOS) || defined(OS2) || defined(WIN32)) && !defined(USE_GUI))
- {
- int idx4;
- /*
- * Try guessing the value of 'background', depending on the terminal
- * name. Only need to check for terminals with a dark background,
- * that can handle color.
- */
- idx4 = findoption((char_u *)"bg");
- if (!(options[idx4].flags & P_WAS_SET))
- {
- if (STRCMP(T_NAME, "linux") == 0) /* linux console */
- set_string_option_direct(NULL, idx4, (char_u *)"dark", TRUE);
- }
- }
- #endif
- }
- /*
- * Initialize the options, part three: After reading the .vimrc
- */
- void
- set_init_3()
- {
- #if defined(UNIX) || defined(OS2)
- /*
- * Set 'shellpipe' and 'shellredir', depending on the 'shell' option.
- * This is done after other initializations, where 'shell' might have been
- * set, but only if they have not been set before.
- */
- char_u *p;
- int idx1;
- int idx2;
- int do_sp;
- int do_srr;
- idx1 = findoption((char_u *)"sp");
- idx2 = findoption((char_u *)"srr");
- do_sp = !(options[idx1].flags & P_WAS_SET);
- do_srr = !(options[idx2].flags & P_WAS_SET);
- /*
- * Isolate the name of the shell:
- * - Skip beyond any path. E.g., "/usr/bin/csh -f" -> "csh -f".
- * - Remove any argument. E.g., "csh -f" -> "csh".
- */
- p = gettail(p_sh);
- p = vim_strnsave(p, skiptowhite(p) - p);
- if (p != NULL)
- {
- /*
- * Default for p_sp is "| tee", for p_srr is ">".
- * For known shells it is changed here to include stderr.
- */
- if ( fnamecmp(p, "csh") == 0
- || fnamecmp(p, "tcsh") == 0
- # ifdef OS2 /* also check with .exe extension */
- || fnamecmp(p, "csh.exe") == 0
- || fnamecmp(p, "tcsh.exe") == 0
- # endif
- )
- {
- if (do_sp)
- {
- p_sp = (char_u *)"|& tee";
- options[idx1].def_val[VI_DEFAULT] = p_sp;
- }
- if (do_srr)
- {
- p_srr = (char_u *)">&";
- options[idx2].def_val[VI_DEFAULT] = p_srr;
- }
- }
- else
- # ifndef OS2 /* Always use bourne shell style redirection if we reach this */
- if ( STRCMP(p, "sh") == 0
- || STRCMP(p, "ksh") == 0
- || STRCMP(p, "zsh") == 0
- || STRCMP(p, "bash") == 0)
- # endif
- {
- if (do_sp)
- {
- p_sp = (char_u *)"2>&1| tee";
- options[idx1].def_val[VI_DEFAULT] = p_sp;
- }
- if (do_srr)
- {
- p_srr = (char_u *)">%s 2>&1";
- options[idx2].def_val[VI_DEFAULT] = p_srr;
- }
- }
- vim_free(p);
- }
- #endif
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- /*
- * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
- * This is done after other initializations, where 'shell' might have been
- * set, but only if they have not been set before. Default for p_shcf is
- * "/c", for p_shq is "". For "sh" like shells it is changed here to
- * "-c" and """, but not for DJGPP, because it starts the shell without
- * command.com. And for Win32 we need to set p_sxq instead.
- */
- if (strstr((char *)p_sh, "sh") != NULL)
- {
- int idx3;
- idx3 = findoption((char_u *)"shcf");
- if (!(options[idx3].flags & P_WAS_SET))
- {
- p_shcf = (char_u *)"-c";
- options[idx3].def_val[VI_DEFAULT] = p_shcf;
- }
- # ifndef DJGPP
- # ifdef WIN32
- /* Somehow Win32 requires the quotes around the redirection too */
- idx3 = findoption((char_u *)"sxq");
- if (!(options[idx3].flags & P_WAS_SET))
- {
- p_sxq = (char_u *)""";
- options[idx3].def_val[VI_DEFAULT] = p_sxq;
- }
- # else
- idx3 = findoption((char_u *)"shq");
- if (!(options[idx3].flags & P_WAS_SET))
- {
- p_shq = (char_u *)""";
- options[idx3].def_val[VI_DEFAULT] = p_shq;
- }
- # endif
- # endif
- }
- #endif
- set_title_defaults();
- }
- #ifdef USE_GUI
- /*
- * Option initializations that can only be done after opening the GUI window.
- */
- void
- init_gui_options()
- {
- int tt;
- /* Set the 'background' option according to the lightness of the
- * background color. */
- if (!option_was_set((char_u *)"bg")
- && gui_mch_get_lightness(gui.back_pixel) < 127)
- {
- /* Full_screen must be TRUE to get the side effect of changing the
- * defaults for the highlighting. Restore it just in case. */
- tt = full_screen;
- full_screen = TRUE;
- set_option_value((char_u *)"bg", 0L, (char_u *)"dark");
- highlight_changed();
- full_screen = tt;
- }
- }
- #endif
- /*
- * 'title' and 'icon' only default to true if they have not been set or reset
- * in .vimrc and we can read the old value.
- * When 'title' and 'icon' have been reset in .vimrc, we won't even check if
- * they can be reset. This reduces startup time when using X on a remote
- * machine.
- */
- void
- set_title_defaults()
- {
- int idx1;
- long val;
- idx1 = findoption((char_u *)"title");
- if (!(options[idx1].flags & P_WAS_SET))
- {
- val = ui_can_restore_title();
- options[idx1].def_val[VI_DEFAULT] = (char_u *)val;
- p_title = val;
- }
- idx1 = findoption((char_u *)"icon");
- if (!(options[idx1].flags & P_WAS_SET))
- {
- val = ui_can_restore_icon();
- options[idx1].def_val[VI_DEFAULT] = (char_u *)val;
- p_icon = val;
- }
- }
- /*
- * Parse 'arg' for option settings.
- *
- * 'arg' may be IObuff, but only when no errors can be present and option
- * does not need to be expanded with option_expand().
- *
- * returns FAIL if an error is detected, OK otherwise
- */
- int
- do_set(arg)
- char_u *arg; /* option string (may be written to!) */
- {
- int opt_idx;
- char_u *errmsg;
- char_u errbuf[80];
- char_u *startarg;
- int prefix; /* 1: nothing, 0: "no", 2: "inv" in front of name */
- int nextchar; /* next non-white char after option name */
- int afterchar; /* character just after option name */
- int len;
- int i;
- long value;
- int key;
- int flags; /* flags for current option */
- char_u *varp = NULL; /* pointer to variable for current option */
- int did_show = FALSE; /* already showed one value */
- int adding; /* "opt+=arg" */
- int prepending; /* "opt^=arg" */
- int removing; /* "opt-=arg" */
- if (*arg == NUL)
- {
- showoptions(0);
- return OK;
- }
- while (*arg) /* loop to process all options */
- {
- errmsg = NULL;
- startarg = arg; /* remember for error message */
- if (STRNCMP(arg, "all", 3) == 0 && !isalpha(arg[3]))
- {
- /*
- * ":set all" show all options.
- * ":set all&" set all options to their default value.
- */
- arg += 3;
- if (*arg == '&')
- {
- ++arg;
- set_options_default(TRUE);
- }
- else
- showoptions(1);
- }
- else if (STRNCMP(arg, "termcap", 7) == 0)
- {
- showoptions(2);
- show_termcodes();
- arg += 7;
- }
- else
- {
- prefix = 1;
- if (STRNCMP(arg, "no", 2) == 0)
- {
- prefix = 0;
- arg += 2;
- }
- else if (STRNCMP(arg, "inv", 3) == 0)
- {
- prefix = 2;
- arg += 3;
- }
- /* find end of name */
- key = 0;
- if (*arg == '<')
- {
- opt_idx = -1;
- /* look out for <t_>;> */
- if (arg[1] == 't' && arg[2] == '_' && arg[3] && arg[4])
- len = 5;
- else
- {
- len = 1;
- while (arg[len] != NUL && arg[len] != '>')
- ++len;
- }
- if (arg[len] != '>')
- {
- errmsg = e_invarg;
- goto skip;
- }
- arg[len] = NUL; /* put NUL after name */
- if (arg[1] == 't' && arg[2] == '_') /* could be term code */
- opt_idx = findoption(arg + 1);
- arg[len++] = '>'; /* restore '>' */
- if (opt_idx == -1)
- key = find_key_option(arg + 1);
- }
- else
- {
- len = 0;
- /*
- * The two characters after "t_" may not be alphanumeric.
- */
- if (arg[0] == 't' && arg[1] == '_' && arg[2] && arg[3])
- {
- len = 4;
- }
- else
- {
- while (isalnum(arg[len]) || arg[len] == '_')
- ++len;
- }
- nextchar = arg[len];
- arg[len] = NUL; /* put NUL after name */
- opt_idx = findoption(arg);
- arg[len] = nextchar; /* restore nextchar */
- if (opt_idx == -1)
- key = find_key_option(arg);
- }
- if (opt_idx == -1 && key == 0) /* found a mismatch: skip */
- {
- errmsg = (char_u *)"Unknown option";
- goto skip;
- }
- if (opt_idx >= 0)
- {
- if (options[opt_idx].var == NULL) /* hidden option: skip */
- goto skip;
- flags = options[opt_idx].flags;
- varp = get_varp(&(options[opt_idx]));
- }
- else
- flags = P_STRING;
- /* remember character after option name */
- afterchar = arg[len];
- /* skip white space, allow ":set ai ?" */
- while (vim_iswhite(arg[len]))
- ++len;
- adding = FALSE;
- prepending = FALSE;
- removing = FALSE;
- if (arg[len] == '+' && arg[len + 1] == '=')
- {
- adding = TRUE; /* "+=" */
- ++len;
- }
- else if (arg[len] == '^' && arg[len + 1] == '=')
- {
- prepending = TRUE; /* "^=" */
- ++len;
- }
- else if (arg[len] == '-' && arg[len + 1] == '=')
- {
- removing = TRUE; /* "-=" */
- ++len;
- }
- nextchar = arg[len];
- if (vim_strchr((char_u *)"?=:!&", nextchar) != NULL)
- {
- arg += len;
- len = 0;
- if (vim_strchr((char_u *)"?!&", nextchar) != NULL
- && arg[1] != NUL && !vim_iswhite(arg[1]))
- {
- errmsg = e_trailing;
- goto skip;
- }
- }
- /*
- * allow '=' and ':' as MSDOS command.com allows only one
- * '=' character per "set" command line. grrr. (jw)
- */
- if (nextchar == '?'
- || (prefix == 1
- && vim_strchr((char_u *)"=:&", nextchar) == NULL
- && !(flags & P_BOOL)))
- {
- /*
- * print value
- */
- if (did_show)
- msg_putchar('n'); /* cursor below last one */
- else
- {
- gotocmdline(TRUE); /* cursor at status line */
- did_show = TRUE; /* remember that we did a line */
- }
- if (opt_idx >= 0)
- showoneopt(&options[opt_idx]);
- else
- {
- char_u name[2];
- char_u *p;
- name[0] = KEY2TERMCAP0(key);
- name[1] = KEY2TERMCAP1(key);
- p = find_termcode(name);
- if (p == NULL)
- {
- errmsg = (char_u *)"Unknown option";
- goto skip;
- }
- else
- (void)show_one_termcode(name, p, TRUE);
- }
- if (nextchar != '?'
- && nextchar != NUL && !vim_iswhite(afterchar))
- errmsg = e_trailing;
- }
- else
- {
- if (flags & P_BOOL) /* boolean */
- {
- if (nextchar == '=' || nextchar == ':')
- {
- errmsg = e_invarg;
- goto skip;
- }
- /*
- * ":set opt!": invert
- * ":set opt&": reset to default value
- */
- if (nextchar == '!')
- value = *(int *)(varp) ^ 1;
- else if (nextchar == '&')
- {
- /* Use a trick here to get the default value,
- * without setting the actual value yet. */
- i = *(int *)varp;
- set_option_default(opt_idx, FALSE);
- value = *(int *)varp;
- *(int *)varp = i;
- }
- else
- {
- /*
- * ":set invopt": invert
- * ":set opt" or ":set noopt": set or reset
- */
- if (nextchar != NUL && !vim_iswhite(afterchar))
- {
- errmsg = e_trailing;
- goto skip;
- }
- if (prefix == 2) /* inv */
- value = *(int *)(varp) ^ 1;
- else
- value = prefix;
- }
- errmsg = set_bool_option(opt_idx, varp, (int)value);
- }
- else /* numeric or string */
- {
- if (vim_strchr((char_u *)"=:&", nextchar) == NULL
- || prefix != 1)
- {
- errmsg = e_invarg;
- goto skip;
- }
- if (flags & P_NUM) /* numeric */
- {
- /*
- * Different ways to set a number option:
- * & set to default value
- * <xx> accept special key codes for 'wildchar'
- * c accept any non-digit for 'wildchar'
- * [-]0-9 set number
- * other error
- */
- arg += len + 1;
- if (nextchar == '&')
- {
- long temp;
- /* Use a trick here to get the default value,
- * without setting the actual value yet. */
- temp = *(long *)varp;
- set_option_default(opt_idx, FALSE);
- value = *(long *)varp;
- *(long *)varp = temp;
- }
- else if ( (long *)varp == &p_wc
- && (*arg == '<'
- || *arg == '^'
- || ((!arg[1] || vim_iswhite(arg[1]))
- && !isdigit(*arg))))
- {
- if (*arg == '<')
- value = find_key_option(arg + 1);
- else if (*arg == '^')
- value = arg[1] ^ 0x40;
- else
- value = *arg;
- if (value == 0)
- {
- errmsg = e_invarg;
- goto skip;
- }
- }
- /* allow negative numbers (for 'undolevels') */
- else if (*arg == '-' || isdigit(*arg))
- {
- i = 0;
- if (*arg == '-')
- i = 1;
- #ifdef HAVE_STRTOL
- value = strtol((char *)arg, NULL, 0);
- if (arg[i] == '0' && TO_LOWER(arg[i + 1]) == 'x')
- i += 2;
- #else
- value = atol((char *)arg);
- #endif
- while (isdigit(arg[i]))
- ++i;
- if (arg[i] != NUL && !vim_iswhite(arg[i]))
- {
- errmsg = e_invarg;
- goto skip;
- }
- }
- else
- {
- errmsg = (char_u *)"Number required after =";
- goto skip;
- }
- if (adding)
- value = *(long *)varp + value;
- if (prepending)
- value = *(long *)varp * value;
- if (removing)
- value = *(long *)varp - value;
- errmsg = set_num_option(opt_idx, varp, value, errbuf);
- }
- else if (opt_idx >= 0) /* string */
- {
- char_u *save_arg = NULL;
- char_u *s;
- char_u *oldval; /* previous value if *varp */
- char_u *newval;
- unsigned newlen;
- int comma;
- int new_value_alloced; /* new string option
- was allocated */
- /* The old value is kept until we are sure that the new
- * value is valid. set_option_default() is therefore
- * called with FALSE
- */
- oldval = *(char_u **)(varp);
- if (nextchar == '&') /* set to default val */
- {
- /* The old value will be freed in
- * did_set_string_option(). Don't change the
- * flags now, but do remember if the new value is
- * allocated. */
- set_option_default(opt_idx, FALSE);
- new_value_alloced =
- (options[opt_idx].flags & P_ALLOCED);
- options[opt_idx].flags = flags;
- }
- else
- {
- arg += len + 1; /* jump to after the '=' or ':' */
- /*
- * Convert 'whichwrap' number to string, for
- * backwards compatibility with Vim 3.0.
- * Misuse errbuf[] for the resulting string.
- */
- if (varp == (char_u *)&p_ww && isdigit(*arg))
- {
- *errbuf = NUL;
- i = getdigits(&arg);
- if (i & 1)
- STRCAT(errbuf, "b,");
- if (i & 2)
- STRCAT(errbuf, "s,");
- if (i & 4)
- STRCAT(errbuf, "h,l,");
- if (i & 8)
- STRCAT(errbuf, "<,>,");
- if (i & 16)
- STRCAT(errbuf, "[,],");
- if (*errbuf != NUL) /* remove trailing , */
- errbuf[STRLEN(errbuf) - 1] = NUL;
- save_arg = arg;
- arg = errbuf;
- }
- /*
- * Remove '>' before 'dir' and 'bdir', for
- * backwards compatibility with version 3.0
- */
- else if ( *arg == '>'
- && (varp == (char_u *)&p_dir
- || varp == (char_u *)&p_bdir))
- {
- ++arg;
- }
- /*
- * Copy the new string into allocated memory.
- * Can't use set_string_option_direct(), because
- * we need to remove the backslashes.
- */
- /* get a bit too much */
- newlen = STRLEN(arg) + 1;
- if (adding || prepending || removing)
- newlen += STRLEN(oldval) + 1;
- newval = alloc(newlen);
- if (newval == NULL) /* out of mem, don't change */
- break;
- s = newval;
- /*
- * Copy the string, skip over escaped chars.
- * For MS-DOS and WIN32 backslashes before normal
- * file name characters are not removed.
- */
- while (*arg && !vim_iswhite(*arg))
- {
- if (*arg == '\' && arg[1] != NUL
- #ifdef BACKSLASH_IN_FILENAME
- && !((flags & P_EXPAND)
- && vim_isfilec(arg[1])
- && arg[1] != '\')
- #endif
- )
- ++arg;
- *s++ = *arg++;
- }
- *s = NUL;
- /* concatenate the two strings; add a ',' if
- * needed */
- if (adding || prepending)
- {
- comma = ((flags & P_COMMA) && *oldval);
- if (adding)
- {
- i = STRLEN(oldval);
- mch_memmove(newval + i + comma, newval,
- STRLEN(newval) + 1);
- mch_memmove(newval, oldval, (size_t)i);
- }
- else
- {
- i = STRLEN(newval);
- mch_memmove(newval + i + comma, oldval,
- STRLEN(oldval) + 1);
- }
- if (comma)
- newval[i] = ',';
- }
- /* locate newval[] in oldval[] and remove it */
- if (removing)
- {
- i = STRLEN(newval);
- for (s = oldval; *s; ++s)
- {
- if ((!(flags & P_COMMA)
- || s == oldval
- || s[-1] == ',')
- && STRNCMP(s, newval, i) == 0
- && (!(flags & P_COMMA)
- || s[i] == ','
- || s[i] == NUL))
- break;
- }
- STRCPY(newval, oldval);
- if (*s)
- {
- /* may need to remove a comma */
- if (flags & P_COMMA)
- {
- if (s == oldval)
- {
- /* include comma after string */
- if (s[i] == ',')
- ++i;
- }
- else
- {
- /* include comma before string */
- --s;
- ++i;
- }
- }
- mch_memmove(newval + (s - oldval), s + i,
- STRLEN(s + i) + 1);
- }
- }
- *(char_u **)(varp) = newval;
- if (save_arg != NULL) /* number for 'whichwrap' */
- arg = save_arg;
- new_value_alloced = TRUE;
- }
- /* expand environment variables and ~ */
- s = option_expand(opt_idx);
- if (s != NULL)
- {
- if (new_value_alloced)
- vim_free(*(char_u **)(varp));
- *(char_u **)(varp) = s;
- new_value_alloced = TRUE;
- }
- errmsg = did_set_string_option(opt_idx, (char_u **)varp,
- new_value_alloced, oldval, errbuf);
- /*
- * If error detected, print the error message.
- */
- if (errmsg != NULL)
- goto skip;
- }
- else /* key code option */
- {
- char_u name[2];
- char_u *p;
- name[0] = KEY2TERMCAP0(key);
- name[1] = KEY2TERMCAP1(key);
- if (nextchar == '&')
- {
- if (add_termcap_entry(name, TRUE) == FAIL)
- errmsg = (char_u *)"Not found in termcap";
- }
- else
- {
- arg += len + 1; /* jump to after the '=' or ':' */
- for(p = arg; *p && !vim_iswhite(*p); ++p)
- {
- if (*p == '\' && *(p + 1))
- ++p;
- }
- nextchar = *p;
- *p = NUL;
- add_termcode(name, arg);
- *p = nextchar;
- }
- if (full_screen)
- ttest(FALSE);
- redraw_all_later(CLEAR);
- }
- }
- if (opt_idx >= 0)
- options[opt_idx].flags |= P_WAS_SET;
- }
- skip:
- /*
- * Advance to next argument.
- * - skip until a blank found, taking care of backslashes
- * - skip blanks
- */
- while (*arg != NUL && !vim_iswhite(*arg))
- if (*arg++ == '\' && *arg != NUL)
- ++arg;
- }
- arg = skipwhite(arg);
- if (errmsg)
- {
- ++no_wait_return; /* wait_return done below */
- emsg(errmsg); /* show error highlighted */
- MSG_PUTS(": ");
- /* show argument normal */
- while (startarg < arg)
- msg_puts(transchar(*startarg++));
- msg_end(); /* check for scrolling */
- --no_wait_return;
- return FAIL;
- }
- }
- return OK;
- }
- static void
- illegal_char(errbuf, c)
- char_u *errbuf;
- int c;
- {
- sprintf((char *)errbuf, "Illegal character <%s>", (char *)transchar(c));
- }
- /*
- * When changing 'title', 'titlestring', 'icon' or 'iconstring', call
- * maketitle() to create and display it.
- * When switching the title or icon off, call mch_restore_title() to get
- * the old value back.
- */
- static void
- did_set_title(icon)
- int icon; /* Did set icon instead of title */
- {
- if (!starting
- #ifdef USE_GUI
- && !gui.starting
- #endif
- )
- {
- maketitle();
- if (icon)
- {
- if (!p_icon && *p_iconstring == NUL)
- mch_restore_title(2);
- }
- else
- {
- if (!p_title && *p_titlestring == NUL)
- mch_restore_title(1);
- }
- }
- }
- /*
- * set_options_bin - called when 'bin' changes value.
- */
- void
- set_options_bin(oldval, newval)
- int oldval;
- int newval;
- {
- /*
- * The option values that are changed when 'bin' changes are
- * copied when 'bin is set and restored when 'bin' is reset.
- */
- if (newval)
- {
- if (!oldval) /* switched on */
- {
- curbuf->b_p_tw_nobin = curbuf->b_p_tw;
- curbuf->b_p_wm_nobin = curbuf->b_p_wm;
- curbuf->b_p_ml_nobin = curbuf->b_p_ml;
- curbuf->b_p_et_nobin = curbuf->b_p_et;
- }
- curbuf->b_p_tw = 0; /* no automatic line wrap */
- curbuf->b_p_wm = 0; /* no automatic line wrap */
- curbuf->b_p_ml = 0; /* no modelines */
- curbuf->b_p_et = 0; /* no expandtab */
- }
- else if (oldval) /* switched off */
- {
- curbuf->b_p_tw = curbuf->b_p_tw_nobin;
- curbuf->b_p_wm = curbuf->b_p_wm_nobin;
- curbuf->b_p_ml = curbuf->b_p_ml_nobin;
- curbuf->b_p_et = curbuf->b_p_et_nobin;
- }
- }
- #ifdef VIMINFO
- /*
- * Find the parameter represented by the given character (eg ', :, ", or /),
- * and return its associated value in the 'viminfo' string.
- * Only works for number parameters, not for 'r' or 'n'.
- * If the parameter is not specified in the string, return -1.
- */
- int
- get_viminfo_parameter(type)
- int type;
- {
- char_u *p;
- p = find_viminfo_parameter(type);
- if (p != NULL && isdigit(*p))
- return atoi((char *)p);
- return -1;
- }
- /*
- * Find the parameter represented by the given character (eg ', :, ", or /) in
- * the 'viminfo' option and return a pointer to the string after it.
- * Return NULL if the parameter is not specified in the string.
- */
- char_u *
- find_viminfo_parameter(type)
- int type;
- {
- char_u *p;
- for (p = p_viminfo; *p; ++p)
- {
- if (*p == type)
- return p + 1;
- if (*p == 'n') /* 'n' is always the last one */
- break;
- p = vim_strchr(p, ','); /* skip until next ',' */
- if (p == NULL) /* hit the end without finding parameter */
- break;
- }
- return NULL;
- }
- #endif
- /*
- * Expand environment variables for some string options.
- * These string options cannot be indirect!
- * Return pointer to allocated memory, or NULL when not expanded.
- */
- static char_u *
- option_expand(opt_idx)
- int opt_idx;
- {
- char_u *p;
- /* if option doesn't need expansion or is hidden: nothing to do */
- if (!(options[opt_idx].flags & P_EXPAND) || options[opt_idx].var == NULL)
- return NULL;
- p = *(char_u **)(options[opt_idx].var);
- /*
- * Expanding this with NameBuff, expand_env() must not be passed IObuff.
- */
- expand_env(p, NameBuff, MAXPATHL);
- if (STRCMP(NameBuff, p) == 0) /* they are the same */
- return NULL;
- return vim_strsave(NameBuff);
- }
- /*
- * Check for string options that are NULL (normally only termcap options).
- */
- void
- check_options()
- {
- int opt_idx;
- char_u **p;
- for (opt_idx = 0; options[opt_idx].fullname != NULL; opt_idx++)
- if ((options[opt_idx].flags & P_STRING) && options[opt_idx].var != NULL)
- {
- p = (char_u **)get_varp(&(options[opt_idx]));
- if (*p == NULL)
- *p = empty_option;
- }
- }
- /*
- * Check string options in a buffer for NULL value.
- */
- void
- check_buf_options(buf)
- BUF *buf;
- {
- #ifdef MULTI_BYTE
- if (buf->b_p_fe == NULL)
- buf->b_p_fe = empty_option;
- #endif
- if (buf->b_p_ff == NULL)
- buf->b_p_ff = empty_option;
- if (buf->b_p_mps == NULL)
- buf->b_p_mps = empty_option;
- if (buf->b_p_fo == NULL)
- buf->b_p_fo = empty_option;
- if (buf->b_p_isk == NULL)
- buf->b_p_isk = empty_option;
- if (buf->b_p_com == NULL)
- buf->b_p_com = empty_option;
- if (buf->b_p_nf == NULL)
- buf->b_p_nf = empty_option;
- #ifdef SYNTAX_HL
- if (buf->b_p_syn == NULL)
- buf->b_p_syn = empty_option;
- #endif
- #ifdef CINDENT
- if (buf->b_p_cink == NULL)
- buf->b_p_cink = empty_option;
- if (buf->b_p_cino == NULL)
- buf->b_p_cino = empty_option;
- #endif
- #ifdef WANT_FILETYPE
- if (buf->b_p_ft == NULL)
- buf->b_p_ft = empty_option;
- #endif
- #if defined(SMARTINDENT) || defined(CINDENT)
- if (buf->b_p_cinw == NULL)
- buf->b_p_cinw = empty_option;
- #endif
- #ifdef INSERT_EXPAND
- if (buf->b_p_cpt == NULL)
- buf->b_p_cpt = empty_option;
- #endif
- }
- /*
- * Free the string allocated for an option.
- * Checks for the string being empty_option. This may happen if we're out of
- * memory, vim_strsave() returned NULL, which was replaced by empty_option by
- * check_options().
- * Does NOT check for P_ALLOCED flag!
- */
- void
- free_string_option(p)
- char_u *p;
- {
- if (p != empty_option)
- vim_free(p);
- }
- /*
- * Set a string option to a new value (without checking the effect).
- * The string is copied into allocated memory.
- * If 'dofree' is set, the old value may be freed.
- * if (opt_idx == -1) name is used, otherwise opt_idx is used.
- */
- void
- set_string_option_direct(name, opt_idx, val, dofree)
- char_u *name;
- int opt_idx;
- char_u *val;
- int dofree;
- {
- char_u *s;
- char_u **varp;
- if (opt_idx == -1) /* use name */
- {
- opt_idx = findoption(name);
- if (opt_idx == -1) /* not found (should not happen) */
- return;
- }
- if (options[opt_idx].var == NULL) /* can't set hidden option */
- return;
- s = vim_strsave(val);
- if (s != NULL)
- {
- varp = (char_u **)get_varp(&(options[opt_idx]));
- if (dofree && (options[opt_idx].flags & P_ALLOCED))
- free_string_option(*varp);
- *varp = s;
- options[opt_idx].flags |= P_ALLOCED;
- }
- }
- /*
- * Set a string option to a new value, and handle the effects.
- */
- static void
- set_string_option(opt_idx, value)
- int opt_idx;
- char_u *value;
- {
- char_u *s;
- char_u **varp;
- char_u *oldval;
- if (options[opt_idx].var == NULL) /* don't set hidden option */
- return;
- s = vim_strsave(value);
- if (s != NULL)
- {
- varp = (char_u **)get_varp(&(options[opt_idx]));
- oldval = *varp;
- *varp = s;
- (void)did_set_string_option(opt_idx, varp, TRUE, oldval, NULL);
- }
- }
- /*
- * Handle string options that need some action to perform when changed.
- * Returns NULL for success, or an error message for an error.
- */
- static char_u *
- did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf)
- int opt_idx; /* index in options[] table */
- char_u **varp; /* pointer to the option variable */
- int new_value_alloced; /* new value was allocated */
- char_u *oldval; /* previous value of the option */
- char_u *errbuf; /* buffer for errors, or NULL */
- {
- char_u *errmsg = NULL;
- char_u *s, *p;
- int did_chartab = FALSE;