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