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