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