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