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

  1. /* vi:set ts=8 sts=0 sw=8:
  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.  * feature.h: Defines for optional code and preferences
  10.  *
  11.  * Edit this file to include/exclude parts of Vim, before compiling.
  12.  * The only other file that may be edited is Makefile, it contains machine
  13.  * specific options.
  14.  *
  15.  * To include specific options, change the "#if*" and "#endif" into comments,
  16.  * or uncomment the "#define".
  17.  * To exclude specific options, change the "#define" into a comment.
  18.  */
  19.  
  20. /*
  21.  * When adding a new feature:
  22.  * - Add a #define below.
  23.  * - Add a message in the table above ex_version().
  24.  * - Add a string to f_has().
  25.  * - Add a feature to ":help feature-list" in doc/eval.txt.
  26.  * - Add feature to ":help +feature-list" in doc/various.txt.
  27.  * - Add comment for the documentation of commands that use the feature.
  28.  */
  29.  
  30. /*
  31.  * Basic choices:
  32.  * ==============
  33.  *
  34.  * +tiny        almost no features enabled, not even multiple windows
  35.  * +small        few features enabled, as basic as possible
  36.  * +normal        A default selection of features enabled
  37.  * +big            many features enabled, as rich as possible.
  38.  * +huge        all possible featues enabled.
  39.  *
  40.  * When +small is used, +tiny is also included.  +normal implies +small, etc.
  41.  */
  42.  
  43. /*
  44.  * Uncomment one of these to override the default.  For unix use a configure
  45.  * argument, see Makefile.
  46.  */
  47. #if !defined(FEAT_TINY) && !defined(FEAT_SMALL) && !defined(FEAT_NORMAL) \
  48.     && !defined(FEAT_BIG) && !defined(FEAT_HUGE)
  49. /* #define FEAT_TINY */
  50. /* #define FEAT_SMALL */
  51. /* #define FEAT_NORMAL */
  52. /* #define FEAT_BIG */
  53. /* #define FEAT_HUGE */
  54. #endif
  55.  
  56. /*
  57.  * These executables are made available with the +big feature, because they
  58.  * are supposed to have enough RAM: Win32 (console & GUI), dos32, OS/2 and VMS.
  59.  * The dos16 version has very little RAM available, use +small.
  60.  */
  61. #if !defined(FEAT_TINY) && !defined(FEAT_SMALL) && !defined(FEAT_NORMAL) \
  62.     && !defined(FEAT_BIG) && !defined(FEAT_HUGE)
  63. # if defined(MSWIN) || defined(DJGPP) || defined(OS2) || defined(VMS) || defined(MACOS) || defined(AMIGA)
  64. #  define FEAT_BIG
  65. # else
  66. #  ifdef MSDOS
  67. #   define FEAT_SMALL
  68. #  else
  69. #   define FEAT_NORMAL
  70. #  endif
  71. # endif
  72. #endif
  73.  
  74. /*
  75.  * Each feature implies including the "smaller" ones.
  76.  */
  77. #ifdef FEAT_HUGE
  78. # define FEAT_BIG
  79. #endif
  80. #ifdef FEAT_BIG
  81. # define FEAT_NORMAL
  82. #endif
  83. #ifdef FEAT_NORMAL
  84. # define FEAT_SMALL
  85. #endif
  86. #ifdef FEAT_SMALL
  87. # define FEAT_TINY
  88. #endif
  89.  
  90. /*
  91.  * Optional code (see ":help +feature-list")
  92.  * =============
  93.  */
  94.  
  95. /*
  96.  * +windows        Multiple windows.  Without this there is no help
  97.  *            window and no status lines.
  98.  */
  99. #ifdef FEAT_SMALL
  100. # define FEAT_WINDOWS
  101. #endif
  102.  
  103. /*
  104.  * +listcmds        Vim commands for the buffer list and the argument
  105.  *            list.  Without this there is no ":buffer" ":bnext",
  106.  *            ":bdel", ":argdelete", etc.
  107.  */
  108. #ifdef FEAT_NORMAL
  109. # define FEAT_LISTCMDS
  110. #endif
  111.  
  112. /*
  113.  * +vertsplit        Vertically split windows.
  114.  */
  115. #ifdef FEAT_NORMAL
  116. # define FEAT_VERTSPLIT
  117. #endif
  118. #if defined(FEAT_VERTSPLIT) && !defined(FEAT_WINDOWS)
  119. # define FEAT_WINDOWS
  120. #endif
  121.  
  122. /*
  123.  * +cmdhist        Command line history.
  124.  */
  125. #ifdef FEAT_SMALL
  126. # define FEAT_CMDHIST
  127. #endif
  128.  
  129. /*
  130.  * +jumplist        Jumplist, CTRL-O and CTRL-I commands.
  131.  */
  132. #ifdef FEAT_SMALL
  133. # define FEAT_JUMPLIST
  134. #endif
  135.  
  136. /* the cmdline-window requires FEAT_VERTSPLIT and FEAT_CMDHIST */
  137. #if defined(FEAT_VERTSPLIT) && defined(FEAT_CMDHIST)
  138. # define FEAT_CMDWIN
  139. #endif
  140.  
  141. /*
  142.  * +folding        Fold lines.
  143.  */
  144. #ifdef FEAT_NORMAL
  145. # define FEAT_FOLDING
  146. #endif
  147.  
  148. /*
  149.  * +digraphs        Digraphs.
  150.  *            In insert mode and on the command line you will be
  151.  *            able to use digraphs. The CTRL-K command will work.
  152.  *            Define OLD_DIGRAPHS to get digraphs compatible with
  153.  *            Vim 5.x.  The new ones are from RFC 1345.
  154.  */
  155. #ifdef FEAT_NORMAL
  156. # define FEAT_DIGRAPHS
  157. /* #define OLD_DIGRAPHS */
  158. #endif
  159.  
  160. /*
  161.  * +langmap        'langmap' option.  Only useful when you put your
  162.  *            keyboard in a special language mode, e.g. for typing
  163.  *            greek.
  164.  */
  165. #ifdef FEAT_BIG
  166. # define FEAT_LANGMAP
  167. #endif
  168.  
  169. /*
  170.  * +keymap        'keymap' option.  Allows you to map typed keys in
  171.  *            Insert mode for a special language.
  172.  */
  173. #ifdef FEAT_BIG
  174. # define FEAT_KEYMAP
  175. #endif
  176.  
  177. /*
  178.  * +localmap        Mappings and abbreviations local to a buffer.
  179.  */
  180. #ifdef FEAT_NORMAL
  181. # define FEAT_LOCALMAP
  182. #endif
  183.  
  184. /*
  185.  * +insert_expand    CTRL-N/CTRL-P/CTRL-X in insert mode. Takes about
  186.  *            4Kbyte of code.
  187.  */
  188. #ifdef FEAT_NORMAL
  189. # define FEAT_INS_EXPAND
  190. #endif
  191.  
  192. /*
  193.  * +cmdline_compl    completion of mappings/abbreviations in cmdline mode.
  194.  *            Takes a few Kbyte of code.
  195.  */
  196. #ifdef FEAT_NORMAL
  197. # define FEAT_CMDL_COMPL
  198. #endif
  199.  
  200. #ifdef FEAT_NORMAL
  201. # define VIM_BACKTICK        /* internal backtick expansion */
  202. #endif
  203.  
  204. /*
  205.  * +textobjects        Text objects: "vaw", "das", etc.
  206.  */
  207. #ifdef FEAT_NORMAL
  208. # define FEAT_TEXTOBJ
  209. #endif
  210.  
  211. /*
  212.  * +visual        Visual mode.
  213.  * +visualextra        Extra features for Visual mode (mostly block operators).
  214.  */
  215. #ifdef FEAT_SMALL
  216. # define FEAT_VISUAL
  217. # ifdef FEAT_NORMAL
  218. #  define FEAT_VISUALEXTRA
  219. # endif
  220. #else
  221. # ifdef FEAT_CLIPBOARD
  222. #  undef FEAT_CLIPBOARD    /* can't use clipboard without Visual mode */
  223. # endif
  224. #endif
  225.  
  226. /*
  227.  * +virtualedit        'virtualedit' option and its implementation
  228.  */
  229. #ifdef FEAT_NORMAL
  230. # define FEAT_VIRTUALEDIT
  231. #endif
  232.  
  233. /*
  234.  * +vreplace        "gR" and "gr" commands.
  235.  */
  236. #ifdef FEAT_NORMAL
  237. # define FEAT_VREPLACE
  238. #endif
  239.  
  240. /*
  241.  * +cmdline_info    'showcmd' and 'ruler' options.
  242.  */
  243. #ifdef FEAT_NORMAL
  244. # define FEAT_CMDL_INFO
  245. #endif
  246.  
  247. /*
  248.  * +linebreak        'showbreak', 'breakat'  and 'linebreak' options.
  249.  */
  250. #ifdef FEAT_NORMAL
  251. # define FEAT_LINEBREAK
  252. #endif
  253.  
  254. /*
  255.  * +ex_extra        ":retab", ":right", ":left", ":center", ":normal".
  256.  */
  257. #ifdef FEAT_NORMAL
  258. # define FEAT_EX_EXTRA
  259. #endif
  260.  
  261. /*
  262.  * +extra_search    'hlsearch' and 'incsearch' options.
  263.  */
  264. #ifdef FEAT_NORMAL
  265. # define FEAT_SEARCH_EXTRA
  266. #endif
  267.  
  268. /*
  269.  * +quickfix        Quickfix commands.
  270.  */
  271. #ifdef FEAT_NORMAL
  272. # define FEAT_QUICKFIX
  273. #endif
  274.  
  275. /*
  276.  * +file_in_path    "gf" and "<cfile>" commands.
  277.  */
  278. #ifdef FEAT_NORMAL
  279. # define FEAT_SEARCHPATH
  280. #endif
  281.  
  282. /*
  283.  * +find_in_path    "[I" ":isearch" "^W^I", ":checkpath", etc.
  284.  */
  285. #ifdef FEAT_NORMAL
  286. # ifdef FEAT_SEARCHPATH    /* FEAT_SEARCHPATH is required */
  287. #  define FEAT_FIND_ID
  288. # endif
  289. #endif
  290.  
  291. /*
  292.  * +path_extra        up/downwards searching in 'path' and 'tags'.
  293.  */
  294. #ifdef FEAT_NORMAL
  295. # define FEAT_PATH_EXTRA
  296. #endif
  297.  
  298. /*
  299.  * +rightleft        Right-to-left editing/typing support.
  300.  */
  301. #ifdef FEAT_BIG
  302. # define FEAT_RIGHTLEFT
  303. #endif
  304.  
  305. /*
  306.  * +farsi        Farsi (Persian language) Keymap support.
  307.  *            Requires FEAT_RIGHTLEFT.
  308.  */
  309. #ifdef FEAT_BIG
  310. # define FEAT_FKMAP
  311. #endif
  312. #ifdef FEAT_FKMAP
  313. # ifndef FEAT_RIGHTLEFT
  314. #   define FEAT_RIGHTLEFT
  315. # endif
  316. #endif
  317.  
  318. /*
  319.  * +arabic        Arabic keymap and shaping support.
  320.  *            Requires FEAT_RIGHTLEFT and FEAT_MBYTE.
  321.  */
  322. #if defined(FEAT_BIG) && !defined(WIN16) && SIZEOF_INT >= 4 && !defined(EBCDIC)
  323. # define FEAT_ARABIC
  324. #endif
  325. #ifdef FEAT_ARABIC
  326. # ifndef FEAT_RIGHTLEFT
  327. #   define FEAT_RIGHTLEFT
  328. # endif
  329. #endif
  330.  
  331. /*
  332.  * +emacs_tags        When FEAT_EMACS_TAGS defined: Include support for
  333.  *            emacs style TAGS file.
  334.  */
  335. #ifdef FEAT_BIG
  336. # define FEAT_EMACS_TAGS
  337. #endif
  338.  
  339. /*
  340.  * +tag_binary        Can use a binary search for the tags file.
  341.  *
  342.  * Disabled for EBCDIC:
  343.  * On OS/390 Unix we have the problem that /bin/sort sorts ASCII instead of
  344.  * EBCDIC.  With this binary search doesn't work, as VIM expects a tag file
  345.  * sorted by character values.  I'm not sure how to fix this. Should we really
  346.  * do a EBCDIC to ASCII conversion for this??
  347.  */
  348. #if defined(FEAT_NORMAL) && !defined(EBCDIC)
  349. # define FEAT_TAG_BINS
  350. #endif
  351.  
  352. /*
  353.  * +tag_old_static    Old style static tags: "file:tag  file  ..".  Slows
  354.  *            down tag searching a bit.
  355.  */
  356. #ifdef FEAT_NORMAL
  357. # define FEAT_TAG_OLDSTATIC
  358. #endif
  359.  
  360. /*
  361.  * +tag_any_white    Allow any white space to separate the fields in a tags
  362.  *            file.  When not defined, only a TAB is allowed.
  363.  */
  364. /* #define FEAT_TAG_ANYWHITE */
  365.  
  366. /*
  367.  * +cscope        Unix only: Cscope support.
  368.  */
  369. #if defined(UNIX) && defined(FEAT_BIG) && !defined(FEAT_CSCOPE) && !defined(MACOS_X)
  370. # define FEAT_CSCOPE
  371. #endif
  372.  
  373. /*
  374.  * +eval        Built-in script language and expression evaluation,
  375.  *            ":let", ":if", etc.
  376.  */
  377. #ifdef FEAT_NORMAL
  378. # define FEAT_EVAL
  379. #endif
  380.  
  381. /*
  382.  * +user_commands    Allow the user to define his own commands.
  383.  */
  384. #ifdef FEAT_NORMAL
  385. # define FEAT_USR_CMDS
  386. #endif
  387.  
  388. /*
  389.  * +printer        ":hardcopy" command
  390.  * +postscript        Printing uses PostScript file output.
  391.  */
  392. #if defined(FEAT_NORMAL) && (defined(MSWIN) || defined(FEAT_EVAL)) \
  393.     && !defined(AMIGA)
  394. # define FEAT_PRINTER
  395. #endif
  396. #if defined(FEAT_PRINTER) && ((defined(MSWIN) && defined(MSWINPS)) \
  397.     || (!defined(MSWIN) && defined(FEAT_EVAL)))
  398. # define FEAT_POSTSCRIPT
  399. #endif
  400.  
  401. /*
  402.  * +modify_fname    modifiers for file name.  E.g., "%:p:h".
  403.  */
  404. #ifdef FEAT_NORMAL
  405. # define FEAT_MODIFY_FNAME
  406. #endif
  407.  
  408. /*
  409.  * +autocmd        ":autocmd" command
  410.  */
  411. #ifdef FEAT_NORMAL
  412. # define FEAT_AUTOCMD
  413. #endif
  414.  
  415. /*
  416.  * +diff        Displaying diffs in a nice way.
  417.  *            Requires +windows and +autocmd.
  418.  */
  419. #if defined(FEAT_NORMAL) && defined(FEAT_WINDOWS) && defined(FEAT_AUTOCMD)
  420. # define FEAT_DIFF
  421. #endif
  422.  
  423. /*
  424.  * +title        'title' and 'icon' options
  425.  * +statusline        'statusline', 'rulerformat' and special format of
  426.  *            'titlestring' and 'iconstring' options.
  427.  * +byte_offset        '%o' in 'statusline' and builtin functions line2byte()
  428.  *            and byte2line().
  429.  *            Note: Required for Macintosh.
  430.  */
  431. #if defined(FEAT_NORMAL) && !defined(MSDOS)
  432. # define FEAT_TITLE
  433. #endif
  434.  
  435. #ifdef FEAT_NORMAL
  436. # define FEAT_STL_OPT
  437. # ifndef FEAT_CMDL_INFO
  438. #  define FEAT_CMDL_INFO    /* 'ruler' is required for 'statusline' */
  439. # endif
  440. #endif
  441.  
  442. #ifdef FEAT_NORMAL
  443. # define FEAT_BYTEOFF
  444. #endif
  445.  
  446. /*
  447.  * +wildignore        'wildignore' and 'backupskip' options
  448.  *            Needed for Unix to make "crontab -e" work.
  449.  */
  450. #if defined(FEAT_NORMAL) || defined(UNIX)
  451. # define FEAT_WILDIGN
  452. #endif
  453.  
  454. /*
  455.  * +wildmenu        'wildmenu' option
  456.  */
  457. #if defined(FEAT_NORMAL) && defined(FEAT_WINDOWS)
  458. # define FEAT_WILDMENU
  459. #endif
  460.  
  461. /*
  462.  * +osfiletype        filetype checking in autocommand patterns.
  463.  *            Only on systems that support filetypes (RISC OS).
  464.  */
  465. #if 0
  466. # define FEAT_OSFILETYPE
  467. # define DFLT_OFT "Text"
  468. #endif
  469.  
  470. /*
  471.  * +viminfo        reading/writing the viminfo file. Takes about 8Kbyte
  472.  *            of code.
  473.  * VIMINFO_FILE        Location of user .viminfo file (should start with $).
  474.  * VIMINFO_FILE2    Location of alternate user .viminfo file.
  475.  */
  476. #ifdef FEAT_NORMAL
  477. # define FEAT_VIMINFO
  478. /* #define VIMINFO_FILE    "$HOME/foo/.viminfo" */
  479. /* #define VIMINFO_FILE2 "~/bar/.viminfo" */
  480. #endif
  481.  
  482. /*
  483.  * +syntax        syntax highlighting.  When using this, it's a good
  484.  *            idea to have +autocmd and +eval too.
  485.  */
  486. #if defined(FEAT_NORMAL) || defined(PROTO)
  487. # define FEAT_SYN_HL
  488. #endif
  489.  
  490. /*
  491.  * +builtin_terms    Choose one out of the following four:
  492.  *
  493.  * NO_BUILTIN_TCAPS    Do not include any builtin termcap entries (used only
  494.  *            with HAVE_TGETENT defined).
  495.  *
  496.  * (nothing)        Machine specific termcap entries will be included.
  497.  *            This is default for win16 to save static data.
  498.  *
  499.  * SOME_BUILTIN_TCAPS    Include most useful builtin termcap entries (used only
  500.  *            with NO_BUILTIN_TCAPS not defined).
  501.  *            This is the default.
  502.  *
  503.  * ALL_BUILTIN_TCAPS    Include all builtin termcap entries
  504.  *            (used only with NO_BUILTIN_TCAPS not defined).
  505.  */
  506. #ifdef HAVE_TGETENT
  507. /* #define NO_BUILTIN_TCAPS */
  508. #endif
  509.  
  510. #if !defined(NO_BUILTIN_TCAPS) && !defined(FEAT_GUI_W16)
  511. # ifdef FEAT_BIG
  512. #  define ALL_BUILTIN_TCAPS
  513. # else
  514. #  define SOME_BUILTIN_TCAPS        /* default */
  515. # endif
  516. #endif
  517.  
  518. /*
  519.  * +lispindent        lisp indenting (From Eric Fischer).
  520.  * +cindent        C code indenting (From Eric Fischer).
  521.  * +smartindent        smart C code indenting when the 'si' option is set.
  522.  *
  523.  * These two need to be defined when making prototypes.
  524.  */
  525. #if defined(FEAT_NORMAL) || defined(PROTO)
  526. # define FEAT_LISP
  527. #endif
  528.  
  529. #if defined(FEAT_NORMAL) || defined(PROTO)
  530. # define FEAT_CINDENT
  531. #endif
  532.  
  533. #ifdef FEAT_NORMAL
  534. # define FEAT_SMARTINDENT
  535. #endif
  536.  
  537. /*
  538.  * +comments        'comments' option.
  539.  */
  540. #ifdef FEAT_NORMAL
  541. # define FEAT_COMMENTS
  542. #endif
  543.  
  544. /*
  545.  * +cryptv        Encryption (by Mohsin Ahmed <mosh@sasi.com>).
  546.  */
  547. #if defined(FEAT_NORMAL) || defined(PROTO)
  548. # define FEAT_CRYPT
  549. #endif
  550.  
  551. /*
  552.  * +mksession        ":mksession" command.
  553.  *            Requires +windows and +vertsplit.
  554.  */
  555. #if defined(FEAT_NORMAL) && defined(FEAT_WINDOWS) && defined(FEAT_VERTSPLIT)
  556. # define FEAT_SESSION
  557. #endif
  558.  
  559. /*
  560.  * +multi_lang        Multi language support. ":menutrans", ":language", etc.
  561.  * +gettext        Message translations (requires +multi_lang)
  562.  *            (only when "lang" archive unpacked)
  563.  */
  564. #ifdef FEAT_NORMAL
  565. # define FEAT_MULTI_LANG
  566. #endif
  567. #if defined(HAVE_GETTEXT) && defined(FEAT_MULTI_LANG) \
  568.     && (defined(HAVE_LOCALE_H) || defined(X_LOCALE))
  569. # define FEAT_GETTEXT
  570. #endif
  571.  
  572. /*
  573.  * +multi_byte        Generic multi-byte character handling.  Doesn't work
  574.  *            with 16 bit ints.  Required for GTK+ 2.
  575.  *
  576.  * Disabled for EBCDIC:
  577.  * Multibyte support doesn't work on OS390 Unix currently.
  578.  */
  579. #if (defined(FEAT_BIG) || defined(HAVE_GTK2) || defined(FEAT_ARABIC)) \
  580.     && !defined(FEAT_MBYTE) && !defined(WIN16) \
  581.     && SIZEOF_INT >= 4 && !defined(EBCDIC)
  582. # define FEAT_MBYTE
  583. #endif
  584.  
  585. /*
  586.  * +multi_byte_ime    Win32 IME input method.  Requires +multi_byte.
  587.  *            Only for far-east Windows, so IME can be used to input
  588.  *            chars.  Not tested much!
  589.  */
  590. #if defined(FEAT_GUI_W32) && !defined(FEAT_MBYTE_IME)
  591. /* #define FEAT_MBYTE_IME */
  592. # endif
  593.  
  594. #if defined(FEAT_MBYTE_IME) && !defined(FEAT_MBYTE)
  595. # define FEAT_MBYTE
  596. #endif
  597.  
  598. #if defined(FEAT_MBYTE) && SIZEOF_INT < 4 && !defined(PROTO)
  599.     Error: Can only handle multi-byte feature with 32 bit int or larger
  600. #endif
  601.  
  602. /* Use iconv() when it's available. */
  603. #if defined(FEAT_MBYTE) && ((defined(HAVE_ICONV_H) && defined(HAVE_ICONV)) \
  604.         || defined(DYNAMIC_ICONV))
  605. # define USE_ICONV
  606. #endif
  607.  
  608. /*
  609.  * XSMP - X11 Session Management Protocol
  610.  * It may be preferred to disable this if the GUI supports it (e.g., GNOME/KDE)
  611.  * and implement save-yourself etc. through that, but it may also be cleaner to
  612.  * have all SM-aware vims do the same thing (libSM does not depend upon X11).
  613.  * If your GUI wants to support SM itself, change this ifdef.
  614.  * I'm assuming that any X11 implementation will cope with this for now.
  615.  */
  616. #if defined(HAVE_X11) && defined(WANT_X11) && defined(HAVE_X11_SM_SMLIB_H)
  617. # define USE_XSMP
  618. #endif
  619. #if defined(USE_XSMP_INTERACT) && !defined(USE_XSMP)
  620. # undef USE_XSMP_INTERACT
  621. #endif
  622.  
  623. /*
  624.  * +xim            X Input Method.  For entering special languages like
  625.  *            chinese and Japanese.
  626.  * +hangul_input    Internal Hangul input method.  Must be included
  627.  *            through configure: "--enable-hangulin"
  628.  * Both are for Unix and VMS only.
  629.  */
  630. #ifndef FEAT_XIM
  631. /* #define FEAT_XIM */
  632. #endif
  633.  
  634. #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
  635. # define USE_XIM 1        /* needed for GTK include files */
  636. #endif
  637.  
  638. #ifdef FEAT_HANGULIN
  639. # define HANGUL_DEFAULT_KEYBOARD 2    /* 2 or 3 bulsik keyboard */
  640. # define ESC_CHG_TO_ENG_MODE        /* if defined, when ESC pressed,
  641.                      * turn to english mode
  642.                      */
  643. # if !defined(FEAT_XFONTSET) && defined(HAVE_X11)
  644. #  define FEAT_XFONTSET            /* Hangul input requires xfontset */
  645. # endif
  646. # if defined(FEAT_XIM) && !defined(LINT)
  647.     Error: You should select only ONE of XIM and HANGUL INPUT
  648. # endif
  649. #endif
  650. #if defined(FEAT_HANGULIN) || defined(FEAT_XIM)
  651. /* # define X_LOCALE */            /* for OS with incomplete locale
  652.                        support, like old linux versions. */
  653. /* # define SLOW_XSERVER */        /* for extremely slow X server */
  654. #endif
  655.  
  656. /*
  657.  * +xfontset        X fontset support.  For outputting wide characters.
  658.  */
  659. #ifndef FEAT_XFONTSET
  660. # if defined(FEAT_MBYTE) && defined(HAVE_X11) && !defined(HAVE_GTK2)
  661. #  define FEAT_XFONTSET
  662. # else
  663. /* #  define FEAT_XFONTSET */
  664. # endif
  665. #endif
  666.  
  667. /*
  668.  * +libcall        libcall() function
  669.  */
  670. /* Using dlopen() also requires dlsym() to be available. */
  671. #if defined(HAVE_DLOPEN) && defined(HAVE_DLSYM)
  672. # define USE_DLOPEN
  673. #endif
  674. #if defined(FEAT_EVAL) && (defined(WIN3264) || ((defined(UNIX) || defined(VMS)) \
  675.     && (defined(USE_DLOPEN) || defined(HAVE_SHL_LOAD))))
  676. # define FEAT_LIBCALL
  677. #endif
  678.  
  679. /*
  680.  * +scrollbind        synchronization of split windows
  681.  */
  682. #if defined(FEAT_NORMAL) && defined(FEAT_WINDOWS)
  683. # define FEAT_SCROLLBIND
  684. #endif
  685.  
  686. /*
  687.  * +menu        ":menu" command
  688.  */
  689. #ifdef FEAT_NORMAL
  690. # define FEAT_MENU
  691. # ifdef FEAT_GUI_W32
  692. #  define FEAT_TEAROFF
  693. # endif
  694. #endif
  695.  
  696. /* There are two ways to use XPM. */
  697. #if (defined(HAVE_XM_XPMP_H) && defined(FEAT_GUI_MOTIF)) \
  698.         || defined(HAVE_X11_XPM_H)
  699. # define HAVE_XPM 1
  700. #endif
  701.  
  702. /*
  703.  * +toolbar        Include code for a toolbar (for the Win32 GUI, GTK
  704.  *            always has it).  But only if menus are enabled.
  705.  */
  706. #if defined(FEAT_NORMAL) && defined(FEAT_MENU) \
  707.     && (defined(FEAT_GUI_GTK) \
  708.         || defined(FEAT_GUI_MSWIN) \
  709.         || ((defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) \
  710.             && defined(HAVE_XPM)) \
  711.         || defined(FEAT_GUI_PHOTON))
  712. # define FEAT_TOOLBAR
  713. #endif
  714. #if defined(FEAT_TOOLBAR) && !defined(FEAT_MENU)
  715. # define FEAT_MENU
  716. #endif
  717.  
  718. /*
  719.  * +browse        ":browse" command.
  720.  *
  721.  * BROWSE_CURRBUF    Open file browser in the directory of the current
  722.  *            buffer, instead of the current directory.
  723.  */
  724. #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
  725. # define FEAT_BROWSE
  726. #endif
  727. #if defined(FEAT_NORMAL) && defined(FEAT_GUI_MSWIN)
  728. # define BROWSE_CURRBUF
  729. #endif
  730.  
  731. /*
  732.  * +dialog_gui        Use GUI dialog.
  733.  * +dialog_con        May use Console dialog.
  734.  *            When none of these defined there is no dialog support.
  735.  */
  736. #ifdef FEAT_NORMAL
  737. # if defined(FEAT_GUI_MSWIN)
  738. #  define FEAT_GUI_DIALOG
  739. # else
  740. #  if ((defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF)) \
  741.         && defined(HAVE_X11_XPM_H)) \
  742.     || defined(FEAT_GUI_GTK) \
  743.     || defined(FEAT_GUI_PHOTON) \
  744.     || defined(FEAT_GUI_MAC)
  745. #   define FEAT_CON_DIALOG
  746. #   define FEAT_GUI_DIALOG
  747. #  else
  748. #   define FEAT_CON_DIALOG
  749. #  endif
  750. # endif
  751. #endif
  752. #if !defined(FEAT_GUI_DIALOG) && (defined(FEAT_GUI_MOTIF) \
  753.     || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK))
  754. /* need a dialog to show error messages when starting from the desktop */
  755. # define FEAT_GUI_DIALOG
  756. #endif
  757. #if defined(FEAT_GUI_DIALOG) && \
  758.     (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) \
  759.      || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MSWIN) \
  760.      || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
  761. # define FEAT_GUI_TEXTDIALOG
  762. #endif
  763.  
  764. /*
  765.  * Preferences:
  766.  * ============
  767.  */
  768.  
  769. /*
  770.  * +writebackup        'writebackup' is default on:
  771.  *            Use a backup file while overwriting a file.  But it's
  772.  *            deleted again when 'backup' is not set.  Changing this
  773.  *            is strongly discouraged: You can loose all your
  774.  *            changes when the computer crashes while writing the
  775.  *            file.
  776.  *            VMS note: It does work on VMS as well, but because of
  777.  *            version handling it does not have any purpose.
  778.  *            Overwrite will write to the new version.
  779.  */
  780. #ifndef VMS
  781. # define FEAT_WRITEBACKUP
  782. #endif
  783.  
  784. /*
  785.  * +xterm_save        The t_ti and t_te entries for the builtin xterm will
  786.  *            be set to save the screen when starting Vim and
  787.  *            restoring it when exiting.
  788.  */
  789. /* #define FEAT_XTERM_SAVE */
  790.  
  791. /*
  792.  * DEBUG        Output a lot of debugging garbage.
  793.  */
  794. /* #define DEBUG */
  795.  
  796. /*
  797.  * STARTUPTIME        Time the startup process.  Writes a "vimstartup" file
  798.  *            with timestamps.
  799.  */
  800. /* #define STARTUPTIME "vimstartup" */
  801.  
  802. /*
  803.  * MEM_PROFILE        Debugging of memory allocation and freeing.
  804.  */
  805. /* #define MEM_PROFILE */
  806.  
  807. /*
  808.  * VIMRC_FILE        Name of the .vimrc file in current dir.
  809.  */
  810. /* #define VIMRC_FILE    ".vimrc" */
  811.  
  812. /*
  813.  * EXRC_FILE        Name of the .exrc file in current dir.
  814.  */
  815. /* #define EXRC_FILE    ".exrc" */
  816.  
  817. /*
  818.  * GVIMRC_FILE        Name of the .gvimrc file in current dir.
  819.  */
  820. /* #define GVIMRC_FILE    ".gvimrc" */
  821.  
  822. /*
  823.  * VIEW_FILE        Name of the default ":mkview" file.
  824.  */
  825. #define VIEW_FILE    "View.vim"
  826.  
  827. /*
  828.  * SESSION_FILE        Name of the default ":mksession" file.
  829.  */
  830. #define SESSION_FILE    "Session.vim"
  831.  
  832. /*
  833.  * USR_VIMRC_FILE    Name of the user .vimrc file.
  834.  * USR_VIMRC_FILE2    Name of alternate user .vimrc file.
  835.  * USR_VIMRC_FILE3    Name of alternate user .vimrc file.
  836.  */
  837. /* #define USR_VIMRC_FILE    "~/foo/.vimrc" */
  838. /* #define USR_VIMRC_FILE2    "~/bar/.vimrc" */
  839. /* #define USR_VIMRC_FILE3    "$VIM/.vimrc" */
  840.  
  841. /*
  842.  * EVIM_FILE        Name of the evim.vim script file
  843.  */
  844. /* #define EVIM_FILE        "$VIMRUNTIME/evim.vim" */
  845.  
  846. /*
  847.  * USR_EXRC_FILE    Name of the user .exrc file.
  848.  * USR_EXRC_FILE2    Name of the alternate user .exrc file.
  849.  */
  850. /* #define USR_EXRC_FILE    "~/foo/.exrc" */
  851. /* #define USR_EXRC_FILE2    "~/bar/.exrc" */
  852.  
  853. /*
  854.  * USR_GVIMRC_FILE    Name of the user .gvimrc file.
  855.  * USR_GVIMRC_FILE2    Name of the alternate user .gvimrc file.
  856.  */
  857. /* #define USR_GVIMRC_FILE    "~/foo/.gvimrc" */
  858. /* #define USR_GVIMRC_FILE2    "~/bar/.gvimrc" */
  859. /* #define USR_GVIMRC_FILE3    "$VIM/.gvimrc" */
  860.  
  861. /*
  862.  * SYS_VIMRC_FILE    Name of the system-wide .vimrc file.
  863.  */
  864. /* #define SYS_VIMRC_FILE    "/etc/vimrc" */
  865.  
  866. /*
  867.  * SYS_GVIMRC_FILE    Name of the system-wide .gvimrc file.
  868.  */
  869. /* #define SYS_GVIMRC_FILE    "/etc/gvimrc" */
  870.  
  871. /*
  872.  * DFLT_HELPFILE    Name of the help file.
  873.  */
  874. /* # define DFLT_HELPFILE    "$VIMRUNTIME/doc/help.txt.gz" */
  875.  
  876. /*
  877.  * File names for:
  878.  * FILETYPE_FILE    switch on file type detection
  879.  * FTPLUGIN_FILE    switch on loading filetype plugin files
  880.  * INDENT_FILE        switch on loading indent files
  881.  * FTOFF_FILE        switch off file type detection
  882.  * FTPLUGOF_FILE    switch off loading settings files
  883.  * INDOFF_FILE        switch off loading indent files
  884.  */
  885. /* # define FILETYPE_FILE    "filetype.vim" */
  886. /* # define FTPLUGIN_FILE    "ftplugin.vim" */
  887. /* # define INDENT_FILE        "indent.vim" */
  888. /* # define FTOFF_FILE        "ftoff.vim" */
  889. /* # define FTPLUGOF_FILE    "ftplugof.vim" */
  890. /* # define INDOFF_FILE        "indoff.vim" */
  891.  
  892. /*
  893.  * SYS_MENU_FILE    Name of the default menu.vim file.
  894.  */
  895. /* # define SYS_MENU_FILE    "$VIMRUNTIME/menu.vim" */
  896.  
  897. /*
  898.  * SYS_OPTWIN_FILE    Name of the default optwin.vim file.
  899.  */
  900. #ifndef SYS_OPTWIN_FILE
  901. # define SYS_OPTWIN_FILE    "$VIMRUNTIME/optwin.vim"
  902. #endif
  903.  
  904. /*
  905.  * SYNTAX_FNAME        Name of a syntax file, where %s is the syntax name.
  906.  */
  907. /* #define SYNTAX_FNAME    "/foo/%s.vim" */
  908.  
  909. /*
  910.  * RUNTIME_DIRNAME    Generic name for the directory of the runtime files.
  911.  */
  912. #ifndef RUNTIME_DIRNAME
  913. # define RUNTIME_DIRNAME "runtime"
  914. #endif
  915.  
  916. /*
  917.  * RUNTIME_GLOBAL    Directory name for global Vim runtime directory.
  918.  *            Don't define this if the preprocessor can't handle
  919.  *            string concatenation.
  920.  *            Also set by "--with-global-runtime" configure argument.
  921.  */
  922. /* #define RUNTIME_GLOBAL "/etc/vim" */
  923.  
  924. /*
  925.  * MODIFIED_BY        Name of who modified Vim.  Required when distributing
  926.  *            a modifed version of Vim.
  927.  *            Also from the "--with-modified-by" configure argument.
  928.  */
  929. /* #define MODIFIED_BY "John Doe" */
  930.  
  931. /*
  932.  * Machine dependent:
  933.  * ==================
  934.  */
  935.  
  936. /*
  937.  * +fork        Unix only: fork() support (detected by configure)
  938.  * +system        Use system() instead of fork/exec for starting a
  939.  *            shell.  Doesn't work for the GUI!
  940.  */
  941. /* #define USE_SYSTEM */
  942.  
  943. /*
  944.  * +X11            Unix only.  Include code for xterm title saving and X
  945.  *            clipboard.  Only works if HAVE_X11 is also defined.
  946.  */
  947. #if defined(FEAT_NORMAL) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)
  948. # define WANT_X11
  949. #endif
  950.  
  951. /*
  952.  * +mouse_xterm        Unix only: Include code for xterm mouse handling.
  953.  * +mouse_dec        idem, for Dec mouse handling.
  954.  * +mouse_jsbterm    idem, for Jsbterm mouse handling.
  955.  * +mouse_netterm    idem, for Netterm mouse handling.
  956.  * (none)        MS-DOS mouse support.
  957.  * +mouse_gpm        Unix only: Include code for Linux console mouse
  958.  *            handling.
  959.  * +mouse_pterm        PTerm mouse support for QNX
  960.  * +mouse        Any mouse support (any of the above enabled).
  961.  */
  962. /* OS/2 and Amiga console have no mouse support */
  963. #if (!defined(AMIGA) && !defined(OS2) && !defined(MACOS)) || defined(FEAT_GUI_AMIGA)
  964. # ifdef FEAT_NORMAL
  965. #  define FEAT_MOUSE_XTERM
  966. # endif
  967. # ifdef FEAT_BIG
  968. #  define FEAT_MOUSE_NET
  969. # endif
  970. # ifdef FEAT_BIG
  971. #  define FEAT_MOUSE_DEC
  972. # endif
  973. # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
  974. #  define DOS_MOUSE
  975. # endif
  976. # if defined(FEAT_NORMAL) && defined(__QNX__)
  977. #  define FEAT_MOUSE_PTERM
  978. # endif
  979. #endif
  980.  
  981. #if defined(FEAT_NORMAL) && defined(HAVE_GPM)
  982. # define FEAT_MOUSE_GPM
  983. #endif
  984. /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
  985. #if !defined(FEAT_MOUSE_TTY) && (defined(FEAT_MOUSE_XTERM) \
  986.     || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
  987.     || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
  988.     || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM))
  989. # define FEAT_MOUSE_TTY        /* include non-GUI mouse support */
  990. #endif
  991. #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
  992. # define FEAT_MOUSE        /* include generic mouse support */
  993. #endif
  994.  
  995. /*
  996.  * +clipboard        Clipboard support.  Always used for the GUI.
  997.  * +xterm_clipboard    Unix only: Include code for handling the clipboard
  998.  *            in an xterm like in the GUI.
  999.  */
  1000. #ifdef FEAT_GUI
  1001. # ifndef FEAT_CLIPBOARD
  1002. #  define FEAT_CLIPBOARD
  1003. #  ifndef FEAT_VISUAL
  1004. #   define FEAT_VISUAL
  1005. #  endif
  1006. # endif
  1007. #endif
  1008.  
  1009. #if defined(FEAT_NORMAL) && defined(FEAT_VISUAL) \
  1010.     && (defined(UNIX) || defined(VMS)) \
  1011.     && defined(WANT_X11) && defined(HAVE_X11)
  1012. # define FEAT_XCLIPBOARD
  1013. # ifndef FEAT_CLIPBOARD
  1014. #  define FEAT_CLIPBOARD
  1015. # endif
  1016. #endif
  1017.  
  1018. /*
  1019.  * +dnd        Drag'n'drop support.  Always used for the GTK+ GUI.
  1020.  */
  1021. #if defined(FEAT_CLIPBOARD) && defined(FEAT_GUI_GTK)
  1022. # define FEAT_DND
  1023. #endif
  1024.  
  1025. #if defined(FEAT_GUI_MSWIN) && defined(FEAT_SMALL)
  1026. # define MSWIN_FIND_REPLACE    /* include code for find/replace dialog */
  1027. # define MSWIN_FR_BUFSIZE 256
  1028. #endif
  1029.  
  1030. /*
  1031.  * +clientserver    Remote control via the remote_send() function
  1032.  *            and the --remote argument
  1033.  */
  1034. #if (defined(WIN32) || defined(FEAT_XCLIPBOARD)) && defined(FEAT_EVAL)
  1035. # define FEAT_CLIENTSERVER
  1036. #endif
  1037.  
  1038. /*
  1039.  * +termresponse    send t_RV to obtain terminal response.  Used for xterm
  1040.  *            to check if mouse dragging can be used and if term
  1041.  *            codes can be obtaind.
  1042.  */
  1043. #if (defined(FEAT_NORMAL) || defined(FEAT_MOUSE)) && defined(HAVE_TGETENT)
  1044. # define FEAT_TERMRESPONSE
  1045. #endif
  1046.  
  1047. /*
  1048.  * cursor shape        Adjust the shape of the cursor to the mode.
  1049.  * mouse shape        Adjust the shape of the mouse pointer to the mode.
  1050.  */
  1051. #ifdef FEAT_NORMAL
  1052. /* MS-DOS console and Win32 console can change cursor shape */
  1053. # if defined(MSDOS) || (defined(WIN3264) && !defined(FEAT_GUI_W32))
  1054. #  define MCH_CURSOR_SHAPE
  1055. # endif
  1056. # if defined(FEAT_GUI_W32) || defined(FEAT_GUI_W16) || defined(FEAT_GUI_MOTIF) \
  1057.     || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) \
  1058.     || defined(FEAT_GUI_PHOTON)
  1059. #  define FEAT_MOUSESHAPE
  1060. # endif
  1061. #endif
  1062.  
  1063. /* GUI and some consoles can change the shape of the cursor.  The code is also
  1064.  * needed for the 'mouseshape' option. */
  1065. #if defined(FEAT_GUI) || defined(MCH_CURSOR_SHAPE) || defined(FEAT_MOUSESHAPE)
  1066. # define CURSOR_SHAPE
  1067. #endif
  1068.  
  1069. /*
  1070.  * +ARP            Amiga only. Use arp.library, DOS 2.0 is not required.
  1071.  */
  1072. #ifndef NO_ARP
  1073. # define FEAT_ARP
  1074. #endif
  1075.  
  1076. /*
  1077.  * +GUI_Athena        To compile Vim with or without the GUI (gvim) you have
  1078.  * +GUI_BeOS        to edit the Makefile.
  1079.  * +GUI_Motif
  1080.  */
  1081.  
  1082. /*
  1083.  * +ole            Win32 OLE automation: Use Makefile.ovc.
  1084.  */
  1085.  
  1086. /*
  1087.  * These features can only be included by using a configure argument.  See the
  1088.  * Makefile for a line to uncomment.
  1089.  * +perl        Perl interface: "--enable-perlinterp"
  1090.  * +python        Python interface: "--enable-pythoninterp"
  1091.  * +tcl            TCL interface: "--enable-tclinterp"
  1092.  * +sniff        Sniff interface: "--enable-sniff"
  1093.  * +sun_workshop    Sun Workshop integegration
  1094.  * +netbeans_intg    Netbeans integration
  1095.  */
  1096.  
  1097. /*
  1098.  * These features are automatically detected:
  1099.  * +terminfo
  1100.  * +tgetent
  1101.  */
  1102.  
  1103. /*
  1104.  * The Sun Workshop features currently only work with Motif.
  1105.  */
  1106. #if !defined(FEAT_GUI_MOTIF) && defined(FEAT_SUN_WORKSHOP)
  1107. # undef FEAT_SUN_WORKSHOP
  1108. #endif
  1109.  
  1110. /*
  1111.  * The Netbeans features currently only work with Motif and GTK.
  1112.  * It also requires +listcmds and +eval.
  1113.  */
  1114. #if ((!defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)) \
  1115.         || !defined(FEAT_LISTCMDS) || !defined(FEAT_EVAL)) \
  1116.     && defined(FEAT_NETBEANS_INTG)
  1117. # undef FEAT_NETBEANS_INTG
  1118. #endif
  1119.  
  1120. /*
  1121.  * +signs        Allow signs to be displayed to the left of text lines.
  1122.  *            Adds the ":sign" command.
  1123.  */
  1124. #if defined(FEAT_BIG) || defined(FEAT_SUN_WORKSHOP) \
  1125.         || defined(FEAT_NETBEANS_INTG)
  1126. # define FEAT_SIGNS
  1127. # if ((defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) \
  1128.         && defined(HAVE_X11_XPM_H)) \
  1129.     || defined(FEAT_GUI_GTK) \
  1130.     || (defined(WIN32) && defined(FEAT_GUI))
  1131. #  define FEAT_SIGN_ICONS
  1132. # endif
  1133. #endif
  1134.  
  1135. /*
  1136.  * +balloon_eval    Allow balloon expression evaluation. Used with a
  1137.  *            debugger and for tooltips.
  1138.  *            Currently only for Athena and Motif.
  1139.  */
  1140. #if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) \
  1141.                  || defined(FEAT_GUI_GTK)) \
  1142.     && (   (defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_GTK)) \
  1143.         || defined(FEAT_SUN_WORKSHOP) \
  1144.         || defined(FEAT_NETBEANS_INTG))
  1145. # define FEAT_BEVAL
  1146. # if !defined(FEAT_XFONTSET) && !defined(FEAT_GUI_GTK)
  1147. #  define FEAT_XFONTSET
  1148. # endif
  1149. #endif
  1150.  
  1151. #if defined(FEAT_BEVAL) && (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA))
  1152. # define FEAT_BEVAL_TIP        /* balloon eval used for toolbar tooltip */
  1153. #endif
  1154.  
  1155. #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
  1156. /*
  1157.  * The following features are (currently) only used by Sun Visual WorkShop 6
  1158.  * and NetBeans. These features could be used with other integrations with
  1159.  * debuggers so I've used separate feature defines.
  1160.  */
  1161. # if !defined(FEAT_MENU)
  1162. #  define FEAT_MENU
  1163. # endif
  1164. #endif
  1165.  
  1166. #if defined(FEAT_SUN_WORKSHOP)
  1167. /*
  1168.  *            Use an alternative method of X input for a secondary
  1169.  *            command input.
  1170.  */
  1171. # define ALT_X_INPUT
  1172.  
  1173. /*
  1174.  * +footer        Motif only: Add a message area at the bottom of the
  1175.  *            main window area.
  1176.  */
  1177. # define FEAT_FOOTER
  1178.  
  1179. #endif
  1180.