source:
patches/vim-7.2-branch_update-6.patch@
e9262cf6
Last change on this file since e9262cf6 was 5f4a45c9, checked in by , 16 years ago | |
---|---|
|
|
File size: 182.0 KB |
-
Filelist
Submitted By: Jim Gifford (jim at cross-lfs dot org) Date: 01-31-2009 Initial Package Version: 7.2 Origin: Upstream Upstream Status: Applied Description: Contains all upstream patches up to 7.2.093 The following patches were skipped 007 036 041 049 071 072 074 088 089 093 diff -Naur vim72.orig/Filelist vim72/Filelist
old new 285 285 src/proto/os_win32.pro \ 286 286 src/proto/os_mswin.pro \ 287 287 src/testdir/Make_dos.mak \ 288 src/testdir/Make_ming.mak \ 288 289 src/testdir/dos.vim \ 289 290 src/uninstal.c \ 290 291 src/vim.def \ -
runtime/doc/cmdline.txt
diff -Naur vim72.orig/runtime/doc/cmdline.txt vim72/runtime/doc/cmdline.txt
old new 1 *cmdline.txt* For Vim version 7.2. Last change: 2008 Jul 291 *cmdline.txt* For Vim version 7.2. Last change: 2008 Sep 18 2 2 3 3 4 4 VIM REFERENCE MANUAL by Bram Moolenaar … … 157 157 (doesn't work at the expression prompt; some 158 158 things such as changing the buffer or current 159 159 window are not allowed to avoid side effects) 160 When the result is a |List| the items are used 161 as lines. They can have line breaks inside 162 too. 163 When the result is a Float it's automatically 164 converted to a String. 160 165 See |registers| about registers. {not in Vi} 161 166 Implementation detail: When using the |expression| register 162 167 and invoking setcmdpos(), this sets the position before … … 730 735 In Ex commands, at places where a file name can be used, the following 731 736 characters have a special meaning. These can also be used in the expression 732 737 function expand() |expand()|. 733 % is replaced with the current file name *:_%*734 # is replaced with the alternate file name *:_#*738 % Is replaced with the current file name. *:_%* *c_%* 739 # Is replaced with the alternate file name. *:_#* *c_#* 735 740 #n (where n is a number) is replaced with the file name of 736 buffer n. "#0" is the same as "#" 737 ## is replaced with all names in the argument list *:_##*741 buffer n. "#0" is the same as "#". 742 ## Is replaced with all names in the argument list *:_##* *c_##* 738 743 concatenated, separated by spaces. Each space in a name 739 744 is preceded with a backslash. 740 Note that these give the file name as it was typed. If an absolute path is 741 needed (when using the file name from a different directory), you need to add 742 ":p". See |filename-modifiers|. 745 #<n (where n is a number > 0) is replaced with old *:_#<* *c_#<* 746 file name n. See |:oldfiles| or |v:oldfiles| to get the 747 number. *E809* 748 {only when compiled with the +eval and +viminfo features} 749 750 Note that these, except "#<n", give the file name as it was typed. If an 751 absolute path is needed (when using the file name from a different directory), 752 you need to add ":p". See |filename-modifiers|. 753 754 The "#<n" item returns an absolute path, but it will start with "~/" for files 755 below your home directory. 756 743 757 Note that backslashes are inserted before spaces, so that the command will 744 758 correctly interpret the file name. But this doesn't happen for shell 745 commands. For those you probably have to use quotes: > 759 commands. For those you probably have to use quotes (this fails for files 760 that contain a quote and wildcards): > 746 761 :!ls "%" 747 762 :r !spell "%" 748 763 -
runtime/doc/eval.txt
diff -Naur vim72.orig/runtime/doc/eval.txt vim72/runtime/doc/eval.txt
old new 1 *eval.txt* For Vim version 7.2. Last change: 2008 Aug 091 *eval.txt* For Vim version 7.2. Last change: 2008 Nov 27 2 2 3 3 4 4 VIM REFERENCE MANUAL by Bram Moolenaar … … 1484 1484 This is the screen column number, like with |virtcol()|. The 1485 1485 value is zero when there was no mouse button click. 1486 1486 1487 *v:oldfiles* *oldfiles-variable* 1488 v:oldfiles List of file names that is loaded from the |viminfo| file on 1489 startup. These are the files that Vim remembers marks for. 1490 The length of the List is limited by the ' argument of the 1491 'viminfo' option (default is 100). 1492 Also see |:oldfiles| and |c_#<|. 1493 The List can be modified, but this has no effect on what is 1494 stored in the |viminfo| file later. If you use values other 1495 than String this will cause trouble. 1496 {only when compiled with the +viminfo feature} 1497 1487 1498 *v:operator* *operator-variable* 1488 1499 v:operator The last operator given in Normal mode. This is a single 1489 1500 character except for commands starting with <g> or <z>, … … 1695 1706 exists( {expr}) Number TRUE if {expr} exists 1696 1707 extend({expr1}, {expr2} [, {expr3}]) 1697 1708 List/Dict insert items of {expr2} into {expr1} 1698 expand( {expr} )String expand special keywords in {expr}1709 expand( {expr} [, {flag}]) String expand special keywords in {expr} 1699 1710 feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer 1700 1711 filereadable( {file}) Number TRUE if {file} is a readable file 1701 1712 filewritable( {file}) Number TRUE if {file} is a writable file … … 1747 1758 getwinposx() Number X coord in pixels of GUI Vim window 1748 1759 getwinposy() Number Y coord in pixels of GUI Vim window 1749 1760 getwinvar( {nr}, {varname}) any variable {varname} in window {nr} 1750 glob( {expr}) String expand file wildcards in {expr} 1751 globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path} 1761 glob( {expr} [, {flag}]) String expand file wildcards in {expr} 1762 globpath( {path}, {expr} [, {flag}]) 1763 String do glob({expr}) for all dirs in {path} 1752 1764 has( {feature}) Number TRUE if feature {feature} supported 1753 1765 has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} 1754 1766 haslocaldir() Number TRUE if current window executed |:lcd| … … 3275 3287 :let list_is_on = getwinvar(2, '&list') 3276 3288 :echo "myvar = " . getwinvar(1, 'myvar') 3277 3289 < 3278 3279 glob({expr})Expand the file wildcards in {expr}. See |wildcards| for the3290 glob({expr} [, {flag}]) *glob()* 3291 Expand the file wildcards in {expr}. See |wildcards| for the 3280 3292 use of special characters. 3281 3293 The result is a String. 3282 3294 When there are several matches, they are separated by <NL> 3283 3295 characters. 3284 The 'wildignore' option applies: Names matching one of the 3285 patterns in 'wildignore' will be skipped. 3296 Unless the optional {flag} argument is given and is non-zero, 3297 the 'suffixes' and 'wildignore' options apply: Names matching 3298 one of the patterns in 'wildignore' will be skipped and 3299 'suffixes' affect the ordering of matches. 3286 3300 If the expansion fails, the result is an empty string. 3287 3301 A name for a non-existing file is not included. 3288 3302 … … 3296 3310 See |expand()| for expanding special Vim variables. See 3297 3311 |system()| for getting the raw output of an external command. 3298 3312 3299 globpath({path}, {expr} )*globpath()*3313 globpath({path}, {expr} [, {flag}]) *globpath()* 3300 3314 Perform glob() on all directories in {path} and concatenate 3301 3315 the results. Example: > 3302 3316 :echo globpath(&rtp, "syntax/c.vim") 3303 3317 < {path} is a comma-separated list of directory names. Each 3304 3318 directory name is prepended to {expr} and expanded like with 3305 glob(). A path separator is inserted when needed.3319 |glob()|. A path separator is inserted when needed. 3306 3320 To add a comma inside a directory name escape it with a 3307 3321 backslash. Note that on MS-Windows a directory may have a 3308 3322 trailing backslash, remove it if you put a comma after it. 3309 3323 If the expansion fails for one of the directories, there is no 3310 3324 error message. 3311 The 'wildignore' option applies: Names matching one of the 3312 patterns in 'wildignore' will be skipped. 3325 Unless the optional {flag} argument is given and is non-zero, 3326 the 'suffixes' and 'wildignore' options apply: Names matching 3327 one of the patterns in 'wildignore' will be skipped and 3328 'suffixes' affect the ordering of matches. 3313 3329 3314 3330 The "**" item can be used to search in a directory tree. 3315 3331 For example, to find all "README.txt" files in the directories … … 5332 5348 "fg" foreground color (GUI: color name used to set 5333 5349 the color, cterm: color number as a string, 5334 5350 term: empty string) 5335 "bg" background color (like "fg") 5351 "bg" background color (as with "fg") 5352 "sp" special color (as with "fg") |highlight-guisp| 5336 5353 "fg#" like "fg", but for the GUI and the GUI is 5337 5354 running the name in "#RRGGBB" form 5338 5355 "bg#" like "fg#" for "bg" 5356 "sp#" like "fg#" for "sp" 5339 5357 "bold" "1" if bold 5340 5358 "italic" "1" if italic 5341 5359 "reverse" "1" if reverse … … 5823 5841 mouse_pterm Compiled with support for qnx pterm mouse. 5824 5842 mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 5825 5843 mouse_xterm Compiled with support for xterm mouse. 5826 multi_byte Compiled with support for editing Korean et al. 5844 multi_byte Compiled with support for 'encoding' 5845 multi_byte_encoding 'encoding' is set to a multi-byte encoding. 5827 5846 multi_byte_ime Compiled with support for IME input method. 5828 5847 multi_lang Compiled with support for multiple languages. 5829 5848 mzscheme Compiled with MzScheme interface |mzscheme|. -
runtime/doc/netbeans.txt
diff -Naur vim72.orig/runtime/doc/netbeans.txt vim72/runtime/doc/netbeans.txt
old new 1 *netbeans.txt* For Vim version 7.2. Last change: 200 8 Jun 281 *netbeans.txt* For Vim version 7.2. Last change: 2009 Jan 06 2 2 3 3 4 4 VIM REFERENCE MANUAL by Gordon Prieur et al. … … 722 722 of the cursor. 723 723 New in version 2.1. 724 724 725 killed A file was closed by the user. Only for files that have been 726 assigned a number by the IDE. 725 killed A file was deleted or wiped out by the user and the buffer 726 annotations have been removed. The bufID number for this 727 buffer has become invalid. Only for files that have been 728 assigned a bufID number by the IDE. 727 729 728 730 newDotAndMark off off 729 731 Reports the position of the cursor being at "off" bytes into -
runtime/doc/options.txt
diff -Naur vim72.orig/runtime/doc/options.txt vim72/runtime/doc/options.txt
old new 1 *options.txt* For Vim version 7.2. Last change: 2008 Aug 061 *options.txt* For Vim version 7.2. Last change: 2008 Nov 25 2 2 3 3 4 4 VIM REFERENCE MANUAL by Bram Moolenaar … … 7472 7472 {not available when compiled without the |+wildignore| 7473 7473 feature} 7474 7474 A list of file patterns. A file that matches with one of these 7475 patterns is ignored when completing file or directory names. 7475 patterns is ignored when completing file or directory names, and 7476 influences the result of |expand()|, |glob()| and |globpath()| unless 7477 a flag is passed to disable this. 7476 7478 The pattern is used like with |:autocmd|, see |autocmd-patterns|. 7477 7479 Also see 'suffixes'. 7478 7480 Example: > -
runtime/doc/spell.txt
diff -Naur vim72.orig/runtime/doc/spell.txt vim72/runtime/doc/spell.txt
old new 1 *spell.txt* For Vim version 7.2. Last change: 2008 Jun 211 *spell.txt* For Vim version 7.2. Last change: 2008 Nov 30 2 2 3 3 4 4 VIM REFERENCE MANUAL by Bram Moolenaar … … 831 831 832 832 # comment line ~ 833 833 834 With some items it's also possible to put a comment after it, but this isn't 835 supported in general. 834 Items with a fixed number of arguments can be followed by a comment. But only 835 if none of the arguments can contain white space. The comment must start with 836 a "#" character. Example: 837 838 KEEPCASE = # fix case for words with this flag ~ 836 839 837 840 838 841 ENCODING *spell-SET* … … 965 968 966 969 Note: When using utf-8 only characters up to 65000 may be used for flags. 967 970 971 Note: even when using "num" or "long" the number of flags available to 972 compounding and prefixes is limited to about 250. 973 968 974 969 975 AFFIXES 970 976 *spell-PFX* *spell-SFX* … … 1178 1184 The flag also applies to the word with affixes, thus this can be used to mark 1179 1185 a whole bunch of related words as bad. 1180 1186 1187 *spell-FORBIDDENWORD* 1188 FORBIDDENWORD can be used just like BAD. For compatibility with Hunspell. 1189 1181 1190 *spell-NEEDAFFIX* 1182 1191 The NEEDAFFIX flag is used to require that a word is used with an affix. The 1183 1192 word itself is not a good word (unless there is an empty affix). Example: … … 1268 1277 1269 1278 NEEDCOMPOUND & ~ 1270 1279 1280 *spell-ONLYINCOMPOUND* 1281 The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND. Supported for 1282 compatiblity with Hunspell. 1283 1271 1284 *spell-COMPOUNDMIN* 1272 1285 The minimal character length of a word used for compounding is specified with 1273 1286 COMPOUNDMIN. Example: … … 1328 1341 rules. Can also be used for an affix to count the affix as a compounding 1329 1342 word. 1330 1343 1344 *spell-CHECKCOMPOUNDPATTERN* 1345 CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the 1346 position where two words are compounded together forbids the compound. 1347 For example: 1348 CHECKCOMPOUNDPATTERN o e ~ 1349 1350 This forbids compounding if the first word ends in "o" and the second word 1351 starts with "e". 1352 1353 The arguments must be plain text, no patterns are actually supported, despite 1354 the item name. Case is always ignored. 1355 1356 The Hunspell feature to use three arguments and flags is not supported. 1357 1331 1358 *spell-SYLLABLE* 1332 1359 The SYLLABLE item defines characters or character sequences that are used to 1333 1360 count the number of syllables in a word. Example: … … 1496 1523 ACCENT (Hunspell) *spell-ACCENT* 1497 1524 Use MAP instead. |spell-MAP| 1498 1525 1526 BREAK (Hunspell) *spell-BREAK* 1527 Define break points. Unclear how it works exactly. 1528 Not supported. 1529 1499 1530 CHECKCOMPOUNDCASE (Hunspell) *spell-CHECKCOMPOUNDCASE* 1500 1531 Disallow uppercase letters at compound word boundaries. 1501 1532 Not supported. … … 1512 1543 Forbid three identical characters when compounding. Not 1513 1544 supported. 1514 1545 1515 CHECKCOMPOUNDPATTERN (Hunspell) *spell-CHECKCOMPOUNDPATTERN*1516 Forbid compounding when patterns match. Not supported.1517 1518 1546 COMPLEXPREFIXES (Hunspell) *spell-COMPLEXPREFIXES* 1519 1547 Enables using two prefixes. Not supported. 1520 1548 … … 1536 1564 COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE* 1537 1565 Use COMPOUNDRULE instead. |spell-COMPOUNDRULE| 1538 1566 1567 COMPOUNDRULES (Hunspell) *spell-COMPOUNDRULES* 1568 Number of COMPOUNDRULE lines following. Ignored, but the 1569 argument must be a number. 1570 1539 1571 COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE* 1540 1572 Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE| 1541 1573 |spell-COMPOUNDSYLMAX| 1542 1574 1543 FORBIDDENWORD (Hunspell) *spell-FORBIDDENWORD* 1544 Use BAD instead. |spell-BAD| 1545 1575 KEY (Hunspell) *spell-KEY* 1576 Define characters that are close together on the keyboard. 1577 Used to give better suggestions. Not supported. 1578 1546 1579 LANG (Hunspell) *spell-LANG* 1547 1580 This specifies language-specific behavior. This actually 1548 1581 moves part of the language knowledge into the program, … … 1553 1586 Only needed for morphological analysis. 1554 1587 1555 1588 MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS* 1556 Not supported. 1557 1558 ONLYINCOMPOUND (Hunspell) *spell-ONLYINCOMPOUND* 1559 Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND| 1589 Set number of n-gram suggestions. Not supported. 1560 1590 1561 1591 PSEUDOROOT (Hunspell) *spell-PSEUDOROOT* 1562 1592 Use NEEDAFFIX instead. |spell-NEEDAFFIX| -
runtime/doc/starting.txt
diff -Naur vim72.orig/runtime/doc/starting.txt vim72/runtime/doc/starting.txt
old new 1 *starting.txt* For Vim version 7.2. Last change: 2008 Jun 211 *starting.txt* For Vim version 7.2. Last change: 2008 Nov 09 2 2 3 3 4 4 VIM REFERENCE MANUAL by Bram Moolenaar … … 1337 1337 *viminfo-read* 1338 1338 When Vim is started and the 'viminfo' option is non-empty, the contents of 1339 1339 the viminfo file are read and the info can be used in the appropriate places. 1340 The marks are not read in at startup (but file marks are). See 1341 |initialization| for how to set the 'viminfo' option upon startup. 1340 The |v:oldfiles| variable is filled. The marks are not read in at startup 1341 (but file marks are). See |initialization| for how to set the 'viminfo' 1342 option upon startup. 1342 1343 1343 1344 *viminfo-write* 1344 1345 When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo … … 1372 1373 that start with any string given with the "r" flag in 'viminfo'. This can be 1373 1374 used to avoid saving marks for files on removable media (for MS-DOS you would 1374 1375 use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:"). 1376 The |v:oldfiles| variable is filled with the file names that the viminfo file 1377 has marks for. 1375 1378 1376 1379 *viminfo-file-marks* 1377 1380 Uppercase marks ('A to 'Z) are stored when writing the viminfo file. The … … 1463 1466 *:rv* *:rviminfo* *E195* 1464 1467 :rv[iminfo][!] [file] Read from viminfo file [file] (default: see above). 1465 1468 If [!] is given, then any information that is 1466 already set (registers, marks, etc.) will be1467 overwritten.{not in Vi}1469 already set (registers, marks, |v:oldfiles|, etc.) 1470 will be overwritten {not in Vi} 1468 1471 1469 1472 *:wv* *:wviminfo* *E137* *E138* *E574* 1470 1473 :wv[iminfo][!] [file] Write to viminfo file [file] (default: see above). … … 1479 1482 the .viminfo file. 1480 1483 {not in Vi} 1481 1484 1485 *:ol* *:oldfiles* 1486 :ol[dfiles] List the files that have marks stored in the viminfo 1487 file. This list is read on startup and only changes 1488 afterwards with ":rviminfo!". Also see |v:oldfiles|. 1489 The number can be used with |c_#<|. 1490 {not in Vi, only when compiled with the +eval feature} 1491 1492 :bro[wse] ol[dfiles][!] 1493 List file names as with |:oldfiles|, and then prompt 1494 for a number. When the number is valid that file from 1495 the list is edited. 1496 If you get the |press-enter| prompt you can press "q" 1497 and still get the prompt to enter a file number. 1498 Use ! to abondon a modified buffer. |abandon| 1499 {not when compiled with tiny or small features} 1500 1482 1501 vim:tw=78:ts=8:ft=help:norl: -
runtime/doc/usr_21.txt
diff -Naur vim72.orig/runtime/doc/usr_21.txt vim72/runtime/doc/usr_21.txt
old new 1 *usr_21.txt* For Vim version 7.2. Last change: 200 7 May 011 *usr_21.txt* For Vim version 7.2. Last change: 2008 Nov 09 2 2 3 3 VIM USER MANUAL - by Bram Moolenaar 4 4 … … 153 153 to be lost. Each item can be remembered only once. 154 154 155 155 156 GETTING BACK TO WHERE YOU WERE156 GETTING BACK TO WHERE YOU STOPPED VIM 157 157 158 158 You are halfway editing a file and it's time to leave for holidays. You exit 159 159 Vim and go enjoy yourselves, forgetting all about your work. After a couple … … 168 168 The |:marks| command is useful to find out where '0 to '9 will take you. 169 169 170 170 171 GETTING BACK TO SOME FILE 172 173 If you want to go back to a file that you edited recently, but not when 174 exiting Vim, there is a slightly more complicated way. You can see a list of 175 files by typing the command: > 176 177 :oldfiles 178 < 1: ~/.viminfo ~ 179 2: ~/text/resume.txt ~ 180 3: /tmp/draft ~ 181 182 Now you would like to edit the second file, which is in the list preceded by 183 "2:". You type: > 184 185 :e #<2 186 187 Instead of ":e" you can use any command that has a file name argument, the 188 "#<2" item works in the same place as "%" (current file name) and "#" 189 (alternate file name). So you can also split the window to edit the third 190 file: > 191 192 :split #<3 193 194 That #<123 thing is a bit complicated when you just want to edit a file. 195 Fortunately there is a simpler way: > 196 197 :browse oldfiles 198 < 1: ~/.viminfo ~ 199 2: ~/text/resume.txt ~ 200 3: /tmp/draft ~ 201 -- More -- 202 203 You get the same list of files as with |:oldfiles|. If you want to edit 204 "resume.txt" first press "q" to stop the listing. You will get a prompt: 205 206 Type number and <Enter> (empty cancels): ~ 207 208 Type "2" and press <Enter> to edit the second file. 209 210 More info at |:oldfiles|, |v:oldfiles| and |c_#<|. 211 212 171 213 MOVE INFO FROM ONE VIM TO ANOTHER 172 214 173 215 You can use the ":wviminfo" and ":rviminfo" commands to save and restore the -
runtime/scripts.vim
diff -Naur vim72.orig/runtime/scripts.vim vim72/runtime/scripts.vim
old new 234 234 elseif s:line1 =~ '\<DTD\s\+XHTML\s' 235 235 set ft=xhtml 236 236 237 " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") 238 elseif s:line1 =~? '\<DOCTYPE\s\+html\>' 239 set ft=html 240 237 241 " PDF 238 242 elseif s:line1 =~ '^%PDF-' 239 243 set ft=pdf -
src/auto/configure
diff -Naur vim72.orig/src/auto/configure vim72/src/auto/configure
old new 16819 16819 LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" 16820 16820 fi 16821 16821 16822 { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&516823 $as_echo_n "checking for GCC 3 or later... " >&6; }16824 16822 DEPEND_CFLAGS_FILTER= 16825 16823 if test "$GCC" = yes; then 16824 { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5 16825 $as_echo_n "checking for GCC 3 or later... " >&6; } 16826 16826 gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'` 16827 16827 if test "$gccmajor" -gt "2"; then 16828 16828 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" 16829 fi16830 fi 16831 if test "$DEPEND_CFLAGS_FILTER" = ""; then 16832 { $as_echo "$as_me:$LINENO: result: no" >&516829 { $as_echo "$as_me:$LINENO: result: yes" >&5 16830 $as_echo "yes" >&6; } 16831 else 16832 { $as_echo "$as_me:$LINENO: result: no" >&5 16833 16833 $as_echo "no" >&6; } 16834 else 16835 { $as_echo "$as_me:$LINENO: result: yes" >&5 16834 fi 16835 { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5 16836 $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; } 16837 if test "$gccmajor" -gt "3"; then 16838 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" 16839 { $as_echo "$as_me:$LINENO: result: yes" >&5 16836 16840 $as_echo "yes" >&6; } 16841 else 16842 { $as_echo "$as_me:$LINENO: result: no" >&5 16843 $as_echo "no" >&6; } 16844 fi 16837 16845 fi 16838 16846 16839 16847 -
src/buffer.c
diff -Naur vim72.orig/src/buffer.c vim72/src/buffer.c
old new 437 437 return; 438 438 #endif 439 439 440 #ifdef FEAT_NETBEANS_INTG441 if (usingNetbeans)442 netbeans_file_closed(buf);443 #endif444 440 /* Change directories when the 'acd' option is set. */ 445 441 DO_AUTOCHDIR 446 442 … … 639 635 #ifdef FEAT_SIGNS 640 636 buf_delete_signs(buf); /* delete any signs */ 641 637 #endif 638 #ifdef FEAT_NETBEANS_INTG 639 if (usingNetbeans) 640 netbeans_file_killed(buf); 641 #endif 642 642 #ifdef FEAT_LOCALMAP 643 643 map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE); /* clear local mappings */ 644 644 map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE); /* clear local abbrevs */ … … 647 647 vim_free(buf->b_start_fenc); 648 648 buf->b_start_fenc = NULL; 649 649 #endif 650 #ifdef FEAT_SPELL 651 ga_clear(&buf->b_langp); 652 #endif 650 653 } 651 654 652 655 /* … … 812 815 int bnr; /* buffer number */ 813 816 char_u *p; 814 817 815 #ifdef FEAT_NETBEANS_INTG816 netbeansCloseFile = 1;817 #endif818 818 if (addr_count == 0) 819 819 { 820 820 (void)do_buffer(command, DOBUF_CURRENT, FORWARD, 0, forceit); … … 909 909 } 910 910 } 911 911 912 #ifdef FEAT_NETBEANS_INTG913 netbeansCloseFile = 0;914 #endif915 912 916 913 return errormsg; 917 914 } … … 1237 1234 * "buf" if one exists */ 1238 1235 if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf)) 1239 1236 return OK; 1240 /* If 'switchbuf' cont ians "usetab": jump to first window in any tab1237 /* If 'switchbuf' contains "usetab": jump to first window in any tab 1241 1238 * page containing "buf" if one exists */ 1242 1239 if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf)) 1243 1240 return OK; … … 1351 1348 } 1352 1349 } 1353 1350 #ifdef FEAT_AUTOCMD 1351 /* An autocommand may have deleted "buf", already entered it (e.g., when 1352 * it did ":bunload") or aborted the script processing! */ 1354 1353 # ifdef FEAT_EVAL 1355 /* An autocommand may have deleted buf or aborted the script processing! */ 1356 if (buf_valid(buf) && !aborting()) 1354 if (buf_valid(buf) && buf != curbuf && !aborting()) 1357 1355 # else 1358 if (buf_valid(buf) ) /* an autocommand may have deleted buf! */1356 if (buf_valid(buf) && buf != curbuf) 1359 1357 # endif 1360 1358 #endif 1361 1359 enter_buffer(buf); … … 1397 1395 curwin->w_cursor.coladd = 0; 1398 1396 #endif 1399 1397 curwin->w_set_curswant = TRUE; 1398 #ifdef FEAT_AUTOCMD 1399 curwin->w_topline_was_set = FALSE; 1400 #endif 1400 1401 1401 1402 /* Make sure the buffer is loaded. */ 1402 1403 if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */ … … 1436 1437 maketitle(); 1437 1438 #endif 1438 1439 #ifdef FEAT_AUTOCMD 1439 if (curwin->w_topline == 1) /* when autocmds didn't change it */ 1440 /* when autocmds didn't change it */ 1441 if (curwin->w_topline == 1 && !curwin->w_topline_was_set) 1440 1442 #endif 1441 1443 scroll_cursor_halfway(FALSE); /* redisplay at correct position */ 1442 1444 … … 3963 3965 width = vim_strsize(out); 3964 3966 if (maxwidth > 0 && width > maxwidth) 3965 3967 { 3966 /* Result is too long, must trunc tate somewhere. */3968 /* Result is too long, must truncate somewhere. */ 3967 3969 l = 0; 3968 3970 if (itemcnt == 0) 3969 3971 s = out; … … 5062 5064 { 5063 5065 if (buf->b_sfname != NULL) 5064 5066 return (char *)buf->b_sfname; 5065 return "[Scratch]";5067 return _("[Scratch]"); 5066 5068 } 5067 5069 #endif 5068 5070 if (buf->b_fname == NULL) -
src/configure.in
diff -Naur vim72.orig/src/configure.in vim72/src/configure.in
old new 3152 3152 dnl But only when making dependencies, cproto and lint don't take "-isystem". 3153 3153 dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow 3154 3154 dnl the number before the version number. 3155 AC_MSG_CHECKING(for GCC 3 or later)3156 3155 DEPEND_CFLAGS_FILTER= 3157 3156 if test "$GCC" = yes; then 3157 AC_MSG_CHECKING(for GCC 3 or later) 3158 3158 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'` 3159 3159 if test "$gccmajor" -gt "2"; then 3160 3160 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" 3161 AC_MSG_RESULT(yes) 3162 else 3163 AC_MSG_RESULT(no) 3164 fi 3165 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is 3166 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0. 3167 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1) 3168 if test "$gccmajor" -gt "3"; then 3169 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" 3170 AC_MSG_RESULT(yes) 3171 else 3172 AC_MSG_RESULT(no) 3161 3173 fi 3162 fi3163 if test "$DEPEND_CFLAGS_FILTER" = ""; then3164 AC_MSG_RESULT(no)3165 else3166 AC_MSG_RESULT(yes)3167 3174 fi 3168 3175 AC_SUBST(DEPEND_CFLAGS_FILTER) 3169 3176 -
src/diff.c
diff -Naur vim72.orig/src/diff.c vim72/src/diff.c
old new 8 8 */ 9 9 10 10 /* 11 * diff.c: code for diff'ing two or threebuffers.11 * diff.c: code for diff'ing two, three or four buffers. 12 12 */ 13 13 14 14 #include "vim.h" … … 73 73 { 74 74 tp->tp_diffbuf[i] = NULL; 75 75 tp->tp_diff_invalid = TRUE; 76 if (tp == curtab) 77 diff_redraw(TRUE); 76 78 } 77 79 } 78 80 } … … 102 104 { 103 105 curtab->tp_diffbuf[i] = NULL; 104 106 curtab->tp_diff_invalid = TRUE; 107 diff_redraw(TRUE); 105 108 } 106 109 } 107 110 } … … 113 116 * Add a buffer to make diffs for. 114 117 * Call this when a new buffer is being edited in the current window where 115 118 * 'diff' is set. 116 * Marks the current buffer as being part of the diff and requir eing updating.119 * Marks the current buffer as being part of the diff and requiring updating. 117 120 * This must be done before any autocmd, because a command may use info 118 121 * about the screen contents. 119 122 */ … … 131 134 { 132 135 curtab->tp_diffbuf[i] = buf; 133 136 curtab->tp_diff_invalid = TRUE; 137 diff_redraw(TRUE); 134 138 return; 135 139 } 136 140 … … 661 665 char_u *tmp_diff; 662 666 FILE *fd; 663 667 int ok; 668 int io_error = FALSE; 664 669 665 670 /* Delete all diffblocks. */ 666 671 diff_clear(curtab); … … 697 702 { 698 703 ok = FALSE; 699 704 fd = mch_fopen((char *)tmp_orig, "w"); 700 if (fd != NULL) 705 if (fd == NULL) 706 io_error = TRUE; 707 else 701 708 { 702 fwrite("line1\n", (size_t)6, (size_t)1, fd); 709 if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1) 710 io_error = TRUE; 703 711 fclose(fd); 704 712 fd = mch_fopen((char *)tmp_new, "w"); 705 if (fd != NULL) 713 if (fd == NULL) 714 io_error = TRUE; 715 else 706 716 { 707 fwrite("line2\n", (size_t)6, (size_t)1, fd); 717 if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1) 718 io_error = TRUE; 708 719 fclose(fd); 709 720 diff_file(tmp_orig, tmp_new, tmp_diff); 710 721 fd = mch_fopen((char *)tmp_diff, "r"); 711 if (fd != NULL) 722 if (fd == NULL) 723 io_error = TRUE; 724 else 712 725 { 713 726 char_u linebuf[LBUFLEN]; 714 727 … … 761 774 } 762 775 if (!ok) 763 776 { 777 if (io_error) 778 EMSG(_("E810: Cannot read or write temp files")); 764 779 EMSG(_("E97: Cannot create diffs")); 765 780 diff_a_works = MAYBE; 766 781 #if defined(MSWIN) || defined(MSDOS) … … 914 929 goto theend; 915 930 916 931 #ifdef UNIX 917 /* Temporar aly chdir to /tmp, to avoid patching files in the current932 /* Temporarily chdir to /tmp, to avoid patching files in the current 918 933 * directory when the patch file contains more than one patch. When we 919 934 * have our own temp dir use that instead, it will be cleaned up when we 920 935 * exit (any .rej files created). Don't change directory if we can't … … 925 940 { 926 941 # ifdef TEMPDIRNAMES 927 942 if (vim_tempdir != NULL) 928 mch_chdir((char *)vim_tempdir);943 ignored = mch_chdir((char *)vim_tempdir); 929 944 else 930 945 # endif 931 mch_chdir("/tmp");946 ignored = mch_chdir("/tmp"); 932 947 shorten_fnames(TRUE); 933 948 } 934 949 #endif … … 2114 2129 EMSG2(_("E102: Can't find buffer \"%s\""), eap->arg); 2115 2130 return; 2116 2131 } 2132 if (buf == curbuf) 2133 return; /* nothing to do */ 2117 2134 idx_other = diff_buf_idx(buf); 2118 2135 if (idx_other == DB_COUNT) 2119 2136 { -
src/edit.c
diff -Naur vim72.orig/src/edit.c vim72/src/edit.c
old new 147 147 static int ins_compl_bs __ARGS((void)); 148 148 static void ins_compl_new_leader __ARGS((void)); 149 149 static void ins_compl_addleader __ARGS((int c)); 150 static int ins_compl_len __ARGS((void)); 150 151 static void ins_compl_restart __ARGS((void)); 151 152 static void ins_compl_set_original_text __ARGS((char_u *str)); 152 153 static void ins_compl_addfrommatch __ARGS((void)); … … 197 198 static void mb_replace_pop_ins __ARGS((int cc)); 198 199 #endif 199 200 static void replace_flush __ARGS((void)); 200 static void replace_do_bs __ARGS((void)); 201 static void replace_do_bs __ARGS((int limit_col)); 202 static int del_char_after_col __ARGS((int limit_col)); 201 203 #ifdef FEAT_CINDENT 202 204 static int cindent_on __ARGS((void)); 203 205 #endif … … 1933 1935 /* 1934 1936 * Backspace the cursor until the given column. Handles REPLACE and VREPLACE 1935 1937 * modes correctly. May also be used when not in insert mode at all. 1938 * Will attempt not to go before "col" even when there is a composing 1939 * character. 1936 1940 */ 1937 1941 void 1938 1942 backspace_until_column(col) … … 1942 1946 { 1943 1947 curwin->w_cursor.col--; 1944 1948 if (State & REPLACE_FLAG) 1945 replace_do_bs( );1946 else 1947 (void)del_char(FALSE);1949 replace_do_bs(col); 1950 else if (!del_char_after_col(col)) 1951 break; 1948 1952 } 1949 1953 } 1950 1954 #endif 1951 1955 1956 /* 1957 * Like del_char(), but make sure not to go before column "limit_col". 1958 * Only matters when there are composing characters. 1959 * Return TRUE when something was deleted. 1960 */ 1961 static int 1962 del_char_after_col(limit_col) 1963 int limit_col; 1964 { 1965 #ifdef FEAT_MBYTE 1966 if (enc_utf8 && limit_col >= 0) 1967 { 1968 int ecol = curwin->w_cursor.col + 1; 1969 1970 /* Make sure the cursor is at the start of a character, but 1971 * skip forward again when going too far back because of a 1972 * composing character. */ 1973 mb_adjust_cursor(); 1974 while (curwin->w_cursor.col < limit_col) 1975 { 1976 int l = utf_ptr2len(ml_get_cursor()); 1977 1978 if (l == 0) /* end of line */ 1979 break; 1980 curwin->w_cursor.col += l; 1981 } 1982 if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) 1983 return FALSE; 1984 del_bytes((long)(ecol - curwin->w_cursor.col), FALSE, TRUE); 1985 } 1986 else 1987 #endif 1988 (void)del_char(FALSE); 1989 return TRUE; 1990 } 1991 1952 1992 #if defined(FEAT_INS_EXPAND) || defined(PROTO) 1953 1993 /* 1954 1994 * CTRL-X pressed in Insert mode. … … 2418 2458 { 2419 2459 had_match = (curwin->w_cursor.col > compl_col); 2420 2460 ins_compl_delete(); 2421 ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);2461 ins_bytes(compl_leader + ins_compl_len()); 2422 2462 ins_redraw(FALSE); 2423 2463 2424 2464 /* When the match isn't there (to avoid matching itself) remove it … … 2470 2510 *p = NUL; 2471 2511 had_match = (curwin->w_cursor.col > compl_col); 2472 2512 ins_compl_delete(); 2473 ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);2513 ins_bytes(compl_leader + ins_compl_len()); 2474 2514 ins_redraw(FALSE); 2475 2515 2476 2516 /* When the match isn't there (to avoid matching itself) remove it … … 3209 3249 { 3210 3250 ins_compl_del_pum(); 3211 3251 ins_compl_delete(); 3212 ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);3252 ins_bytes(compl_leader + ins_compl_len()); 3213 3253 compl_used_match = FALSE; 3214 3254 3215 3255 if (compl_started) … … 3264 3304 } 3265 3305 3266 3306 /* 3307 * Return the length of the completion, from the completion start column to 3308 * the cursor column. Making sure it never goes below zero. 3309 */ 3310 static int 3311 ins_compl_len() 3312 { 3313 int off = curwin->w_cursor.col - compl_col; 3314 3315 if (off < 0) 3316 return 0; 3317 return off; 3318 } 3319 3320 /* 3267 3321 * Append one character to the match leader. May reduce the number of 3268 3322 * matches. 3269 3323 */ … … 3621 3675 { 3622 3676 ins_compl_delete(); 3623 3677 if (compl_leader != NULL) 3624 ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);3678 ins_bytes(compl_leader + ins_compl_len()); 3625 3679 else if (compl_first_match != NULL) 3626 ins_bytes(compl_orig_text 3627 + curwin->w_cursor.col - compl_col); 3680 ins_bytes(compl_orig_text + ins_compl_len()); 3628 3681 retval = TRUE; 3629 3682 } 3630 3683 … … 4256 4309 static void 4257 4310 ins_compl_insert() 4258 4311 { 4259 ins_bytes(compl_shown_match->cp_str + curwin->w_cursor.col - compl_col);4312 ins_bytes(compl_shown_match->cp_str + ins_compl_len()); 4260 4313 if (compl_shown_match->cp_flags & ORIGINAL_TEXT) 4261 4314 compl_used_match = FALSE; 4262 4315 else … … 4425 4478 if (!compl_get_longest || compl_used_match) 4426 4479 ins_compl_insert(); 4427 4480 else 4428 ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);4481 ins_bytes(compl_leader + ins_compl_len()); 4429 4482 } 4430 4483 else 4431 4484 compl_used_match = FALSE; … … 7123 7176 * cc == 0: character was inserted, delete it 7124 7177 * cc > 0: character was replaced, put cc (first byte of original char) back 7125 7178 * and check for more characters to be put back 7179 * When "limit_col" is >= 0, don't delete before this column. Matters when 7180 * using composing characters, use del_char_after_col() instead of del_char(). 7126 7181 */ 7127 7182 static void 7128 replace_do_bs() 7183 replace_do_bs(limit_col) 7184 int limit_col; 7129 7185 { 7130 7186 int cc; 7131 7187 #ifdef FEAT_VREPLACE … … 7153 7209 #ifdef FEAT_MBYTE 7154 7210 if (has_mbyte) 7155 7211 { 7156 del_char(FALSE);7212 (void)del_char_after_col(limit_col); 7157 7213 # ifdef FEAT_VREPLACE 7158 7214 if (State & VREPLACE_FLAG) 7159 7215 orig_len = (int)STRLEN(ml_get_cursor()); … … 7203 7259 changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); 7204 7260 } 7205 7261 else if (cc == 0) 7206 (void)del_char (FALSE);7262 (void)del_char_after_col(limit_col); 7207 7263 } 7208 7264 7209 7265 #ifdef FEAT_CINDENT … … 8239 8295 * Replace mode */ 8240 8296 if (curwin->w_cursor.lnum != Insstart.lnum 8241 8297 || curwin->w_cursor.col >= Insstart.col) 8242 replace_do_bs( );8298 replace_do_bs(-1); 8243 8299 } 8244 8300 else 8245 8301 (void)del_char(FALSE); … … 8556 8612 break; 8557 8613 } 8558 8614 if (State & REPLACE_FLAG) 8559 replace_do_bs( );8615 replace_do_bs(-1); 8560 8616 else 8561 8617 { 8562 8618 #ifdef FEAT_MBYTE -
src/eval.c
diff -Naur vim72.orig/src/eval.c vim72/src/eval.c
old new 32 32 33 33 #define DICT_MAXNEST 100 /* maximum nesting of lists and dicts */ 34 34 35 #define DO_NOT_FREE_CNT 99999 /* refcount for dict or list that should not 36 be freed. */ 37 35 38 /* 36 39 * In a hashtab item "hi_key" points to "di_key" in a dictitem. 37 40 * This avoids adding a pointer to the hashtab item. … … 348 351 {VV_NAME("mouse_col", VAR_NUMBER), 0}, 349 352 {VV_NAME("operator", VAR_STRING), VV_RO}, 350 353 {VV_NAME("searchforward", VAR_NUMBER), 0}, 354 {VV_NAME("oldfiles", VAR_LIST), 0}, 351 355 }; 352 356 353 357 /* shorthand */ … … 355 359 #define vv_nr vv_di.di_tv.vval.v_number 356 360 #define vv_float vv_di.di_tv.vval.v_float 357 361 #define vv_str vv_di.di_tv.vval.v_string 362 #define vv_list vv_di.di_tv.vval.v_list 358 363 #define vv_tv vv_di.di_tv 359 364 360 365 /* … … 426 431 static long list_idx_of_item __ARGS((list_T *l, listitem_T *item)); 427 432 static void list_append __ARGS((list_T *l, listitem_T *item)); 428 433 static int list_append_tv __ARGS((list_T *l, typval_T *tv)); 429 static int list_append_string __ARGS((list_T *l, char_u *str, int len));430 434 static int list_append_number __ARGS((list_T *l, varnumber_T n)); 431 435 static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item)); 432 436 static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef)); … … 788 792 static void func_unref __ARGS((char_u *name)); 789 793 static void func_ref __ARGS((char_u *name)); 790 794 static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict)); 795 static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ; 796 static void free_funccal __ARGS((funccall_T *fc, int free_val)); 791 797 static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr)); 792 798 static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp)); 793 799 static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off)); … … 845 851 p = &vimvars[i]; 846 852 if (p->vv_di.di_tv.v_type == VAR_STRING) 847 853 { 848 vim_free(p->vv_di.di_tv.vval.v_string); 849 p->vv_di.di_tv.vval.v_string = NULL; 854 vim_free(p->vv_str); 855 p->vv_str = NULL; 856 } 857 else if (p->vv_di.di_tv.v_type == VAR_LIST) 858 { 859 list_unref(p->vv_list); 860 p->vv_list = NULL; 850 861 } 851 862 } 852 863 hash_clear(&vimvarht); 864 hash_init(&vimvarht); /* garbage_collect() will access it */ 853 865 hash_clear(&compat_hashtab); 854 866 855 867 /* script-local variables */ … … 916 928 /* pointer to funccal for currently active function */ 917 929 funccall_T *current_funccal = NULL; 918 930 931 /* pointer to list of previously used funccal, still around because some 932 * item in it is still being used. */ 933 funccall_T *previous_funccal = NULL; 934 919 935 /* 920 936 * Return TRUE when a function was ended by a ":return" command. 921 937 */ … … 1256 1272 1257 1273 /* 1258 1274 * Top level evaluation function, returning a string. 1275 * When "convert" is TRUE convert a List into a sequence of lines and convert 1276 * a Float to a String. 1259 1277 * Return pointer to allocated memory, or NULL for failure. 1260 1278 */ 1261 1279 char_u * 1262 eval_to_string(arg, nextcmd, dolist)1280 eval_to_string(arg, nextcmd, convert) 1263 1281 char_u *arg; 1264 1282 char_u **nextcmd; 1265 int dolist; /* turn List into sequence of lines */1283 int convert; 1266 1284 { 1267 1285 typval_T tv; 1268 1286 char_u *retval; 1269 1287 garray_T ga; 1288 char_u numbuf[NUMBUFLEN]; 1270 1289 1271 1290 if (eval0(arg, &tv, nextcmd, TRUE) == FAIL) 1272 1291 retval = NULL; 1273 1292 else 1274 1293 { 1275 if ( dolist && tv.v_type == VAR_LIST)1294 if (convert && tv.v_type == VAR_LIST) 1276 1295 { 1277 1296 ga_init2(&ga, (int)sizeof(char), 80); 1278 1297 if (tv.vval.v_list != NULL) … … 1280 1299 ga_append(&ga, NUL); 1281 1300 retval = (char_u *)ga.ga_data; 1282 1301 } 1302 #ifdef FEAT_FLOAT 1303 else if (convert && tv.v_type == VAR_FLOAT) 1304 { 1305 vim_snprintf((char *)numbuf, NUMBUFLEN, "%g", tv.vval.v_float); 1306 retval = vim_strsave(numbuf); 1307 } 1308 #endif 1283 1309 else 1284 1310 retval = vim_strsave(get_tv_string(&tv)); 1285 1311 clear_tv(&tv); … … 3277 3303 3278 3304 if (*startarg != '(') 3279 3305 { 3280 EMSG2(_("E107: Missing braces: %s"), eap->arg);3306 EMSG2(_("E107: Missing parentheses: %s"), eap->arg); 3281 3307 goto end; 3282 3308 } 3283 3309 … … 3657 3683 } 3658 3684 3659 3685 /* 3660 * Return TRUE if typeval "tv" is locked: Either tha value is locked itself or3661 * it refers to a List or Dictionary that is locked.3686 * Return TRUE if typeval "tv" is locked: Either that value is locked itself 3687 * or it refers to a List or Dictionary that is locked. 3662 3688 */ 3663 3689 static int 3664 3690 tv_islocked(tv) … … 6047 6073 } 6048 6074 6049 6075 /* 6076 * Get list item "l[idx - 1]" as a string. Returns NULL for failure. 6077 */ 6078 char_u * 6079 list_find_str(l, idx) 6080 list_T *l; 6081 long idx; 6082 { 6083 listitem_T *li; 6084 6085 li = list_find(l, idx - 1); 6086 if (li == NULL) 6087 { 6088 EMSGN(_(e_listidx), idx); 6089 return NULL; 6090 } 6091 return get_tv_string(&li->li_tv); 6092 } 6093 6094 /* 6050 6095 * Locate "item" list "l" and return its index. 6051 6096 * Returns -1 when "item" is not in the list. 6052 6097 */ … … 6137 6182 * When "len" >= 0 use "str[len]". 6138 6183 * Returns FAIL when out of memory. 6139 6184 */ 6140 staticint6185 int 6141 6186 list_append_string(l, str, len) 6142 6187 list_T *l; 6143 6188 char_u *str; … … 6454 6499 buf_T *buf; 6455 6500 win_T *wp; 6456 6501 int i; 6457 funccall_T *fc ;6502 funccall_T *fc, **pfc; 6458 6503 int did_free = FALSE; 6459 6504 #ifdef FEAT_WINDOWS 6460 6505 tabpage_T *tp; … … 6497 6542 set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID); 6498 6543 } 6499 6544 6545 /* v: vars */ 6546 set_ref_in_ht(&vimvarht, copyID); 6547 6500 6548 /* 6501 6549 * 2. Go through the list of dicts and free items without the copyID. 6502 6550 */ … … 6535 6583 else 6536 6584 ll = ll->lv_used_next; 6537 6585 6586 /* check if any funccal can be freed now */ 6587 for (pfc = &previous_funccal; *pfc != NULL; ) 6588 { 6589 if (can_free_funccal(*pfc, copyID)) 6590 { 6591 fc = *pfc; 6592 *pfc = fc->caller; 6593 free_funccal(fc, TRUE); 6594 did_free = TRUE; 6595 } 6596 else 6597 pfc = &(*pfc)->caller; 6598 } 6599 6538 6600 return did_free; 6539 6601 } 6540 6602 … … 6587 6649 { 6588 6650 case VAR_DICT: 6589 6651 dd = tv->vval.v_dict; 6590 if (dd ->dv_copyID != copyID)6652 if (dd != NULL && dd->dv_copyID != copyID) 6591 6653 { 6592 6654 /* Didn't see this dict yet. */ 6593 6655 dd->dv_copyID = copyID; … … 6597 6659 6598 6660 case VAR_LIST: 6599 6661 ll = tv->vval.v_list; 6600 if (ll ->lv_copyID != copyID)6662 if (ll != NULL && ll->lv_copyID != copyID) 6601 6663 { 6602 6664 /* Didn't see this list yet. */ 6603 6665 ll->lv_copyID = copyID; … … 7525 7587 {"getwinposx", 0, 0, f_getwinposx}, 7526 7588 {"getwinposy", 0, 0, f_getwinposy}, 7527 7589 {"getwinvar", 2, 2, f_getwinvar}, 7528 {"glob", 1, 1, f_glob},7529 {"globpath", 2, 2, f_globpath},7590 {"glob", 1, 2, f_glob}, 7591 {"globpath", 2, 3, f_globpath}, 7530 7592 {"has", 1, 1, f_has}, 7531 7593 {"has_key", 2, 2, f_has_key}, 7532 7594 {"haslocaldir", 0, 0, f_haslocaldir}, … … 7856 7918 else if (!aborting()) 7857 7919 { 7858 7920 if (argcount == MAX_FUNC_ARGS) 7859 emsg_funcname( "E740: Too many arguments for function %s", name);7921 emsg_funcname(N_("E740: Too many arguments for function %s"), name); 7860 7922 else 7861 emsg_funcname( "E116: Invalid arguments for function %s", name);7923 emsg_funcname(N_("E116: Invalid arguments for function %s"), name); 7862 7924 } 7863 7925 7864 7926 while (--argcount >= 0) … … 8091 8153 8092 8154 /* 8093 8155 * Give an error message with a function name. Handle <SNR> things. 8156 * "ermsg" is to be passed without translation, use N_() instead of _(). 8094 8157 */ 8095 8158 static void 8096 8159 emsg_funcname(ermsg, name) … … 9518 9581 else 9519 9582 { 9520 9583 /* When the optional second argument is non-zero, don't remove matches 9521 * for ' suffixes' and 'wildignore'*/9584 * for 'wildignore' and don't put matches for 'suffixes' at the end. */ 9522 9585 if (argvars[1].v_type != VAR_UNKNOWN 9523 9586 && get_tv_number_chk(&argvars[1], &error)) 9524 9587 flags |= WILD_KEEP_ALL; … … 10300 10363 s = get_tv_string(&argvars[0]); 10301 10364 if (s == NULL || *s == NUL || VIM_ISDIGIT(*s)) 10302 10365 EMSG2(_(e_invarg2), s); 10303 else if (!function_exists(s)) 10366 /* Don't check an autoload name for existence here. */ 10367 else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s)) 10304 10368 EMSG2(_("E700: Unknown function: %s"), s); 10305 10369 else 10306 10370 { … … 10602 10666 # ifdef FEAT_WINDOWS 10603 10667 win_T *wp; 10604 10668 # endif 10605 int n= 1;10669 int winnr = 1; 10606 10670 10607 10671 if (row >= 0 && col >= 0) 10608 10672 { … … 10612 10676 (void)mouse_comp_pos(win, &row, &col, &lnum); 10613 10677 # ifdef FEAT_WINDOWS 10614 10678 for (wp = firstwin; wp != win; wp = wp->w_next) 10615 ++ n;10679 ++winnr; 10616 10680 # endif 10617 vimvars[VV_MOUSE_WIN].vv_nr = n;10681 vimvars[VV_MOUSE_WIN].vv_nr = winnr; 10618 10682 vimvars[VV_MOUSE_LNUM].vv_nr = lnum; 10619 10683 vimvars[VV_MOUSE_COL].vv_nr = col + 1; 10620 10684 } … … 11284 11348 typval_T *argvars; 11285 11349 typval_T *rettv; 11286 11350 { 11351 int flags = WILD_SILENT|WILD_USE_NL; 11287 11352 expand_T xpc; 11353 int error = FALSE; 11288 11354 11289 ExpandInit(&xpc); 11290 xpc.xp_context = EXPAND_FILES; 11355 /* When the optional second argument is non-zero, don't remove matches 11356 * for 'wildignore' and don't put matches for 'suffixes' at the end. */ 11357 if (argvars[1].v_type != VAR_UNKNOWN 11358 && get_tv_number_chk(&argvars[1], &error)) 11359 flags |= WILD_KEEP_ALL; 11291 11360 rettv->v_type = VAR_STRING; 11292 rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), 11293 NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL); 11361 if (!error) 11362 { 11363 ExpandInit(&xpc); 11364 xpc.xp_context = EXPAND_FILES; 11365 rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), 11366 NULL, flags, WILD_ALL); 11367 } 11368 else 11369 rettv->vval.v_string = NULL; 11294 11370 } 11295 11371 11296 11372 /* … … 11301 11377 typval_T *argvars; 11302 11378 typval_T *rettv; 11303 11379 { 11380 int flags = 0; 11304 11381 char_u buf1[NUMBUFLEN]; 11305 11382 char_u *file = get_tv_string_buf_chk(&argvars[1], buf1); 11383 int error = FALSE; 11306 11384 11385 /* When the optional second argument is non-zero, don't remove matches 11386 * for 'wildignore' and don't put matches for 'suffixes' at the end. */ 11387 if (argvars[2].v_type != VAR_UNKNOWN 11388 && get_tv_number_chk(&argvars[2], &error)) 11389 flags |= WILD_KEEP_ALL; 11307 11390 rettv->v_type = VAR_STRING; 11308 if (file == NULL )11391 if (file == NULL || error) 11309 11392 rettv->vval.v_string = NULL; 11310 11393 else 11311 rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file); 11394 rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file, 11395 flags); 11312 11396 } 11313 11397 11314 11398 /* … … 11782 11866 n = has_patch(atoi((char *)name + 5)); 11783 11867 else if (STRICMP(name, "vim_starting") == 0) 11784 11868 n = (starting != 0); 11869 #ifdef FEAT_MBYTE 11870 else if (STRICMP(name, "multi_byte_encoding") == 0) 11871 n = has_mbyte; 11872 #endif 11785 11873 #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32) 11786 11874 else if (STRICMP(name, "balloon_multiline") == 0) 11787 11875 n = multiline_balloon_available(); … … 15838 15926 if (res == FAIL) 15839 15927 res = ITEM_COMPARE_FAIL; 15840 15928 else 15841 /* return value has wrong type */15842 15929 res = get_tv_number_chk(&rettv, &item_compare_func_err); 15843 15930 if (item_compare_func_err) 15844 res = ITEM_COMPARE_FAIL; 15931 res = ITEM_COMPARE_FAIL; /* return value has wrong type */ 15845 15932 clear_tv(&rettv); 15846 15933 return res; 15847 15934 } … … 16590 16677 p = highlight_has_attr(id, HL_INVERSE, modec); 16591 16678 break; 16592 16679 16593 case 's': /* standout */ 16594 p = highlight_has_attr(id, HL_STANDOUT, modec); 16680 case 's': 16681 if (TOLOWER_ASC(what[1]) == 'p') /* sp[#] */ 16682 p = highlight_color(id, what, modec); 16683 else /* standout */ 16684 p = highlight_has_attr(id, HL_STANDOUT, modec); 16595 16685 break; 16596 16686 16597 16687 case 'u': … … 16658 16748 col = get_tv_number(&argvars[1]) - 1; /* -1 on type error */ 16659 16749 16660 16750 if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count 16661 && col >= 0 && col < (long)STRLEN(ml_get(lnum))16751 && col >= 0 && (col == 0 || col < (long)STRLEN(ml_get(lnum))) 16662 16752 && rettv_list_alloc(rettv) != FAIL) 16663 16753 { 16664 16754 (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE); … … 18097 18187 } 18098 18188 18099 18189 /* 18100 * Set v:count, v:count1 and v:prevcount. 18190 * Get List v: variable value. Caller must take care of reference count when 18191 * needed. 18192 */ 18193 list_T * 18194 get_vim_var_list(idx) 18195 int idx; 18196 { 18197 return vimvars[idx].vv_list; 18198 } 18199 18200 /* 18201 * Set v:count to "count" and v:count1 to "count1". 18202 * When "set_prevcount" is TRUE first set v:prevcount from v:count. 18101 18203 */ 18102 18204 void 18103 set_vcount(count, count1 )18205 set_vcount(count, count1, set_prevcount) 18104 18206 long count; 18105 18207 long count1; 18208 int set_prevcount; 18106 18209 { 18107 vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; 18210 if (set_prevcount) 18211 vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; 18108 18212 vimvars[VV_COUNT].vv_nr = count; 18109 18213 vimvars[VV_COUNT1].vv_nr = count1; 18110 18214 } … … 18132 18236 } 18133 18237 18134 18238 /* 18239 * Set List v: variable to "val". 18240 */ 18241 void 18242 set_vim_var_list(idx, val) 18243 int idx; 18244 list_T *val; 18245 { 18246 list_unref(vimvars[idx].vv_list); 18247 vimvars[idx].vv_list = val; 18248 if (val != NULL) 18249 ++val->lv_refcount; 18250 } 18251 18252 /* 18135 18253 * Set v:register if needed. 18136 18254 */ 18137 18255 void … … 18868 18986 dictitem_T *dict_var; 18869 18987 { 18870 18988 hash_init(&dict->dv_hashtab); 18871 dict->dv_refcount = 99999;18989 dict->dv_refcount = DO_NOT_FREE_CNT; 18872 18990 dict_var->di_tv.vval.v_dict = dict; 18873 18991 dict_var->di_tv.v_type = VAR_DICT; 18874 18992 dict_var->di_tv.v_lock = VAR_FIXED; … … 19205 19323 * Copy the values from typval_T "from" to typval_T "to". 19206 19324 * When needed allocates string or increases reference count. 19207 19325 * Does not make a copy of a list or dict but copies the reference! 19326 * It is OK for "from" and "to" to point to the same item. This is used to 19327 * make a copy later. 19208 19328 */ 19209 19329 static void 19210 19330 copy_tv(from, to) … … 19748 19868 } 19749 19869 } 19750 19870 else 19751 emsg_funcname( "E123: Undefined function: %s", name);19871 emsg_funcname(N_("E123: Undefined function: %s"), name); 19752 19872 } 19753 19873 goto ret_free; 19754 19874 } … … 19792 19912 : eval_isnamec(arg[j]))) 19793 19913 ++j; 19794 19914 if (arg[j] != NUL) 19795 emsg_funcname( _(e_invarg2), arg);19915 emsg_funcname(e_invarg2, arg); 19796 19916 } 19797 19917 } 19798 19918 … … 20064 20184 v = find_var(name, &ht); 20065 20185 if (v != NULL && v->di_tv.v_type == VAR_FUNC) 20066 20186 { 20067 emsg_funcname( "E707: Function name conflicts with variable: %s",20187 emsg_funcname(N_("E707: Function name conflicts with variable: %s"), 20068 20188 name); 20069 20189 goto erret; 20070 20190 } … … 20079 20199 } 20080 20200 if (fp->uf_calls > 0) 20081 20201 { 20082 emsg_funcname( "E127: Cannot redefine function %s: It is in use",20202 emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"), 20083 20203 name); 20084 20204 goto erret; 20085 20205 } … … 20590 20710 int st_len = 0; 20591 20711 20592 20712 todo = (int)func_hashtab.ht_used; 20713 if (todo == 0) 20714 return; /* nothing to dump */ 20715 20593 20716 sorttab = (ufunc_T **)alloc((unsigned)(sizeof(ufunc_T) * todo)); 20594 20717 20595 20718 for (hi = func_hashtab.ht_array; todo > 0; ++hi) … … 20638 20761 prof_self_cmp); 20639 20762 prof_sort_list(fd, sorttab, st_len, "SELF", TRUE); 20640 20763 } 20764 20765 vim_free(sorttab); 20641 20766 } 20642 20767 20643 20768 static void … … 21012 21137 char_u *save_sourcing_name; 21013 21138 linenr_T save_sourcing_lnum; 21014 21139 scid_T save_current_SID; 21015 funccall_T fc;21140 funccall_T *fc; 21016 21141 int save_did_emsg; 21017 21142 static int depth = 0; 21018 21143 dictitem_T *v; … … 21038 21163 21039 21164 line_breakcheck(); /* check for CTRL-C hit */ 21040 21165 21041 fc.caller = current_funccal; 21042 current_funccal = &fc; 21043 fc.func = fp; 21044 fc.rettv = rettv; 21166 fc = (funccall_T *)alloc(sizeof(funccall_T)); 21167 fc->caller = current_funccal; 21168 current_funccal = fc; 21169 fc->func = fp; 21170 fc->rettv = rettv; 21045 21171 rettv->vval.v_number = 0; 21046 fc .linenr = 0;21047 fc .returned = FALSE;21048 fc .level = ex_nesting_level;21172 fc->linenr = 0; 21173 fc->returned = FALSE; 21174 fc->level = ex_nesting_level; 21049 21175 /* Check if this function has a breakpoint. */ 21050 fc .breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);21051 fc .dbg_tick = debug_tick;21176 fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); 21177 fc->dbg_tick = debug_tick; 21052 21178 21053 21179 /* 21054 * Note about using fc .fixvar[]: This is an array of FIXVAR_CNT variables21180 * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables 21055 21181 * with names up to VAR_SHORT_LEN long. This avoids having to alloc/free 21056 21182 * each argument variable and saves a lot of time. 21057 21183 */ 21058 21184 /* 21059 21185 * Init l: variables. 21060 21186 */ 21061 init_var_dict(&fc .l_vars, &fc.l_vars_var);21187 init_var_dict(&fc->l_vars, &fc->l_vars_var); 21062 21188 if (selfdict != NULL) 21063 21189 { 21064 21190 /* Set l:self to "selfdict". Use "name" to avoid a warning from 21065 21191 * some compiler that checks the destination size. */ 21066 v = &fc .fixvar[fixvar_idx++].var;21192 v = &fc->fixvar[fixvar_idx++].var; 21067 21193 name = v->di_key; 21068 21194 STRCPY(name, "self"); 21069 21195 v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX; 21070 hash_add(&fc .l_vars.dv_hashtab, DI2HIKEY(v));21196 hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v)); 21071 21197 v->di_tv.v_type = VAR_DICT; 21072 21198 v->di_tv.v_lock = 0; 21073 21199 v->di_tv.vval.v_dict = selfdict; … … 21079 21205 * Set a:0 to "argcount". 21080 21206 * Set a:000 to a list with room for the "..." arguments. 21081 21207 */ 21082 init_var_dict(&fc .l_avars, &fc.l_avars_var);21083 add_nr_var(&fc .l_avars, &fc.fixvar[fixvar_idx++].var, "0",21208 init_var_dict(&fc->l_avars, &fc->l_avars_var); 21209 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0", 21084 21210 (varnumber_T)(argcount - fp->uf_args.ga_len)); 21085 v = &fc.fixvar[fixvar_idx++].var; 21086 STRCPY(v->di_key, "000"); 21211 /* Use "name" to avoid a warning from some compiler that checks the 21212 * destination size. */ 21213 v = &fc->fixvar[fixvar_idx++].var; 21214 name = v->di_key; 21215 STRCPY(name, "000"); 21087 21216 v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; 21088 hash_add(&fc .l_avars.dv_hashtab, DI2HIKEY(v));21217 hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); 21089 21218 v->di_tv.v_type = VAR_LIST; 21090 21219 v->di_tv.v_lock = VAR_FIXED; 21091 v->di_tv.vval.v_list = &fc .l_varlist;21092 vim_memset(&fc .l_varlist, 0, sizeof(list_T));21093 fc .l_varlist.lv_refcount = 99999;21094 fc .l_varlist.lv_lock = VAR_FIXED;21220 v->di_tv.vval.v_list = &fc->l_varlist; 21221 vim_memset(&fc->l_varlist, 0, sizeof(list_T)); 21222 fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT; 21223 fc->l_varlist.lv_lock = VAR_FIXED; 21095 21224 21096 21225 /* 21097 21226 * Set a:firstline to "firstline" and a:lastline to "lastline". 21098 21227 * Set a:name to named arguments. 21099 21228 * Set a:N to the "..." arguments. 21100 21229 */ 21101 add_nr_var(&fc .l_avars, &fc.fixvar[fixvar_idx++].var, "firstline",21230 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline", 21102 21231 (varnumber_T)firstline); 21103 add_nr_var(&fc .l_avars, &fc.fixvar[fixvar_idx++].var, "lastline",21232 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline", 21104 21233 (varnumber_T)lastline); 21105 21234 for (i = 0; i < argcount; ++i) 21106 21235 { … … 21116 21245 } 21117 21246 if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN) 21118 21247 { 21119 v = &fc .fixvar[fixvar_idx++].var;21248 v = &fc->fixvar[fixvar_idx++].var; 21120 21249 v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; 21121 21250 } 21122 21251 else … … 21128 21257 v->di_flags = DI_FLAGS_RO; 21129 21258 } 21130 21259 STRCPY(v->di_key, name); 21131 hash_add(&fc .l_avars.dv_hashtab, DI2HIKEY(v));21260 hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); 21132 21261 21133 21262 /* Note: the values are copied directly to avoid alloc/free. 21134 21263 * "argvars" must have VAR_FIXED for v_lock. */ … … 21137 21266 21138 21267 if (ai >= 0 && ai < MAX_FUNC_ARGS) 21139 21268 { 21140 list_append(&fc .l_varlist, &fc.l_listitems[ai]);21141 fc .l_listitems[ai].li_tv = argvars[i];21142 fc .l_listitems[ai].li_tv.v_lock = VAR_FIXED;21269 list_append(&fc->l_varlist, &fc->l_listitems[ai]); 21270 fc->l_listitems[ai].li_tv = argvars[i]; 21271 fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED; 21143 21272 } 21144 21273 } 21145 21274 … … 21204 21333 if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL)) 21205 21334 func_do_profile(fp); 21206 21335 if (fp->uf_profiling 21207 || (fc.caller != NULL && &fc.caller->func->uf_profiling))21336 || (fc->caller != NULL && fc->caller->func->uf_profiling)) 21208 21337 { 21209 21338 ++fp->uf_tm_count; 21210 21339 profile_start(&call_start); … … 21220 21349 did_emsg = FALSE; 21221 21350 21222 21351 /* call do_cmdline() to execute the lines */ 21223 do_cmdline(NULL, get_func_line, (void *) &fc,21352 do_cmdline(NULL, get_func_line, (void *)fc, 21224 21353 DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); 21225 21354 21226 21355 --RedrawingDisabled; … … 21235 21364 21236 21365 #ifdef FEAT_PROFILE 21237 21366 if (do_profiling == PROF_YES && (fp->uf_profiling 21238 || (fc .caller != NULL && &fc.caller->func->uf_profiling)))21367 || (fc->caller != NULL && fc->caller->func->uf_profiling))) 21239 21368 { 21240 21369 profile_end(&call_start); 21241 21370 profile_sub_wait(&wait_start, &call_start); 21242 21371 profile_add(&fp->uf_tm_total, &call_start); 21243 21372 profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children); 21244 if (fc .caller != NULL && &fc.caller->func->uf_profiling)21373 if (fc->caller != NULL && fc->caller->func->uf_profiling) 21245 21374 { 21246 profile_add(&fc .caller->func->uf_tm_children, &call_start);21247 profile_add(&fc .caller->func->uf_tml_children, &call_start);21375 profile_add(&fc->caller->func->uf_tm_children, &call_start); 21376 profile_add(&fc->caller->func->uf_tml_children, &call_start); 21248 21377 } 21249 21378 } 21250 21379 #endif … … 21257 21386 21258 21387 if (aborting()) 21259 21388 smsg((char_u *)_("%s aborted"), sourcing_name); 21260 else if (fc .rettv->v_type == VAR_NUMBER)21389 else if (fc->rettv->v_type == VAR_NUMBER) 21261 21390 smsg((char_u *)_("%s returning #%ld"), sourcing_name, 21262 (long)fc .rettv->vval.v_number);21391 (long)fc->rettv->vval.v_number); 21263 21392 else 21264 21393 { 21265 21394 char_u buf[MSG_BUF_LEN]; … … 21270 21399 /* The value may be very long. Skip the middle part, so that we 21271 21400 * have some idea how it starts and ends. smsg() would always 21272 21401 * truncate it at the end. */ 21273 s = tv2string(fc .rettv, &tofree, numbuf2, 0);21402 s = tv2string(fc->rettv, &tofree, numbuf2, 0); 21274 21403 if (s != NULL) 21275 21404 { 21276 21405 trunc_string(s, buf, MSG_BUF_CLEN); … … 21306 21435 } 21307 21436 21308 21437 did_emsg |= save_did_emsg; 21309 current_funccal = fc.caller; 21438 current_funccal = fc->caller; 21439 --depth; 21310 21440 21311 /* The a: variables typevals were not allocated, only free the allocated 21312 * variables. */ 21313 vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE); 21441 /* if the a:000 list and the a: dict are not referenced we can free the 21442 * funccall_T and what's in it. */ 21443 if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT 21444 && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT 21445 && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) 21446 { 21447 free_funccal(fc, FALSE); 21448 } 21449 else 21450 { 21451 hashitem_T *hi; 21452 listitem_T *li; 21453 int todo; 21314 21454 21315 vars_clear(&fc.l_vars.dv_hashtab); /* free all l: variables */ 21316 --depth; 21455 /* "fc" is still in use. This can happen when returning "a:000" or 21456 * assigning "l:" to a global variable. 21457 * Link "fc" in the list for garbage collection later. */ 21458 fc->caller = previous_funccal; 21459 previous_funccal = fc; 21460 21461 /* Make a copy of the a: variables, since we didn't do that above. */ 21462 todo = (int)fc->l_avars.dv_hashtab.ht_used; 21463 for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi) 21464 { 21465 if (!HASHITEM_EMPTY(hi)) 21466 { 21467 --todo; 21468 v = HI2DI(hi); 21469 copy_tv(&v->di_tv, &v->di_tv); 21470 } 21471 } 21472 21473 /* Make a copy of the a:000 items, since we didn't do that above. */ 21474 for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) 21475 copy_tv(&li->li_tv, &li->li_tv); 21476 } 21477 } 21478 21479 /* 21480 * Return TRUE if items in "fc" do not have "copyID". That means they are not 21481 * referenced from anywhere. 21482 */ 21483 static int 21484 can_free_funccal(fc, copyID) 21485 funccall_T *fc; 21486 int copyID; 21487 { 21488 return (fc->l_varlist.lv_copyID != copyID 21489 && fc->l_vars.dv_copyID != copyID 21490 && fc->l_avars.dv_copyID != copyID); 21491 } 21492 21493 /* 21494 * Free "fc" and what it contains. 21495 */ 21496 static void 21497 free_funccal(fc, free_val) 21498 funccall_T *fc; 21499 int free_val; /* a: vars were allocated */ 21500 { 21501 listitem_T *li; 21502 21503 /* The a: variables typevals may not have been allocated, only free the 21504 * allocated variables. */ 21505 vars_clear_ext(&fc->l_avars.dv_hashtab, free_val); 21506 21507 /* free all l: variables */ 21508 vars_clear(&fc->l_vars.dv_hashtab); 21509 21510 /* Free the a:000 variables if they were allocated. */ 21511 if (free_val) 21512 for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) 21513 clear_tv(&li->li_tv); 21514 21515 vim_free(fc); 21317 21516 } 21318 21517 21319 21518 /* … … 21886 22085 } 21887 22086 } 21888 22087 22088 /* 22089 * List v:oldfiles in a nice way. 22090 */ 22091 /*ARGSUSED*/ 22092 void 22093 ex_oldfiles(eap) 22094 exarg_T *eap; 22095 { 22096 list_T *l = vimvars[VV_OLDFILES].vv_list; 22097 listitem_T *li; 22098 int nr = 0; 22099 22100 if (l == NULL) 22101 msg((char_u *)_("No old files")); 22102 else 22103 { 22104 msg_start(); 22105 msg_scroll = TRUE; 22106 for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) 22107 { 22108 msg_outnum((long)++nr); 22109 MSG_PUTS(": "); 22110 msg_outtrans(get_tv_string(&li->li_tv)); 22111 msg_putchar('\n'); 22112 out_flush(); /* output one line at a time */ 22113 ui_breakcheck(); 22114 } 22115 /* Assume "got_int" was set to truncate the listing. */ 22116 got_int = FALSE; 22117 22118 #ifdef FEAT_BROWSE_CMD 22119 if (cmdmod.browse) 22120 { 22121 quit_more = FALSE; 22122 nr = prompt_for_number(FALSE); 22123 msg_starthere(); 22124 if (nr > 0) 22125 { 22126 char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES), 22127 (long)nr); 22128 22129 if (p != NULL) 22130 { 22131 p = expand_env_save(p); 22132 eap->arg = p; 22133 eap->cmdidx = CMD_edit; 22134 cmdmod.browse = FALSE; 22135 do_exedit(eap, NULL); 22136 vim_free(p); 22137 } 22138 } 22139 } 22140 #endif 22141 } 22142 } 22143 21889 22144 #endif /* FEAT_EVAL */ 21890 22145 21891 22146 -
src/ex_cmds2.c
diff -Naur vim72.orig/src/ex_cmds2.c vim72/src/ex_cmds2.c
old new 3145 3145 verbose_leave(); 3146 3146 } 3147 3147 #ifdef STARTUPTIME 3148 vim_snprintf( IObuff, IOSIZE, "sourcing %s", fname);3149 time_msg( IObuff, &tv_start);3148 vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname); 3149 time_msg((char *)IObuff, &tv_start); 3150 3150 time_pop(&tv_rel); 3151 3151 #endif 3152 3152 -
src/ex_cmds.c
diff -Naur vim72.orig/src/ex_cmds.c vim72/src/ex_cmds.c
old new 24 24 static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out)); 25 25 #ifdef FEAT_VIMINFO 26 26 static char_u *viminfo_filename __ARGS((char_u *)); 27 static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));27 static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags)); 28 28 static int viminfo_encoding __ARGS((vir_T *virp)); 29 29 static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing)); 30 30 #endif … … 49 49 exarg_T *eap; 50 50 { 51 51 int c; 52 int cval; 52 53 char buf1[20]; 53 54 char buf2[20]; 54 55 char_u buf3[7]; … … 75 76 { 76 77 if (c == NL) /* NUL is stored as NL */ 77 78 c = NUL; 79 if (c == CAR && get_fileformat(curbuf) == EOL_MAC) 80 cval = NL; /* NL is stored as CR */ 81 else 82 cval = c; 78 83 if (vim_isprintc_strict(c) && (c < ' ' 79 84 #ifndef EBCDIC 80 85 || c > '~' … … 94 99 buf2[0] = NUL; 95 100 vim_snprintf((char *)IObuff, IOSIZE, 96 101 _("<%s>%s%s %d, Hex %02x, Octal %03o"), 97 transchar(c), buf1, buf2, c, c, c);102 transchar(c), buf1, buf2, cval, cval, cval); 98 103 #ifdef FEAT_MBYTE 99 104 if (enc_utf8) 100 105 c = cc[ci++]; … … 1676 1681 1677 1682 /* 1678 1683 * read_viminfo() -- Read the viminfo file. Registers etc. which are already 1679 * set are not over-written unless force is TRUE. -- webb1684 * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb 1680 1685 */ 1681 1686 int 1682 read_viminfo(file, want_info, want_marks, forceit) 1683 char_u *file; 1684 int want_info; 1685 int want_marks; 1686 int forceit; 1687 read_viminfo(file, flags) 1688 char_u *file; /* file name or NULL to use default name */ 1689 int flags; /* VIF_WANT_INFO et al. */ 1687 1690 { 1688 1691 FILE *fp; 1689 1692 char_u *fname; … … 1691 1694 if (no_viminfo()) 1692 1695 return FAIL; 1693 1696 1694 fname = viminfo_filename(file); /* may set to default if NULL*/1697 fname = viminfo_filename(file); /* get file name in allocated buffer */ 1695 1698 if (fname == NULL) 1696 1699 return FAIL; 1697 1700 fp = mch_fopen((char *)fname, READBIN); … … 1701 1704 verbose_enter(); 1702 1705 smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), 1703 1706 fname, 1704 want_info ? _(" info") : "", 1705 want_marks ? _(" marks") : "", 1707 (flags & VIF_WANT_INFO) ? _(" info") : "", 1708 (flags & VIF_WANT_MARKS) ? _(" marks") : "", 1709 (flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "", 1706 1710 fp == NULL ? _(" FAILED") : ""); 1707 1711 verbose_leave(); 1708 1712 } … … 1712 1716 return FAIL; 1713 1717 1714 1718 viminfo_errcnt = 0; 1715 do_viminfo(fp, NULL, want_info, want_marks, forceit);1719 do_viminfo(fp, NULL, flags); 1716 1720 1717 1721 fclose(fp); 1718 1719 1722 return OK; 1720 1723 } 1721 1724 … … 1943 1946 * root. 1944 1947 */ 1945 1948 if (fp_out != NULL) 1946 (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);1949 ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); 1947 1950 #endif 1948 1951 } 1949 1952 } … … 1968 1971 } 1969 1972 1970 1973 viminfo_errcnt = 0; 1971 do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);1974 do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS)); 1972 1975 1973 1976 fclose(fp_out); /* errors are ignored !? */ 1974 1977 if (fp_in != NULL) … … 2041 2044 * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo(). 2042 2045 */ 2043 2046 static void 2044 do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)2047 do_viminfo(fp_in, fp_out, flags) 2045 2048 FILE *fp_in; 2046 2049 FILE *fp_out; 2047 int want_info; 2048 int want_marks; 2049 int force_read; 2050 int flags; 2050 2051 { 2051 2052 int count = 0; 2052 2053 int eof = FALSE; … … 2061 2062 2062 2063 if (fp_in != NULL) 2063 2064 { 2064 if (want_info) 2065 eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL); 2065 if (flags & VIF_WANT_INFO) 2066 eof = read_viminfo_up_to_marks(&vir, 2067 flags & VIF_FORCEIT, fp_out != NULL); 2066 2068 else 2067 2069 /* Skip info, find start of marks */ 2068 2070 while (!(eof = viminfo_readline(&vir)) … … 2092 2094 write_viminfo_bufferlist(fp_out); 2093 2095 count = write_viminfo_marks(fp_out); 2094 2096 } 2095 if (fp_in != NULL && want_marks) 2096 copy_viminfo_marks(&vir, fp_out, count, eof); 2097 if (fp_in != NULL 2098 && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT))) 2099 copy_viminfo_marks(&vir, fp_out, count, eof, flags); 2097 2100 2098 2101 vim_free(vir.vir_line); 2099 2102 #ifdef FEAT_MBYTE … … 5059 5062 5060 5063 if (did_sub) 5061 5064 ++sub_nlines; 5065 vim_free(new_start); /* for when substitute was cancelled */ 5062 5066 vim_free(sub_firstline); /* free the copy of the original line */ 5063 5067 sub_firstline = NULL; 5064 5068 } -
src/ex_cmds.h
diff -Naur vim72.orig/src/ex_cmds.h vim72/src/ex_cmds.h
old new 278 278 EX(CMD_crewind, "crewind", ex_cc, 279 279 RANGE|NOTADR|COUNT|TRLBAR|BANG), 280 280 EX(CMD_cscope, "cscope", do_cscope, 281 EXTRA|NOTRLCOM| SBOXOK|XFILE),281 EXTRA|NOTRLCOM|XFILE), 282 282 EX(CMD_cstag, "cstag", do_cstag, 283 283 BANG|TRLBAR|WORD1), 284 284 EX(CMD_cunmap, "cunmap", ex_unmap, … … 506 506 EX(CMD_lclose, "lclose", ex_cclose, 507 507 RANGE|NOTADR|COUNT|TRLBAR), 508 508 EX(CMD_lcscope, "lcscope", do_cscope, 509 EXTRA|NOTRLCOM| SBOXOK|XFILE),509 EXTRA|NOTRLCOM|XFILE), 510 510 EX(CMD_left, "left", ex_align, 511 511 TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY), 512 512 EX(CMD_leftabove, "leftabove", ex_wrongmodifier, … … 635 635 RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), 636 636 EX(CMD_noremap, "noremap", ex_map, 637 637 BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), 638 EX(CMD_noautocmd, "noautocmd", ex_wrongmodifier, 639 NEEDARG|EXTRA|NOTRLCOM), 638 640 EX(CMD_nohlsearch, "nohlsearch", ex_nohlsearch, 639 641 TRLBAR|SBOXOK|CMDWIN), 640 642 EX(CMD_noreabbrev, "noreabbrev", ex_abbreviate, … … 651 653 EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), 652 654 EX(CMD_open, "open", ex_open, 653 655 RANGE|EXTRA), 656 EX(CMD_oldfiles, "oldfiles", ex_oldfiles, 657 BANG|TRLBAR|SBOXOK|CMDWIN), 654 658 EX(CMD_omap, "omap", ex_map, 655 659 EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), 656 660 EX(CMD_omapclear, "omapclear", ex_mapclear, … … 802 806 EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, 803 807 WORD1|TRLBAR|CMDWIN), 804 808 EX(CMD_scscope, "scscope", do_scscope, 805 EXTRA|NOTRLCOM |SBOXOK),809 EXTRA|NOTRLCOM), 806 810 EX(CMD_set, "set", ex_set, 807 811 TRLBAR|EXTRA|CMDWIN|SBOXOK), 808 812 EX(CMD_setfiletype, "setfiletype", ex_setfiletype, -
src/ex_docmd.c
diff -Naur vim72.orig/src/ex_docmd.c vim72/src/ex_docmd.c
old new 364 364 # define ex_function ex_ni 365 365 # define ex_delfunction ex_ni 366 366 # define ex_return ex_ni 367 # define ex_oldfiles ex_ni 367 368 #endif 368 369 static char_u *arg_all __ARGS((void)); 369 370 #ifdef FEAT_SESSION … … 1770 1771 } 1771 1772 if (checkforcmd(&ea.cmd, "browse", 3)) 1772 1773 { 1773 #ifdef FEAT_BROWSE 1774 #ifdef FEAT_BROWSE_CMD 1774 1775 cmdmod.browse = TRUE; 1775 1776 #endif 1776 1777 continue; … … 2978 2979 {"keepmarks", 3, FALSE}, 2979 2980 {"leftabove", 5, FALSE}, 2980 2981 {"lockmarks", 3, FALSE}, 2982 {"noautocmd", 3, FALSE}, 2981 2983 {"rightbelow", 6, FALSE}, 2982 2984 {"sandbox", 3, FALSE}, 2983 2985 {"silent", 3, FALSE}, … … 3608 3610 return set_context_in_autocmd(xp, arg, FALSE); 3609 3611 3610 3612 case CMD_doautocmd: 3613 case CMD_doautoall: 3611 3614 return set_context_in_autocmd(xp, arg, TRUE); 3612 3615 #endif 3613 3616 case CMD_set: … … 5479 5482 return OK; 5480 5483 } 5481 5484 5485 /* 5486 * ":command ..." 5487 */ 5482 5488 static void 5483 5489 ex_command(eap) 5484 5490 exarg_T *eap; … … 5911 5917 5912 5918 char_u *start; 5913 5919 char_u *end; 5920 char_u *ksp; 5914 5921 size_t len, totlen; 5915 5922 5916 5923 size_t split_len = 0; … … 5927 5934 5928 5935 /* 5929 5936 * Replace <> in the command by the arguments. 5937 * First round: "buf" is NULL, compute length, allocate "buf". 5938 * Second round: copy result into "buf". 5930 5939 */ 5931 5940 buf = NULL; 5932 5941 for (;;) 5933 5942 { 5934 p = cmd->uc_rep; 5935 q = buf; 5943 p = cmd->uc_rep; /* source */ 5944 q = buf; /* destinateion */ 5936 5945 totlen = 0; 5937 while ((start = vim_strchr(p, '<')) != NULL 5938 && (end = vim_strchr(start + 1, '>')) != NULL)5946 5947 for (;;) 5939 5948 { 5949 start = vim_strchr(p, '<'); 5950 if (start != NULL) 5951 end = vim_strchr(start + 1, '>'); 5952 if (buf != NULL) 5953 { 5954 ksp = vim_strchr(p, K_SPECIAL); 5955 if (ksp != NULL && (start == NULL || ksp < start || end == NULL) 5956 && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER) 5957 # ifdef FEAT_GUI 5958 || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI) 5959 # endif 5960 )) 5961 { 5962 /* K_SPECIAL han been put in the buffer as K_SPECIAL 5963 * KS_SPECIAL KE_FILLER, like for mappings, but 5964 * do_cmdline() doesn't handle that, so convert it back. 5965 * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */ 5966 len = ksp - p; 5967 if (len > 0) 5968 { 5969 mch_memmove(q, p, len); 5970 q += len; 5971 } 5972 *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI; 5973 p = ksp + 3; 5974 continue; 5975 } 5976 } 5977 5978 /* break if there no <item> is found */ 5979 if (start == NULL || end == NULL) 5980 break; 5981 5940 5982 /* Include the '>' */ 5941 5983 ++end; 5942 5984 … … 8749 8791 else if (*dirnow != NUL 8750 8792 && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) 8751 8793 { 8752 (void)mch_chdir((char *)globaldir);8753 8794 if (mch_chdir((char *)globaldir) == OK) 8795 shorten_fnames(TRUE); 8754 8796 } 8755 8797 8756 8798 failed |= (makeopens(fd, dirnow) == FAIL); … … 9506 9548 break; 9507 9549 } 9508 9550 s = src + 1; 9551 if (*s == '<') /* "#<99" uses v:oldfiles */ 9552 ++s; 9509 9553 i = (int)getdigits(&s); 9510 9554 *usedlen = (int)(s - src); /* length of what we expand */ 9511 9555 9512 buf = buflist_findnr(i); 9513 if (buf == NULL) 9556 if (src[1] == '<') 9514 9557 { 9515 *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'"); 9558 if (*usedlen < 2) 9559 { 9560 /* Should we give an error message for #<text? */ 9561 *usedlen = 1; 9562 return NULL; 9563 } 9564 #ifdef FEAT_EVAL 9565 result = list_find_str(get_vim_var_list(VV_OLDFILES), 9566 (long)i); 9567 if (result == NULL) 9568 { 9569 *errormsg = (char_u *)""; 9570 return NULL; 9571 } 9572 #else 9573 *errormsg = (char_u *)_("E809: #< is not available without the +eval feature"); 9516 9574 return NULL; 9575 #endif 9517 9576 } 9518 if (lnump != NULL) 9519 *lnump = ECMD_LAST; 9520 if (buf->b_fname == NULL) 9577 else 9521 9578 { 9522 result = (char_u *)""; 9523 valid = 0; /* Must have ":p:h" to be valid */ 9579 buf = buflist_findnr(i); 9580 if (buf == NULL) 9581 { 9582 *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'"); 9583 return NULL; 9584 } 9585 if (lnump != NULL) 9586 *lnump = ECMD_LAST; 9587 if (buf->b_fname == NULL) 9588 { 9589 result = (char_u *)""; 9590 valid = 0; /* Must have ":p:h" to be valid */ 9591 } 9592 else 9593 result = buf->b_fname; 9524 9594 } 9525 else9526 result = buf->b_fname;9527 9595 break; 9528 9596 9529 9597 #ifdef FEAT_SEARCHPATH … … 9541 9609 #ifdef FEAT_AUTOCMD 9542 9610 case SPEC_AFILE: /* file name for autocommand */ 9543 9611 result = autocmd_fname; 9612 if (result != NULL && !autocmd_fname_full) 9613 { 9614 /* Still need to turn the fname into a full path. It is 9615 * postponed to avoid a delay when <afile> is not used. */ 9616 autocmd_fname_full = TRUE; 9617 result = FullName_save(autocmd_fname, FALSE); 9618 vim_free(autocmd_fname); 9619 autocmd_fname = result; 9620 } 9544 9621 if (result == NULL) 9545 9622 { 9546 9623 *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\""); … … 10067 10144 */ 10068 10145 if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL 10069 10146 || put_line(fd, "if file_readable(s:sx)") == FAIL 10070 || put_line(fd, " exe \"source \" . s:sx") == FAIL10147 || put_line(fd, " exe \"source \" . fnameescape(s:sx)") == FAIL 10071 10148 || put_line(fd, "endif") == FAIL) 10072 10149 return FAIL; 10073 10150 … … 10689 10766 p_viminfo = (char_u *)"'100"; 10690 10767 if (eap->cmdidx == CMD_rviminfo) 10691 10768 { 10692 if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL) 10769 if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS 10770 | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL) 10693 10771 EMSG(_("E195: Cannot open viminfo file for reading")); 10694 10772 } 10695 10773 else -
src/ex_getln.c
diff -Naur vim72.orig/src/ex_getln.c vim72/src/ex_getln.c
old new 31 31 int cmdattr; /* attributes for prompt */ 32 32 int overstrike; /* Typing mode on the command line. Shared by 33 33 getcmdline() and put_on_cmdline(). */ 34 expand_T *xpc; /* struct being used for expansion, xp_pattern 35 may point into cmdbuff */ 34 36 int xp_context; /* type of expansion */ 35 37 # ifdef FEAT_EVAL 36 38 char_u *xp_arg; /* user-defined expansion arg */ … … 38 40 # endif 39 41 }; 40 42 41 static struct cmdline_info ccline; /* current cmdline_info */ 43 /* The current cmdline_info. It is initialized in getcmdline() and after that 44 * used by other functions. When invoking getcmdline() recursively it needs 45 * to be saved with save_cmdline() and restored with restore_cmdline(). 46 * TODO: make it local to getcmdline() and pass it around. */ 47 static struct cmdline_info ccline; 42 48 43 49 static int cmd_showtail; /* Only show path tail in lists ? */ 44 50 … … 238 244 } 239 245 240 246 ExpandInit(&xpc); 247 ccline.xpc = &xpc; 241 248 242 249 #ifdef FEAT_RIGHTLEFT 243 250 if (curwin->w_p_rl && *curwin->w_p_rlc == 's' … … 408 415 #endif 409 416 410 417 /* 411 * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>). 418 * When there are matching completions to select <S-Tab> works like 419 * CTRL-P (unless 'wc' is <S-Tab>). 412 420 */ 413 if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1)421 if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0) 414 422 c = Ctrl_P; 415 423 416 424 #ifdef FEAT_WILDMENU … … 1513 1521 int old_firstc; 1514 1522 1515 1523 vim_free(ccline.cmdbuff); 1524 xpc.xp_context = EXPAND_NOTHING; 1516 1525 if (hiscnt == hislen) 1517 1526 p = lookfor; /* back to the old one */ 1518 1527 else … … 1839 1848 #endif 1840 1849 1841 1850 ExpandCleanup(&xpc); 1851 ccline.xpc = NULL; 1842 1852 1843 1853 #ifdef FEAT_SEARCH_EXTRA 1844 1854 if (did_incsearch) … … 2508 2518 } 2509 2519 mch_memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen + 1); 2510 2520 vim_free(p); 2521 2522 if (ccline.xpc != NULL 2523 && ccline.xpc->xp_pattern != NULL 2524 && ccline.xpc->xp_context != EXPAND_NOTHING 2525 && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL) 2526 { 2527 int i = (int)(ccline.xpc->xp_pattern - p); 2528 2529 /* If xp_pattern points inside the old cmdbuff it needs to be adjusted 2530 * to point into the newly allocated memory. */ 2531 if (i >= 0 && i <= ccline.cmdlen) 2532 ccline.xpc->xp_pattern = ccline.cmdbuff + i; 2533 } 2534 2511 2535 return OK; 2512 2536 } 2513 2537 … … 2875 2899 prev_ccline = ccline; 2876 2900 ccline.cmdbuff = NULL; 2877 2901 ccline.cmdprompt = NULL; 2902 ccline.xpc = NULL; 2878 2903 } 2879 2904 2880 2905 /* … … 3582 3607 ExpandInit(xp) 3583 3608 expand_T *xp; 3584 3609 { 3610 xp->xp_pattern = NULL; 3585 3611 xp->xp_backslash = XP_BS_NONE; 3586 3612 #ifndef BACKSLASH_IN_FILENAME 3587 3613 xp->xp_shell = FALSE; … … 4871 4897 if (s == NULL) 4872 4898 return FAIL; 4873 4899 sprintf((char *)s, "%s/%s*.vim", dirname, pat); 4874 all = globpath(p_rtp, s );4900 all = globpath(p_rtp, s, 0); 4875 4901 vim_free(s); 4876 4902 if (all == NULL) 4877 4903 return FAIL; … … 4912 4938 * newlines. Returns NULL for an error or no matches. 4913 4939 */ 4914 4940 char_u * 4915 globpath(path, file )4941 globpath(path, file, expand_options) 4916 4942 char_u *path; 4917 4943 char_u *file; 4944 int expand_options; 4918 4945 { 4919 4946 expand_T xpc; 4920 4947 char_u *buf; … … 4943 4970 { 4944 4971 add_pathsep(buf); 4945 4972 STRCAT(buf, file); 4946 if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL4947 4973 if (ExpandFromContext(&xpc, buf, &num_p, &p, 4974 WILD_SILENT|expand_options) != FAIL && num_p > 0) 4948 4975 { 4949 ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT );4976 ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options); 4950 4977 for (len = 0, i = 0; i < num_p; ++i) 4951 4978 len += (int)STRLEN(p[i]) + 1; 4952 4979 -
src/feature.h
diff -Naur vim72.orig/src/feature.h vim72/src/feature.h
old new 767 767 768 768 /* 769 769 * +browse ":browse" command. 770 * or just the ":browse" command modifier 770 771 */ 771 #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)) 772 # define FEAT_BROWSE 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 773 777 #endif 774 778 775 779 /* -
src/fileio.c
diff -Naur vim72.orig/src/fileio.c vim72/src/fileio.c
old new 932 932 else 933 933 { 934 934 if (eap != NULL && eap->force_ff != 0) 935 { 935 936 fileformat = get_fileformat_force(curbuf, eap); 937 try_unix = try_dos = try_mac = FALSE; 938 } 936 939 else if (curbuf->b_p_bin) 937 940 fileformat = EOL_UNIX; /* binary: use Unix format */ 938 941 else if (*p_ffs == NUL) … … 2211 2214 { 2212 2215 /* Use stderr for stdin, makes shell commands work. */ 2213 2216 close(0); 2214 dup(2);2217 ignored = dup(2); 2215 2218 } 2216 2219 #endif 2217 2220 … … 2341 2344 STRCAT(IObuff, _("[CR missing]")); 2342 2345 c = TRUE; 2343 2346 } 2344 if (ff_error == EOL_MAC)2345 {2346 STRCAT(IObuff, _("[NL found]"));2347 c = TRUE;2348 }2349 2347 if (split) 2350 2348 { 2351 2349 STRCAT(IObuff, _("[long lines split]")); … … 2711 2709 { 2712 2710 if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0 2713 2711 && curbuf->b_ffname != NULL) 2714 read_viminfo(NULL, FALSE, TRUE, FALSE);2712 read_viminfo(NULL, VIF_WANT_MARKS); 2715 2713 2716 2714 /* Always set b_marks_read; needed when 'viminfo' is changed to include 2717 2715 * the ' parameter after opening a buffer. */ … … 3451 3449 { 3452 3450 # ifdef UNIX 3453 3451 # ifdef HAVE_FCHOWN 3454 fchown(fd, st_old.st_uid, st_old.st_gid);3452 ignored = fchown(fd, st_old.st_uid, st_old.st_gid); 3455 3453 # endif 3456 3454 if (mch_stat((char *)IObuff, &st) < 0 3457 3455 || st.st_uid != st_old.st_uid … … 4367 4365 || st.st_uid != st_old.st_uid 4368 4366 || st.st_gid != st_old.st_gid) 4369 4367 { 4370 fchown(fd, st_old.st_uid, st_old.st_gid);4368 ignored = fchown(fd, st_old.st_uid, st_old.st_gid); 4371 4369 if (perm >= 0) /* set permission again, may have changed */ 4372 4370 (void)mch_setperm(wfname, perm); 4373 4371 } … … 5550 5548 name = "ucs-4le"; /* FF FE 00 00 */ 5551 5549 len = 4; 5552 5550 } 5553 else if (flags == FIO_ALL || flags ==(FIO_UCS2 | FIO_ENDIAN_L))5551 else if (flags == (FIO_UCS2 | FIO_ENDIAN_L)) 5554 5552 name = "ucs-2le"; /* FF FE */ 5555 else if (flags == (FIO_UTF16 | FIO_ENDIAN_L)) 5553 else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L)) 5554 /* utf-16le is preferred, it also works for ucs-2le text */ 5556 5555 name = "utf-16le"; /* FF FE */ 5557 5556 } 5558 5557 else if (p[0] == 0xfe && p[1] == 0xff … … 6031 6030 { 6032 6031 tbuf[FGETS_SIZE - 2] = NUL; 6033 6032 #ifdef USE_CR 6034 fgets_cr((char *)tbuf, FGETS_SIZE, fp);6033 ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp); 6035 6034 #else 6036 fgets((char *)tbuf, FGETS_SIZE, fp);6035 ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp); 6037 6036 #endif 6038 6037 } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n'); 6039 6038 } … … 6107 6106 #ifdef HAVE_ACL 6108 6107 vim_acl_T acl; /* ACL from original file */ 6109 6108 #endif 6109 #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) 6110 int use_tmp_file = FALSE; 6111 #endif 6110 6112 6111 6113 /* 6112 * When the names are identical, there is nothing to do. 6114 * When the names are identical, there is nothing to do. When they refer 6115 * to the same file (ignoring case and slash/backslash differences) but 6116 * the file name differs we need to go through a temp file. 6113 6117 */ 6114 6118 if (fnamecmp(from, to) == 0) 6115 return 0; 6119 { 6120 #ifdef CASE_INSENSITIVE_FILENAME 6121 if (STRCMP(gettail(from), gettail(to)) != 0) 6122 use_tmp_file = TRUE; 6123 else 6124 #endif 6125 return 0; 6126 } 6116 6127 6117 6128 /* 6118 6129 * Fail if the "from" file doesn't exist. Avoids that "to" is deleted. … … 6120 6131 if (mch_stat((char *)from, &st) < 0) 6121 6132 return -1; 6122 6133 6134 #ifdef UNIX 6135 { 6136 struct stat st_to; 6137 6138 /* It's possible for the source and destination to be the same file. 6139 * This happens when "from" and "to" differ in case and are on a FAT32 6140 * filesystem. In that case go through a temp file name. */ 6141 if (mch_stat((char *)to, &st_to) >= 0 6142 && st.st_dev == st_to.st_dev 6143 && st.st_ino == st_to.st_ino) 6144 use_tmp_file = TRUE; 6145 } 6146 #endif 6147 6148 #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) 6149 if (use_tmp_file) 6150 { 6151 char tempname[MAXPATHL + 1]; 6152 6153 /* 6154 * Find a name that doesn't exist and is in the same directory. 6155 * Rename "from" to "tempname" and then rename "tempname" to "to". 6156 */ 6157 if (STRLEN(from) >= MAXPATHL - 5) 6158 return -1; 6159 STRCPY(tempname, from); 6160 for (n = 123; n < 99999; ++n) 6161 { 6162 sprintf((char *)gettail((char_u *)tempname), "%d", n); 6163 if (mch_stat(tempname, &st) < 0) 6164 { 6165 if (mch_rename((char *)from, tempname) == 0) 6166 { 6167 if (mch_rename(tempname, (char *)to) == 0) 6168 return 0; 6169 /* Strange, the second step failed. Try moving the 6170 * file back and return failure. */ 6171 mch_rename(tempname, (char *)from); 6172 return -1; 6173 } 6174 /* If it fails for one temp name it will most likely fail 6175 * for any temp name, give up. */ 6176 return -1; 6177 } 6178 } 6179 return -1; 6180 } 6181 #endif 6182 6123 6183 /* 6124 6184 * Delete the "to" file, this is required on some systems to make the 6125 6185 * mch_rename() work, on other systems it makes sure that we don't have … … 8523 8583 char_u *save_sourcing_name; 8524 8584 linenr_T save_sourcing_lnum; 8525 8585 char_u *save_autocmd_fname; 8586 int save_autocmd_fname_full; 8526 8587 int save_autocmd_bufnr; 8527 8588 char_u *save_autocmd_match; 8528 8589 int save_autocmd_busy; … … 8601 8662 * Save the autocmd_* variables and info about the current buffer. 8602 8663 */ 8603 8664 save_autocmd_fname = autocmd_fname; 8665 save_autocmd_fname_full = autocmd_fname_full; 8604 8666 save_autocmd_bufnr = autocmd_bufnr; 8605 8667 save_autocmd_match = autocmd_match; 8606 8668 save_autocmd_busy = autocmd_busy; … … 8618 8680 if (fname != NULL && *fname != NUL) 8619 8681 autocmd_fname = fname; 8620 8682 else if (buf != NULL) 8621 autocmd_fname = buf->b_f name;8683 autocmd_fname = buf->b_ffname; 8622 8684 else 8623 8685 autocmd_fname = NULL; 8624 8686 } 8625 8687 else 8626 8688 autocmd_fname = fname_io; 8627 8689 if (autocmd_fname != NULL) 8628 autocmd_fname = FullName_save(autocmd_fname, FALSE); 8690 autocmd_fname = vim_strsave(autocmd_fname); 8691 autocmd_fname_full = FALSE; /* call FullName_save() later */ 8629 8692 8630 8693 /* 8631 8694 * Set the buffer number to be used for <abuf>. … … 8810 8873 sourcing_lnum = save_sourcing_lnum; 8811 8874 vim_free(autocmd_fname); 8812 8875 autocmd_fname = save_autocmd_fname; 8876 autocmd_fname_full = save_autocmd_fname_full; 8813 8877 autocmd_bufnr = save_autocmd_bufnr; 8814 8878 autocmd_match = save_autocmd_match; 8815 8879 #ifdef FEAT_EVAL … … 8918 8982 { 8919 8983 apc->curpat = NULL; 8920 8984 8921 /* only use a pattern when it has not been removed, has commands and8985 /* Only use a pattern when it has not been removed, has commands and 8922 8986 * the group matches. For buffer-local autocommands only check the 8923 8987 * buffer number. */ 8924 8988 if (ap->pat != NULL && ap->cmds != NULL … … 9104 9168 set_context_in_autocmd(xp, arg, doautocmd) 9105 9169 expand_T *xp; 9106 9170 char_u *arg; 9107 int doautocmd; /* TRUE for :doauto cmd, FALSE for :autocmd */9171 int doautocmd; /* TRUE for :doauto*, FALSE for :autocmd */ 9108 9172 { 9109 9173 char_u *p; 9110 9174 int group; -
src/fold.c
diff -Naur vim72.orig/src/fold.c vim72/src/fold.c
old new 48 48 static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp)); 49 49 static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum)); 50 50 static void checkupdate __ARGS((win_T *wp)); 51 static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open));51 static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open)); 52 52 static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep)); 53 53 static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep)); 54 54 static void foldOpenNested __ARGS((fold_T *fpr)); … … 740 740 garray_T *found_ga; 741 741 fold_T *found_fp = NULL; 742 742 linenr_T found_off = 0; 743 int use_level = FALSE;743 int use_level; 744 744 int maybe_small = FALSE; 745 745 int level = 0; 746 746 linenr_T lnum = start; … … 757 757 gap = &curwin->w_folds; 758 758 found_ga = NULL; 759 759 lnum_off = 0; 760 use_level = FALSE; 760 761 for (;;) 761 762 { 762 763 if (!foldFind(gap, lnum - lnum_off, &fp)) … … 783 784 else 784 785 { 785 786 lnum = found_fp->fd_top + found_fp->fd_len + found_off; 786 did_one = TRUE;787 787 788 788 if (foldmethodIsManual(curwin)) 789 789 deleteFoldEntry(found_ga, 790 790 (int)(found_fp - (fold_T *)found_ga->ga_data), recursive); 791 791 else 792 792 { 793 if (f ound_fp->fd_top + found_off < first_lnum)794 first_lnum = found_fp->fd_top ;795 if (l num > last_lnum)793 if (first_lnum > found_fp->fd_top + found_off) 794 first_lnum = found_fp->fd_top + found_off; 795 if (last_lnum < lnum) 796 796 last_lnum = lnum; 797 parseMarker(curwin); 797 if (!did_one) 798 parseMarker(curwin); 798 799 deleteFoldMarkers(found_fp, recursive, found_off); 799 800 } 801 did_one = TRUE; 800 802 801 803 /* redraw window */ 802 804 changed_window_setting(); … … 811 813 redraw_curbuf_later(INVERTED); 812 814 #endif 813 815 } 816 else 817 /* Deleting markers may make cursor column invalid. */ 818 check_cursor_col(); 819 814 820 if (last_lnum > 0) 815 821 changed_lines(first_lnum, (colnr_T)0, last_lnum, 0L); 816 822 } … … 1241 1247 * Repeat "count" times. 1242 1248 */ 1243 1249 static void 1244 setFoldRepeat(lnum, count, open)1250 setFoldRepeat(lnum, count, do_open) 1245 1251 linenr_T lnum; 1246 1252 long count; 1247 int open;1253 int do_open; 1248 1254 { 1249 1255 int done; 1250 1256 long n; … … 1252 1258 for (n = 0; n < count; ++n) 1253 1259 { 1254 1260 done = DONE_NOTHING; 1255 (void)setManualFold(lnum, open, FALSE, &done);1261 (void)setManualFold(lnum, do_open, FALSE, &done); 1256 1262 if (!(done & DONE_ACTION)) 1257 1263 { 1258 1264 /* Only give an error message when no fold could be opened. */ -
src/getchar.c
diff -Naur vim72.orig/src/getchar.c vim72/src/getchar.c
old new 4702 4702 return FAIL; 4703 4703 if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0) 4704 4704 return FAIL; 4705 if (fp rintf(fd, cmd) < 0)4705 if (fputs(cmd, fd) < 0) 4706 4706 return FAIL; 4707 4707 if (buf != NULL && fputs(" <buffer>", fd) < 0) 4708 4708 return FAIL; … … 4801 4801 } 4802 4802 if (IS_SPECIAL(c) || modifiers) /* special key */ 4803 4803 { 4804 if (fp rintf(fd, (char *)get_special_key_name(c, modifiers)) < 0)4804 if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0) 4805 4805 return FAIL; 4806 4806 continue; 4807 4807 } -
src/globals.h
diff -Naur vim72.orig/src/globals.h vim72/src/globals.h
old new 1022 1022 #endif 1023 1023 #ifdef FEAT_AUTOCMD 1024 1024 EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */ 1025 EXTERN int autocmd_fname_full; /* autocmd_fname is full path */ 1025 1026 EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */ 1026 1027 EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */ 1027 1028 EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ … … 1339 1340 1340 1341 #ifdef FEAT_NETBEANS_INTG 1341 1342 EXTERN char *netbeansArg INIT(= NULL); /* the -nb[:host:port:passwd] arg */ 1342 EXTERN int netbeansCloseFile INIT(= 0); /* send killed if != 0 */1343 1343 EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */ 1344 1344 EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */ 1345 1345 EXTERN int netbeansReadFile INIT(= 1); /* OK to read from disk if != 0 */ … … 1548 1548 EXTERN time_t starttime; 1549 1549 1550 1550 /* 1551 * Some compilers warn for not using a return value, but in some situations we 1552 * can't do anything useful with the value. Assign to this variable to avoid 1553 * the warning. 1554 */ 1555 EXTERN int ignored; 1556 EXTERN char *ignoredp; 1557 1558 /* 1551 1559 * Optional Farsi support. Include it here, so EXTERN and INIT are defined. 1552 1560 */ 1553 1561 #ifdef FEAT_FKMAP -
src/gui_at_sb.c
diff -Naur vim72.orig/src/gui_at_sb.c vim72/src/gui_at_sb.c
old new 1078 1078 Cardinal *num_params; /* unused */ 1079 1079 { 1080 1080 ScrollbarWidget sbw = (ScrollbarWidget)w; 1081 /* Use a union to avoid a warning for the weird conversion from float to 1082 * XtPointer. Comes from Xaw/Scrollbar.c. */ 1083 union { 1084 XtPointer xtp; 1085 float xtf; 1086 } xtpf; 1081 1087 1082 1088 if (LookAhead(w, event)) 1083 1089 return; … … 1085 1091 /* thumbProc is not pretty, but is necessary for backwards 1086 1092 compatibility on those architectures for which it work{s,ed}; 1087 1093 the intent is to pass a (truncated) float by value. */ 1088 XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top); 1094 xtpf.xtf = sbw->scrollbar.top; 1095 XtCallCallbacks(w, XtNthumbProc, xtpf.xtp); 1089 1096 XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top); 1090 1097 } 1091 1098 -
src/gui.c
diff -Naur vim72.orig/src/gui.c vim72/src/gui.c
old new 139 139 /* The read returns when the child closes the pipe (or when 140 140 * the child dies for some reason). */ 141 141 close(pipefd[1]); 142 (void)read(pipefd[0], &dummy, (size_t)1);142 ignored = (int)read(pipefd[0], &dummy, (size_t)1); 143 143 close(pipefd[0]); 144 144 } 145 145 … … 3241 3241 i = Rows; 3242 3242 gui_update_tabline(); 3243 3243 Rows = i; 3244 need_set_size = RESIZE_VERT;3244 need_set_size |= RESIZE_VERT; 3245 3245 if (using_tabline) 3246 3246 fix_size = TRUE; 3247 3247 if (!gui_use_tabline()) … … 3275 3275 if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) 3276 3276 { 3277 3277 if (i == SBAR_BOTTOM) 3278 need_set_size = RESIZE_VERT;3278 need_set_size |= RESIZE_VERT; 3279 3279 else 3280 need_set_size = RESIZE_HOR;3280 need_set_size |= RESIZE_HOR; 3281 3281 if (gui.which_scrollbars[i]) 3282 3282 fix_size = TRUE; 3283 3283 } … … 3297 3297 gui_mch_enable_menu(gui.menu_is_active); 3298 3298 Rows = i; 3299 3299 prev_menu_is_active = gui.menu_is_active; 3300 need_set_size = RESIZE_VERT;3300 need_set_size |= RESIZE_VERT; 3301 3301 if (gui.menu_is_active) 3302 3302 fix_size = TRUE; 3303 3303 } … … 3308 3308 { 3309 3309 gui_mch_show_toolbar(using_toolbar); 3310 3310 prev_toolbar = using_toolbar; 3311 need_set_size = RESIZE_VERT;3311 need_set_size |= RESIZE_VERT; 3312 3312 if (using_toolbar) 3313 3313 fix_size = TRUE; 3314 3314 } … … 3318 3318 { 3319 3319 gui_mch_enable_footer(using_footer); 3320 3320 prev_footer = using_footer; 3321 need_set_size = RESIZE_VERT;3321 need_set_size |= RESIZE_VERT; 3322 3322 if (using_footer) 3323 3323 fix_size = TRUE; 3324 3324 } … … 3330 3330 prev_tearoff = using_tearoff; 3331 3331 } 3332 3332 #endif 3333 if (need_set_size )3333 if (need_set_size != 0) 3334 3334 { 3335 3335 #ifdef FEAT_GUI_GTK 3336 long c = Columns; 3336 long prev_Columns = Columns; 3337 long prev_Rows = Rows; 3337 3338 #endif 3338 3339 /* Adjust the size of the window to make the text area keep the 3339 3340 * same size and to avoid that part of our window is off-screen … … 3349 3350 * If you remove this, please test this command for resizing 3350 3351 * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". 3351 3352 * Don't do this while starting up though. 3352 * And don't change Rows, it may have be reduced intentionally3353 * when adding menu/toolbar/tabline. */3354 if (!gui.starting )3353 * Don't change Rows when adding menu/toolbar/tabline. 3354 * Don't change Columns when adding vertical toolbar. */ 3355 if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR)) 3355 3356 (void)char_avail(); 3356 Columns = c; 3357 if ((need_set_size & RESIZE_VERT) == 0) 3358 Rows = prev_Rows; 3359 if ((need_set_size & RESIZE_HOR) == 0) 3360 Columns = prev_Columns; 3357 3361 #endif 3358 3362 } 3359 3363 #ifdef FEAT_WINDOWS -
src/gui_gtk_x11.c
diff -Naur vim72.orig/src/gui_gtk_x11.c vim72/src/gui_gtk_x11.c
old new 4070 4070 4071 4071 if (mask & (XValue | YValue)) 4072 4072 { 4073 int w ,h;4074 gui_mch_get_screen_dimensions(&w , &h);4075 h += p_ghr + get_menu_tool_height();4076 w += get_menu_tool_width();4073 int ww, hh; 4074 gui_mch_get_screen_dimensions(&ww, &hh); 4075 hh += p_ghr + get_menu_tool_height(); 4076 ww += get_menu_tool_width(); 4077 4077 if (mask & XNegative) 4078 x += w - pixel_width;4078 x += ww - pixel_width; 4079 4079 if (mask & YNegative) 4080 y += h - pixel_height;4080 y += hh - pixel_height; 4081 4081 #ifdef HAVE_GTK2 4082 4082 gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); 4083 4083 #else -
src/gui_x11.c
diff -Naur vim72.orig/src/gui_x11.c vim72/src/gui_x11.c
old new 2450 2450 *colorPtr = colortable[closest]; 2451 2451 } 2452 2452 2453 free(colortable);2453 vim_free(colortable); 2454 2454 return OK; 2455 2455 } 2456 2456 -
src/gui_xmdlg.c
diff -Naur vim72.orig/src/gui_xmdlg.c vim72/src/gui_xmdlg.c
old new 369 369 char buf[TEMP_BUF_SIZE]; 370 370 XmString items[MAX_ENTRIES_IN_LIST]; 371 371 int i; 372 int i ndex;372 int idx; 373 373 374 for (i ndex = (int)ENCODING; index < (int)NONE; ++index)375 count[i ndex] = 0;374 for (idx = (int)ENCODING; idx < (int)NONE; ++idx) 375 count[idx] = 0; 376 376 377 377 /* First we insert the wild char into every single list. */ 378 378 if (fix != ENCODING) … … 503 503 /* 504 504 * Now loop trough the remaining lists and set them up. 505 505 */ 506 for (i ndex = (int)NAME; index < (int)NONE; ++index)506 for (idx = (int)NAME; idx < (int)NONE; ++idx) 507 507 { 508 508 Widget w; 509 509 510 if (fix == (enum ListSpecifier)i ndex)510 if (fix == (enum ListSpecifier)idx) 511 511 continue; 512 512 513 switch ((enum ListSpecifier)i ndex)513 switch ((enum ListSpecifier)idx) 514 514 { 515 515 case NAME: 516 516 w = data->list[NAME]; … … 525 525 w = (Widget)0; /* for lint */ 526 526 } 527 527 528 for (i = 0; i < count[i ndex]; ++i)528 for (i = 0; i < count[idx]; ++i) 529 529 { 530 items[i] = XmStringCreateLocalized(list[i ndex][i]);531 XtFree(list[i ndex][i]);530 items[i] = XmStringCreateLocalized(list[idx][i]); 531 XtFree(list[idx][i]); 532 532 } 533 533 XmListDeleteAllItems(w); 534 XmListAddItems(w, items, count[i ndex], 1);535 if (data->sel[i ndex])534 XmListAddItems(w, items, count[idx], 1); 535 if (data->sel[idx]) 536 536 { 537 537 XmStringFree(items[0]); 538 items[0] = XmStringCreateLocalized(data->sel[i ndex]);538 items[0] = XmStringCreateLocalized(data->sel[idx]); 539 539 XmListSelectItem(w, items[0], False); 540 540 XmListSetBottomItem(w, items[0]); 541 541 } 542 for (i = 0; i < count[i ndex]; ++i)542 for (i = 0; i < count[idx]; ++i) 543 543 XmStringFree(items[i]); 544 544 } 545 545 } … … 695 695 int n; 696 696 XmString str; 697 697 Arg args[4]; 698 char * msg = _("no specific match");698 char *nomatch_msg = _("no specific match"); 699 699 700 700 n = 0; 701 str = XmStringCreateLocalized( msg);701 str = XmStringCreateLocalized(nomatch_msg); 702 702 XtSetArg(args[n], XmNlabelString, str); ++n; 703 703 XtSetValues(data->sample, args, n); 704 704 apply_fontlist(data->sample); 705 XmTextSetString(data->name, msg);705 XmTextSetString(data->name, nomatch_msg); 706 706 XmStringFree(str); 707 707 708 708 return False; … … 886 886 { 887 887 int i; 888 888 int max; 889 int i ndex = 0;889 int idx = 0; 890 890 int size; 891 char str[128];891 char buf[128]; 892 892 893 893 for (i = 0, max = 0; i < data->num; i++) 894 894 { 895 get_part(fn(data, i), 7, str);896 size = atoi( str);895 get_part(fn(data, i), 7, buf); 896 size = atoi(buf); 897 897 if ((size > max) && (size < MAX_DISPLAY_SIZE)) 898 898 { 899 i ndex = i;899 idx = i; 900 900 max = size; 901 901 } 902 902 } 903 strcpy(big_font, fn(data, i ndex));903 strcpy(big_font, fn(data, idx)); 904 904 } 905 905 data->old = XLoadQueryFont(XtDisplay(parent), big_font); 906 906 data->old_list = gui_motif_create_fontlist(data->old); … … 1217 1217 1218 1218 if (i != 0) 1219 1219 { 1220 char name [TEMP_BUF_SIZE];1221 char style [TEMP_BUF_SIZE];1222 char size [TEMP_BUF_SIZE];1223 char encoding [TEMP_BUF_SIZE];1220 char namebuf[TEMP_BUF_SIZE]; 1221 char stylebuf[TEMP_BUF_SIZE]; 1222 char sizebuf[TEMP_BUF_SIZE]; 1223 char encodingbuf[TEMP_BUF_SIZE]; 1224 1224 char *found; 1225 1225 1226 1226 found = names[0]; 1227 1227 1228 name_part(found, name );1229 style_part(found, style );1230 size_part(found, size , data->in_pixels);1231 encoding_part(found, encoding );1232 1233 if (strlen(name ) > 01234 && strlen(style ) > 01235 && strlen(size ) > 01236 && strlen(encoding ) > 0)1228 name_part(found, namebuf); 1229 style_part(found, stylebuf); 1230 size_part(found, sizebuf, data->in_pixels); 1231 encoding_part(found, encodingbuf); 1232 1233 if (strlen(namebuf) > 0 1234 && strlen(stylebuf) > 0 1235 && strlen(sizebuf) > 0 1236 && strlen(encodingbuf) > 0) 1237 1237 { 1238 data->sel[NAME] = XtNewString(name );1239 data->sel[STYLE] = XtNewString(style );1240 data->sel[SIZE] = XtNewString(size );1241 data->sel[ENCODING] = XtNewString(encoding );1238 data->sel[NAME] = XtNewString(namebuf); 1239 data->sel[STYLE] = XtNewString(stylebuf); 1240 data->sel[SIZE] = XtNewString(sizebuf); 1241 data->sel[ENCODING] = XtNewString(encodingbuf); 1242 1242 data->font_name = XtNewString(names[0]); 1243 1243 display_sample(data); 1244 1244 XmTextSetString(data->name, data->font_name); -
src/gui_xmebw.c
diff -Naur vim72.orig/src/gui_xmebw.c vim72/src/gui_xmebw.c
old new 1256 1256 } 1257 1257 else 1258 1258 { 1259 intadjust = 0;1259 adjust = 0; 1260 1260 1261 1261 #if !defined(LESSTIF_VERSION) && (XmVersion > 1002) 1262 1262 /* … … 1268 1268 { 1269 1269 case XmEXTERNAL_HIGHLIGHT: 1270 1270 adjust = (eb->primitive.highlight_thickness - 1271 (eb->pushbutton.default_button_shadow_thickness ?1272 Xm3D_ENHANCE_PIXEL : 0));1271 (eb->pushbutton.default_button_shadow_thickness 1272 ? Xm3D_ENHANCE_PIXEL : 0)); 1273 1273 break; 1274 1274 1275 1275 case XmINTERNAL_HIGHLIGHT: 1276 adjust = 0;1277 1276 break; 1278 1277 1279 1278 default: -
src/if_cscope.c
diff -Naur vim72.orig/src/if_cscope.c vim72/src/if_cscope.c
old new 74 74 { "add", cs_add, 75 75 N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 }, 76 76 { "find", cs_find, 77 N_("Query for a pattern"), FIND_USAGE, 1 },77 N_("Query for a pattern"), "find c|d|e|f|g|i|s|t name", 1 }, 78 78 { "help", cs_help, 79 79 N_("Show this message"), "help", 0 }, 80 80 { "kill", cs_kill, … … 1177 1177 (void)MSG_PUTS(_("cscope commands:\n")); 1178 1178 while (cmdp->name != NULL) 1179 1179 { 1180 (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"), 1181 cmdp->name, _(cmdp->help), cmdp->usage); 1180 char *help = _(cmdp->help); 1181 int space_cnt = 30 - vim_strsize((char_u *)help); 1182 1183 /* Use %*s rather than %30s to ensure proper alignment in utf-8 */ 1184 if (space_cnt < 0) 1185 space_cnt = 0; 1186 (void)smsg((char_u *)_("%-5s: %s%*s (Usage: %s)"), 1187 cmdp->name, 1188 help, space_cnt, " ", 1189 cmdp->usage); 1182 1190 if (strcmp(cmdp->name, "find") == 0) 1183 MSG_PUTS(FIND_HELP); 1191 MSG_PUTS(_("\n" 1192 " c: Find functions calling this function\n" 1193 " d: Find functions called by this function\n" 1194 " e: Find this egrep pattern\n" 1195 " f: Find this file\n" 1196 " g: Find this definition\n" 1197 " i: Find files #including this file\n" 1198 " s: Find this C symbol\n" 1199 " t: Find assignments to\n")); 1200 1184 1201 cmdp++; 1185 1202 } 1186 1203 -
src/if_cscope.h
diff -Naur vim72.orig/src/if_cscope.h vim72/src/if_cscope.h
old new 42 42 * f 7name Find this file 43 43 * i 8name Find files #including this file 44 44 */ 45 #define FIND_USAGE "find c|d|e|f|g|i|s|t name"46 #define FIND_HELP "\n\47 c: Find functions calling this function\n\48 d: Find functions called by this function\n\49 e: Find this egrep pattern\n\50 f: Find this file\n\51 g: Find this definition\n\52 i: Find files #including this file\n\53 s: Find this C symbol\n\54 t: Find assignments to\n"55 56 45 57 46 typedef struct { 58 47 char * name; -
src/if_perl.xs
diff -Naur vim72.orig/src/if_perl.xs vim72/src/if_perl.xs
old new 136 136 # define Perl_newXS_flags dll_Perl_newXS_flags 137 137 #endif 138 138 # define Perl_sv_free dll_Perl_sv_free 139 # if (PERL_REVISION == 5) && (PERL_VERSION >= 10) 140 # define Perl_sv_free2 dll_Perl_sv_free2 141 # endif 139 142 # define Perl_sv_isa dll_Perl_sv_isa 140 143 # define Perl_sv_magic dll_Perl_sv_magic 141 144 # define Perl_sv_setiv dll_Perl_sv_setiv … … 163 166 # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr 164 167 # define boot_DynaLoader dll_boot_DynaLoader 165 168 166 # define Perl_sys_init 3 dll_Perl_sys_init3169 # define Perl_sys_init dll_Perl_sys_init 167 170 # define Perl_sys_term dll_Perl_sys_term 168 171 # define Perl_ISv_ptr dll_Perl_ISv_ptr 169 172 # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr … … 268 271 static void (*boot_DynaLoader)_((pTHX_ CV*)); 269 272 270 273 #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) 271 static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env); 274 static void (*Perl_sv_free2)(pTHX_ SV*); 275 static void (*Perl_sys_init)(int* argc, char*** argv); 272 276 static void (*Perl_sys_term)(void); 273 277 static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); 274 278 static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); … … 367 371 {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr}, 368 372 {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr}, 369 373 #else 370 {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3}, 374 {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2}, 375 {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init}, 371 376 {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term}, 372 377 {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr}, 373 378 {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr}, … … 455 460 static char *argv[] = { "", "-e", "" }; 456 461 457 462 #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) 458 Perl_sys_init 3(&argc, (char***)&argv, NULL);463 Perl_sys_init(&argc, (char***)&argv); 459 464 #endif 460 465 perl_interp = perl_alloc(); 461 466 perl_construct(perl_interp); -
src/if_python.c
diff -Naur vim72.orig/src/if_python.c vim72/src/if_python.c
old new 531 531 if (PythonMod_Init()) 532 532 goto fail; 533 533 534 /* Remove the element from sys.path that was added because of our 535 * argv[0] value in PythonMod_Init(). Previously we used an empty 536 * string, but dependinding on the OS we then get an empty entry or 537 * the current directory in sys.path. */ 538 PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); 539 534 540 /* the first python thread is vim's, release the lock */ 535 541 Python_SaveThread(); 536 542 … … 1145 1151 1146 1152 /* Check if we run into a recursive loop. The item must be in lookupDict 1147 1153 * then and we can use it again. */ 1148 sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, (long_u)our_tv); 1149 result = PyDict_GetItemString(lookupDict, ptrBuf); 1150 if (result != NULL) 1151 Py_INCREF(result); 1152 else if (our_tv->v_type == VAR_STRING) 1154 if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL) 1155 || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL)) 1156 { 1157 sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, 1158 our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list 1159 : (long_u)our_tv->vval.v_dict); 1160 result = PyDict_GetItemString(lookupDict, ptrBuf); 1161 if (result != NULL) 1162 { 1163 Py_INCREF(result); 1164 return result; 1165 } 1166 } 1167 1168 if (our_tv->v_type == VAR_STRING) 1153 1169 { 1154 1170 result = Py_BuildValue("s", our_tv->vval.v_string); 1155 PyDict_SetItemString(lookupDict, ptrBuf, result);1156 1171 } 1157 1172 else if (our_tv->v_type == VAR_NUMBER) 1158 1173 { … … 1161 1176 /* For backwards compatibility numbers are stored as strings. */ 1162 1177 sprintf(buf, "%ld", (long)our_tv->vval.v_number); 1163 1178 result = Py_BuildValue("s", buf); 1164 PyDict_SetItemString(lookupDict, ptrBuf, result);1165 1179 } 1166 1180 # ifdef FEAT_FLOAT 1167 1181 else if (our_tv->v_type == VAR_FLOAT) … … 1170 1184 1171 1185 sprintf(buf, "%f", our_tv->vval.v_float); 1172 1186 result = Py_BuildValue("s", buf); 1173 PyDict_SetItemString(lookupDict, ptrBuf, result);1174 1187 } 1175 1188 # endif 1176 1189 else if (our_tv->v_type == VAR_LIST) … … 1179 1192 listitem_T *curr; 1180 1193 1181 1194 result = PyList_New(0); 1182 PyDict_SetItemString(lookupDict, ptrBuf, result);1183 1195 1184 1196 if (list != NULL) 1185 1197 { 1198 PyDict_SetItemString(lookupDict, ptrBuf, result); 1199 1186 1200 for (curr = list->lv_first; curr != NULL; curr = curr->li_next) 1187 1201 { 1188 1202 newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict); … … 1194 1208 else if (our_tv->v_type == VAR_DICT) 1195 1209 { 1196 1210 result = PyDict_New(); 1197 PyDict_SetItemString(lookupDict, ptrBuf, result);1198 1211 1199 1212 if (our_tv->vval.v_dict != NULL) 1200 1213 { … … 1203 1216 hashitem_T *hi; 1204 1217 dictitem_T *di; 1205 1218 1219 PyDict_SetItemString(lookupDict, ptrBuf, result); 1220 1206 1221 for (hi = ht->ht_array; todo > 0; ++hi) 1207 1222 { 1208 1223 if (!HASHITEM_EMPTY(hi)) … … 2345 2360 { 2346 2361 PyObject *mod; 2347 2362 PyObject *dict; 2348 static char *(argv[2]) = {"", NULL}; 2363 /* The special value is removed from sys.path in Python_Init(). */ 2364 static char *(argv[2]) = {"/must>not&exist/foo", NULL}; 2349 2365 2350 2366 /* Fixups... */ 2351 2367 BufferType.ob_type = &PyType_Type; -
src/if_xcmdsrv.c
diff -Naur vim72.orig/src/if_xcmdsrv.c vim72/src/if_xcmdsrv.c
old new 736 736 + serverReply.ga_len; 737 737 e.id = w; 738 738 ga_init2(&e.strings, 1, 100); 739 m emcpy(p, &e, sizeof(e));739 mch_memmove(p, &e, sizeof(e)); 740 740 serverReply.ga_len++; 741 741 } 742 742 } … … 1018 1018 p++; 1019 1019 count = numItems - (p - regProp); 1020 1020 if (count > 0) 1021 m emcpy(entry, p, count);1021 mch_memmove(entry, p, count); 1022 1022 XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING, 1023 1023 8, PropModeReplace, regProp, 1024 1024 (int)(numItems - (p - entry))); … … 1072 1072 p++; 1073 1073 lastHalf = numItems - (p - regProp); 1074 1074 if (lastHalf > 0) 1075 m emcpy(entry, p, lastHalf);1075 mch_memmove(entry, p, lastHalf); 1076 1076 numItems = (entry - regProp) + lastHalf; 1077 1077 p = entry; 1078 1078 continue; -
src/main.c
diff -Naur vim72.orig/src/main.c vim72/src/main.c
old new 645 645 646 646 #ifdef FEAT_VIMINFO 647 647 /* 648 * Read in registers, history etc, but not marks, from the viminfo file 648 * Read in registers, history etc, but not marks, from the viminfo file. 649 * This is where v:oldfiles gets filled. 649 650 */ 650 651 if (*p_viminfo != NUL) 651 652 { 652 read_viminfo(NULL, TRUE, FALSE, FALSE);653 read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES); 653 654 TIME_MSG("reading viminfo"); 654 655 } 655 656 #endif … … 1457 1458 ++initstr; 1458 1459 } 1459 1460 1460 if (TOLOWER_ASC(initstr[0]) == 'g' || initstr[0] == 'k') 1461 /* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */ 1462 if (TOLOWER_ASC(initstr[0]) == 'g') 1461 1463 { 1462 1464 main_start_gui(); 1463 1465 #ifdef FEAT_GUI … … 1508 1510 early_arg_scan(parmp) 1509 1511 mparm_T *parmp; 1510 1512 { 1511 #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) 1513 #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \ 1514 || !defined(FEAT_NETBEANS_INTG) 1512 1515 int argc = parmp->argc; 1513 1516 char **argv = parmp->argv; 1514 1517 int i; … … 1580 1583 else if (STRICMP(argv[i], "--echo-wid") == 0) 1581 1584 echo_wid_arg = TRUE; 1582 1585 # endif 1586 # ifndef FEAT_NETBEANS_INTG 1587 else if (strncmp(argv[i], "-nb", (size_t)3) == 0) 1588 { 1589 mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n")); 1590 mch_exit(2); 1591 } 1592 # endif 1593 1583 1594 } 1584 1595 #endif 1585 1596 } … … 2361 2372 * Is there any other system that cannot do this? 2362 2373 */ 2363 2374 close(0); 2364 dup(2);2375 ignored = dup(2); 2365 2376 #endif 2366 2377 } 2367 2378 -
src/mark.c
diff -Naur vim72.orig/src/mark.c vim72/src/mark.c
old new 1627 1627 1628 1628 /* 1629 1629 * Handle marks in the viminfo file: 1630 * fp_out == NULL read marks for current buffer only 1631 * fp_out != NULL copy marks for buffers not in buffer list 1630 * fp_out != NULL: copy marks for buffers not in buffer list 1631 * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only 1632 * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles 1632 1633 */ 1633 1634 void 1634 copy_viminfo_marks(virp, fp_out, count, eof )1635 copy_viminfo_marks(virp, fp_out, count, eof, flags) 1635 1636 vir_T *virp; 1636 1637 FILE *fp_out; 1637 1638 int count; 1638 1639 int eof; 1640 int flags; 1639 1641 { 1640 1642 char_u *line = virp->vir_line; 1641 1643 buf_T *buf; … … 1647 1649 char_u *p; 1648 1650 char_u *name_buf; 1649 1651 pos_T pos; 1652 #ifdef FEAT_EVAL 1653 list_T *list = NULL; 1654 #endif 1650 1655 1651 1656 if ((name_buf = alloc(LSIZE)) == NULL) 1652 1657 return; 1653 1658 *name_buf = NUL; 1659 1660 #ifdef FEAT_EVAL 1661 if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT))) 1662 { 1663 list = list_alloc(); 1664 if (list != NULL) 1665 set_vim_var_list(VV_OLDFILES, list); 1666 } 1667 #endif 1668 1654 1669 num_marked_files = get_viminfo_parameter('\''); 1655 1670 while (!eof && (count < num_marked_files || fp_out == NULL)) 1656 1671 { … … 1681 1696 p++; 1682 1697 *p = NUL; 1683 1698 1699 #ifdef FEAT_EVAL 1700 if (list != NULL) 1701 list_append_string(list, str, -1); 1702 #endif 1703 1684 1704 /* 1685 1705 * If fp_out == NULL, load marks for current buffer. 1686 1706 * If fp_out != NULL, copy marks for buffers not in buflist. … … 1688 1708 load_marks = copy_marks_out = FALSE; 1689 1709 if (fp_out == NULL) 1690 1710 { 1691 if ( curbuf->b_ffname != NULL)1711 if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL) 1692 1712 { 1693 1713 if (*name_buf == NUL) /* only need to do this once */ 1694 1714 home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE); -
src/mbyte.c
diff -Naur vim72.orig/src/mbyte.c vim72/src/mbyte.c
old new 717 717 * where mblen() returns 0 for invalid character. 718 718 * Therefore, following condition includes 0. 719 719 */ 720 (void)mblen(NULL, 0); /* First reset the state. */720 ignored = mblen(NULL, 0); /* First reset the state. */ 721 721 if (mblen(buf, (size_t)1) <= 0) 722 722 n = 2; 723 723 else … … 2540 2540 return (int)(p - q); 2541 2541 } 2542 2542 2543 #if defined(FEAT_EVAL) || defined(PROTO)2544 2543 /* 2545 2544 * Copy a character from "*fp" to "*tp" and advance the pointers. 2546 2545 */ … … 2555 2554 *tp += l; 2556 2555 *fp += l; 2557 2556 } 2558 #endif2559 2557 2560 2558 /* 2561 2559 * Return the offset from "p" to the first byte of a character. When "p" is … … 3133 3131 else 3134 3132 s = p + 1; 3135 3133 } 3136 for (i = 0; s[i] != NUL && s + i < buf +sizeof(buf) - 1; ++i)3134 for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i) 3137 3135 { 3138 3136 if (s[i] == '_' || s[i] == '-') 3139 3137 buf[i] = '-'; … … 5280 5278 5281 5279 /*ARGSUSED*/ 5282 5280 static void 5283 preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data)5281 preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data) 5284 5282 { 5285 5283 #ifdef XIM_DEBUG 5286 5284 xim_log("xim_decide_input_style()\n"); … … 5314 5312 5315 5313 /*ARGSUSED*/ 5316 5314 static void 5317 preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data)5315 preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data) 5318 5316 { 5319 5317 XIMPreeditDrawCallbackStruct *draw_data; 5320 5318 XIMText *text; … … 5386 5384 draw_feedback = (char *)alloc(draw_data->chg_first 5387 5385 + text->length); 5388 5386 else 5389 draw_feedback = realloc(draw_feedback,5387 draw_feedback = vim_realloc(draw_feedback, 5390 5388 draw_data->chg_first + text->length); 5391 5389 if (draw_feedback != NULL) 5392 5390 { … … 5455 5453 5456 5454 /*ARGSUSED*/ 5457 5455 static void 5458 preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data)5456 preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data) 5459 5457 { 5460 5458 #ifdef XIM_DEBUG 5461 5459 xim_log("preedit_caret_cbproc()\n"); … … 5464 5462 5465 5463 /*ARGSUSED*/ 5466 5464 static void 5467 preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data)5465 preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data) 5468 5466 { 5469 5467 #ifdef XIM_DEBUG 5470 5468 xim_log("preedit_done_cbproc()\n"); -
src/menu.c
diff -Naur vim72.orig/src/menu.c vim72/src/menu.c
old new 1120 1120 parent = menu; 1121 1121 menu = menu->children; 1122 1122 } 1123 vim_free(path_name); 1123 1124 1124 1125 /* Now we have found the matching menu, and we list the mappings */ 1125 1126 /* Highlight title */ -
src/message.c
diff -Naur vim72.orig/src/message.c vim72/src/message.c
old new 4556 4556 remove_trailing_zeroes = TRUE; 4557 4557 } 4558 4558 4559 if (fmt_spec == 'f' && abs_f > 1.0e307) 4559 if (fmt_spec == 'f' && 4560 #ifdef VAX 4561 abs_f > 1.0e38 4562 #else 4563 abs_f > 1.0e307 4564 #endif 4565 ) 4560 4566 { 4561 4567 /* Avoid a buffer overflow */ 4562 4568 strcpy(tmp, "inf"); … … 4585 4591 if (remove_trailing_zeroes) 4586 4592 { 4587 4593 int i; 4588 char * p;4594 char *tp; 4589 4595 4590 4596 /* Using %g or %G: remove superfluous zeroes. */ 4591 4597 if (fmt_spec == 'f') 4592 p = tmp + str_arg_l - 1;4598 tp = tmp + str_arg_l - 1; 4593 4599 else 4594 4600 { 4595 p = (char *)vim_strchr((char_u *)tmp,4601 tp = (char *)vim_strchr((char_u *)tmp, 4596 4602 fmt_spec == 'e' ? 'e' : 'E'); 4597 if ( p != NULL)4603 if (tp != NULL) 4598 4604 { 4599 4605 /* Remove superfluous '+' and leading 4600 4606 * zeroes from the exponent. */ 4601 if ( p[1] == '+')4607 if (tp[1] == '+') 4602 4608 { 4603 4609 /* Change "1.0e+07" to "1.0e07" */ 4604 STRMOVE( p + 1,p + 2);4610 STRMOVE(tp + 1, tp + 2); 4605 4611 --str_arg_l; 4606 4612 } 4607 i = ( p[1] == '-') ? 2 : 1;4608 while ( p[i] == '0')4613 i = (tp[1] == '-') ? 2 : 1; 4614 while (tp[i] == '0') 4609 4615 { 4610 4616 /* Change "1.0e07" to "1.0e7" */ 4611 STRMOVE( p + i,p + i + 1);4617 STRMOVE(tp + i, tp + i + 1); 4612 4618 --str_arg_l; 4613 4619 } 4614 -- p;4620 --tp; 4615 4621 } 4616 4622 } 4617 4623 4618 if ( p != NULL && !precision_specified)4624 if (tp != NULL && !precision_specified) 4619 4625 /* Remove trailing zeroes, but keep the one 4620 4626 * just after a dot. */ 4621 while (p > tmp + 2 && *p == '0' && p[-1] != '.') 4627 while (tp > tmp + 2 && *tp == '0' 4628 && tp[-1] != '.') 4622 4629 { 4623 STRMOVE( p,p + 1);4624 -- p;4630 STRMOVE(tp, tp + 1); 4631 --tp; 4625 4632 --str_arg_l; 4626 4633 } 4627 4634 } 4628 4635 else 4629 4636 { 4630 char * p;4637 char *tp; 4631 4638 4632 4639 /* Be consistent: some printf("%e") use 1.0e+12 4633 4640 * and some 1.0e+012. Remove one zero in the last 4634 4641 * case. */ 4635 p = (char *)vim_strchr((char_u *)tmp,4642 tp = (char *)vim_strchr((char_u *)tmp, 4636 4643 fmt_spec == 'e' ? 'e' : 'E'); 4637 if ( p != NULL && (p[1] == '+' ||p[1] == '-')4638 && p[2] == '0'4639 && vim_isdigit( p[3])4640 && vim_isdigit( p[4]))4644 if (tp != NULL && (tp[1] == '+' || tp[1] == '-') 4645 && tp[2] == '0' 4646 && vim_isdigit(tp[3]) 4647 && vim_isdigit(tp[4])) 4641 4648 { 4642 STRMOVE( p + 2,p + 3);4649 STRMOVE(tp + 2, tp + 3); 4643 4650 --str_arg_l; 4644 4651 } 4645 4652 } -
src/misc1.c
diff -Naur vim72.orig/src/misc1.c vim72/src/misc1.c
old new 3245 3245 3246 3246 /* When using ":silent" assume that <CR> was entered. */ 3247 3247 if (mouse_used != NULL) 3248 MSG_PUTS(_("Type number or click with mouse (<Enter>cancels): "));3248 MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): ")); 3249 3249 else 3250 MSG_PUTS(_(" Choice number (<Enter>cancels): "));3250 MSG_PUTS(_("Type number and <Enter> (empty cancels): ")); 3251 3251 3252 3252 /* Set the state such that text can be selected/copied/pasted and we still 3253 3253 * get mouse events. */ -
src/misc2.c
diff -Naur vim72.orig/src/misc2.c vim72/src/misc2.c
old new 873 873 /* 3. check for available memory: call mch_avail_mem() */ 874 874 if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing) 875 875 { 876 vim_free((char *)p); /* System is low... no go! */876 free((char *)p); /* System is low... no go! */ 877 877 p = NULL; 878 878 } 879 879 else … … 1257 1257 return escaped_string; 1258 1258 } 1259 1259 1260 #if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)1261 1260 /* 1262 1261 * Return TRUE when 'shell' has "csh" in the tail. 1263 1262 */ … … 1266 1265 { 1267 1266 return (strstr((char *)gettail(p_sh), "csh") != NULL); 1268 1267 } 1269 #endif1270 1268 1271 #if defined(FEAT_EVAL) || defined(PROTO)1272 1269 /* 1273 1270 * Escape "string" for use as a shell argument with system(). 1274 1271 * This uses single quotes, except when we know we need to use double qoutes … … 1391 1388 1392 1389 return escaped_string; 1393 1390 } 1394 #endif1395 1391 1396 1392 /* 1397 1393 * Like vim_strsave(), but make all characters uppercase. … … 2565 2561 int key; 2566 2562 int dlen = 0; 2567 2563 2568 key = find_special_key(srcp, &modifiers, keycode );2564 key = find_special_key(srcp, &modifiers, keycode, FALSE); 2569 2565 if (key == 0) 2570 2566 return 0; 2571 2567 … … 2601 2597 * returns 0 if there is no match. 2602 2598 */ 2603 2599 int 2604 find_special_key(srcp, modp, keycode )2600 find_special_key(srcp, modp, keycode, keep_x_key) 2605 2601 char_u **srcp; 2606 2602 int *modp; 2607 int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ 2603 int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ 2604 int keep_x_key; /* don't translate xHome to Home key */ 2608 2605 { 2609 2606 char_u *last_dash; 2610 2607 char_u *end_of_name; … … 2672 2669 else 2673 2670 { 2674 2671 key = get_special_key_code(last_dash + 1); 2675 key = handle_x_keys(key); 2672 if (!keep_x_key) 2673 key = handle_x_keys(key); 2676 2674 } 2677 2675 2678 2676 /* … … 4698 4696 stackp->ffs_filearray_cur = i + 1; 4699 4697 ff_push(search_ctx, stackp); 4700 4698 4701 simplify_filename(file_path); 4699 if (!path_with_url(file_path)) 4700 simplify_filename(file_path); 4702 4701 if (mch_dirname(ff_expand_buffer, MAXPATHL) 4703 4702 == OK) 4704 4703 { -
src/move.c
diff -Naur vim72.orig/src/move.c vim72/src/move.c
old new 280 280 281 281 if (curwin->w_botline <= curbuf->b_ml.ml_line_count) 282 282 { 283 if (curwin->w_cursor.lnum < curwin->w_botline 284 && ((long)curwin->w_cursor.lnum 283 if (curwin->w_cursor.lnum < curwin->w_botline) 284 { 285 if (((long)curwin->w_cursor.lnum 285 286 >= (long)curwin->w_botline - p_so 286 287 #ifdef FEAT_FOLDING 287 288 || hasAnyFolding(curwin) 288 289 #endif 289 290 )) 290 {291 { 291 292 lineoff_T loff; 292 293 293 /* Cursor is above botline, check if there are 'scrolloff' 294 * window lines below the cursor. If not, need to scroll. */ 294 /* Cursor is (a few lines) above botline, check if there are 295 * 'scrolloff' window lines below the cursor. If not, need to 296 * scroll. */ 295 297 n = curwin->w_empty_rows; 296 298 loff.lnum = curwin->w_cursor.lnum; 297 299 #ifdef FEAT_FOLDING … … 317 319 if (n >= p_so) 318 320 /* sufficient context, no need to scroll */ 319 321 check_botline = FALSE; 322 } 323 else 324 /* sufficient context, no need to scroll */ 325 check_botline = FALSE; 320 326 } 321 327 if (check_botline) 322 328 { … … 509 515 /* Approximate the value of w_botline */ 510 516 wp->w_botline += lnum - wp->w_topline; 511 517 wp->w_topline = lnum; 518 #ifdef FEAT_AUTOCMD 519 wp->w_topline_was_set = TRUE; 520 #endif 512 521 #ifdef FEAT_DIFF 513 522 wp->w_topfill = 0; 514 523 #endif -
src/netbeans.c
diff -Naur vim72.orig/src/netbeans.c vim72/src/netbeans.c
old new 1043 1043 nbdebug(("EVT: %s", buf)); 1044 1044 /* nb_send(buf, "netbeans_end"); avoid "write failed" messages */ 1045 1045 if (sd >= 0) 1046 sock_write(sd, buf, (int)STRLEN(buf)); /* ignore errors */1046 ignored = sock_write(sd, buf, (int)STRLEN(buf)); 1047 1047 } 1048 1048 } 1049 1049 … … 2277 2277 int serNum; 2278 2278 int localTypeNum; 2279 2279 int typeNum; 2280 # ifdef NBDEBUG2281 int len;2282 # endif2283 2280 pos_T *pos; 2284 2281 2285 2282 if (buf == NULL || buf->bufp == NULL) … … 2303 2300 pos = get_off_or_lnum(buf->bufp, &args); 2304 2301 2305 2302 cp = (char *)args; 2306 # ifdef NBDEBUG 2307 len = 2308 # endif 2309 strtol(cp, &cp, 10); 2303 ignored = (int)strtol(cp, &cp, 10); 2310 2304 args = (char_u *)cp; 2311 2305 # ifdef NBDEBUG 2312 if ( len!= -1)2306 if (ignored != -1) 2313 2307 { 2314 2308 nbdebug((" partial line annotation -- Not Yet Implemented!\n")); 2315 2309 } … … 2924 2918 } 2925 2919 2926 2920 /* 2927 * Tell netbeans a file was closed.2921 * Tell netbeans that a file was deleted or wiped out. 2928 2922 */ 2929 2923 void 2930 netbeans_file_ closed(buf_T *bufp)2924 netbeans_file_killed(buf_T *bufp) 2931 2925 { 2932 2926 int bufno = nb_getbufno(bufp); 2933 2927 nbbuf_T *nbbuf = nb_get_buf(bufno); 2934 2928 char buffer[2*MAXPATHL]; 2935 2929 2936 if (!haveConnection || bufno < 0) 2937 return; 2938 2939 if (!netbeansCloseFile) 2940 { 2941 nbdebug(("Ignoring file_closed for %s. File was closed from IDE\n", 2942 bufp->b_ffname)); 2930 if (!haveConnection || bufno == -1) 2943 2931 return; 2944 }2945 2946 nbdebug(("netbeans_file_closed:\n"));2947 nbdebug((" Closing bufno: %d", bufno));2948 if (curbuf != NULL && curbuf != bufp)2949 {2950 nbdebug((" Curbuf bufno: %d\n", nb_getbufno(curbuf)));2951 }2952 else if (curbuf == bufp)2953 {2954 nbdebug((" curbuf == bufp\n"));2955 }2956 2932 2957 if (bufno <= 0)2958 return;2933 nbdebug(("netbeans_file_killed:\n")); 2934 nbdebug((" Killing bufno: %d", bufno)); 2959 2935 2960 2936 sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno); 2961 2937 2962 2938 nbdebug(("EVT: %s", buffer)); 2963 2939 2964 nb_send(buffer, "netbeans_file_ closed");2940 nb_send(buffer, "netbeans_file_killed"); 2965 2941 2966 2942 if (nbbuf != NULL) 2967 2943 nbbuf->bufp = NULL; -
src/normal.c
diff -Naur vim72.orig/src/normal.c vim72/src/normal.c
old new 183 183 static void nv_cursorhold __ARGS((cmdarg_T *cap)); 184 184 #endif 185 185 186 static char *e_noident = N_("E349: No identifier under cursor"); 187 186 188 /* 187 189 * Function to be called for a Normal or Visual mode command. 188 190 * The argument is a cmdarg_T. … … 578 580 static int old_mapped_len = 0; 579 581 #endif 580 582 int idx; 583 #ifdef FEAT_EVAL 584 int set_prevcount = FALSE; 585 #endif 581 586 582 587 vim_memset(&ca, 0, sizeof(ca)); /* also resets ca.retval */ 583 588 ca.oap = oap; … … 613 618 /* When not finishing an operator and no register name typed, reset the 614 619 * count. */ 615 620 if (!finish_op && !oap->regname) 621 { 616 622 ca.opcount = 0; 623 #ifdef FEAT_EVAL 624 set_prevcount = TRUE; 625 #endif 626 } 617 627 618 628 #ifdef FEAT_AUTOCMD 619 629 /* Restore counts from before receiving K_CURSORHOLD. This means after … … 717 727 * command, so that v:count can be used in an expression mapping 718 728 * right after the count. */ 719 729 if (toplevel && stuff_empty()) 720 set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0); 730 { 731 long count = ca.count0; 732 733 /* multiply with ca.opcount the same way as below */ 734 if (ca.opcount != 0) 735 count = ca.opcount * (count == 0 ? 1 : count); 736 set_vcount(count, count == 0 ? 1 : count, set_prevcount); 737 set_prevcount = FALSE; /* only set v:prevcount once */ 738 } 721 739 #endif 722 740 if (ctrl_w) 723 741 { … … 804 822 * Only set v:count when called from main() and not a stuffed command. 805 823 */ 806 824 if (toplevel && stuff_empty()) 807 set_vcount(ca.count0, ca.count1 );825 set_vcount(ca.count0, ca.count1, set_prevcount); 808 826 #endif 809 827 810 828 /* … … 1132 1150 out_flush(); 1133 1151 #endif 1134 1152 #ifdef FEAT_AUTOCMD 1135 did_cursorhold = FALSE; 1153 if (ca.cmdchar != K_IGNORE) 1154 did_cursorhold = FALSE; 1136 1155 #endif 1137 1156 1138 1157 State = NORMAL; … … 3509 3528 if (find_type & FIND_STRING) 3510 3529 EMSG(_("E348: No string under cursor")); 3511 3530 else 3512 EMSG(_( "E349: No identifier under cursor"));3531 EMSG(_(e_noident)); 3513 3532 return 0; 3514 3533 } 3515 3534 ptr += col; … … 5469 5488 STRCPY(buf, "he! "); 5470 5489 else 5471 5490 { 5491 /* An external command will probably use an argument starting 5492 * with "-" as an option. To avoid trouble we skip the "-". */ 5493 while (*ptr == '-' && n > 0) 5494 { 5495 ++ptr; 5496 --n; 5497 } 5498 if (n == 0) 5499 { 5500 EMSG(_(e_noident)); /* found dashes only */ 5501 vim_free(buf); 5502 return; 5503 } 5504 5472 5505 /* When a count is given, turn it into a range. Is this 5473 5506 * really what we want? */ 5474 5507 isman = (STRCMP(kp, "man") == 0); … … 5511 5544 /* 5512 5545 * Now grab the chars in the identifier 5513 5546 */ 5514 if (cmdchar == '*') 5515 aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); 5516 else if (cmdchar == '#') 5517 aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); 5518 else if (cmdchar == 'K' && !kp_help) 5519 aux_ptr = (char_u *)" \t\\\"|!"; 5520 else 5521 /* Don't escape spaces and Tabs in a tag with a backslash */ 5522 aux_ptr = (char_u *)"\\|\""; 5523 5524 p = buf + STRLEN(buf); 5525 while (n-- > 0) 5526 { 5527 /* put a backslash before \ and some others */ 5528 if (vim_strchr(aux_ptr, *ptr) != NULL) 5529 *p++ = '\\'; 5530 #ifdef FEAT_MBYTE 5531 /* When current byte is a part of multibyte character, copy all bytes 5532 * of that character. */ 5533 if (has_mbyte) 5547 if (cmdchar == 'K' && !kp_help) 5548 { 5549 /* Escape the argument properly for a shell command */ 5550 ptr = vim_strnsave(ptr, n); 5551 p = vim_strsave_shellescape(ptr, TRUE); 5552 vim_free(ptr); 5553 if (p == NULL) 5534 5554 { 5535 int i; 5536 int len = (*mb_ptr2len)(ptr) - 1; 5537 5538 for (i = 0; i < len && n >= 1; ++i, --n) 5539 *p++ = *ptr++; 5555 vim_free(buf); 5556 return; 5540 5557 } 5558 buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1); 5559 if (buf == NULL) 5560 { 5561 vim_free(buf); 5562 vim_free(p); 5563 return; 5564 } 5565 STRCAT(buf, p); 5566 vim_free(p); 5567 } 5568 else 5569 { 5570 if (cmdchar == '*') 5571 aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); 5572 else if (cmdchar == '#') 5573 aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); 5574 else 5575 /* Don't escape spaces and Tabs in a tag with a backslash */ 5576 aux_ptr = (char_u *)"\\|\"\n*?["; 5577 5578 p = buf + STRLEN(buf); 5579 while (n-- > 0) 5580 { 5581 /* put a backslash before \ and some others */ 5582 if (vim_strchr(aux_ptr, *ptr) != NULL) 5583 *p++ = '\\'; 5584 #ifdef FEAT_MBYTE 5585 /* When current byte is a part of multibyte character, copy all 5586 * bytes of that character. */ 5587 if (has_mbyte) 5588 { 5589 int i; 5590 int len = (*mb_ptr2len)(ptr) - 1; 5591 5592 for (i = 0; i < len && n >= 1; ++i, --n) 5593 *p++ = *ptr++; 5594 } 5541 5595 #endif 5542 *p++ = *ptr++; 5596 *p++ = *ptr++; 5597 } 5598 *p = NUL; 5543 5599 } 5544 *p = NUL;5545 5600 5546 5601 /* 5547 5602 * Execute the command. -
src/ops.c
diff -Naur vim72.orig/src/ops.c vim72/src/ops.c
old new 2209 2209 { 2210 2210 for (; pos.lnum <= oap->end.lnum; ++pos.lnum) 2211 2211 { 2212 int one_change; 2213 2212 2214 block_prep(oap, &bd, pos.lnum, FALSE); 2213 2215 pos.col = bd.textcol; 2214 did_change = swapchars(oap->op_type, &pos, bd.textlen); 2216 one_change = swapchars(oap->op_type, &pos, bd.textlen); 2217 did_change |= one_change; 2215 2218 2216 2219 # ifdef FEAT_NETBEANS_INTG 2217 if (usingNetbeans && did_change)2220 if (usingNetbeans && one_change) 2218 2221 { 2219 2222 char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE); 2220 2223 -
src/option.c
diff -Naur vim72.orig/src/option.c vim72/src/option.c
old new 2593 2593 #ifdef FEAT_VIMINFO 2594 2594 (char_u *)&p_viminfo, PV_NONE, 2595 2595 #if defined(MSDOS) || defined(MSWIN) || defined(OS2) 2596 {(char_u *)"", (char_u *)"' 20,<50,s10,h,rA:,rB:"}2596 {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"} 2597 2597 #else 2598 2598 # ifdef AMIGA 2599 2599 {(char_u *)"", 2600 (char_u *)"' 20,<50,s10,h,rdf0:,rdf1:,rdf2:"}2600 (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"} 2601 2601 # else 2602 {(char_u *)"", (char_u *)"' 20,<50,s10,h"}2602 {(char_u *)"", (char_u *)"'100,<50,s10,h"} 2603 2603 # endif 2604 2604 #endif 2605 2605 #else … … 7974 7974 else /* curwin->w_p_scr > curwin->w_height */ 7975 7975 curwin->w_p_scr = curwin->w_height; 7976 7976 } 7977 if (p_hi < 0) 7978 { 7979 errmsg = e_positive; 7980 p_hi = 0; 7981 } 7977 7982 if (p_report < 0) 7978 7983 { 7979 7984 errmsg = e_positive; … … 8227 8232 { 8228 8233 if (number == 0 && string != NULL) 8229 8234 { 8230 int i ndex;8235 int idx; 8231 8236 8232 8237 /* Either we are given a string or we are setting option 8233 8238 * to zero. */ 8234 for (i ndex = 0; string[index] == '0'; ++index)8239 for (idx = 0; string[idx] == '0'; ++idx) 8235 8240 ; 8236 if (string[i ndex] != NUL || index == 0)8241 if (string[idx] != NUL || idx == 0) 8237 8242 { 8238 8243 /* There's another character after zeros or the string 8239 8244 * is empty. In both cases, we are trying to set a … … 8323 8328 { 8324 8329 --arg; /* put arg at the '<' */ 8325 8330 modifiers = 0; 8326 key = find_special_key(&arg, &modifiers, TRUE );8331 key = find_special_key(&arg, &modifiers, TRUE, TRUE); 8327 8332 if (modifiers) /* can't handle modifiers here */ 8328 8333 key = 0; 8329 8334 } -
src/os_unix.c
diff -Naur vim72.orig/src/os_unix.c vim72/src/os_unix.c
old new 315 315 {-1, "Unknown!", FALSE} 316 316 }; 317 317 318 /* 319 * Write s[len] to the screen. 320 */ 318 321 void 319 322 mch_write(s, len) 320 323 char_u *s; 321 324 int len; 322 325 { 323 write(1, (char *)s, len);326 ignored = (int)write(1, (char *)s, len); 324 327 if (p_wd) /* Unix is too fast, slow down a bit more */ 325 328 RealWaitForChar(read_cmd_fd, p_wd, NULL); 326 329 } … … 2905 2908 * Ignore any errors. 2906 2909 */ 2907 2910 #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK) 2908 signal_stack = malloc(SIGSTKSZ);2911 signal_stack = (char *)alloc(SIGSTKSZ); 2909 2912 init_signal_stack(); 2910 2913 #endif 2911 2914 } … … 2936 2939 } 2937 2940 # endif 2938 2941 # endif 2939 # ifdef FEAT_X11 2942 /* Don't close the display for GTK 1, it is done in exit(). */ 2943 # if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2)) 2940 2944 if (x11_display != NULL 2941 2945 # ifdef FEAT_XCLIPBOARD 2942 2946 && x11_display != xterm_dpy … … 3926 3930 */ 3927 3931 if (fd >= 0) 3928 3932 { 3929 dup(fd); /* To replace stdin (file descriptor0) */3930 dup(fd); /* To replace stdout (file descriptor1) */3931 dup(fd); /* To replace stderr (file descriptor2) */3933 ignored = dup(fd); /* To replace stdin (fd 0) */ 3934 ignored = dup(fd); /* To replace stdout (fd 1) */ 3935 ignored = dup(fd); /* To replace stderr (fd 2) */ 3932 3936 3933 3937 /* Don't need this now that we've duplicated it */ 3934 3938 close(fd); … … 3996 4000 3997 4001 /* set up stdin/stdout/stderr for the child */ 3998 4002 close(0); 3999 dup(pty_slave_fd);4003 ignored = dup(pty_slave_fd); 4000 4004 close(1); 4001 dup(pty_slave_fd);4005 ignored = dup(pty_slave_fd); 4002 4006 if (gui.in_use) 4003 4007 { 4004 4008 close(2); 4005 dup(pty_slave_fd);4009 ignored = dup(pty_slave_fd); 4006 4010 } 4007 4011 4008 4012 close(pty_slave_fd); /* has been dupped, close it now */ … … 4013 4017 /* set up stdin for the child */ 4014 4018 close(fd_toshell[1]); 4015 4019 close(0); 4016 dup(fd_toshell[0]);4020 ignored = dup(fd_toshell[0]); 4017 4021 close(fd_toshell[0]); 4018 4022 4019 4023 /* set up stdout for the child */ 4020 4024 close(fd_fromshell[0]); 4021 4025 close(1); 4022 dup(fd_fromshell[1]);4026 ignored = dup(fd_fromshell[1]); 4023 4027 close(fd_fromshell[1]); 4024 4028 4025 4029 # ifdef FEAT_GUI … … 4027 4031 { 4028 4032 /* set up stderr for the child */ 4029 4033 close(2); 4030 dup(1);4034 ignored = dup(1); 4031 4035 } 4032 4036 # endif 4033 4037 } … … 4158 4162 && (lnum != 4159 4163 curbuf->b_ml.ml_line_count 4160 4164 || curbuf->b_p_eol))) 4161 write(toshell_fd, "\n", (size_t)1); 4165 ignored = write(toshell_fd, "\n", 4166 (size_t)1); 4162 4167 ++lnum; 4163 4168 if (lnum > curbuf->b_op_end.lnum) 4164 4169 { … … 6814 6819 if (xsmp_icefd != -1) 6815 6820 { 6816 6821 SmcCloseConnection(xsmp.smcconn, 0, NULL); 6817 vim_free(xsmp.clientid); 6822 if (xsmp.clientid != NULL) 6823 free(xsmp.clientid); 6818 6824 xsmp.clientid = NULL; 6819 6825 xsmp_icefd = -1; 6820 6826 } -
src/proto/eval.pro
diff -Naur vim72.orig/src/proto/eval.pro vim72/src/proto/eval.pro
old new 17 17 int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip)); 18 18 char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip)); 19 19 int skip_expr __ARGS((char_u **pp)); 20 char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));20 char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert)); 21 21 char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox)); 22 22 int eval_to_number __ARGS((char_u *expr)); 23 23 list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr)); … … 46 46 void list_unref __ARGS((list_T *l)); 47 47 void list_free __ARGS((list_T *l, int recurse)); 48 48 dictitem_T *dict_lookup __ARGS((hashitem_T *hi)); 49 char_u *list_find_str __ARGS((list_T *l, long idx)); 49 50 int list_append_dict __ARGS((list_T *list, dict_T *dict)); 51 int list_append_string __ARGS((list_T *l, char_u *str, int len)); 50 52 int garbage_collect __ARGS((void)); 51 53 dict_T *dict_alloc __ARGS((void)); 52 54 int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str)); … … 58 60 void set_vim_var_nr __ARGS((int idx, long val)); 59 61 long get_vim_var_nr __ARGS((int idx)); 60 62 char_u *get_vim_var_str __ARGS((int idx)); 61 void set_vcount __ARGS((long count, long count1)); 63 list_T *get_vim_var_list __ARGS((int idx)); 64 void set_vcount __ARGS((long count, long count1, int set_prevcount)); 62 65 void set_vim_var_string __ARGS((int idx, char_u *val, int len)); 66 void set_vim_var_list __ARGS((int idx, list_T *val)); 63 67 void set_reg_var __ARGS((int c)); 64 68 char_u *v_exception __ARGS((char_u *oldval)); 65 69 char_u *v_throwpoint __ARGS((char_u *oldval)); … … 94 98 void write_viminfo_varlist __ARGS((FILE *fp)); 95 99 int store_session_globals __ARGS((FILE *fd)); 96 100 void last_set_msg __ARGS((scid_T scriptID)); 101 void ex_oldfiles __ARGS((exarg_T *eap)); 97 102 int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen)); 98 103 char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags)); 99 104 /* vim: set ft=c : */ -
src/proto/ex_cmds.pro
diff -Naur vim72.orig/src/proto/ex_cmds.pro vim72/src/proto/ex_cmds.pro
old new 11 11 char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); 12 12 void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname)); 13 13 int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); 14 int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));14 int read_viminfo __ARGS((char_u *file, int flags)); 15 15 void write_viminfo __ARGS((char_u *file, int forceit)); 16 16 int viminfo_readline __ARGS((vir_T *virp)); 17 17 char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert)); -
src/proto/ex_getln.pro
diff -Naur vim72.orig/src/proto/ex_getln.pro vim72/src/proto/ex_getln.pro
old new 31 31 void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col)); 32 32 int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches)); 33 33 int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)))); 34 char_u *globpath __ARGS((char_u *path, char_u *file ));34 char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options)); 35 35 void init_history __ARGS((void)); 36 36 int get_histtype __ARGS((char_u *name)); 37 37 void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep)); -
src/proto/mark.pro
diff -Naur vim72.orig/src/proto/mark.pro vim72/src/proto/mark.pro
old new 26 26 void write_viminfo_filemarks __ARGS((FILE *fp)); 27 27 int removable __ARGS((char_u *name)); 28 28 int write_viminfo_marks __ARGS((FILE *fp_out)); 29 void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof ));29 void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags)); 30 30 /* vim: set ft=c : */ -
src/proto/misc2.pro
diff -Naur vim72.orig/src/proto/misc2.pro vim72/src/proto/misc2.pro
old new 59 59 int handle_x_keys __ARGS((int key)); 60 60 char_u *get_special_key_name __ARGS((int c, int modifiers)); 61 61 int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode)); 62 int find_special_key __ARGS((char_u **srcp, int *modp, int keycode ));62 int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key)); 63 63 int extract_modifiers __ARGS((int key, int *modp)); 64 64 int find_special_key_in_table __ARGS((int c)); 65 65 int get_special_key_code __ARGS((char_u *name)); -
src/proto/netbeans.pro
diff -Naur vim72.orig/src/proto/netbeans.pro vim72/src/proto/netbeans.pro
old new 11 11 void netbeans_frame_moved __ARGS((int new_x, int new_y)); 12 12 void netbeans_file_activated __ARGS((buf_T *bufp)); 13 13 void netbeans_file_opened __ARGS((buf_T *bufp)); 14 void netbeans_file_ closed __ARGS((buf_T *bufp));14 void netbeans_file_killed __ARGS((buf_T *bufp)); 15 15 void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen)); 16 16 void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); 17 17 void netbeans_unmodified __ARGS((buf_T *bufp)); -
src/pty.c
diff -Naur vim72.orig/src/pty.c vim72/src/pty.c
old new 270 270 } 271 271 #endif 272 272 273 #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) 273 #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X) 274 274 275 /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! */ 275 /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! 276 * Same for Mac OS X Leopard. */ 276 277 #define PTY_DONE 277 278 int 278 279 OpenPTY(ttyn) -
src/screen.c
diff -Naur vim72.orig/src/screen.c vim72/src/screen.c
old new 2439 2439 2440 2440 #ifdef FEAT_SYN_HL 2441 2441 /* Show 'cursorcolumn' in the fold line. */ 2442 if (wp->w_p_cuc && (int)wp->w_virtcol + txtcol < W_WIDTH(wp)) 2443 ScreenAttrs[off + wp->w_virtcol + txtcol] = hl_combine_attr( 2444 ScreenAttrs[off + wp->w_virtcol + txtcol], hl_attr(HLF_CUC)); 2442 if (wp->w_p_cuc) 2443 { 2444 txtcol += wp->w_virtcol; 2445 if (wp->w_p_wrap) 2446 txtcol -= wp->w_skipcol; 2447 else 2448 txtcol -= wp->w_leftcol; 2449 if (txtcol >= 0 && txtcol < W_WIDTH(wp)) 2450 ScreenAttrs[off + txtcol] = hl_combine_attr( 2451 ScreenAttrs[off + txtcol], hl_attr(HLF_CUC)); 2452 } 2445 2453 #endif 2446 2454 2447 2455 SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp), -
src/spell.c
diff -Naur vim72.orig/src/spell.c vim72/src/spell.c
old new 77 77 78 78 /* 79 79 * Do the opposite: based on a maximum end score and a known sound score, 80 * compute the themaximum word score that can be used.80 * compute the maximum word score that can be used. 81 81 */ 82 82 #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3) 83 83 … … 469 469 garray_T sl_comppat; /* CHECKCOMPOUNDPATTERN items */ 470 470 regprog_T *sl_compprog; /* COMPOUNDRULE turned into a regexp progrm 471 471 * (NULL when no compounding) */ 472 char_u *sl_comprules; /* all COMPOUNDRULE concatenated (or NULL) */ 472 473 char_u *sl_compstartflags; /* flags for first compound word */ 473 474 char_u *sl_compallflags; /* all flags for compound words */ 474 475 char_u sl_nobreak; /* When TRUE: no spaces between words */ … … 625 626 /* TRUE if a word appears in the list of banned words. */ 626 627 #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word))) 627 628 628 /* Number of suggestions kept when cleaning up. we need to keep more than629 /* Number of suggestions kept when cleaning up. We need to keep more than 629 630 * what is displayed, because when rescore_suggestions() is called the score 630 631 * may change and wrong suggestions may be removed later. */ 631 632 #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20) … … 839 840 static void slang_clear __ARGS((slang_T *lp)); 840 841 static void slang_clear_sug __ARGS((slang_T *lp)); 841 842 static void find_word __ARGS((matchinf_T *mip, int mode)); 843 static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap)); 842 844 static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags)); 845 static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag)); 846 static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags)); 843 847 static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req)); 844 848 static void find_prefix __ARGS((matchinf_T *mip, int mode)); 845 849 static int fold_more __ARGS((matchinf_T *mip)); … … 1519 1523 ((unsigned)flags >> 24))) 1520 1524 continue; 1521 1525 1526 /* If there is a match with a CHECKCOMPOUNDPATTERN rule 1527 * discard the compound word. */ 1528 if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat)) 1529 continue; 1530 1522 1531 if (mode == FIND_COMPOUND) 1523 1532 { 1524 1533 int capflags; … … 1577 1586 if (!can_compound(slang, fword, mip->mi_compflags)) 1578 1587 continue; 1579 1588 } 1589 else if (slang->sl_comprules != NULL 1590 && !match_compoundrule(slang, mip->mi_compflags)) 1591 /* The compound flags collected so far do not match any 1592 * COMPOUNDRULE, discard the compounded word. */ 1593 continue; 1580 1594 } 1581 1595 1582 1596 /* Check NEEDCOMPOUND: can't use word without compounding. */ … … 1727 1741 } 1728 1742 1729 1743 /* 1744 * Return TRUE if there is a match between the word ptr[wlen] and 1745 * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another 1746 * word. 1747 * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the 1748 * end of ptr[wlen] and the second part matches after it. 1749 */ 1750 static int 1751 match_checkcompoundpattern(ptr, wlen, gap) 1752 char_u *ptr; 1753 int wlen; 1754 garray_T *gap; /* &sl_comppat */ 1755 { 1756 int i; 1757 char_u *p; 1758 int len; 1759 1760 for (i = 0; i + 1 < gap->ga_len; i += 2) 1761 { 1762 p = ((char_u **)gap->ga_data)[i + 1]; 1763 if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0) 1764 { 1765 /* Second part matches at start of following compound word, now 1766 * check if first part matches at end of previous word. */ 1767 p = ((char_u **)gap->ga_data)[i]; 1768 len = (int)STRLEN(p); 1769 if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0) 1770 return TRUE; 1771 } 1772 } 1773 return FALSE; 1774 } 1775 1776 /* 1730 1777 * Return TRUE if "flags" is a valid sequence of compound flags and "word" 1731 1778 * does not have too many syllables. 1732 1779 */ … … 1773 1820 } 1774 1821 1775 1822 /* 1823 * Return TRUE when the sequence of flags in "compflags" plus "flag" can 1824 * possibly form a valid compounded word. This also checks the COMPOUNDRULE 1825 * lines if they don't contain wildcards. 1826 */ 1827 static int 1828 can_be_compound(sp, slang, compflags, flag) 1829 trystate_T *sp; 1830 slang_T *slang; 1831 char_u *compflags; 1832 int flag; 1833 { 1834 /* If the flag doesn't appear in sl_compstartflags or sl_compallflags 1835 * then it can't possibly compound. */ 1836 if (!byte_in_str(sp->ts_complen == sp->ts_compsplit 1837 ? slang->sl_compstartflags : slang->sl_compallflags, flag)) 1838 return FALSE; 1839 1840 /* If there are no wildcards, we can check if the flags collected so far 1841 * possibly can form a match with COMPOUNDRULE patterns. This only 1842 * makes sense when we have two or more words. */ 1843 if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit) 1844 { 1845 int v; 1846 1847 compflags[sp->ts_complen] = flag; 1848 compflags[sp->ts_complen + 1] = NUL; 1849 v = match_compoundrule(slang, compflags + sp->ts_compsplit); 1850 compflags[sp->ts_complen] = NUL; 1851 return v; 1852 } 1853 1854 return TRUE; 1855 } 1856 1857 1858 /* 1859 * Return TRUE if the compound flags in compflags[] match the start of any 1860 * compound rule. This is used to stop trying a compound if the flags 1861 * collected so far can't possibly match any compound rule. 1862 * Caller must check that slang->sl_comprules is not NULL. 1863 */ 1864 static int 1865 match_compoundrule(slang, compflags) 1866 slang_T *slang; 1867 char_u *compflags; 1868 { 1869 char_u *p; 1870 int i; 1871 int c; 1872 1873 /* loop over all the COMPOUNDRULE entries */ 1874 for (p = slang->sl_comprules; *p != NUL; ++p) 1875 { 1876 /* loop over the flags in the compound word we have made, match 1877 * them against the current rule entry */ 1878 for (i = 0; ; ++i) 1879 { 1880 c = compflags[i]; 1881 if (c == NUL) 1882 /* found a rule that matches for the flags we have so far */ 1883 return TRUE; 1884 if (*p == '/' || *p == NUL) 1885 break; /* end of rule, it's too short */ 1886 if (*p == '[') 1887 { 1888 int match = FALSE; 1889 1890 /* compare against all the flags in [] */ 1891 ++p; 1892 while (*p != ']' && *p != NUL) 1893 if (*p++ == c) 1894 match = TRUE; 1895 if (!match) 1896 break; /* none matches */ 1897 } 1898 else if (*p != c) 1899 break; /* flag of word doesn't match flag in pattern */ 1900 ++p; 1901 } 1902 1903 /* Skip to the next "/", where the next pattern starts. */ 1904 p = vim_strchr(p, '/'); 1905 if (p == NULL) 1906 break; 1907 } 1908 1909 /* Checked all the rules and none of them match the flags, so there 1910 * can't possibly be a compound starting with these flags. */ 1911 return FALSE; 1912 } 1913 1914 /* 1776 1915 * Return non-zero if the prefix indicated by "arridx" matches with the prefix 1777 1916 * ID in "flags" for the word "word". 1778 1917 * The WF_RAREPFX flag is included in the return value for a rare prefix. … … 2513 2652 lp->sl_midword = NULL; 2514 2653 2515 2654 vim_free(lp->sl_compprog); 2655 vim_free(lp->sl_comprules); 2516 2656 vim_free(lp->sl_compstartflags); 2517 2657 vim_free(lp->sl_compallflags); 2518 2658 lp->sl_compprog = NULL; 2659 lp->sl_comprules = NULL; 2519 2660 lp->sl_compstartflags = NULL; 2520 2661 lp->sl_compallflags = NULL; 2521 2662 … … 3460 3601 char_u *pp; 3461 3602 char_u *cp; 3462 3603 char_u *ap; 3604 char_u *crp; 3463 3605 int cnt; 3464 3606 garray_T *gap; 3465 3607 … … 3545 3687 slang->sl_compallflags = ap; 3546 3688 *ap = NUL; 3547 3689 3690 /* And a list of all patterns in their original form, for checking whether 3691 * compounding may work in match_compoundrule(). This is freed when we 3692 * encounter a wildcard, the check doesn't work then. */ 3693 crp = alloc(todo + 1); 3694 slang->sl_comprules = crp; 3695 3548 3696 pp = pat; 3549 3697 *pp++ = '^'; 3550 3698 *pp++ = '\\'; … … 3587 3735 atstart = 0; 3588 3736 } 3589 3737 } 3738 3739 /* Copy flag to "sl_comprules", unless we run into a wildcard. */ 3740 if (crp != NULL) 3741 { 3742 if (c == '+' || c == '*') 3743 { 3744 vim_free(slang->sl_comprules); 3745 slang->sl_comprules = NULL; 3746 crp = NULL; 3747 } 3748 else 3749 *crp++ = c; 3750 } 3751 3590 3752 if (c == '/') /* slash separates two items */ 3591 3753 { 3592 3754 *pp++ = '\\'; … … 3611 3773 *pp++ = '$'; 3612 3774 *pp = NUL; 3613 3775 3776 if (crp != NULL) 3777 *crp = NUL; 3778 3614 3779 slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT); 3615 3780 vim_free(pat); 3616 3781 if (slang->sl_compprog == NULL) … … 4915 5080 } spellinfo_T; 4916 5081 4917 5082 static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname)); 5083 static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int mincount)); 4918 5084 static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry)); 4919 5085 static int spell_info_item __ARGS((char_u *s)); 4920 5086 static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u *fname, int lnum)); … … 4950 5116 static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd)); 4951 5117 static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname)); 4952 5118 static void clear_node __ARGS((wordnode_T *node)); 4953 static int put_node __ARGS((FILE *fd, wordnode_T *node, int i ndex, int regionmask, int prefixtree));5119 static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree)); 4954 5120 static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname)); 4955 5121 static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang)); 4956 5122 static int sug_maketable __ARGS((spellinfo_T *spin)); … … 5223 5389 /* Handle non-empty lines. */ 5224 5390 if (itemcnt > 0) 5225 5391 { 5226 if (STRCMP(items[0], "SET") == 0 && itemcnt == 2 5227 && aff->af_enc == NULL) 5392 if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL) 5228 5393 { 5229 5394 #ifdef FEAT_MBYTE 5230 5395 /* Setup for conversion from "ENC" to 'encoding'. */ … … 5239 5404 smsg((char_u *)_("Conversion in %s not supported"), fname); 5240 5405 #endif 5241 5406 } 5242 else if ( STRCMP(items[0], "FLAG") == 0 && itemcnt == 25407 else if (is_aff_rule(items, itemcnt, "FLAG", 2) 5243 5408 && aff->af_flagtype == AFT_CHAR) 5244 5409 { 5245 5410 if (STRCMP(items[1], "long") == 0) … … 5284 5449 spin->si_info = p; 5285 5450 } 5286 5451 } 5287 else if ( STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 25452 else if (is_aff_rule(items, itemcnt, "MIDWORD", 2) 5288 5453 && midword == NULL) 5289 5454 { 5290 5455 midword = getroom_save(spin, items[1]); 5291 5456 } 5292 else if ( STRCMP(items[0], "TRY") == 0 && itemcnt == 2)5457 else if (is_aff_rule(items, itemcnt, "TRY", 2)) 5293 5458 { 5294 5459 /* ignored, we look in the tree for what chars may appear */ 5295 5460 } 5296 5461 /* TODO: remove "RAR" later */ 5297 else if (( STRCMP(items[0], "RAR") == 05298 || STRCMP(items[0], "RARE") == 0) && itemcnt == 25299 5462 else if ((is_aff_rule(items, itemcnt, "RAR", 2) 5463 || is_aff_rule(items, itemcnt, "RARE", 2)) 5464 && aff->af_rare == 0) 5300 5465 { 5301 5466 aff->af_rare = affitem2flag(aff->af_flagtype, items[1], 5302 5467 fname, lnum); 5303 5468 } 5304 5469 /* TODO: remove "KEP" later */ 5305 else if (( STRCMP(items[0], "KEP") == 05306 || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 25470 else if ((is_aff_rule(items, itemcnt, "KEP", 2) 5471 || is_aff_rule(items, itemcnt, "KEEPCASE", 2)) 5307 5472 && aff->af_keepcase == 0) 5308 5473 { 5309 5474 aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1], 5310 5475 fname, lnum); 5311 5476 } 5312 else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2 5313 && aff->af_bad == 0) 5477 else if ((is_aff_rule(items, itemcnt, "BAD", 2) 5478 || is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2)) 5479 && aff->af_bad == 0) 5314 5480 { 5315 5481 aff->af_bad = affitem2flag(aff->af_flagtype, items[1], 5316 5482 fname, lnum); 5317 5483 } 5318 else if ( STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 25484 else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2) 5319 5485 && aff->af_needaffix == 0) 5320 5486 { 5321 5487 aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1], 5322 5488 fname, lnum); 5323 5489 } 5324 else if ( STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 25490 else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2) 5325 5491 && aff->af_circumfix == 0) 5326 5492 { 5327 5493 aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1], 5328 5494 fname, lnum); 5329 5495 } 5330 else if ( STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 25496 else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2) 5331 5497 && aff->af_nosuggest == 0) 5332 5498 { 5333 5499 aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1], 5334 5500 fname, lnum); 5335 5501 } 5336 else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2 5502 else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2) 5503 || is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2)) 5337 5504 && aff->af_needcomp == 0) 5338 5505 { 5339 5506 aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1], 5340 5507 fname, lnum); 5341 5508 } 5342 else if ( STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 25509 else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2) 5343 5510 && aff->af_comproot == 0) 5344 5511 { 5345 5512 aff->af_comproot = affitem2flag(aff->af_flagtype, items[1], 5346 5513 fname, lnum); 5347 5514 } 5348 else if ( STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 05349 && itemcnt == 2&& aff->af_compforbid == 0)5515 else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2) 5516 && aff->af_compforbid == 0) 5350 5517 { 5351 5518 aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1], 5352 5519 fname, lnum); … … 5354 5521 smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"), 5355 5522 fname, lnum); 5356 5523 } 5357 else if ( STRCMP(items[0], "COMPOUNDPERMITFLAG") == 05358 && itemcnt == 2&& aff->af_comppermit == 0)5524 else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2) 5525 && aff->af_comppermit == 0) 5359 5526 { 5360 5527 aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1], 5361 5528 fname, lnum); … … 5363 5530 smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"), 5364 5531 fname, lnum); 5365 5532 } 5366 else if ( STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 25533 else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2) 5367 5534 && compflags == NULL) 5368 5535 { 5369 5536 /* Turn flag "c" into COMPOUNDRULE compatible string "c+", … … 5376 5543 compflags = p; 5377 5544 } 5378 5545 } 5379 else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2) 5546 else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2)) 5547 { 5548 /* We don't use the count, but do check that it's a number and 5549 * not COMPOUNDRULE mistyped. */ 5550 if (atoi((char *)items[1]) == 0) 5551 smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"), 5552 fname, lnum, items[1]); 5553 } 5554 else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2)) 5380 5555 { 5381 5556 /* Concatenate this string to previously defined ones, using a 5382 5557 * slash to separate them. */ … … 5395 5570 compflags = p; 5396 5571 } 5397 5572 } 5398 else if ( STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 25573 else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2) 5399 5574 && compmax == 0) 5400 5575 { 5401 5576 compmax = atoi((char *)items[1]); … … 5403 5578 smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"), 5404 5579 fname, lnum, items[1]); 5405 5580 } 5406 else if ( STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 25581 else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2) 5407 5582 && compminlen == 0) 5408 5583 { 5409 5584 compminlen = atoi((char *)items[1]); … … 5411 5586 smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"), 5412 5587 fname, lnum, items[1]); 5413 5588 } 5414 else if ( STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 25589 else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2) 5415 5590 && compsylmax == 0) 5416 5591 { 5417 5592 compsylmax = atoi((char *)items[1]); … … 5419 5594 smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"), 5420 5595 fname, lnum, items[1]); 5421 5596 } 5422 else if ( STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1)5597 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1)) 5423 5598 { 5424 5599 compoptions |= COMP_CHECKDUP; 5425 5600 } 5426 else if ( STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1)5601 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1)) 5427 5602 { 5428 5603 compoptions |= COMP_CHECKREP; 5429 5604 } 5430 else if ( STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1)5605 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1)) 5431 5606 { 5432 5607 compoptions |= COMP_CHECKCASE; 5433 5608 } 5434 else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0 5435 && itemcnt == 1) 5609 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1)) 5436 5610 { 5437 5611 compoptions |= COMP_CHECKTRIPLE; 5438 5612 } 5439 else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 5440 && itemcnt == 2) 5613 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2)) 5441 5614 { 5442 5615 if (atoi((char *)items[1]) == 0) 5443 5616 smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"), 5444 5617 fname, lnum, items[1]); 5445 5618 } 5446 else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 5447 && itemcnt == 3) 5619 else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3)) 5448 5620 { 5449 5621 garray_T *gap = &spin->si_comppat; 5450 5622 int i; … … 5463 5635 = getroom_save(spin, items[2]); 5464 5636 } 5465 5637 } 5466 else if ( STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 25638 else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2) 5467 5639 && syllable == NULL) 5468 5640 { 5469 5641 syllable = getroom_save(spin, items[1]); 5470 5642 } 5471 else if ( STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1)5643 else if (is_aff_rule(items, itemcnt, "NOBREAK", 1)) 5472 5644 { 5473 5645 spin->si_nobreak = TRUE; 5474 5646 } 5475 else if ( STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1)5647 else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1)) 5476 5648 { 5477 5649 spin->si_nosplitsugs = TRUE; 5478 5650 } 5479 else if ( STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1)5651 else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1)) 5480 5652 { 5481 5653 spin->si_nosugfile = TRUE; 5482 5654 } 5483 else if ( STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1)5655 else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1)) 5484 5656 { 5485 5657 aff->af_pfxpostpone = TRUE; 5486 5658 } … … 5771 5943 } 5772 5944 } 5773 5945 } 5774 else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2 5775 && fol == NULL) 5946 else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL) 5776 5947 { 5777 5948 fol = vim_strsave(items[1]); 5778 5949 } 5779 else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2 5780 && low == NULL) 5950 else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL) 5781 5951 { 5782 5952 low = vim_strsave(items[1]); 5783 5953 } 5784 else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2 5785 && upp == NULL) 5954 else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL) 5786 5955 { 5787 5956 upp = vim_strsave(items[1]); 5788 5957 } 5789 else if ((STRCMP(items[0], "REP") == 0 5790 || STRCMP(items[0], "REPSAL") == 0) 5791 && itemcnt == 2) 5958 else if (is_aff_rule(items, itemcnt, "REP", 2) 5959 || is_aff_rule(items, itemcnt, "REPSAL", 2)) 5792 5960 { 5793 5961 /* Ignore REP/REPSAL count */; 5794 5962 if (!isdigit(*items[1])) … … 5819 5987 : &spin->si_rep, items[1], items[2]); 5820 5988 } 5821 5989 } 5822 else if ( STRCMP(items[0], "MAP") == 0 && itemcnt == 2)5990 else if (is_aff_rule(items, itemcnt, "MAP", 2)) 5823 5991 { 5824 5992 /* MAP item or count */ 5825 5993 if (!found_map) … … 5856 6024 ga_append(&spin->si_map, '/'); 5857 6025 } 5858 6026 } 5859 /* Accept "SAL from to" and "SAL from to # comment". */ 5860 else if (STRCMP(items[0], "SAL") == 0 5861 && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#'))) 6027 /* Accept "SAL from to" and "SAL from to #comment". */ 6028 else if (is_aff_rule(items, itemcnt, "SAL", 3)) 5862 6029 { 5863 6030 if (do_sal) 5864 6031 { … … 5877 6044 : items[2]); 5878 6045 } 5879 6046 } 5880 else if ( STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 26047 else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2) 5881 6048 && sofofrom == NULL) 5882 6049 { 5883 6050 sofofrom = getroom_save(spin, items[1]); 5884 6051 } 5885 else if ( STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 26052 else if (is_aff_rule(items, itemcnt, "SOFOTO", 2) 5886 6053 && sofoto == NULL) 5887 6054 { 5888 6055 sofoto = getroom_save(spin, items[1]); … … 5980 6147 else if (spin->si_newprefID == 0 || spin->si_newprefID == 127) 5981 6148 MSG(_("Too many compound flags")); 5982 6149 else 5983 MSG(_("Too many pos poned prefixes and/or compound flags"));6150 MSG(_("Too many postponed prefixes and/or compound flags")); 5984 6151 } 5985 6152 5986 6153 if (syllable != NULL) … … 6017 6184 } 6018 6185 6019 6186 /* 6187 * Return TRUE when items[0] equals "rulename", there are "mincount" items or 6188 * a comment is following after item "mincount". 6189 */ 6190 static int 6191 is_aff_rule(items, itemcnt, rulename, mincount) 6192 char_u **items; 6193 int itemcnt; 6194 char *rulename; 6195 int mincount; 6196 { 6197 return (STRCMP(items[0], rulename) == 0 6198 && (itemcnt == mincount 6199 || (itemcnt > mincount && items[mincount][0] == '#'))); 6200 } 6201 6202 /* 6020 6203 * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from 6021 6204 * ae_flags to ae_comppermit and ae_compforbid. 6022 6205 */ … … 7926 8109 char_u *p; 7927 8110 int rr; 7928 8111 int retval = OK; 8112 size_t fwv = 1; /* collect return value of fwrite() to avoid 8113 warnings from picky compiler */ 7929 8114 7930 8115 fd = mch_fopen((char *)fname, "w"); 7931 8116 if (fd == NULL) … … 7936 8121 7937 8122 /* <HEADER>: <fileID> <versionnr> */ 7938 8123 /* <fileID> */ 7939 if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1)7940 {7941 EMSG(_(e_write));7942 retval = FAIL;7943 } 8124 fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd); 8125 if (fwv != (size_t)1) 8126 /* Catch first write error, don't try writing more. */ 8127 goto theend; 8128 7944 8129 putc(VIMSPELLVERSION, fd); /* <versionnr> */ 7945 8130 7946 8131 /* … … 7955 8140 7956 8141 i = (int)STRLEN(spin->si_info); 7957 8142 put_bytes(fd, (long_u)i, 4); /* <sectionlen> */ 7958 fw rite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */8143 fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */ 7959 8144 } 7960 8145 7961 8146 /* SN_REGION: <regionname> ... … … 7966 8151 putc(SNF_REQUIRED, fd); /* <sectionflags> */ 7967 8152 l = spin->si_region_count * 2; 7968 8153 put_bytes(fd, (long_u)l, 4); /* <sectionlen> */ 7969 fw rite(spin->si_region_name, (size_t)l, (size_t)1, fd);8154 fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd); 7970 8155 /* <regionname> ... */ 7971 8156 regionmask = (1 << spin->si_region_count) - 1; 7972 8157 } … … 8016 8201 } 8017 8202 8018 8203 put_bytes(fd, (long_u)l, 2); /* <folcharslen> */ 8019 fw rite(folchars, (size_t)l, (size_t)1, fd);/* <folchars> */8204 fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */ 8020 8205 } 8021 8206 8022 8207 /* SN_MIDWORD: <midword> */ … … 8027 8212 8028 8213 i = (int)STRLEN(spin->si_midword); 8029 8214 put_bytes(fd, (long_u)i, 4); /* <sectionlen> */ 8030 fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* <midword> */ 8215 fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); 8216 /* <midword> */ 8031 8217 } 8032 8218 8033 8219 /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */ … … 8113 8299 p = rr == 1 ? ftp->ft_from : ftp->ft_to; 8114 8300 l = (int)STRLEN(p); 8115 8301 putc(l, fd); 8116 fwrite(p, l, (size_t)1, fd); 8302 if (l > 0) 8303 fwv &= fwrite(p, l, (size_t)1, fd); 8117 8304 } 8118 8305 } 8119 8306 … … 8131 8318 /* <sectionlen> */ 8132 8319 8133 8320 put_bytes(fd, (long_u)l, 2); /* <sofofromlen> */ 8134 fw rite(spin->si_sofofr, l, (size_t)1, fd);/* <sofofrom> */8321 fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */ 8135 8322 8136 8323 l = (int)STRLEN(spin->si_sofoto); 8137 8324 put_bytes(fd, (long_u)l, 2); /* <sofotolen> */ 8138 fw rite(spin->si_sofoto, l, (size_t)1, fd);/* <sofoto> */8325 fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */ 8139 8326 } 8140 8327 8141 8328 /* SN_WORDS: <word> ... … … 8160 8347 l = (int)STRLEN(hi->hi_key) + 1; 8161 8348 len += l; 8162 8349 if (round == 2) /* <word> */ 8163 fw rite(hi->hi_key, (size_t)l, (size_t)1, fd);8350 fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd); 8164 8351 --todo; 8165 8352 } 8166 8353 if (round == 1) … … 8176 8363 putc(0, fd); /* <sectionflags> */ 8177 8364 l = spin->si_map.ga_len; 8178 8365 put_bytes(fd, (long_u)l, 4); /* <sectionlen> */ 8179 fw rite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);8366 fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd); 8180 8367 /* <mapstr> */ 8181 8368 } 8182 8369 … … 8232 8419 { 8233 8420 p = ((char_u **)(spin->si_comppat.ga_data))[i]; 8234 8421 putc((int)STRLEN(p), fd); /* <comppatlen> */ 8235 fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* <comppattext> */ 8422 fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd); 8423 /* <comppattext> */ 8236 8424 } 8237 8425 /* <compflags> */ 8238 fw rite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),8426 fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags), 8239 8427 (size_t)1, fd); 8240 8428 } 8241 8429 … … 8259 8447 8260 8448 l = (int)STRLEN(spin->si_syllable); 8261 8449 put_bytes(fd, (long_u)l, 4); /* <sectionlen> */ 8262 fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* <syllable> */ 8450 fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); 8451 /* <syllable> */ 8263 8452 } 8264 8453 8265 8454 /* end of <SECTIONS> */ … … 8295 8484 (void)put_node(fd, tree, 0, regionmask, round == 3); 8296 8485 } 8297 8486 8298 /* Write another byte to check for errors . */8487 /* Write another byte to check for errors (file system full). */ 8299 8488 if (putc(0, fd) == EOF) 8300 8489 retval = FAIL; 8301 8490 theend: 8302 8491 if (fclose(fd) == EOF) 8303 8492 retval = FAIL; 8304 8493 8494 if (fwv != (size_t)1) 8495 retval = FAIL; 8496 if (retval == FAIL) 8497 EMSG(_(e_write)); 8498 8305 8499 return retval; 8306 8500 } 8307 8501 … … 9890 10084 char_u *p; 9891 10085 int len; 9892 10086 int totlen; 10087 size_t x = 1; /* collect return value of fwrite() */ 9893 10088 9894 10089 if (fd != NULL) 9895 10090 put_bytes(fd, (long_u)gap->ga_len, 2); /* <prefcondcnt> */ … … 9906 10101 if (fd != NULL) 9907 10102 { 9908 10103 fputc(len, fd); 9909 fwrite(p, (size_t)len, (size_t)1, fd);10104 x &= fwrite(p, (size_t)len, (size_t)1, fd); 9910 10105 } 9911 10106 totlen += len; 9912 10107 } … … 11480 11675 vim_strncpy(preword + sp->ts_prewordlen, 11481 11676 tword + sp->ts_splitoff, 11482 11677 sp->ts_twordlen - sp->ts_splitoff); 11483 p = preword; 11484 while (*skiptowhite(p) != NUL) 11485 p = skipwhite(skiptowhite(p)); 11486 if (fword_ends && !can_compound(slang, p, 11487 compflags + sp->ts_compsplit)) 11488 /* Compound is not allowed. But it may still be 11489 * possible if we add another (short) word. */ 11678 11679 /* Verify CHECKCOMPOUNDPATTERN rules. */ 11680 if (match_checkcompoundpattern(preword, sp->ts_prewordlen, 11681 &slang->sl_comppat)) 11490 11682 compound_ok = FALSE; 11491 11683 11684 if (compound_ok) 11685 { 11686 p = preword; 11687 while (*skiptowhite(p) != NUL) 11688 p = skipwhite(skiptowhite(p)); 11689 if (fword_ends && !can_compound(slang, p, 11690 compflags + sp->ts_compsplit)) 11691 /* Compound is not allowed. But it may still be 11692 * possible if we add another (short) word. */ 11693 compound_ok = FALSE; 11694 } 11695 11492 11696 /* Get pointer to last char of previous word. */ 11493 11697 p = preword + sp->ts_prewordlen; 11494 11698 mb_ptr_back(preword, p); … … 11685 11889 && (slang->sl_compsylmax < MAXWLEN 11686 11890 || sp->ts_complen + 1 - sp->ts_compsplit 11687 11891 < slang->sl_compmax) 11688 && (byte_in_str(sp->ts_complen == sp->ts_compsplit 11689 ? slang->sl_compstartflags 11690 : slang->sl_compallflags, 11691 ((unsigned)flags >> 24)))) 11892 && (can_be_compound(sp, slang, 11893 compflags, ((unsigned)flags >> 24)))) 11894 11692 11895 { 11693 11896 try_compound = TRUE; 11694 11897 compflags[sp->ts_complen] = ((unsigned)flags >> 24); -
src/structs.h
diff -Naur vim72.orig/src/structs.h vim72/src/structs.h
old new 459 459 typedef struct 460 460 { 461 461 int hide; /* TRUE when ":hide" was used */ 462 # ifdef FEAT_BROWSE 462 # ifdef FEAT_BROWSE_CMD 463 463 int browse; /* TRUE to invoke file dialog */ 464 464 # endif 465 465 # ifdef FEAT_WINDOWS … … 1784 1784 #endif 1785 1785 1786 1786 /* 1787 * The next three specify the offsets for displaying the buffer: 1787 * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for 1788 * displaying the buffer. 1788 1789 */ 1789 1790 linenr_T w_topline; /* buffer line number of the line at the 1790 1791 top of the window */ 1792 #ifdef FEAT_AUTOCMD 1793 char w_topline_was_set; /* flag set to TRUE when topline is set, 1794 e.g. by winrestview() */ 1795 #endif 1791 1796 #ifdef FEAT_DIFF 1792 1797 int w_topfill; /* number of filler lines above w_topline */ 1793 1798 int w_old_topfill; /* w_topfill at last redraw */ -
src/tag.c
diff -Naur vim72.orig/src/tag.c vim72/src/tag.c
old new 515 515 * If a count is supplied to the ":tag <name>" command, then 516 516 * jump to count'th matching tag. 517 517 */ 518 if (type == DT_TAG && count > 0)518 if (type == DT_TAG && *tag != NUL && count > 0) 519 519 cur_match = count - 1; 520 520 521 521 if (type == DT_SELECT || type == DT_JUMP … … 2725 2725 */ 2726 2726 p_7f = vim_strchr(lbuf, 0x7f); 2727 2727 if (p_7f == NULL) 2728 { 2729 etag_fail: 2730 if (vim_strchr(lbuf, '\n') == NULL) 2731 { 2732 /* Truncated line. Ignore it. */ 2733 if (p_verbose >= 5) 2734 { 2735 verbose_enter(); 2736 MSG(_("Ignoring long line in tags file")); 2737 verbose_leave(); 2738 } 2739 tagp->command = lbuf; 2740 tagp->tagname = lbuf; 2741 tagp->tagname_end = lbuf; 2742 return OK; 2743 } 2728 2744 return FAIL; 2745 } 2729 2746 2730 2747 /* Find ^A. If not found the line number is after the 0x7f */ 2731 2748 p = vim_strchr(p_7f, Ctrl_A); … … 2735 2752 ++p; 2736 2753 2737 2754 if (!VIM_ISDIGIT(*p)) /* check for start of line number */ 2738 return FAIL;2755 goto etag_fail; 2739 2756 tagp->command = p; 2740 2757 2741 2758 … … 2749 2766 /* find end of tagname */ 2750 2767 for (p = p_7f - 1; !vim_iswordc(*p); --p) 2751 2768 if (p == lbuf) 2752 return FAIL;2769 goto etag_fail; 2753 2770 tagp->tagname_end = p + 1; 2754 2771 while (p >= lbuf && vim_iswordc(*p)) 2755 2772 --p; -
src/term.c
diff -Naur vim72.orig/src/term.c vim72/src/term.c
old new 4920 4920 key_name[0] = KEY2TERMCAP0(key); 4921 4921 key_name[1] = KEY2TERMCAP1(key); 4922 4922 if (key_name[0] == KS_KEY) 4923 string[new_slen++] = key_name[1]; /* from ":set <M-b>=xx" */ 4923 { 4924 /* from ":set <M-b>=xx" */ 4925 #ifdef FEAT_MBYTE 4926 if (has_mbyte) 4927 new_slen += (*mb_char2bytes)(key_name[1], string + new_slen); 4928 else 4929 #endif 4930 string[new_slen++] = key_name[1]; 4931 } 4924 4932 else 4925 4933 { 4926 4934 string[new_slen++] = K_SPECIAL; -
src/testdir/Makefile
diff -Naur vim72.orig/src/testdir/Makefile vim72/src/testdir/Makefile
old new 26 26 27 27 .SUFFIXES: .in .out 28 28 29 nongui: nolog $(SCRIPTS) 30 @echo 31 @cat test.log 32 @echo ALL DONE 29 nongui: nolog $(SCRIPTS) report 30 31 gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) report 33 32 34 gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) 33 report: 35 34 @echo 36 @cat test.log 37 @echo ALL DONE 35 @echo 'Test results:' 36 @/bin/sh -c "if test -f test.log; \ 37 then cat test.log; echo TEST FAILURE; exit 1; \ 38 else echo ALL DONE; \ 39 fi" 38 40 39 41 $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG) 40 42 … … 71 73 test60.out: test60.vim 72 74 73 75 nolog: 74 - echo Test results: >test.log76 -rm -f test.log -
src/testdir/Make_ming.mak
diff -Naur vim72.orig/src/testdir/Make_ming.mak vim72/src/testdir/Make_ming.mak
old new 1 # Makefile to run tests for Vim, on Dos-like machines 2 # with sh.exe or zsh.exe in the path or not. 3 # 4 # Author: Bill McCarthy 5 # 6 # Note that test54 has been removed until it is fixed. 7 # 8 # Requires a set of Unix tools: echo, diff, etc. 9 10 ifneq (sh.exe, $(SHELL)) 11 DEL = rm -f 12 MV = mv 13 CP = cp 14 DIRSLASH = / 15 else 16 DEL = del 17 MV = rename 18 CP = copy 19 DIRSLASH = \\ 20 endif 21 22 VIMPROG = ..$(DIRSLASH)vim 23 24 # Omitted: 25 # test2 "\\tmp" doesn't work. 26 # test10 'errorformat' is different 27 # test12 can't unlink a swap file 28 # test25 uses symbolic link 29 # test27 can't edit file with "*" in file name 30 # test31 16 bit version runs out of memory... 31 32 SCRIPTS16 = test1.out test19.out test20.out test22.out \ 33 test23.out test24.out test28.out test29.out \ 34 test35.out test36.out test43.out \ 35 test44.out test45.out test46.out test47.out \ 36 test48.out test51.out test53.out \ 37 test55.out test56.out test57.out test58.out test59.out \ 38 test60.out test61.out test62.out test63.out test64.out 39 40 # Had to remove test54 which doesn't work yet. 41 # test54.out 42 43 SCRIPTS = test3.out test4.out test5.out test6.out test7.out \ 44 test8.out test9.out test11.out test13.out test14.out \ 45 test15.out test17.out test18.out test21.out test26.out \ 46 test30.out test31.out test32.out test33.out test34.out \ 47 test37.out test38.out test39.out test40.out test41.out \ 48 test42.out test52.out test65.out 49 50 SCRIPTS32 = test50.out 51 52 SCRIPTS_GUI = test16.out 53 54 .SUFFIXES: .in .out 55 56 vimall: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS32) 57 echo ALL DONE 58 59 nongui: fixff $(SCRIPTS16) $(SCRIPTS) 60 echo ALL DONE 61 62 small: 63 echo ALL DONE 64 65 gui: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) 66 echo ALL DONE 67 68 win32: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32) 69 echo ALL DONE 70 71 fixff: 72 -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok 73 74 clean: 75 -$(DEL) *.out 76 -$(DEL) test.ok 77 -$(DEL) small.vim 78 -$(DEL) tiny.vim 79 -$(DEL) mbyte.vim 80 -$(DEL) X* 81 -$(DEL) viminfo 82 83 .in.out: 84 $(CP) $*.ok test.ok 85 $(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in 86 diff test.out $*.ok 87 -$(DEL) $*.out 88 $(MV) test.out $*.out 89 -$(DEL) X* 90 -$(DEL) test.ok 91 -$(DEL) viminfo -
src/testdir/test42.ok
diff -Naur vim72.orig/src/testdir/test42.ok vim72/src/testdir/test42.ok
old new 20 20 ucs-2 21 21 22 22 23 fileencoding=u cs-2le23 fileencoding=utf-16le 24 24 bomb 25 25 ucs-2le 26 26 -
src/ui.c
diff -Naur vim72.orig/src/ui.c vim72/src/ui.c
old new 1820 1820 #ifdef HAVE_DUP 1821 1821 /* Use stderr for stdin, also works for shell commands. */ 1822 1822 close(0); 1823 dup(2);1823 ignored = dup(2); 1824 1824 #else 1825 1825 read_cmd_fd = 2; /* read from stderr instead of stdin */ 1826 1826 #endif … … 2020 2020 2021 2021 if (value == NULL || *length == 0) 2022 2022 { 2023 clip_free_selection(cbd); /* ??? [what's the query?]*/2023 clip_free_selection(cbd); /* nothing received, clear register */ 2024 2024 *(int *)success = FALSE; 2025 2025 return; 2026 2026 } … … 2076 2076 text_prop.value = (unsigned char *)value; 2077 2077 text_prop.encoding = *type; 2078 2078 text_prop.format = *format; 2079 text_prop.nitems = STRLEN(value);2079 text_prop.nitems = len; 2080 2080 status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop, 2081 2081 &text_list, &n_text); 2082 2082 if (status != Success || n_text < 1) … … 2110 2110 int i; 2111 2111 int nbytes = 0; 2112 2112 char_u *buffer; 2113 time_t start_time; 2114 int timed_out = FALSE; 2113 2115 2114 2116 for (i = 2115 2117 #ifdef FEAT_MBYTE … … 2129 2131 case 3: type = text_atom; break; 2130 2132 default: type = XA_STRING; 2131 2133 } 2134 success = MAYBE; 2132 2135 XtGetSelectionValue(myShell, cbd->sel_atom, type, 2133 2136 clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime); 2134 2137 … … 2141 2144 * characters, then they will appear before the one that requested the 2142 2145 * paste! Don't worry, we will catch up with any other events later. 2143 2146 */ 2144 for (;;) 2147 start_time = time(NULL); 2148 while (success == MAYBE) 2145 2149 { 2146 if (XCheckTypedEvent(dpy, SelectionNotify, &event)) 2147 break; 2148 if (XCheckTypedEvent(dpy, SelectionRequest, &event)) 2149 /* We may get a SelectionRequest here and if we don't handle 2150 * it we hang. KDE klipper does this, for example. */ 2150 if (XCheckTypedEvent(dpy, SelectionNotify, &event) 2151 || XCheckTypedEvent(dpy, SelectionRequest, &event) 2152 || XCheckTypedEvent(dpy, PropertyNotify, &event)) 2153 { 2154 /* This is where clip_x11_request_selection_cb() should be 2155 * called. It may actually happen a bit later, so we loop 2156 * until "success" changes. 2157 * We may get a SelectionRequest here and if we don't handle 2158 * it we hang. KDE klipper does this, for example. 2159 * We need to handle a PropertyNotify for large selections. */ 2151 2160 XtDispatchEvent(&event); 2161 continue; 2162 } 2163 2164 /* Time out after 2 to 3 seconds to avoid that we hang when the 2165 * other process doesn't respond. Note that the SelectionNotify 2166 * event may still come later when the selection owner comes back 2167 * to life and the text gets inserted unexpectedly. Don't know 2168 * why that happens or how to avoid that :-(. */ 2169 if (time(NULL) > start_time + 2) 2170 { 2171 timed_out = TRUE; 2172 break; 2173 } 2152 2174 2153 2175 /* Do we need this? Probably not. */ 2154 2176 XSync(dpy, False); 2155 2177 2156 /* Bernhard Walle solved a slow paste response in an X terminal by2157 * adding: usleep(10000); here. */2178 /* Wait for 1 msec to avoid that we eat up all CPU time. */ 2179 ui_delay(1L, TRUE); 2158 2180 } 2159 2181 2160 /* this is where clip_x11_request_selection_cb() is actually called */ 2161 XtDispatchEvent(&event); 2162 2163 if (success) 2182 if (success == TRUE) 2164 2183 return; 2184 2185 /* don't do a retry with another type after timing out, otherwise we 2186 * hang for 15 seconds. */ 2187 if (timed_out) 2188 break; 2165 2189 } 2166 2190 2167 2191 /* Final fallback position - use the X CUT_BUFFER0 store */ -
src/version.c
diff -Naur vim72.orig/src/version.c vim72/src/version.c
old new 677 677 static int included_patches[] = 678 678 { /* Add new patch number below this line */ 679 679 /**/ 680 92, 681 /**/ 682 91, 683 /**/ 684 90, 685 /**/ 686 87, 687 /**/ 688 86, 689 /**/ 690 85, 691 /**/ 692 84, 693 /**/ 694 83, 695 /**/ 696 82, 697 /**/ 698 81, 699 /**/ 700 80, 701 /**/ 702 79, 703 /**/ 704 78, 705 /**/ 706 77, 707 /**/ 708 76, 709 /**/ 710 75, 711 /**/ 712 73, 713 /**/ 714 70, 715 /**/ 716 69, 717 /**/ 718 68, 719 /**/ 720 67, 721 /**/ 722 66, 723 /**/ 724 65, 725 /**/ 726 64, 727 /**/ 728 63, 729 /**/ 730 62, 731 /**/ 732 61, 733 /**/ 734 60, 735 /**/ 736 59, 737 /**/ 738 58, 739 /**/ 740 57, 741 /**/ 742 56, 743 /**/ 744 55, 745 /**/ 746 54, 747 /**/ 748 53, 749 /**/ 750 52, 751 /**/ 752 51, 753 /**/ 754 50, 755 /**/ 756 48, 757 /**/ 758 47, 759 /**/ 760 46, 761 /**/ 762 45, 763 /**/ 764 44, 765 /**/ 766 43, 767 /**/ 768 42, 769 /**/ 770 40, 771 /**/ 772 39, 773 /**/ 774 38, 775 /**/ 776 37, 777 /**/ 778 35, 779 /**/ 780 34, 781 /**/ 782 33, 783 /**/ 784 32, 785 /**/ 786 31, 787 /**/ 788 30, 789 /**/ 790 29, 791 /**/ 792 28, 793 /**/ 794 27, 795 /**/ 796 26, 797 /**/ 798 25, 799 /**/ 800 24, 801 /**/ 802 23, 803 /**/ 804 22, 805 /**/ 806 21, 807 /**/ 808 20, 809 /**/ 810 19, 811 /**/ 812 18, 813 /**/ 814 17, 815 /**/ 816 16, 817 /**/ 818 15, 819 /**/ 820 14, 821 /**/ 822 13, 823 /**/ 824 12, 825 /**/ 826 11, 827 /**/ 828 10, 829 /**/ 830 9, 831 /**/ 832 8, 833 /**/ 834 6, 835 /**/ 836 5, 837 /**/ 838 4, 839 /**/ 840 3, 841 /**/ 842 2, 843 /**/ 844 1, 845 /**/ 680 846 0 681 847 }; 682 848 849 /* 850 * Place to put a short description when adding a feature with a patch. 851 * Keep it short, e.g.,: "relative numbers", "persistent undo". 852 * Also add a comment marker to separate the lines. 853 * See the official Vim patches for the diff format: It must use a context of 854 * one line only. Create it by hand or use "diff -C2" and edit the patch. 855 */ 856 static char *(extra_patches[]) = 857 { /* Add your patch description below this line */ 858 /**/ 859 NULL 860 }; 861 683 862 int 684 863 highest_patch() 685 864 { … … 786 965 MSG_PUTS(_("\nRISC OS version")); 787 966 #endif 788 967 #ifdef VMS 789 MSG_PUTS( "\nOpenVMS version");968 MSG_PUTS(_("\nOpenVMS version")); 790 969 # ifdef HAVE_PATHDEF 791 970 if (*compiled_arch != NUL) 792 971 { … … 825 1004 } 826 1005 } 827 1006 1007 /* Print the list of extra patch descriptions if there is at least one. */ 1008 if (extra_patches[0] != NULL) 1009 { 1010 MSG_PUTS(_("\nExtra patches: ")); 1011 s = ""; 1012 for (i = 0; extra_patches[i] != NULL; ++i) 1013 { 1014 MSG_PUTS(s); 1015 s = ", "; 1016 MSG_PUTS(extra_patches[i]); 1017 } 1018 } 1019 828 1020 #ifdef MODIFIED_BY 829 1021 MSG_PUTS("\n"); 830 1022 MSG_PUTS(_("Modified by ")); -
src/vim.h
diff -Naur vim72.orig/src/vim.h vim72/src/vim.h
old new 341 341 #ifdef BACKSLASH_IN_FILENAME 342 342 # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<") 343 343 #else 344 # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") 345 # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") 344 # ifdef VMS 345 /* VMS allows a lot of characters in the file name */ 346 # define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!") 347 # define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&") 348 # else 349 # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") 350 # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") 351 # endif 346 352 #endif 347 353 348 354 #define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */ … … 370 376 * Define __w64 as an empty token for everything but MSVC 7.x or later. 371 377 */ 372 378 # if !defined(_MSC_VER) || (_MSC_VER < 1300) 373 # define __w64 379 # define __w64 374 380 # endif 375 381 typedef unsigned long __w64 long_u; 376 382 typedef long __w64 long_i; … … 1728 1734 #define VV_MOUSE_COL 51 1729 1735 #define VV_OP 52 1730 1736 #define VV_SEARCHFORWARD 53 1731 #define VV_LEN 54 /* number of v: vars */ 1737 #define VV_OLDFILES 54 1738 #define VV_LEN 55 /* number of v: vars */ 1732 1739 1733 1740 #ifdef FEAT_CLIPBOARD 1734 1741 … … 1979 1986 # endif 1980 1987 #endif 1981 1988 1989 #ifndef FEAT_NETBEANS_INTG 1990 # undef NBDEBUG 1991 #endif 1982 1992 #ifdef NBDEBUG /* Netbeans debugging. */ 1983 1993 # include "nbdebug.h" 1984 1994 #else … … 2054 2064 #define DOSO_VIMRC 1 /* loading vimrc file */ 2055 2065 #define DOSO_GVIMRC 2 /* loading gvimrc file */ 2056 2066 2067 /* flags for read_viminfo() and children */ 2068 #define VIF_WANT_INFO 1 /* load non-mark info */ 2069 #define VIF_WANT_MARKS 2 /* load file marks */ 2070 #define VIF_FORCEIT 4 /* overwrite info already read */ 2071 #define VIF_GET_OLDFILES 8 /* load v:oldfiles */ 2072 2057 2073 #endif /* VIM__H */ -
src/window.c
diff -Naur vim72.orig/src/window.c vim72/src/window.c
old new 4028 4028 if (mch_dirname(cwd, MAXPATHL) == OK) 4029 4029 globaldir = vim_strsave(cwd); 4030 4030 } 4031 mch_chdir((char *)curwin->w_localdir);4032 shorten_fnames(TRUE);4031 if (mch_chdir((char *)curwin->w_localdir) == 0) 4032 shorten_fnames(TRUE); 4033 4033 } 4034 4034 else if (globaldir != NULL) 4035 4035 { 4036 4036 /* Window doesn't have a local directory and we are not in the global 4037 4037 * directory: Change to the global directory. */ 4038 mch_chdir((char *)globaldir);4038 ignored = mch_chdir((char *)globaldir); 4039 4039 vim_free(globaldir); 4040 4040 globaldir = NULL; 4041 4041 shorten_fnames(TRUE); -
src/workshop.c
diff -Naur vim72.orig/src/workshop.c vim72/src/workshop.c
old new 1121 1121 ? (char *)curbuf->b_sfname : "<None>"); 1122 1122 #endif 1123 1123 1124 strcpy(ffname, (char *) curbuf->b_ffname); 1125 *filename = ffname; /* copy so nobody can change b_ffname */ 1124 if (curbuf->b_ffname == NULL) 1125 ffname[0] = NUL; 1126 else 1127 /* copy so nobody can change b_ffname */ 1128 strcpy(ffname, (char *) curbuf->b_ffname); 1129 *filename = ffname; 1126 1130 *curLine = curwin->w_cursor.lnum; 1127 1131 *curCol = curwin->w_cursor.col; 1128 1132
Note:
See TracBrowser
for help on using the repository browser.