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